Service Service Catalog
Catalogue dynamique des services de paiement, des providers et des workflows opérateurs. Source de vérité pour toutes les définitions métier portant la combinatoire « quel service, par quel provider, avec quel pricing, en suivant quel workflow ».
Identité
| Attribut | Valeur |
|---|---|
| Package | @nex/service-service-catalog v1.0.0 |
| Port | 3000 (configurable via PORT) |
| Schéma DB | service_catalog (PostgreSQL) |
| Swagger | services/service-catalog/src/main.ts:64 — SwaggerModule.setup actif |
| README | ❌ absent |
| Owner | @platform-team |
Responsabilité
- Définir les services métier offerts (cash-in, cash-out, transferts, payouts…) avec leurs étapes, champs requis, règles, pricing.
- Référencer les providers externes (Mobile Money, banques) et leurs endpoints, mappages de champs et d'erreurs, flows d'authentification.
- Porter les workflows de paiement et les variables d'exécution associées.
- Exposer le tout via API pour que le reste de la plateforme (orchestrator, CMMS, apps) puisse construire dynamiquement l'expérience utilisateur sans hard-coder de logique.
Sous-domaines
| Domaine | Controllers |
|---|---|
| Services & catégories | service-categories, services, service-steps, service-fields, service-rules |
| Pricing | service-pricing, service-price-breakdowns |
| Workflows | service-workflows, service-payment-flows, workflow-variables |
| Providers | providers, provider-endpoints, provider-auth-flows, provider-tokens |
| Mappages d'intégration | field-mappings, endpoint-response-mappings |
| Cas d'usage métier | mass-payments (paiements en masse) |
| Misc | app (health) |
Surface API
18 controllers pour ~90 endpoints HTTP. CRUD standard (POST / GET / GET :id / PATCH :id / DELETE :id) sur la majorité des ressources.
| Controller | Route racine |
|---|---|
app.controller.ts | / (health) |
service-categories.controller.ts | /service-categories |
services.controller.ts | /services |
service-steps.controller.ts | /service-steps |
service-fields.controller.ts | /service-fields |
service-rules.controller.ts | /service-rules |
service-pricing.controller.ts | /service-pricing |
service-workflows.controller.ts | /service-workflows |
service-payment-flows.controller.ts | /service-payment-flows |
providers.controller.ts | /providers |
provider-endpoints.controller.ts | /provider-endpoints |
provider-auth-flows.controller.ts | /provider-auth-flows |
provider-tokens.controller.ts | /provider-tokens |
field-mappings.controller.ts | /field-mappings |
endpoint-response-mappings.controller.ts | /endpoint-response-mappings |
workflow-variables.controller.ts | /workflow-variables |
service-price-breakdowns.controller.ts | /service-price-breakdowns |
mass-payments.controller.ts | /mass-payments |
Modèle de données
18 entities dans services/service-catalog/src/**/*.entity.ts :
ServiceCategory, Service, ServiceStep, ServiceField, ServiceRule, ServicePricing, ServiceWorkflow, ServicePaymentFlow, Provider, ProviderEndpoint, FieldMapping, EndpointResponseMapping, WorkflowVariable, ServicePriceBreakdown, ProviderAuthFlow, ProviderToken, UploadLink, SalarySubmission.
Schéma PostgreSQL service_catalog configuré via TypeORM. Convention de schéma par service (ADR-0014).
Dépendances
| Type | Détails |
|---|---|
| Inter-services Nex | Aucun import direct de @nex/shared-types ou @nex/shared-utils détecté dans app.module.ts. |
| Cache | ioredis + @nestjs/cache-manager |
| HTTP | @nestjs/axios |
| DB | pg + typeorm |
| Docs API | swagger-ui-express |
Pages à produire (Lot futur)
api.md— détail des endpoints (OpenAPI auto-généré)data-model.md— ERD complet, relations entre les 18 entitiesrunbook.md— invalidation cache, troubleshooting provider downthreat-model.md— STRIDE (les tokens providers en DB sont sensibles)
Notes pour l'audit
- Trou de doc historique : 90 endpoints, 0 page d'architecture jusqu'à 2026-05-21.
- Tokens providers stockés dans
ProviderToken— vérifier chiffrement at-rest et politique de rotation côté/security/secrets-management. UploadLink+SalarySubmission— entities qui croisent file-service, à expliciter dans le data-model.