administration-des-mesures
Interface synchrone (OpenAPI) — version 0.2.0. Producteur : conformite. Consommateurs déclarés : backoffice.
Ordonner n’est pas exécuter : la réponse dit que la mesure est ordonnée et publiée vers son exécutant ; l’état d’application vient des preuves déposées par l’exécutant (contrat d’exécution des mesures) et n’est que restitué ici. Toute interface est authentifiée (401) ; le refus (403) et la seconde validation (202) relèvent du point d’application de la politique.
La spécification
Section intitulée « La spécification »openapi: 3.1.0info: title: conformite — administration des mesures version: 0.2.0 x-ruptures: - version: 0.2.0 rupture: "chemins déplacés : le préfixe /tenants/{tenant} disparaît de tous les chemins" motif: >- Le tenant n'entre jamais dans le chemin d'une interface : il est résolu à l'assemblage — routage par l'hôte, audience du jeton — jamais par une donnée d'appel. Le paramètre de chemin tenant disparaît avec le préfixe. summary: >- Ordonner, prolonger, confirmer et lever les mesures d'un dossier ; consulter leur état consolidé d'exécution. description: >- Ordonner n'est pas exécuter : la réponse dit que la mesure est ordonnée et publiée vers son exécutant ; l'état d'application vient des preuves déposées par l'exécutant (contrat d'exécution des mesures) et n'est que restitué ici. Toute interface est authentifiée (401) ; le refus (403) et la seconde validation (202) relèvent du point d'application de la politique. x-producteurs: - conformite x-consommateurs: - backofficepaths: /dossiers/{dossier}/mesures: get: operationId: consulterLesMesuresDuDossier summary: Les mesures du dossier, chaînées, avec leur état consolidé d'exécution. security: [ { authentification: [conformite:mesures] } ] parameters: - $ref: '#/components/parameters/dossier' responses: '200': description: Les mesures, de la plus récente à la plus ancienne. content: application/json: schema: { $ref: '#/components/schemas/MesuresDuDossier' } '401': { $ref: '#/components/responses/NonAuthentifie' } '403': { $ref: '#/components/responses/NonAutorise' } '404': { $ref: '#/components/responses/Inconnu' } post: operationId: ordonnerUneMesure summary: Ordonner une mesure — nature, caractère, cible, base, effet. description: >- Une mesure PRÉVENTIVE porte obligatoirement son échéance de revue — et elle seule (l'équivalence est structurelle). La base qui fonde la mesure est exigée en clair. Idempotent par demande_id. La mesure ordonnée est publiée vers son domaine exécutant ; son état d'application viendra des preuves. security: [ { authentification: [conformite:mesures] } ] parameters: - $ref: '#/components/parameters/dossier' requestBody: required: true content: application/json: schema: { $ref: '#/components/schemas/NouvelleMesure' } responses: '201': description: La mesure est ordonnée et publiée vers son exécutant. content: application/json: schema: { $ref: '#/components/schemas/Mesure' } '202': description: Le geste est suspendu à une seconde validation (politique du PEP). content: application/json: schema: { $ref: '#/components/schemas/Mesure' } '400': { $ref: '#/components/responses/Irrecevable' } '401': { $ref: '#/components/responses/NonAuthentifie' } '403': { $ref: '#/components/responses/NonAutorise' } '404': { $ref: '#/components/responses/Inconnu' } /mesures/{mesure}/prolongation: post: operationId: prolongerUneMesure summary: Prolonger une mesure préventive — une nouvelle mesure, motivée, avec sa nouvelle échéance. security: [ { authentification: [conformite:mesures] } ] parameters: - $ref: '#/components/parameters/mesure' requestBody: required: true content: application/json: schema: { $ref: '#/components/schemas/Prolongation' } responses: '201': description: La prolongation est ordonnée ; elle pointe la mesure qu'elle affecte. content: application/json: schema: { $ref: '#/components/schemas/Mesure' } '202': description: Suspendue à une seconde validation. content: application/json: schema: { $ref: '#/components/schemas/Mesure' } '400': { $ref: '#/components/responses/Irrecevable' } '401': { $ref: '#/components/responses/NonAuthentifie' } '403': { $ref: '#/components/responses/NonAutorise' } '404': { $ref: '#/components/responses/Inconnu' } '409': { $ref: '#/components/responses/EtatIncompatible' } /mesures/{mesure}/confirmation: post: operationId: confirmerUneMesure summary: Confirmer une préventive en définitive — l'échéance de revue disparaît. security: [ { authentification: [conformite:mesures] } ] parameters: - $ref: '#/components/parameters/mesure' requestBody: required: true content: application/json: schema: { $ref: '#/components/schemas/Confirmation' } responses: '201': description: La confirmation est ordonnée. content: application/json: schema: { $ref: '#/components/schemas/Mesure' } '202': description: Suspendue à une seconde validation. content: application/json: schema: { $ref: '#/components/schemas/Mesure' } '400': { $ref: '#/components/responses/Irrecevable' } '401': { $ref: '#/components/responses/NonAuthentifie' } '403': { $ref: '#/components/responses/NonAutorise' } '404': { $ref: '#/components/responses/Inconnu' } '409': { $ref: '#/components/responses/EtatIncompatible' } /mesures/{mesure}/levee: post: operationId: leverUneMesure summary: Lever une mesure — une nouvelle mesure, aux mêmes validations et preuves. description: >- La levée est publiée vers l'exécutant comme la mesure l'a été, et se prouve de même. Pour un gel, la base de la levée est l'autorisation ministérielle qui la fonde (R-CONF-GEL-AUTORISATIONS-DEBLOCAGE) — le champ base est exigé et le dit en clair. security: [ { authentification: [conformite:mesures] } ] parameters: - $ref: '#/components/parameters/mesure' requestBody: required: true content: application/json: schema: { $ref: '#/components/schemas/Levee' } responses: '201': description: La levée est ordonnée et publiée vers l'exécutant. content: application/json: schema: { $ref: '#/components/schemas/Mesure' } '202': description: Suspendue à une seconde validation. content: application/json: schema: { $ref: '#/components/schemas/Mesure' } '400': { $ref: '#/components/responses/Irrecevable' } '401': { $ref: '#/components/responses/NonAuthentifie' } '403': { $ref: '#/components/responses/NonAutorise' } '404': { $ref: '#/components/responses/Inconnu' } '409': { $ref: '#/components/responses/EtatIncompatible' }components: parameters: dossier: name: dossier in: path required: true schema: { type: string } mesure: name: mesure in: path required: true description: Identifiant publié de la mesure ordonnée. schema: { type: string } responses: NonAuthentifie: description: L'appelant n'est pas authentifié. content: { application/json: { schema: { $ref: '#/components/schemas/Erreur' } } } NonAutorise: description: Le point d'application de la politique refuse cette action sur ce périmètre. content: { application/json: { schema: { $ref: '#/components/schemas/Erreur' } } } Irrecevable: description: >- La demande est irrecevable — le motif nomme le champ. Notamment : une préventive sans échéance de revue, une non-préventive avec échéance, une base absente. content: { application/json: { schema: { $ref: '#/components/schemas/Erreur' } } } Inconnu: description: L'objet est inconnu — ou hors du périmètre de l'appelant, sans distinction. content: { application/json: { schema: { $ref: '#/components/schemas/Erreur' } } } EtatIncompatible: description: >- L'état de la mesure ne permet pas ce geste — prolonger une mesure déjà levée, confirmer une mesure qui n'est pas préventive. content: { application/json: { schema: { $ref: '#/components/schemas/Erreur' } } } securitySchemes: authentification: type: openIdConnect openIdConnectUrl: https://exemple.invalid/.well-known/openid-configuration description: Exigence déclarée ici ; mécanisme décliné à l'assemblage. schemas: ReferenceCible: type: object required: [type_cible, cible] properties: type_cible: type: string enum: [COMPTE, EPARGNANT, ENTREPRISE, OPERATION, PAIEMENT] cible: type: string description: Identifiant publié — l'exécutant décline le périmètre en cibles élémentaires. NouvelleMesure: type: object required: [demande_id, nature, caractere, cible, base, effet_le] properties: demande_id: { type: string, description: Clé d'idempotence du client. } nature: type: string enum: - POURSUITE - CONTROLE_RENFORCE - MISE_EN_ATTENTE - SUSPENSION_OPERATION - REFUS - GEL_AVOIRS - BLOCAGE_TOTAL - LECTURE_SEULE - BLOCAGE_OPERATIONS description: >- Toutes ne restreignent pas — POURSUITE et CONTROLE_RENFORCE orientent une diligence sans rien limiter. Le gel des avoirs n'est qu'un niveau, le plus grave. caractere: type: string enum: [PREVENTIVE, LEGALE, DEFINITIVE] cible: { $ref: '#/components/schemas/ReferenceCible' } base: type: string description: >- La base légale ou de politique qui fonde la mesure, en clair — une mesure sans base n'est pas recevable. effet_le: { type: string, format: date } echeance_revue: type: string format: date description: >- Obligatoire pour une PRÉVENTIVE, interdite sinon : l'équivalence est la garde contre le blocage indéfini « en attente d'analyse ». motif: type: string description: Le motif d'instruction — consigné au dossier, jamais publié vers l'exécutant. Prolongation: type: object required: [demande_id, motif, echeance_revue] properties: demande_id: { type: string } motif: { type: string, description: Une prolongation est toujours motivée — jamais un renouvellement tacite. } echeance_revue: { type: string, format: date } Confirmation: type: object required: [demande_id, motif] properties: demande_id: { type: string } motif: { type: string } Levee: type: object required: [demande_id, base, motif] properties: demande_id: { type: string } base: type: string description: >- Ce qui autorise la levée — pour un gel, l'autorisation ministérielle (R-CONF-GEL-AUTORISATIONS-DEBLOCAGE) : une levée n'est jamais une décision interne implicite. motif: { type: string } Mesure: type: object required: [mesure, dossier, nature, caractere, cible, base, effet_le, etat, ordonnee_le, decideur] properties: mesure: { type: string, description: Identifiant publié — le même que sur le canal conformite.mesure. } dossier: { type: string } nature: { type: string } caractere: type: string enum: [PREVENTIVE, LEGALE, DEFINITIVE] cible: { $ref: '#/components/schemas/ReferenceCible' } base: { type: string } effet_le: { type: string, format: date } echeance_revue: { type: string, format: date } mesure_source: type: string description: La mesure que ce geste affecte (prolongation, confirmation, levée) — la chaîne reste lisible. etat: type: string enum: [SUSPENDUE_A_VALIDATION, ORDONNEE, PARTIELLEMENT_APPLIQUEE, EXECUTEE, EN_SUSPENS, LEVEE] description: >- L'état consolidé d'exécution est restitué depuis les preuves déposées par l'exécutant — PARTIELLEMENT_APPLIQUEE est critique pour un gel. ecarts: type: integer minimum: 0 description: Cibles élémentaires dont le dernier constat n'est pas une application franche. ordonnee_le: { type: string, format: date-time } decideur: { type: string, description: Le décideur est toujours nommé. } MesuresDuDossier: type: object required: [dossier, mesures, servi_le] properties: dossier: { type: string } mesures: type: array items: { $ref: '#/components/schemas/Mesure' } servi_le: { type: string, format: date-time } Erreur: type: object required: [code, message] properties: code: { type: string } message: type: string description: >- Nomme le champ ou la condition en cause. Ne révèle ni motif d'instruction, ni l'existence d'un objet hors du périmètre de l'appelant.