Aller au contenu

administration-du-referentiel

Interface synchrone (OpenAPI) — version 0.8.0. Producteur : instruments. Consommateurs déclarés : backoffice, alimentation-documentaire, carnet-ordres.

Toute écriture du référentiel passe ici — l’alimentation documentaire comprise, qui propose et n’écrit jamais directement. Un geste d’ÉTABLISSEMENT (référencement, transition de cycle, caractéristique, restriction, règle, relation, rôle) crée une DEMANDE DE VALIDATION : l’effet est acquis à sa validation par un valideur distinct du préparateur (les quatre yeux — le workflow vit aux portes, jamais dans les cycles). La restriction d’urgence s’applique immédiatement, sa demande se valide a posteriori avec échéance de revue. La publication des valeurs et le pilotage des événements et des occurrences s’appliquent sans demande et publient chacun leur fait, retenu dans la même transaction (boîte d’envoi). Tout ou rien : un rejet du domaine (422, motivé) ne retient rien. Le teneur de compte ne se donne jamais dans l’adresse.

openapi: 3.1.0
info:
title: instruments — administration du référentiel
version: 0.8.0
summary: >-
Les portes d'écriture du référentiel — structure, caractéristiques, restrictions,
règles de valorisation, valeurs, occurrences, événements, documents et analyses —
et le versant lecture de leur circuit : demandes de validation et anomalies.
description: >-
Toute écriture du référentiel passe ici — l'alimentation documentaire comprise, qui
propose et n'écrit jamais directement. Un geste d'ÉTABLISSEMENT (référencement,
transition de cycle, caractéristique, restriction, règle, relation, rôle) crée une
DEMANDE DE VALIDATION : l'effet est acquis à sa validation par un valideur distinct
du préparateur (les quatre yeux — le workflow vit aux portes, jamais dans les
cycles). La restriction d'urgence s'applique immédiatement, sa demande se valide a
posteriori avec échéance de revue. La publication des valeurs et le pilotage des
événements et des occurrences s'appliquent sans demande et publient chacun leur
fait, retenu dans la même transaction (boîte d'envoi). Tout ou rien : un rejet du
domaine (422, motivé) ne retient rien. Le teneur de compte ne se donne jamais dans
l'adresse.
x-producteurs:
- instruments
x-consommateurs:
- composant: backoffice
- composant: alimentation-documentaire
- composant: carnet-ordres
# La règle 0.x admet la rupture en version mineure ; aucun consommateur n'est né. Le
# module supprimé avait publié jusqu'en 0.6.0 : la numérotation continue au-dessus.
x-ruptures:
- version: 0.8.0
rupture: >-
la catégorie de parts disparaît comme dimension : chemin
/instruments/{instrument}/categories retiré (referencerUneCategorie) ; propriété
`categorie` retirée des restrictions, des règles, des valeurs et des documents ;
geste referencer_une_categorie retiré ; portées réduites. Le référencement d'un
instrument accepte désormais categorie, devise et politique de revenus (les
frais restent aux caractéristiques datées) ;
celui d'un véhicule déclare est_compartimente.
motif: >-
Le compartimentage se déclare au véhicule, jamais de compartiment fantôme.
- version: 0.7.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 ; la propriété tenant quitte les
réponses.
- version: 0.7.0
rupture: "comportement changé : les gestes d'établissement répondent 202 (demande de validation créée), non plus 201 (effet immédiat)"
motif: >-
Le circuit de validation à quatre yeux du cadrage vit aux portes
d'administration (arbitrage du domaine, cycles de vie) : l'effet d'un
établissement attend sa validation par un valideur distinct du préparateur.
La publication des valeurs et le pilotage des événements et occurrences
restent à effet immédiat.
- version: 0.7.0
rupture: "opération remplacée : referencerUnInstrument ouvre en_preparation, la transition « lancer » ouvre commercialisable"
motif: >-
L'entrée « en préparation » du cycle complet remplace le référencement
directement commercialisable de la 0.6.0 — l'instrument se prépare, se valide,
puis se lance.
paths:
/vehicules:
post:
operationId: referencerUnVehicule
summary: Référencer un véhicule — FCPE ou SICAVAS, il naît en préparation.
security:
- authentification: [instruments:administration]
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [type, nom_legal]
properties:
type: { type: string, enum: [fcpe, sicavas] }
nom_legal: { type: string, minLength: 1 }
est_compartimente:
type: boolean
default: false
description: >-
Le compartimentage déclaré par la documentation du fonds — vrai,
chaque ligne investissable vivra sur un compartiment ; faux, aucun
compartiment n'existe (jamais de compartiment fantôme).
agrement: { type: string, description: La référence de l'agrément, s'il est déjà obtenu. }
provenance: { $ref: '#/components/schemas/Provenance' }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'422': { $ref: '#/components/responses/rejete' }
/vehicules/{vehicule}/transitions:
post:
operationId: transitionnerUnVehicule
summary: Faire avancer le cycle du véhicule par le geste nommé.
description: >-
agreer exige la preuve de l'agrément ; ouvrir exige au moins un instrument
publiable ; dissoudre exige l'absence de droits résiduels — les terminus créés
par un événement (fusion dénouée) n'ont pas de porte.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/vehicule'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [geste, date]
properties:
geste: { type: string, enum: [agreer, ouvrir, abandonner, dissoudre] }
date: { type: string, format: date, description: La date d'effet — elle vient de l'appelant. }
document: { type: string, description: La preuve documentaire — exigée pour agréer. }
motif: { type: string }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/vehicules/{vehicule}/caracteristiques:
post:
operationId: etablirUneCaracteristiqueDeVehicule
summary: Établir une caractéristique datée du véhicule — régime juridique, profils, orientation de gestion.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/vehicule'
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/CaracteristiqueAEtablir' }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/vehicules/{vehicule}/caracteristiques/reetablissements:
post:
operationId: reetablirUneCaracteristiqueDeVehicule
summary: Ré-établir une caractéristique erronée — motif obligatoire, l'ancienne version reste tracée.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/vehicule'
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/CaracteristiqueAReetablir' }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/vehicules/{vehicule}/roles:
post:
operationId: affecterUnRole
summary: Affecter un rôle daté d'intervenant au véhicule.
description: Sans chevauchement par (véhicule, rôle) ; l'intervenant est référencé au préalable.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/vehicule'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [intervenant, role, du]
properties:
intervenant: { type: string }
role: { $ref: '#/components/schemas/RoleDIntervenant' }
du: { type: string, format: date }
provenance: { $ref: '#/components/schemas/Provenance' }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/vehicules/{vehicule}/roles/fins:
post:
operationId: terminerUnRole
summary: Borner un rôle d'intervenant — jamais d'effacement.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/vehicule'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [intervenant, role, au]
properties:
intervenant: { type: string }
role: { $ref: '#/components/schemas/RoleDIntervenant' }
au: { type: string, format: date, description: La borne de fin, exclue. }
motif: { type: string }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/vehicules/{vehicule}/relations:
post:
operationId: nouerUneRelation
summary: Nouer une relation de structure — maître/nourricier ou sous-jacent.
description: >-
Au plus une relation maître effective par nourricier ; un changement de maître
termine la relation et en ouvre une nouvelle. Le maître et le titre visé sont
des références publiées, jamais des lignes du référentiel.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/vehicule'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [type, du, provenance]
properties:
type: { type: string, enum: [maitre_nourricier, sous_jacent] }
du: { type: string, format: date }
maitre:
type: object
description: La cible d'une relation maître/nourricier.
properties:
nom: { type: string }
isin: { type: string }
titre:
type: object
description: Le titre visé d'une relation sous-jacent.
properties:
emetteur: { type: string }
isin: { type: string }
role_du_titre:
type: string
enum: [sous_jacent_principal, sous_jacent_de_formule, titre_de_reference, actif_de_couverture]
mode_exposition:
type: string
enum: [direct, indirect, garanti, a_effet_de_levier]
provenance: { $ref: '#/components/schemas/Provenance' }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/vehicules/{vehicule}/relations/fins:
post:
operationId: terminerUneRelation
summary: Terminer une relation de structure — jamais de modification en place.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/vehicule'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [relation, au]
properties:
relation: { type: string, description: L'identifiant de la relation à borner. }
au: { type: string, format: date, description: La borne de fin, exclue. }
motif: { type: string }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/compartiments:
post:
operationId: referencerUnCompartiment
summary: Référencer un compartiment — le véhicule doit se déclarer compartimenté (422 sinon).
security:
- authentification: [instruments:administration]
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [vehicule, libelle]
properties:
vehicule: { type: string }
libelle: { type: string, minLength: 1 }
provenance: { $ref: '#/components/schemas/Provenance' }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'422': { $ref: '#/components/responses/rejete' }
/instruments:
post:
operationId: referencerUnInstrument
summary: Référencer un instrument — il naît « en préparation », rien ne peut s'y détenir.
description: >-
La nature commande la forme du corps : un placement collectif exige son
véhicule (au moins agréé), son compartiment quand le véhicule est compartimenté
et son libellé de catégorie quand le règlement émet plusieurs catégories de
parts — UN INSTRUMENT
PAR CATÉGORIE DE PARTS, chaque catégorie EST un instrument ; un CCB exige
l'entreprise débitrice et l'accord de participation (références publiées) ; la
devise est référencée une fois. L'identifiant publié attribué est stable à vie.
security:
- authentification: [instruments:administration]
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [nature, libelle]
properties:
nature: { type: string, enum: [placement_collectif, ccb, devise] }
libelle: { type: string, minLength: 1 }
unite: { type: string, enum: [part, unite_monetaire] }
decimales: { type: integer, minimum: 0 }
vehicule: { type: string, description: Obligatoire pour un placement collectif. }
compartiment: { type: string, description: Du même véhicule — obligatoire quand le véhicule est compartimenté, interdit sinon. }
categorie:
type: string
description: >-
Le libellé de la catégorie de parts que la ligne représente (Part A,
Part I…) — absent pour une catégorie de parts unique. Ses frais
s'établissent en caractéristique datée (frais_du_fonds), jamais au
référencement.
devise: { type: string }
politique_revenus: { type: string }
isin: { type: string }
entreprise_debitrice: { type: string, description: CCB seulement — référence publiée. }
accord_participation: { type: string, description: CCB seulement — référence publiée. }
provenance: { $ref: '#/components/schemas/Provenance' }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'422': { $ref: '#/components/responses/rejete' }
/instruments/{instrument}/transitions:
post:
operationId: transitionnerUnInstrument
summary: Faire avancer le cycle de l'instrument — lancer, ou annuler avant tout lancement.
description: >-
lancer exige un véhicule ouvert (placement collectif) et la règle de
valorisation établie ; annuler exige qu'aucune position n'ait jamais existé.
Les terminus absorbé et liquidé n'ont pas de porte : ils sont créés par le
dénouement d'un événement ou la dissolution du véhicule.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/instrument'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [geste, date]
properties:
geste: { type: string, enum: [lancer, annuler] }
date: { type: string, format: date }
motif: { type: string }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/instruments/{instrument}/caracteristiques:
post:
operationId: etablirUneCaracteristique
summary: Établir une caractéristique datée de l'instrument.
description: >-
Typée, période [du, au[ sans chevauchement par sous-classe, provenance
obligatoire — la référence documentaire est obligatoire quand la source est un
document. L'inapplicable à la nature est un rejet.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/instrument'
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/CaracteristiqueAEtablir' }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/instruments/{instrument}/caracteristiques/reetablissements:
post:
operationId: reetablirUneCaracteristique
summary: Ré-établir une caractéristique erronée — motif obligatoire, l'ancienne version reste tracée.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/instrument'
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/CaracteristiqueAReetablir' }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/instruments/{instrument}/restrictions:
post:
operationId: poserUneRestriction
summary: Poser une restriction de négociabilité — datée, cumulable, hors cycle.
description: >-
Ordinaire, elle crée une demande de validation. D'URGENCE, elle prend effet
immédiatement et ouvre la demande a posteriori, avec échéance de revue
obligatoire. La pose publie son fait (contrat evenement-de-negociabilite) au
moment où elle prend effet.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/instrument'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [type, du, capacites_touchees, provenance]
properties:
type: { type: string, enum: [ferme_aux_souscriptions, ferme_aux_rachats, suspendu, ferme_aux_nouveaux_versements] }
du: { type: string, format: date }
au: { type: string, format: date, description: La borne de levée prévue, exclue — absente si ouverte. }
heure_effet: { type: string, pattern: '^([01][0-9]|2[0-3]):[0-5][0-9]$' }
fuseau: { type: string }
capacites_touchees:
type: array
minItems: 1
items: { $ref: '#/components/schemas/Capacite' }
portee: { type: string, enum: [instrument, vehicule], default: instrument }
urgence: { type: boolean, default: false }
echeance_de_revue: { type: string, format: date, description: Obligatoire quand urgence est vrai. }
motif: { type: string }
provenance: { $ref: '#/components/schemas/Provenance' }
responses:
'201':
description: URGENCE — la restriction est en vigueur ; la demande de validation a posteriori est créée.
content:
application/json:
schema: { $ref: '#/components/schemas/RestrictionPosee' }
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/instruments/{instrument}/restrictions/levees:
post:
operationId: leverUneRestriction
summary: Lever une restriction — la levée borne la période, jamais d'effacement.
description: La levée publie son fait (contrat evenement-de-negociabilite).
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/instrument'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [restriction, au]
properties:
restriction: { type: string, description: L'identifiant de la restriction à lever. }
au: { type: string, format: date, description: La borne de levée, exclue. }
motif: { type: string }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/instruments/{instrument}/regle-valorisation:
post:
operationId: etablirLaRegleDeValorisation
summary: Établir la règle de valorisation — portée déclarée unique, éléments sourcés, calendriers affectés.
description: >-
Une nouvelle version de règle remplace la précédente à sa date d'application —
jamais de modification en place ; l'horizon des occurrences se recalcule et
publie ses impacts (contrat evenement-de-valorisation-prevue). L'heure limite
porte toujours son fuseau IANA.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/instrument'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [portee, frequence, heure_limite, fuseau, du, provenances]
properties:
portee:
type: string
enum: [vehicule, compartiment, instrument]
description: >-
La règle vit au niveau qui porte le patrimoine valorisé d'un seul
mouvement — le véhicule non compartimenté ou le compartiment ; la
portée instrument reste au CCB.
frequence: { type: string, enum: [quotidienne, hebdomadaire, mensuelle] }
ancrage: { type: string }
heure_limite: { type: string, pattern: '^([01][0-9]|2[0-3]):[0-5][0-9]$' }
fuseau: { type: string, minLength: 1 }
convention_report: { type: string }
delai_publication_jours: { type: integer, minimum: 0 }
delai_reglement_jours: { type: integer, minimum: 0 }
du: { type: string, format: date, description: La date d'application de la version. }
calendriers:
type: array
description: Les affectations — sémantique explicite, jamais un effet par simple présence.
items:
type: object
required: [calendrier, semantique]
properties:
calendrier: { type: string }
semantique:
type: string
enum: [ouverture_requise, fermeture_exclusive, dependance_valorisation,
calcul_publication, calcul_reglement, informatif]
provenances:
type: array
minItems: 1
description: La provenance de chaque élément établi — la résolution n'effacera pas la trace.
items:
type: object
required: [element, provenance]
properties:
element:
type: string
enum: [frequence, ancrage, heure_limite, convention_report,
delai_publication_jours, delai_reglement_jours, calendriers]
provenance: { $ref: '#/components/schemas/Provenance' }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/intervenants:
post:
operationId: referencerUnIntervenant
summary: Référencer un intervenant — l'identité générale vit chez la relation tiers.
security:
- authentification: [instruments:administration]
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [nom]
properties:
nom: { type: string, minLength: 1 }
reference_tiers: { type: string, description: L'ancre vers l'identité générale (relation tiers), quand elle existe. }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'422': { $ref: '#/components/responses/rejete' }
/intervenants/{intervenant}/desactivation:
post:
operationId: desactiverUnIntervenant
summary: Désactiver un intervenant — jamais supprimé, les rôles passés le référencent.
security:
- authentification: [instruments:administration]
parameters:
- name: intervenant
in: path
required: true
schema: { type: string, minLength: 1 }
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
motif: { type: string }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/instruments/{instrument}/valeurs:
post:
operationId: publierUneValeur
summary: Publier une valeur — le rang 1 d'une date de calcul, jamais de motif.
description: >-
L'appariement nature ↔ sorte est structurel (placement collectif → marché,
CCB → administrée) ; une devise ne publie rien. Le fait est retenu dans la même
transaction (contrat evenement-valeur-liquidative). Une valeur au même rang est
un rejet : la correction passe par la porte des corrections.
security:
- authentification: [instruments:publication]
parameters:
- $ref: '#/components/parameters/instrument'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [date_calcul, valeur_part_ue6, provenance]
properties:
date_calcul: { type: string, format: date }
valeur_part_ue6: { type: integer }
occurrence: { type: string, description: L'occurrence de valorisation prévue à laquelle la valeur répond. }
provenance: { type: string, enum: [flux_de_place, saisie] }
responses:
'201':
description: La valeur est publiée, son fait est retenu.
content:
application/json:
schema: { $ref: '#/components/schemas/ValeurPubliee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamillePublication' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/instruments/{instrument}/valeurs/corrections:
post:
operationId: corrigerUneValeur
summary: Corriger une valeur — le rang suivant, motif obligatoire, l'ancienne conservée.
security:
- authentification: [instruments:publication]
parameters:
- $ref: '#/components/parameters/instrument'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [date_calcul, valeur_part_ue6, motif, provenance]
properties:
date_calcul: { type: string, format: date }
valeur_part_ue6: { type: integer }
motif: { type: string, minLength: 1 }
provenance: { type: string, enum: [flux_de_place, saisie] }
responses:
'201':
description: La correction est publiée au rang suivant, son fait est retenu.
content:
application/json:
schema: { $ref: '#/components/schemas/ValeurPubliee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamillePublication' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/occurrences/{occurrence}/transitions:
post:
operationId: transitionnerUneOccurrence
summary: Tenir le cycle d'une occurrence — confirmer, reporter, annuler, suspendre, reprendre.
description: >-
Le report est un terminus : l'occurrence de remplacement (nouvelle date, nouvel
identifiant) naît du même geste — jamais de modification en place. Toute
transition est motivée quand elle ferme ou suspend, et publie son fait (contrat
evenement-de-valorisation-prevue).
security:
- authentification: [instruments:publication]
parameters:
- name: occurrence
in: path
required: true
schema: { type: string, minLength: 1 }
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [geste]
properties:
geste: { type: string, enum: [confirmer, reporter, annuler, suspendre, reprendre] }
motif: { type: string, description: Obligatoire pour reporter, annuler, suspendre. }
date_de_remplacement:
type: string
format: date
description: Obligatoire pour un report — la date de l'occurrence de remplacement.
source: { type: string, description: La source de la décision (suspension notifiée, décision de la société de gestion…). }
responses:
'201':
description: La transition est appliquée, son fait est retenu — pour un report, l'occurrence de remplacement est servie.
content:
application/json:
schema:
type: object
required: [occurrence, statut]
properties:
occurrence: { type: string }
statut: { type: string, enum: [prevue, confirmee, reportee, annulee, suspendue] }
occurrence_remplacante: { type: string }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamillePublication' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/evenements-instrument:
post:
operationId: annoncerUnEvenement
summary: Annoncer un événement d'instrument — la décision typée, le calendrier, l'établissement documentaire.
description: >-
La décision de la société de gestion, représentée par délégation. Un correctif
référence l'événement fautif (corrige). L'annonce publie son fait (contrat
evenement-d-instrument).
security:
- authentification: [instruments:publication]
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [type, annonce_le, instruments_touches]
properties:
type: { type: string, enum: [fusion, scission, reajustement, distribution] }
annonce_le: { type: string, format: date }
effet_le: { type: string, format: date }
instruments_touches:
type: array
minItems: 1
items:
type: object
required: [instrument, role]
properties:
instrument: { type: string }
role: { type: string, enum: [absorbant, absorbe, source, cible, concerne] }
decision:
type: object
description: Les caractéristiques connues à l'annonce — non figées avant le prononcé.
etabli_par_document: { type: string }
corrige: { type: string, description: L'événement corrigé, pour un correctif — la référence de causalité est alors obligatoire. }
responses:
'201':
description: L'événement est annoncé, son fait est retenu.
content:
application/json:
schema:
type: object
required: [evenement, etat]
properties:
evenement: { type: string }
etat: { type: string, const: annonce }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamillePublication' }
'422': { $ref: '#/components/responses/rejete' }
/evenements-instrument/{evenement}/prononce:
post:
operationId: prononcerUnEvenement
summary: Prononcer — les caractéristiques sont arrêtées et figées.
description: >-
La charge est typée par le type d'événement : parités et lignes d'arrivée par
instrument absorbé (fusion), clés de répartition (scission),
coefficient (réajustement), coupon et dates (distribution). Après le prononcé,
seule la correction par un nouvel événement correctif existe.
security:
- authentification: [instruments:publication]
parameters:
- $ref: '#/components/parameters/evenement'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [decision]
properties:
decision:
type: object
description: La décision typée, figée au prononcé — entiers à unité suffixée (parite_p6, cle_repartition_p6, coefficient_p6, coupon_part_ue6).
effet_le: { type: string, format: date }
responses:
'201':
description: L'événement est prononcé, son fait est retenu.
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamillePublication' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/evenements-instrument/{evenement}/annulation:
post:
operationId: annulerUnEvenement
summary: Annuler — le renoncement, avant le prononcé seulement.
security:
- authentification: [instruments:publication]
parameters:
- $ref: '#/components/parameters/evenement'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [motif]
properties:
motif: { type: string, minLength: 1 }
responses:
'201':
description: L'événement est annulé, son fait est retenu.
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamillePublication' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/evenements-instrument/{evenement}/denouement:
post:
operationId: denouerUnEvenement
summary: Dénouer — le dénouement constaté ; une fusion emporte la fin de vie des absorbés.
description: >-
S'appuie sur le retour agrégé des consommateurs. Le dénouement publie son fait, et les
terminus des instruments absorbés et du véhicule éteint publient les leurs (contrat
evenement-du-cycle-de-vie).
security:
- authentification: [instruments:publication]
parameters:
- $ref: '#/components/parameters/evenement'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [denoue_le]
properties:
denoue_le: { type: string, format: date }
retour:
type: object
description: Le retour agrégé de la déclinaison, sans donnée de porteur, quand il existe.
responses:
'201':
description: L'événement est dénoué, ses faits sont retenus.
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamillePublication' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/documents:
post:
operationId: verserUnDocument
summary: Verser un document — immuable ; un contenu déjà versé est reconnu par son empreinte.
description: >-
Le contenu se verse par exactement l'un des deux champs — contenu_texte (UTF-8)
ou contenu_pdf (base64, archivé tel quel). L'empreinte se calcule sur les
octets versés ; le fichier part à l'adaptateur de stockage, le référentiel n'en
garde que l'identité, la version et l'empreinte. Une nouvelle édition est un
NOUVEAU document.
security:
- authentification: [instruments:administration]
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [type, emetteur, edite_le]
properties:
type: { type: string, enum: [prospectus, dic, reglement_du_fonds, lettre_aux_porteurs] }
libelle: { type: string }
emetteur: { type: string, description: L'intervenant émetteur. }
edite_le: { type: string, format: date }
applicable_le: { type: string, format: date }
derniere_revue_le: { type: string, format: date }
langue: { type: string }
niveau_d_attache: { type: string, enum: [vehicule, instrument] }
vehicule: { type: string }
instruments:
type: array
description: Le rattachement déclaré au versement — confirmable à l'examen (un prospectus couvre parfois plusieurs compartiments).
items: { type: string }
contenu_texte: { type: string }
contenu_pdf: { type: string, contentEncoding: base64 }
responses:
'201':
description: Le document est versé — ou reconnu, s'il l'était déjà (même empreinte).
content:
application/json:
schema:
type: object
required: [document, empreinte, deja_verse]
properties:
document: { type: string }
empreinte: { type: string }
deja_verse: { type: boolean }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'422': { $ref: '#/components/responses/rejete' }
/documents/{document}/analyses:
post:
operationId: analyserUnDocument
summary: Analyser un document — l'analyseur propose, il n'écrit jamais.
description: >-
Chaque analyse est une entité DE PLUS (ré-analyser ne remplace rien), datée et
versionnée par son outillage. Les gestes proposés sont exactement des gestes du
composant — jamais inventés, jamais une publication de valeur.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/document'
responses:
'201':
description: L'analyse est produite.
content:
application/json:
schema: { $ref: '#/components/schemas/Analyse' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
get:
operationId: listerLesAnalysesDuDocument
summary: Les analyses d'un document, de la plus récente à la plus ancienne.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/document'
responses:
'200':
description: Les analyses.
content:
application/json:
schema:
type: array
items: { $ref: '#/components/schemas/Analyse' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
/analyses:
get:
operationId: rechercherLesAnalyses
summary: La file des analyses — l'examen partiel est visible.
security:
- authentification: [instruments:administration]
parameters:
- name: examinee
in: query
required: false
description: Faux pour la file de travail — les analyses dont au moins un geste attend son sort.
schema: { type: boolean }
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/taille'
responses:
'200':
description: La page demandée.
content:
application/json:
schema:
type: object
required: [lignes, total]
properties:
lignes:
type: array
items: { $ref: '#/components/schemas/Analyse' }
total:
type: [integer, 'null']
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
/analyses/{analyse}:
get:
operationId: consulterUneAnalyse
summary: Une analyse — ses gestes proposés, localisés, rapprochés, et leur sort.
security:
- authentification: [instruments:administration]
parameters:
- name: analyse
in: path
required: true
schema: { type: string, minLength: 1 }
responses:
'200':
description: L'analyse.
content:
application/json:
schema: { $ref: '#/components/schemas/Analyse' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
/analyses/{analyse}/gestes/{numero}/sort:
post:
operationId: examinerUnGeste
summary: Examiner un geste proposé — appliquer, amender puis appliquer, ou écarter (motivé).
description: >-
L'application part par la porte d'administration correspondante, la provenance
documentaire posée — elle crée donc la demande de validation ordinaire. Un
rejet du cœur vaut écart avec le motif du cœur. L'amendement trace la donnée
proposée et la donnée appliquée.
security:
- authentification: [instruments:administration]
parameters:
- name: analyse
in: path
required: true
schema: { type: string, minLength: 1 }
- name: numero
in: path
required: true
schema: { type: integer, minimum: 1 }
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [sort]
properties:
sort: { type: string, enum: [appliquer, amender_puis_appliquer, ecarter] }
donnees_amendees:
type: object
description: Obligatoire pour amender — la donnée corrigée avant application.
motif: { type: string, description: Obligatoire pour écarter. }
responses:
'201':
description: Le sort est rendu — pour une application, la demande de validation créée est servie.
content:
application/json:
schema:
type: object
required: [sort]
properties:
sort: { type: string, enum: [applique, amende_puis_applique, ecarte] }
demande: { type: string, description: La demande de validation créée par l'application. }
motif_du_coeur: { type: string, description: Le motif, quand l'application a été rejetée par le cœur (le geste est alors écarté). }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/demandes-de-validation:
get:
operationId: rechercherLesDemandes
summary: La file des demandes de validation — l'ancienneté et la recevabilité sont servies.
security:
- authentification: [instruments:administration]
parameters:
- name: objet
in: query
required: false
schema: { $ref: '#/components/schemas/ObjetDeDemande' }
- name: cible
in: query
required: false
description: L'identifiant de l'entité visée (instrument, véhicule, calendrier…).
schema: { type: string, minLength: 1 }
- name: prepare_par
in: query
required: false
schema: { type: string, minLength: 1 }
- name: en_attente_depuis
in: query
required: false
description: Ne servir que les demandes soumises avant cette date.
schema: { type: string, format: date }
- name: etat
in: query
required: false
schema: { type: string, enum: [en_attente, validee, refusee], default: en_attente }
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/taille'
responses:
'200':
description: La page demandée.
content:
application/json:
schema:
type: object
required: [lignes, total]
properties:
lignes:
type: array
items: { $ref: '#/components/schemas/DemandeDeValidation' }
total:
type: [integer, 'null']
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
/demandes-de-validation/{demande}:
get:
operationId: consulterUneDemande
summary: Une demande — ce qui change, sa source, sa recevabilité pour le lecteur.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/demande'
responses:
'200':
description: La demande.
content:
application/json:
schema: { $ref: '#/components/schemas/DemandeDeValidation' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
/demandes-de-validation/{demande}/validation:
post:
operationId: validerUneDemande
summary: Valider — l'effet est acquis ; jamais par le préparateur.
description: >-
La validation applique l'établissement et publie les faits qui en découlent.
Une demande préparée par le valideur est refusée (422) — les quatre yeux sont
du domaine, pas de l'écran.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/demande'
responses:
'200':
description: La demande est validée, l'effet est acquis.
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/demandes-de-validation/{demande}/refus:
post:
operationId: refuserUneDemande
summary: Refuser — motivé ; pour une urgence déjà en vigueur, le refus lève la restriction.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/demande'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [motif]
properties:
motif: { type: string, minLength: 1 }
responses:
'200':
description: La demande est refusée.
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/anomalies:
post:
operationId: signalerUneAnomalie
summary: Signaler une anomalie ou une donnée structurelle manquante — la porte des consommateurs.
description: >-
L'attente exprimée par le carnet d'ordres : un consommateur qui bute sur le
référentiel le dit ici, il ne contourne pas. Le groupe des anomalies converge
avec l'arbitrage de la navette (frontière domaine / service transverse de
qualité).
security:
- authentification: [instruments:signalement]
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [objet, detail]
properties:
objet: { $ref: '#/components/schemas/ObjetDAnomalie' }
regle: { type: string, description: La règle de contrôle en cause, quand le signaleur la connaît. }
detail: { type: string, minLength: 1 }
signale_par: { type: string, description: Le composant signaleur. }
responses:
'201':
description: L'anomalie est ouverte.
content:
application/json:
schema: { $ref: '#/components/schemas/Anomalie' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403':
description: L'identité présentée n'a pas la famille d'accès instruments:signalement.
'422': { $ref: '#/components/responses/rejete' }
get:
operationId: rechercherLesAnomalies
summary: Les anomalies de qualité du référentiel — collection filtrée, cycle propre.
security:
- authentification: [instruments:administration]
parameters:
- name: gravite
in: query
required: false
schema: { type: string, enum: [elevee, moyenne, faible] }
- name: objet
in: query
required: false
description: L'identifiant de l'objet rattaché.
schema: { type: string, minLength: 1 }
- name: regle
in: query
required: false
schema: { type: string, minLength: 1 }
- name: etat
in: query
required: false
schema: { type: string, enum: [ouvertes, traitees, ecartees, toutes], default: ouvertes }
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/taille'
responses:
'200':
description: La page demandée.
content:
application/json:
schema:
type: object
required: [lignes, total]
properties:
lignes:
type: array
items: { $ref: '#/components/schemas/Anomalie' }
total:
type: [integer, 'null']
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
/anomalies/{anomalie}/traitement:
post:
operationId: traiterUneAnomalie
summary: Traiter — l'anomalie est close par l'action qui la résout, tracée.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/anomalie'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [action]
properties:
action: { type: string, minLength: 1, description: Ce qui a résolu l'anomalie. }
responses:
'200':
description: L'anomalie est traitée.
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/anomalies/{anomalie}/ecart:
post:
operationId: ecarterUneAnomalie
summary: Écarter — une décision tracée et motivée, jamais une suppression.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/anomalie'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [motif]
properties:
motif: { type: string, minLength: 1 }
responses:
'200':
description: L'anomalie est écartée.
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamilleAdministration' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
components:
parameters:
instrument:
name: instrument
in: path
required: true
schema: { type: string, minLength: 1 }
vehicule:
name: vehicule
in: path
required: true
schema: { type: string, minLength: 1 }
evenement:
name: evenement
in: path
required: true
schema: { type: string, minLength: 1 }
document:
name: document
in: path
required: true
schema: { type: string, minLength: 1 }
demande:
name: demande
in: path
required: true
schema: { type: string, minLength: 1 }
anomalie:
name: anomalie
in: path
required: true
schema: { type: string, minLength: 1 }
page:
name: page
in: query
required: false
schema: { type: integer, minimum: 1, default: 1 }
taille:
name: taille
in: query
required: false
schema: { type: integer, minimum: 1, maximum: 500, default: 50 }
securitySchemes:
authentification:
type: http
scheme: bearer
description: >-
Tout appel est authentifié (401) et autorisé par famille d'accès (403 hors
famille) — chaque opération déclare sa famille en portée, sous la forme
instruments:famille. Les familles se prouvent en croisé :
l'administration ne publie pas, la publication n'administre pas.
responses:
demandeCreee:
description: >-
La demande de validation est créée — l'effet attend sa validation par un
valideur distinct du préparateur.
content:
application/json:
schema:
type: object
required: [demande, objet]
properties:
demande: { type: string }
objet: { $ref: '#/components/schemas/ObjetDeDemande' }
cible: { type: string }
irrecevable:
description: La demande est irrecevable (champ manquant, date mal formée, flottant…) — le motif nomme le champ.
content:
application/json:
schema: { $ref: '#/components/schemas/Erreur' }
sansIdentite:
description: Aucune identité présentée.
horsFamilleAdministration:
description: L'identité présentée n'a pas la famille d'accès instruments:administration.
horsFamillePublication:
description: L'identité présentée n'a pas la famille d'accès instruments:publication.
inconnu:
description: La ressource est inconnue de ce tenant — rien n'existe à travers la muraille.
content:
application/json:
schema: { $ref: '#/components/schemas/Erreur' }
rejete:
description: >-
Le domaine refuse (invariant violé : chevauchement de périodes, inapplicable à
la nature, cycle qui n'admet pas la transition, rang déjà publié, préparateur
valideur…) — rien n'est retenu, aucun fait n'existe ; le motif nomme
l'invariant.
content:
application/json:
schema: { $ref: '#/components/schemas/Erreur' }
schemas:
Provenance:
type: object
required: [source]
properties:
source: { type: string, enum: [document, saisie, flux_de_place] }
document: { type: string, description: La référence du document versé — obligatoire quand la source est un document. }
RoleDIntervenant:
type: string
enum: [societe_de_gestion, depositaire, valorisateur, agent_de_transfert,
centralisateur, teneur_compte_emission, commissaire_aux_comptes,
conseil_de_surveillance]
Capacite:
type: string
enum: [souscription, rachat, arbitrage_entrant, arbitrage_sortant, transfert, affectation_ccb]
CaracteristiqueAEtablir:
type: object
required: [type, du, provenance]
properties:
type:
type: string
enum: [periodicite_de_publication, classification, frais_du_fonds,
taux_d_interet, mecanisme_plafonnement_rachats, modalites_d_ordre,
regime_juridique_fcpe, profil_solidaire, profil_relais,
profil_garanti, profil_a_formule, orientation_gestion]
description: >-
La typologie fermée — fermée PAR LE LOGICIEL : un type nouveau est une
évolution versionnée, pas un paramétrage. Le niveau d'attache est
structurel : les types de véhicule se rejettent sur un instrument, et
réciproquement.
du: { type: string, format: date }
au: { type: string, format: date, description: La borne de fin, exclue — absente si la période est ouverte. }
provenance: { $ref: '#/components/schemas/Provenance' }
donnees:
type: object
description: >-
Les champs propres au type, aux types du modèle — entiers à unité suffixée
(taux_pb, droits_entree_pb, seuil_pb, minimum_souscription_ue6…), codes des
listes fermées (regime : l_214_164…), périodes.
CaracteristiqueAReetablir:
allOf:
- $ref: '#/components/schemas/CaracteristiqueAEtablir'
- type: object
required: [motif]
properties:
motif: { type: string, minLength: 1, description: Pourquoi la version précédente était erronée — elle reste tracée. }
RestrictionPosee:
type: object
required: [restriction, en_vigueur_depuis, demande]
properties:
restriction: { type: string }
en_vigueur_depuis: { type: string, format: date-time }
demande: { type: string, description: La demande de validation a posteriori. }
echeance_de_revue: { type: string, format: date }
ValeurPubliee:
type: object
required: [instrument, date_calcul, rang, valeur_part_ue6, sorte]
properties:
instrument: { type: string }
date_calcul: { type: string, format: date }
rang: { type: integer, minimum: 1 }
valeur_part_ue6: { type: integer }
sorte: { type: string, enum: [marche, administree] }
motif: { type: string }
Analyse:
type: object
required: [analyse, document, outillage, version_outillage, produite_le, examinee, gestes]
properties:
analyse: { type: string }
document: { type: string }
outillage: { type: string, description: Qui a extrait — l'analyseur est un adaptateur versionné, jamais une autorité. }
version_outillage: { type: string }
produite_le: { type: string, format: date-time }
examinee: { type: boolean, description: Vrai quand chaque geste a son sort — l'examen partiel est visible. }
gestes:
type: array
items: { $ref: '#/components/schemas/GestePropose' }
GestePropose:
type: object
required: [numero, geste_vise, rapprochement, donnees_extraites, localisation]
properties:
numero: { type: integer, minimum: 1 }
geste_vise:
type: string
enum: [referencer_un_instrument, referencer_un_vehicule,
etablir_une_caracteristique, reetablir_une_caracteristique,
poser_une_restriction, lever_une_restriction,
etablir_la_regle_de_valorisation, nouer_une_relation,
affecter_un_role, annoncer_un_evenement]
description: >-
Exactement l'un des gestes du composant — jamais un geste inventé, JAMAIS
une publication de valeur (un document n'établit pas une VL).
rapprochement:
type: string
enum: [nouveau, ecart, conforme]
description: Le conforme ne produit pas de geste applicable — il constate, et vaut confirmation datée.
donnees_extraites: { type: object, description: Aux types du modèle — l'extraction qui ne sait pas produire le type ne propose pas. }
localisation:
type: object
description: Ce que le valideur lira en face du geste.
properties:
page: { type: integer }
section: { type: string }
extrait: { type: string }
indice_confiance_pb:
type: integer
minimum: 0
maximum: 10000
description: L'indice de confiance de l'extraction, en points de base — le tri à l'examen, jamais un seuil d'application automatique.
sort:
type: string
enum: [a_examiner, applique, amende_puis_applique, ecarte]
motif: { type: string, description: Le motif de l'écart, quand le geste est écarté. }
valideur: { type: string }
ObjetDeDemande:
type: string
enum: [referencement, transition_de_cycle, caracteristique, restriction,
regle_de_valorisation, relation, role_d_intervenant, version_de_calendrier,
exception_de_calendrier, intervenant]
DemandeDeValidation:
type: object
required: [demande, objet, cible, ce_qui_change, prepare_par, soumise_le,
anciennete_jours, etat, gestes]
properties:
demande: { type: string }
objet: { $ref: '#/components/schemas/ObjetDeDemande' }
cible:
type: object
required: [type, reference]
properties:
type: { type: string, enum: [instrument, vehicule, calendrier, intervenant] }
reference: { type: string }
libelle: { type: string }
ce_qui_change: { type: string, description: Le résumé lisible de l'établissement demandé. }
source: { type: string, description: La provenance de l'établissement (document, saisie, flux). }
prepare_par: { type: string }
soumise_le: { type: string, format: date-time }
anciennete_jours:
type: integer
description: L'ancienneté SERVIE — le consommateur ne la calcule jamais.
effet:
type: object
description: L'effet prévu — ou déjà en vigueur pour une urgence (validation a posteriori).
properties:
prevu_le: { type: string, format: date }
deja_en_vigueur: { type: boolean }
echeance_de_revue: { type: string, format: date }
etat: { type: string, enum: [en_attente, validee, refusee] }
refus_de_validation:
type: string
description: >-
Pourquoi le LECTEUR ne peut pas valider cette demande (« préparée par
vous — un autre valideur est requis ») — absent quand elle lui est
recevable. Le verdict est servi, jamais déduit.
gestes:
type: array
description: Les gestes ouverts au lecteur — servis, jamais déduits de l'état.
items: { type: string, enum: [valider, refuser, lever] }
ObjetDAnomalie:
type: object
required: [type, reference]
properties:
type: { type: string, enum: [instrument, calendrier, document] }
reference: { type: string }
Anomalie:
type: object
required: [anomalie, gravite, regle, detail, objet, relevee_le, par_un_agent, etat, gestes]
properties:
anomalie: { type: string }
gravite: { type: string, enum: [elevee, moyenne, faible] }
regle:
type: string
description: >-
La règle de contrôle, nommée et versionnée (valeur attendue non reçue,
conflit de sources, calendrier expirant sans successeur, document attendu
non reçu, nourricier valorisé avant son maître…).
detail: { type: string }
objet: { $ref: '#/components/schemas/ObjetDAnomalie' }
relevee_le: { type: string, format: date-time }
relevee_par: { type: string, description: Le contrôle, l'agent ou le composant signaleur. }
par_un_agent: { type: boolean, description: Vrai quand un agent l'a relevée — la provenance se voit jusqu'au bout de la chaîne. }
etat: { type: string, enum: [ouverte, traitee, ecartee] }
gestes:
type: array
items: { type: string, enum: [traiter, ecarter] }
Erreur:
type: object
required: [motif]
properties:
motif: { type: string, description: Le motif, qui nomme le champ, l'identifiant ou l'invariant en cause. }