Aller au contenu

evenement-d-instrument

Événement (AsyncAPI) — version 0.5.0. Producteur : instruments. Consommateurs déclarés : operations, fiscalite.

Le cycle des événements de la vie des instruments — fusion, scission, réajustement, distribution — représentés par délégation de la société de gestion. Chaque transition publie son fait, une seule fois par événement, jamais par porteur ; le mécanisme n’émet aucun ordre. Enveloppe CloudEvents 1.0.2 en mode structuré JSON ; aucun identifiant de tenant n’est transporté. Unicité du fait : (evenement, type_de_fait).

asyncapi: 3.0.0
info:
title: instruments — l'événement d'instrument (le cycle des OST)
version: 0.5.0
description: >-
Le cycle des événements de la vie des instruments — fusion, scission,
réajustement, distribution — représentés par délégation de la société de gestion.
Chaque transition publie son fait, une seule fois par événement, jamais par
porteur ; le mécanisme n'émet aucun ordre. Enveloppe CloudEvents 1.0.2 en mode
structuré JSON ; aucun identifiant de tenant n'est transporté. Unicité du fait :
(evenement, type_de_fait).
x-producteurs:
- instruments
x-consommateurs:
- composant: operations
- composant: fiscalite
x-ruptures:
- version: 0.5.0
rupture: "schéma remanié : decisionFusion perd correspondances_categories ; chaque absorbé porte sa ligne d'arrivée (cible)"
motif: >-
Fusion arbitrée le 2026-08-13 (journal des décisions) : une catégorie de parts
différenciée EST un instrument — la correspondance de fusion se dit d'instrument
à instrument, l'absorbé désignant la ligne qui le remplace.
- version: 0.4.0
rupture: "enveloppe remplacée : le socle propriétaire devient CloudEvents 1.0.2 en mode structuré JSON"
motif: >-
La séquence par événement reste, en extension ; la référence de causalité (document,
événement corrigé) devient l'extension cause.
- version: 0.4.0
rupture: "propriété retirée : tenant"
motif: >-
Isolation forte par tenant — aucun identifiant de tenant n'est transporté ;
l'émission « une fois par tenant et par événement » devient « une fois par
événement », l'unicité du fait perd sa composante tenant.
defaultContentType: application/cloudevents+json
channels:
evenementDInstrument:
address: instruments.evenement
description: >-
Canal logique du cycle des événements d'instrument. L'ordre n'est garanti que
par producteur (sequence strictement croissante par événement), jamais entre
producteurs.
messages:
evenementAnnonce:
$ref: '#/components/messages/evenementAnnonce'
evenementPrononce:
$ref: '#/components/messages/evenementPrononce'
evenementDenoue:
$ref: '#/components/messages/evenementDenoue'
evenementAnnule:
$ref: '#/components/messages/evenementAnnule'
operations:
publierLeCycleDesEvenements:
action: send
channel:
$ref: '#/channels/evenementDInstrument'
summary: Chaque transition du cycle publie son fait, retenu en boîte d'envoi.
messages:
- $ref: '#/channels/evenementDInstrument/messages/evenementAnnonce'
- $ref: '#/channels/evenementDInstrument/messages/evenementPrononce'
- $ref: '#/channels/evenementDInstrument/messages/evenementDenoue'
- $ref: '#/channels/evenementDInstrument/messages/evenementAnnule'
components:
messages:
evenementAnnonce:
name: evenement-annonce
title: Événement annoncé
summary: La décision est annoncée — calendrier connu, caractéristiques non figées.
contentType: application/cloudevents+json
payload:
allOf:
- $ref: '#/components/schemas/enveloppeCloudEvents'
- type: object
required: [data]
properties:
type: { const: fr.epargne.instruments.evenement.annonce.v1 }
dataschema: { const: 'urn:schema:epargne:instruments:evenement-annonce:1' }
data: { $ref: '#/components/schemas/chapeau' }
evenementPrononce:
name: evenement-prononce
title: Événement prononcé
summary: >-
Les caractéristiques sont arrêtées et FIGÉES — le message porteur, sa charge
typée par le type d'événement ; après, seule la correction par un événement
correctif existe.
contentType: application/cloudevents+json
payload:
allOf:
- $ref: '#/components/schemas/enveloppeCloudEvents'
- type: object
required: [data]
properties:
type: { const: fr.epargne.instruments.evenement.prononce.v1 }
dataschema: { const: 'urn:schema:epargne:instruments:evenement-prononce:1' }
data:
allOf:
- $ref: '#/components/schemas/chapeau'
- type: object
required: [decision]
properties:
decision:
description: La décision typée — exactement l'une des quatre formes.
oneOf:
- $ref: '#/components/schemas/decisionFusion'
- $ref: '#/components/schemas/decisionScission'
- $ref: '#/components/schemas/decisionReajustement'
- $ref: '#/components/schemas/decisionDistribution'
evenementDenoue:
name: evenement-denoue
title: Événement dénoué
summary: >-
Le dénouement constaté — sur le retour agrégé des consommateurs. Pour une fusion, il
emporte la fin de vie des absorbés : leurs terminus se publient au contrat
evenement-du-cycle-de-vie.
contentType: application/cloudevents+json
payload:
allOf:
- $ref: '#/components/schemas/enveloppeCloudEvents'
- type: object
required: [data]
properties:
type: { const: fr.epargne.instruments.evenement.denoue.v1 }
dataschema: { const: 'urn:schema:epargne:instruments:evenement-denoue:1' }
data:
allOf:
- $ref: '#/components/schemas/chapeau'
- type: object
required: [denoue_le]
properties:
denoue_le: { type: string, format: date }
evenementAnnule:
name: evenement-annule
title: Événement annulé
summary: Le renoncement — avant le prononcé seulement ; après, un événement correctif référence le fautif (cause).
contentType: application/cloudevents+json
payload:
allOf:
- $ref: '#/components/schemas/enveloppeCloudEvents'
- type: object
required: [data]
properties:
type: { const: fr.epargne.instruments.evenement.annule.v1 }
dataschema: { const: 'urn:schema:epargne:instruments:evenement-annule:1' }
data:
allOf:
- $ref: '#/components/schemas/chapeau'
- type: object
required: [motif]
properties:
motif: { type: string }
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'événement d'instrument.
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 du cycle chez le producteur, strictement croissante par événement.
cause:
type: string
description: >-
Extension — la référence de causalité : le document qui établit la
décision, s'il existe ; l'événement corrigé, pour un correctif
(obligatoire alors).
data: true
chapeau:
type: object
required: [evenement, type_evenement, annonce_le, instruments_touches]
properties:
evenement: { type: string, description: L'identifiant publié — le sujet du fait, répété dans la charge. }
type_evenement: { type: string, enum: [fusion, scission, reajustement, distribution] }
annonce_le: { type: string, format: date }
effet_le: { type: string, format: date }
denouement_prevu_le: { type: string, format: date }
instruments_touches:
type: array
minItems: 1
description: Les instruments touchés, chacun avec son rôle — l'ordre et l'orientation sont publiés.
items:
type: object
required: [instrument, role]
properties:
instrument: { type: string }
role: { type: string, enum: [absorbant, absorbe, source, cible, concerne] }
decisionFusion:
type: object
required: [forme, absorbant, absorbes]
properties:
forme: { const: fusion }
absorbant: { type: string, description: L'identifiant publié. }
absorbes:
type: array
minItems: 1
items:
type: object
required: [instrument, parite_p6]
properties:
instrument: { type: string }
parite_p6:
type: integer
description: La parité d'échange en millionièmes — arrêtée au prononcé.
cible:
type: string
description: >-
La ligne d'arrivée de cet absorbé, quand la fusion touche plusieurs
lignes (des catégories de parts différenciées) — absente, l'absorbant
unique est la cible.
decisionScission:
type: object
required: [forme, source, cibles]
properties:
forme: { const: scission }
source: { type: string }
cibles:
type: array
minItems: 1
items:
type: object
required: [instrument, cle_repartition_p6]
properties:
instrument: { type: string }
cle_repartition_p6: { type: integer, description: La clé de répartition en millionièmes. }
decisionReajustement:
type: object
required: [forme, instrument, coefficient_p6]
properties:
forme: { const: reajustement }
instrument: { type: string }
coefficient_p6:
type: integer
description: Le coefficient en millionièmes — division ou regroupement ; quantités recalculées, valeur totale inchangée.
decisionDistribution:
type: object
required: [forme, instrument, coupon_part_ue6]
properties:
forme: { const: distribution }
instrument: { type: string }
coupon_part_ue6: { type: integer, description: Le coupon par part, en micro-euros. }
date_detachement: { type: string, format: date }
date_paiement: { type: string, format: date }
# La forme (versée / réinvestie) et la fiscalité attendent la capture au
# référentiel réglementaire — le modèle porte l'anatomie de la décision, pas
# son régime.