The solution (TELS.Compliance.sln) contains 8 projects:
| Project | Type | Framework | Description |
|---|---|---|---|
| TELS.Compliance.Api | Web API | .NET 8.0 | REST API for approval workflows — articles, rules, roles, steps, notifications |
| TELS.Compliance.MQServices | Console App | .NET 8.0 | RabbitMQ subscriber for workflow events — 10 consumers across 3 exchanges |
| TELS.Compliance.Contracts | Library | .NET Standard 2.0 | Shared event and data contracts (published as NuGet, signed assembly) |
| TELS.Compliance.PostgresDbUp | Console App | .NET 8.0 | DbUp database migration tool for PostgreSQL |
| TELS.Compliance.PostgresDbUp.LocalSetup | Console App | .NET 8.0 | Local database setup utility |
| Project | Type | Description |
|---|---|---|
| TELS.Compliance.Api.Testing | NUnit (.NET 8.0) | API unit tests |
| TELS.Compliance.MQServices.Testing | NUnit (.NET 8.0) | Subscriber unit tests |
| TELS.Compliance.Testing.Integration | NUnit (.NET 8.0) | Integration tests (Mountebank) |
TELS Compliance is a configurable approval workflow engine for the TELS ecosystem. It enables organizations (chains) to define rules that trigger multi-step approval workflows for various business events (service requests, quotes, fulfillments). The service provides:
Articles — Workflow instances that track an approval process from creation through authorization, denial, or expiration. Each article has dynamic attributes evaluated against rules to determine the required approval steps.
Rules Engine — Configurable per-client rules with article constraints (criteria) and step templates (workflow definitions). When an article is created, matching rules determine the approval workflow.
Roles & Assignments — Hierarchical approval roles (e.g., First Approver, Second Approver) with person assignments. Roles determine who can authorize each step in a workflow.
Steps — Individual approval actions within a workflow. Steps can be authorized, denied, expired (timeout), or bypassed. Steps support verbal authorization and auto-approval when the requester is in the approving role.
Notifications — Multi-channel notifications (email, SMS, push) for step actions. Includes A/B testing for email variants and configurable per-person notification preferences.
+-----------------------------------------------------+
| API (TELS.Compliance.Api) |
| ArticlesController — workflow instance management |
| RulesController — approval rule configuration |
| RolesController — role and assignment management |
| ClientsController — client/chain configuration |
| NotificationsController — notification preferences |
| ApprovalObjectTypesController — type lookups |
| DiagnosticController — health and debug |
+-----------------------------------------------------+
| Shared Contracts (TELS.Compliance.Contracts) |
| Event interfaces, data contracts, requests |
+-----------------------------------------------------+
| Subscriber (TELS.Compliance.MQServices) |
| 10 consumers across 3 RabbitMQ exchanges |
+-----------------------------------------------------+
| DAL (DataBridge pattern + Dapper + Npgsql) |
| PostgreSQL (68 stored procedures) |
+-----------------------------------------------------+
IStepTimeoutV1 events7 controllers exposing 30+ endpoints:
See API Documentation for full endpoint details.
| Category | Technology |
|---|---|
| Runtime | .NET 8.0 |
| Web Framework | ASP.NET Core 8.0, Asp.Versioning.Mvc 8.1.0 |
| Data Access | Dapper 2.1.66 + Npgsql 6.0.11 (PostgreSQL) |
| Database | PostgreSQL (AWS RDS) |
| Messaging | RabbitMQ + MassTransit 5.5.6 |
| AWS SES | |
| SMS | Unity Notifications (outbound SMS proxy) |
| Push | Messaging Service (push notification addresses) |
| Auth | JWT Bearer, TELS.WebServices.Auth.Contracts 4.1.1 |
| Platform Settings | TELS.Platform.ClientSdk 1.2.0 |
| Resilience | Polly 8.6.3 (3 retries, exponential backoff) |
| API Docs | Swashbuckle 6.4.0 (at /compliance/documentation) |
| Monitoring | New Relic 10.44.1, NLog 6.0.4 |
| Bus Fallback | TELS.BusProxy.Client 3.0.1 (S3 + SQL fallback) |
| Testing | NUnit 3.13.3, Moq 4.18.2, Mountebank |
| Environment | URL |
|---|---|
| Local | http://localhost:7160 |
| DEV | Sandbox AWS ECS |
| QA | Testing AWS ECS |
| PROD | Production AWS ECS |
| Stage | Jobs |
|---|---|
| Build | dotnet build, docker buildx (ARM64 API/subscriber, AMD64 DbUp) |
| Test | Unit tests + coverage, integration tests |
| Push | NuGet contracts to ProGet, docker push |
| Security | Checkmarx SAST, Aqua container scans, dependency scans |
| Deploy | Terraform — RDS, ECS, data lake, API, subscriber, DbUp per environment |
| Integration | Mechanism | Description |
|---|---|---|
| Auth Service | HTTP API | Token refresh for service-to-service auth |
| Customers Service | HTTP API + NuGet (TELS.WebServiceClients.Customers.V1) |
Support phone numbers, contact settings |
| Platform Service | HTTP API + NuGet (TELS.Platform.ClientSdk) |
Feature toggles and settings |
| Unity Notifications | HTTP API + NuGet (Unity.Notifications.Messaging) |
SMS phone status, outbound SMS/email |
| Messaging Service | HTTP API + NuGet (TELS.WebServices.Messaging.Contracts) |
Push notification addresses |
| URL Shortener | HTTP API | Shorten URLs for SMS notifications |
| Work Items Events | MQ + NuGet (TELS.WorkItems.Events) |
New work items and status changes |
| Customers Events | MQ + NuGet (DSE.TELS.Customers.Events) |
Contact changes |
| BuildingServices | NuGet (BuildingServices.Contracts) |
Shared data contracts |
| BusProxy | HTTP API (NuGet client) | Event publishing with S3/SQL fallback |
| Package | Target | Published To |
|---|---|---|
| TELS.Compliance.Contracts | .NET Standard 2.0 | ProGet |