administration-du-domaine
Interface synchrone (OpenAPI) — version 0.1.0. Producteur : relation-tiers. Consommateurs déclarés : back-office.
Ce qui paramètre et surveille le domaine sans toucher un dossier. L’identifiant d’un système fournisseur est une donnée interne du connecteur, chiffrée, jamais publiée ; une réconciliation n’a aucun effet métier sans politique de résolution ; un export exige une finalité explicite et laisse une trace.
La spécification
Section intitulée « La spécification »openapi: 3.1.0info: title: relation-tiers — l'administration du domaine version: 0.1.0 summary: >- Les règles d'échéance versionnées, les politiques de rétention, les mappings fournisseur, les rapprochements et les exports tenantisés. description: >- Ce qui paramètre et surveille le domaine sans toucher un dossier. L'identifiant d'un système fournisseur est une donnée interne du connecteur, chiffrée, jamais publiée ; une réconciliation n'a aucun effet métier sans politique de résolution ; un export exige une finalité explicite et laisse une trace. x-producteurs: - relation-tiers x-consommateurs: - composant: back-office statut: pressenti — administration du paramétrage relationnel x-ruptures: [] # première version publiée — aucune rupturepaths: /relation-tiers/v1/deadline-rules: post: operationId: creerUneVersionDeRegleDEcheance summary: >- Créer une version de règle — événement de départ, durée, calendrier versionné ; la version précédente n'est jamais réécrite. security: - authentification: [relation-tiers:administration] parameters: - $ref: '#/components/parameters/tenant' - $ref: '#/components/parameters/correlation' - $ref: '#/components/parameters/idempotence' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RegleDEcheance' responses: '201': description: La version de règle est créée. content: application/json: schema: $ref: '#/components/schemas/ResultatDeCommande' '401': { $ref: '#/components/responses/nonAuthentifie' } '403': { $ref: '#/components/responses/nonAutorise' } '409': { $ref: '#/components/responses/conflit' } '422': { $ref: '#/components/responses/inapplicable' } /relation-tiers/v1/retention-policies: post: operationId: creerUnePolitiqueDeRetention summary: >- Créer une politique — catégorie, base juridique, durées, gel contentieux, pseudonymisation ; tenantisée. security: - authentification: [relation-tiers:administration] parameters: - $ref: '#/components/parameters/tenant' - $ref: '#/components/parameters/correlation' - $ref: '#/components/parameters/idempotence' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PolitiqueDeRetention' responses: '201': description: La politique est créée. content: application/json: schema: $ref: '#/components/schemas/ResultatDeCommande' '401': { $ref: '#/components/responses/nonAuthentifie' } '403': { $ref: '#/components/responses/nonAutorise' } '409': { $ref: '#/components/responses/conflit' } '422': { $ref: '#/components/responses/inapplicable' } /relation-tiers/v1/external-system-mappings: post: operationId: creerUnMappingFournisseur summary: >- Créer un mapping fournisseur — l'identifiant externe est chiffré et n'apparaît jamais dans un événement public ; le tenant du mapping est immuable. security: - authentification: [relation-tiers:administration] parameters: - $ref: '#/components/parameters/tenant' - $ref: '#/components/parameters/correlation' - $ref: '#/components/parameters/idempotence' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MappingFournisseur' responses: '201': description: Le mapping est créé. content: application/json: schema: $ref: '#/components/schemas/ResultatDeCommande' '401': { $ref: '#/components/responses/nonAuthentifie' } '403': { $ref: '#/components/responses/nonAutorise' } '409': { $ref: '#/components/responses/conflit' } '422': { $ref: '#/components/responses/inapplicable' } /relation-tiers/v1/reconciliation-runs: get: operationId: consulterLesRapprochements summary: >- Consulter les exécutions — niveaux, plages, compteurs, empreintes, dernier curseur validé. security: - authentification: [relation-tiers:administration] parameters: - $ref: '#/components/parameters/tenant' - $ref: '#/components/parameters/correlation' - $ref: '#/components/parameters/curseur' - $ref: '#/components/parameters/limite' responses: '200': description: Les exécutions de rapprochement. content: application/json: schema: $ref: '#/components/schemas/PageDeRapprochements' '401': { $ref: '#/components/responses/nonAuthentifie' } '403': { $ref: '#/components/responses/nonAutorise' } post: operationId: declencherUnRapprochement summary: >- Déclencher un contrôle autorisé — niveau, périmètre ; aucun effet métier sans politique de résolution. security: - authentification: [relation-tiers:administration] parameters: - $ref: '#/components/parameters/tenant' - $ref: '#/components/parameters/correlation' - $ref: '#/components/parameters/idempotence' requestBody: required: true content: application/json: schema: type: object required: [level] properties: level: type: string description: >- TRANSPORT, POPULATION, IDENTITE, VERSION, CONTENU ou SEMANTIQUE. scope: { type: object } responses: '202': description: Le contrôle est accepté et s'exécutera. content: application/json: schema: $ref: '#/components/schemas/ResultatDeCommande' '401': { $ref: '#/components/responses/nonAuthentifie' } '403': { $ref: '#/components/responses/nonAutorise' } '422': { $ref: '#/components/responses/inapplicable' } /relation-tiers/v1/exports: post: operationId: creerUnExport summary: >- Créer un export tenantisé — finalité explicite, périmètre borné, volume contrôlé, trace de téléchargement ; permission distincte de la consultation. security: - authentification: [relation-tiers:administration] parameters: - $ref: '#/components/parameters/tenant' - $ref: '#/components/parameters/correlation' - $ref: '#/components/parameters/idempotence' requestBody: required: true content: application/json: schema: type: object required: [purpose, scope] properties: purpose: { type: string } scope: { type: object } format: { type: string } responses: '202': description: L'export est accepté — préparé puis remis sous trace. content: application/json: schema: $ref: '#/components/schemas/ResultatDeCommande' '401': { $ref: '#/components/responses/nonAuthentifie' } '403': { $ref: '#/components/responses/nonAutorise' } '422': { $ref: '#/components/responses/inapplicable' }components: securitySchemes: authentification: type: http scheme: bearer description: >- Tout appel est authentifié (401) et autorisé par famille d'accès (403 hors famille). Ce contrat n'ouvre que relation-tiers:administration — administrer le paramétrage et la surveillance est une action sensible à part entière. Le tenant vient du jeton. parameters: tenant: name: X-Tenant-Id in: header required: false description: >- Facultatif — le tenant fait foi dans le jeton ; s'il est fourni, il doit être identique. schema: type: string correlation: name: X-Correlation-Id in: header required: false schema: type: string idempotence: name: Idempotency-Key in: header required: true schema: type: string curseur: name: cursor in: query required: false schema: type: string limite: name: limit in: query required: false schema: type: integer maximum: 200 responses: nonAuthentifie: description: Aucune identité présentée (401). nonAutorise: description: >- L'identité présentée n'a pas la famille d'accès relation-tiers:administration (403). conflit: description: Version obsolète, chevauchement ou clé d'idempotence réutilisée. content: application/json: schema: $ref: '#/components/schemas/Probleme' inapplicable: description: Donnée comprise mais non admissible — règle identifiée. content: application/json: schema: $ref: '#/components/schemas/Probleme' schemas: Probleme: type: object required: [type, title, status, code, correlationId] properties: type: { type: string } title: { type: string } status: { type: integer } code: { type: string } detail: { type: string } instance: { type: string } correlationId: { type: string } retryable: { type: boolean } violations: type: array items: type: object properties: field: { type: string } reason: { type: string } ruleId: { type: string } RegleDEcheance: type: object required: [ruleCode, startEvent, duration] properties: ruleCode: { type: string } startEvent: { type: string } duration: type: string description: Durée ISO 8601 ou nombre de jours ouvrés selon unité. durationUnit: { type: string } calendarCode: { type: string } calendarVersion: { type: string } validFrom: { type: string, format: date-time } PolitiqueDeRetention: type: object required: [categoryCode, legalBasis, retentionDuration] properties: categoryCode: { type: string } legalBasis: { type: string } retentionDuration: { type: string } litigationHold: { type: boolean } pseudonymizationRule: { type: string } validFrom: { type: string, format: date-time } MappingFournisseur: type: object required: [systemCode, canonicalObjectType, canonicalObjectId] properties: systemCode: { type: string } canonicalObjectType: { type: string } canonicalObjectId: { type: string } externalObjectId: type: string description: >- En entrée seulement — chiffré à la persistance, jamais restitué dans un contrat public. mappingVersion: { type: integer } PageDeRapprochements: type: object required: [items] properties: items: type: array items: type: object required: [runId, level, startedAt] properties: runId: { type: string } level: { type: string } startedAt: { type: string, format: date-time } finishedAt: { type: string, format: date-time } counters: { type: object } lastValidatedCursor: { type: string } nextCursor: { type: string } ResultatDeCommande: type: object required: [id, status] properties: id: { type: string } aggregateVersion: { type: integer } status: { type: string }