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).
La spécification
Section intitulée « La spécification »asyncapi: 3.0.0info: 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+jsonchannels: 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.