Aller au contenu

evenement-de-valorisation-prevue

Événement (AsyncAPI) — version 0.3.0. Producteur : instruments. Consommateurs déclarés : carnet-ordres, tenue-de-compte.

Le cycle des occurrences de valorisation prévues — l’échéance attendue d’une valeur, jamais son montant. Le report est un terminus qui référence son occurrence de remplacement ; la suspension est le seul état réversible. Enveloppe CloudEvents 1.0.2 en mode structuré JSON ; aucun identifiant de tenant n’est transporté. Unicité du fait : (occurrence, type_de_fait, sequence).

asyncapi: 3.0.0
info:
title: instruments — l'événement de valorisation prévue
version: 0.3.0
description: >-
Le cycle des occurrences de valorisation prévues — l'échéance attendue d'une
valeur, jamais son montant. Le report est un terminus qui référence son occurrence
de remplacement ; la suspension est le seul état réversible. Enveloppe CloudEvents
1.0.2 en mode structuré JSON ; aucun identifiant de tenant n'est transporté.
Unicité du fait : (occurrence, type_de_fait, sequence).
x-producteurs:
- instruments
x-consommateurs:
- composant: carnet-ordres
- composant: tenue-de-compte
x-ruptures:
- version: 0.3.0
rupture: "propriété retirée : data.categorie"
motif: >-
Fusion arbitrée le 2026-08-13 (journal des décisions) : une catégorie de parts
différenciée EST un instrument — l'occurrence se publie par instrument, les
lignes sœurs d'un même véhicule ou compartiment partagent leurs dates.
- version: 0.2.0
rupture: "enveloppe remplacée : le socle propriétaire devient CloudEvents 1.0.2 en mode structuré JSON"
motif: >-
La séquence par occurrence reste, en extension.
- version: 0.2.0
rupture: "propriété retirée : tenant"
motif: >-
Isolation forte par tenant — aucun identifiant de tenant n'est transporté ;
l'unicité du fait perd sa composante tenant.
defaultContentType: application/cloudevents+json
channels:
valorisationPrevue:
address: instruments.valorisation-prevue
description: >-
Canal logique du cycle des occurrences. L'ordre n'est garanti que par producteur
(sequence strictement croissante par occurrence), jamais entre producteurs.
messages:
occurrencePrevue:
$ref: '#/components/messages/occurrencePrevue'
occurrenceConfirmee:
$ref: '#/components/messages/occurrenceConfirmee'
occurrenceReportee:
$ref: '#/components/messages/occurrenceReportee'
occurrenceAnnulee:
$ref: '#/components/messages/occurrenceAnnulee'
occurrenceSuspendue:
$ref: '#/components/messages/occurrenceSuspendue'
operations:
publierLeCycleDesOccurrences:
action: send
channel:
$ref: '#/channels/valorisationPrevue'
summary: Chaque transition du cycle d'une occurrence publie son fait, retenu en boîte d'envoi.
messages:
- $ref: '#/channels/valorisationPrevue/messages/occurrencePrevue'
- $ref: '#/channels/valorisationPrevue/messages/occurrenceConfirmee'
- $ref: '#/channels/valorisationPrevue/messages/occurrenceReportee'
- $ref: '#/channels/valorisationPrevue/messages/occurrenceAnnulee'
- $ref: '#/channels/valorisationPrevue/messages/occurrenceSuspendue'
components:
messages:
occurrencePrevue:
name: occurrence-prevue
title: Occurrence prévue
summary: L'occurrence entre à l'horizon — calcul ou recalcul publié.
contentType: application/cloudevents+json
payload:
allOf:
- $ref: '#/components/schemas/enveloppeCloudEvents'
- type: object
required: [data]
properties:
type: { const: fr.epargne.instruments.occurrence.prevue.v1 }
dataschema: { const: 'urn:schema:epargne:instruments:occurrence:1' }
data: { $ref: '#/components/schemas/occurrence' }
occurrenceConfirmee:
name: occurrence-confirmee
title: Occurrence confirmée
summary: L'échéance est confirmée — la levée d'une suspension reprend ici.
contentType: application/cloudevents+json
payload:
allOf:
- $ref: '#/components/schemas/enveloppeCloudEvents'
- type: object
required: [data]
properties:
type: { const: fr.epargne.instruments.occurrence.confirmee.v1 }
dataschema: { const: 'urn:schema:epargne:instruments:occurrence:1' }
data: { $ref: '#/components/schemas/occurrence' }
occurrenceReportee:
name: occurrence-reportee
title: Occurrence reportée
summary: >-
TERMINUS — le fait porte le motif et l'occurrence de remplacement (nouvelle
date, nouvel identifiant) ; le consommateur décide de corriger, réaffecter ou
documenter les ordres déjà affectés.
contentType: application/cloudevents+json
payload:
allOf:
- $ref: '#/components/schemas/enveloppeCloudEvents'
- type: object
required: [data]
properties:
type: { const: fr.epargne.instruments.occurrence.reportee.v1 }
dataschema: { const: 'urn:schema:epargne:instruments:occurrence:1' }
data:
allOf:
- $ref: '#/components/schemas/occurrence'
- type: object
required: [motif, occurrence_remplacante]
occurrenceAnnulee:
name: occurrence-annulee
title: Occurrence annulée
summary: Terminus motivé — l'échéance n'aura pas lieu.
contentType: application/cloudevents+json
payload:
allOf:
- $ref: '#/components/schemas/enveloppeCloudEvents'
- type: object
required: [data]
properties:
type: { const: fr.epargne.instruments.occurrence.annulee.v1 }
dataschema: { const: 'urn:schema:epargne:instruments:occurrence:1' }
data:
allOf:
- $ref: '#/components/schemas/occurrence'
- type: object
required: [motif]
occurrenceSuspendue:
name: occurrence-suspendue
title: Occurrence suspendue
summary: La suspension de valorisation — source et motif ; le seul état réversible.
contentType: application/cloudevents+json
payload:
allOf:
- $ref: '#/components/schemas/enveloppeCloudEvents'
- type: object
required: [data]
properties:
type: { const: fr.epargne.instruments.occurrence.suspendue.v1 }
dataschema: { const: 'urn:schema:epargne:instruments:occurrence:1' }
data:
allOf:
- $ref: '#/components/schemas/occurrence'
- type: object
required: [motif]
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 stable de l'occurrence — la date ne change jamais sous lui.
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 occurrence chez le producteur, strictement
croissante ; une suspension peut se répéter, la séquence distingue les
faits.
data: true
occurrence:
type: object
required: [occurrence, instrument, date_valorisation, heure_limite, fuseau, statut]
properties:
occurrence: { type: string, description: L'identifiant stable — le sujet du fait, répété dans la charge. }
instrument: { type: string, description: L'identifiant publié. }
date_valorisation:
type: string
format: date
description: La date de valorisation attendue — FIGÉE à la création de l'occurrence.
heure_limite:
type: string
pattern: '^([01][0-9]|2[0-3]):[0-5][0-9]$'
description: L'heure limite de réception des instructions.
fuseau: { type: string, minLength: 1, description: Le fuseau IANA de l'heure limite. }
date_publication_prevue: { type: string, format: date }
date_reglement_prevue: { type: string, format: date }
statut:
type: string
enum: [prevue, confirmee, reportee, annulee, suspendue]
motif:
type: string
description: Obligatoire pour un report, une annulation ou une suspension.
occurrence_remplacante:
type: string
description: Obligatoire pour un report — l'identifiant de l'occurrence nouvelle.
lignage:
type: object
description: Les versions de règles et de calendriers utilisées — l'explicabilité du calcul.