Aller au contenu

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).

asyncapi: 3.0.0
info:
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-tiers
defaultContentType: application/cloudevents+json
channels:
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. }