evenement-du-cycle-de-vie
Événement (AsyncAPI) — version 0.2.0. Producteur : instruments. Consommateurs déclarés : tenue-de-compte, relation-tiers.
Les transitions de cycle des entités du référentiel — instrument, véhicule — et les bornes des rôles d’intervenants. Chaque fait transporte des identifiants publiés : la fiche se consulte, elle ne se duplique pas sur le bus. Enveloppe CloudEvents 1.0.2 en mode structuré JSON ; aucun identifiant de tenant n’est transporté. Unicité du fait : (entite, type_de_fait).
La spécification
Section intitulée « La spécification »asyncapi: 3.0.0info: title: instruments — l'événement du cycle de vie version: 0.2.0 x-ruptures: - version: 0.2.0 rupture: "messages retirés : categorieLancee, categorieAnnulee, categorieAbsorbee, categorieLiquidee (et le schéma faitDeCategorie)" motif: >- Fusion arbitrée le 2026-08-13 (journal des décisions) : une catégorie de parts différenciée EST un instrument — son cycle est le cycle d'instrument, les messages d'instrument suffisent. description: >- Les transitions de cycle des entités du référentiel — instrument, véhicule — et les bornes des rôles d'intervenants. Chaque fait transporte des identifiants publiés : la fiche se consulte, elle ne se duplique pas sur le bus. Enveloppe CloudEvents 1.0.2 en mode structuré JSON ; aucun identifiant de tenant n'est transporté. Unicité du fait : (entite, type_de_fait). x-producteurs: - instruments x-consommateurs: - composant: tenue-de-compte - composant: relation-tiersdefaultContentType: application/cloudevents+jsonchannels: cycleDeVie: address: instruments.cycle-de-vie description: >- Canal logique du cycle de vie du référentiel. L'ordre n'est garanti que par producteur (sequence strictement croissante par entité sujet), jamais entre producteurs. messages: instrumentReference: { $ref: '#/components/messages/instrumentReference' } instrumentLance: { $ref: '#/components/messages/instrumentLance' } instrumentAnnule: { $ref: '#/components/messages/instrumentAnnule' } instrumentAbsorbe: { $ref: '#/components/messages/instrumentAbsorbe' } instrumentLiquide: { $ref: '#/components/messages/instrumentLiquide' } vehiculeAgree: { $ref: '#/components/messages/vehiculeAgree' } vehiculeOuvert: { $ref: '#/components/messages/vehiculeOuvert' } vehiculeAbandonne: { $ref: '#/components/messages/vehiculeAbandonne' } vehiculeDissous: { $ref: '#/components/messages/vehiculeDissous' } roleAttribue: { $ref: '#/components/messages/roleAttribue' } roleTermine: { $ref: '#/components/messages/roleTermine' }operations: publierLeCycleDeVie: action: send channel: $ref: '#/channels/cycleDeVie' summary: Chaque transition de cycle et chaque borne de rôle publie son fait, retenu en boîte d'envoi. messages: - $ref: '#/channels/cycleDeVie/messages/instrumentReference' - $ref: '#/channels/cycleDeVie/messages/instrumentLance' - $ref: '#/channels/cycleDeVie/messages/instrumentAnnule' - $ref: '#/channels/cycleDeVie/messages/instrumentAbsorbe' - $ref: '#/channels/cycleDeVie/messages/instrumentLiquide' - $ref: '#/channels/cycleDeVie/messages/vehiculeAgree' - $ref: '#/channels/cycleDeVie/messages/vehiculeOuvert' - $ref: '#/channels/cycleDeVie/messages/vehiculeAbandonne' - $ref: '#/channels/cycleDeVie/messages/vehiculeDissous' - $ref: '#/channels/cycleDeVie/messages/roleAttribue' - $ref: '#/channels/cycleDeVie/messages/roleTermine'components: messages: instrumentReference: name: instrument-reference title: Instrument référencé summary: L'instrument naît « en préparation » — l'identifiant publié existe, rien ne peut s'y détenir. contentType: application/cloudevents+json payload: allOf: - $ref: '#/components/schemas/enveloppeCloudEvents' - type: object required: [data] properties: type: { const: fr.epargne.instruments.instrument.reference.v1 } dataschema: { const: 'urn:schema:epargne:instruments:cycle-instrument:1' } data: { $ref: '#/components/schemas/faitDInstrument' } instrumentLance: name: instrument-lance title: Instrument lancé summary: L'état de croisière — positions, valeurs, opérations ; la tenue de compte ouvre les comptes du fonds. contentType: application/cloudevents+json payload: allOf: - $ref: '#/components/schemas/enveloppeCloudEvents' - type: object required: [data] properties: type: { const: fr.epargne.instruments.instrument.lance.v1 } dataschema: { const: 'urn:schema:epargne:instruments:cycle-instrument:1' } data: { $ref: '#/components/schemas/faitDInstrument' } instrumentAnnule: name: instrument-annule title: Instrument annulé summary: Le lancement n'a jamais eu lieu — aucune position n'a jamais existé ; l'identifiant reste réservé à jamais. contentType: application/cloudevents+json payload: allOf: - $ref: '#/components/schemas/enveloppeCloudEvents' - type: object required: [data] properties: type: { const: fr.epargne.instruments.instrument.annule.v1 } dataschema: { const: 'urn:schema:epargne:instruments:cycle-instrument:1' } data: { $ref: '#/components/schemas/faitDInstrument' } instrumentAbsorbe: name: instrument-absorbe title: Instrument absorbé summary: Terminus créé par le dénouement d'une fusion — la cause référence l'événement d'instrument. contentType: application/cloudevents+json payload: allOf: - $ref: '#/components/schemas/enveloppeCloudEvents' - type: object required: [data] properties: type: { const: fr.epargne.instruments.instrument.absorbe.v1 } dataschema: { const: 'urn:schema:epargne:instruments:cycle-instrument:1' } data: { $ref: '#/components/schemas/faitDInstrument' } instrumentLiquide: name: instrument-liquide title: Instrument liquidé summary: Terminus de la liquidation ou de la dissolution du véhicule — l'instrument reste consultable à jamais. contentType: application/cloudevents+json payload: allOf: - $ref: '#/components/schemas/enveloppeCloudEvents' - type: object required: [data] properties: type: { const: fr.epargne.instruments.instrument.liquide.v1 } dataschema: { const: 'urn:schema:epargne:instruments:cycle-instrument:1' } data: { $ref: '#/components/schemas/faitDInstrument' } vehiculeAgree: name: vehicule-agree title: Véhicule agréé contentType: application/cloudevents+json payload: allOf: - $ref: '#/components/schemas/enveloppeCloudEvents' - type: object required: [data] properties: type: { const: fr.epargne.instruments.vehicule.agree.v1 } dataschema: { const: 'urn:schema:epargne:instruments:cycle-vehicule:1' } data: { $ref: '#/components/schemas/faitDeVehicule' } vehiculeOuvert: name: vehicule-ouvert title: Véhicule ouvert contentType: application/cloudevents+json payload: allOf: - $ref: '#/components/schemas/enveloppeCloudEvents' - type: object required: [data] properties: type: { const: fr.epargne.instruments.vehicule.ouvert.v1 } dataschema: { const: 'urn:schema:epargne:instruments:cycle-vehicule:1' } data: { $ref: '#/components/schemas/faitDeVehicule' } vehiculeAbandonne: name: vehicule-abandonne title: Véhicule abandonné summary: Le projet est retiré avant tout lancement — terminus. contentType: application/cloudevents+json payload: allOf: - $ref: '#/components/schemas/enveloppeCloudEvents' - type: object required: [data] properties: type: { const: fr.epargne.instruments.vehicule.abandonne.v1 } dataschema: { const: 'urn:schema:epargne:instruments:cycle-vehicule:1' } data: { $ref: '#/components/schemas/faitDeVehicule' } vehiculeDissous: name: vehicule-dissous title: Véhicule dissous summary: Clôture de liquidation, absorption ou scission dénouée — les instruments portés atteignent leur terminus. contentType: application/cloudevents+json payload: allOf: - $ref: '#/components/schemas/enveloppeCloudEvents' - type: object required: [data] properties: type: { const: fr.epargne.instruments.vehicule.dissous.v1 } dataschema: { const: 'urn:schema:epargne:instruments:cycle-vehicule:1' } data: { $ref: '#/components/schemas/faitDeVehicule' } roleAttribue: name: role-attribue title: Rôle d'intervenant attribué summary: Un changement de dépositaire est d'abord publié ici — la relation tiers consomme, jamais ne modifie. contentType: application/cloudevents+json payload: allOf: - $ref: '#/components/schemas/enveloppeCloudEvents' - type: object required: [data] properties: type: { const: fr.epargne.instruments.role.attribue.v1 } dataschema: { const: 'urn:schema:epargne:instruments:role:1' } data: { $ref: '#/components/schemas/faitDeRole' } roleTermine: name: role-termine title: Rôle d'intervenant terminé contentType: application/cloudevents+json payload: allOf: - $ref: '#/components/schemas/enveloppeCloudEvents' - type: object required: [data] properties: type: { const: fr.epargne.instruments.role.termine.v1 } dataschema: { const: 'urn:schema:epargne:instruments:role:1' } data: allOf: - $ref: '#/components/schemas/faitDeRole' - type: object required: [au] schemas: enveloppeCloudEvents: type: object # Les consommateurs sont tolérants : un champ inconnu s'ignore. required: [specversion, id, source, type, subject, time, datacontenttype, dataschema, sequence, data] properties: specversion: { type: string, const: '1.0' } id: { type: string, minLength: 1, description: L'identifiant unique du fait — la clé d'idempotence. } source: { type: string, const: 'urn:epargne:instruments' } type: { type: string, minLength: 1 } subject: type: string minLength: 1 description: L'identifiant publié de l'entité dont l'état change — instrument, véhicule ou rôle. time: { type: string, format: date-time, description: L'instant de la retenue du fait (UTC). } datacontenttype: { type: string, const: application/json } dataschema: { type: string, format: uri-reference } sequence: type: integer minimum: 1 description: Extension — la séquence par entité sujet chez le producteur, strictement croissante. cause: type: string description: Extension — l'événement d'instrument dont le dénouement crée le terminus, le cas échéant. data: true faitDInstrument: type: object required: [instrument, nature, date] properties: instrument: { type: string, description: L'identifiant publié — répété depuis le sujet. } nature: { type: string, enum: [placement_collectif, ccb, devise] } vehicule: { type: string, description: Le véhicule porteur — placement collectif seulement. } date: { type: string, format: date, description: La date d'effet de la transition. } motif: { type: string } faitDeVehicule: type: object required: [vehicule, type_vehicule, date] properties: vehicule: { type: string } type_vehicule: { type: string, enum: [fcpe, sicavas] } date: { type: string, format: date } motif: { type: string } faitDeRole: type: object required: [vehicule, intervenant, role, du] properties: vehicule: { type: string } intervenant: { type: string } nom: { type: string, description: Le nom de l'intervenant — le confort du consommateur, la fiche fait foi. } role: type: string enum: [societe_de_gestion, depositaire, valorisateur, agent_de_transfert, centralisateur, teneur_compte_emission, commissaire_aux_comptes, conseil_de_surveillance] du: { type: string, format: date } au: { type: string, format: date, description: La borne de fin, exclue — portée par le fait de terminaison. }