Aller au contenu

evenement-de-negociabilite

Événement (AsyncAPI) — version 0.2.0. Producteur : instruments. Consommateurs déclarés : carnet-ordres, operations.

Les faits des restrictions de négociabilité — posée, levée. Hors cycle de vie : une restriction touche des capacités (souscription, rachat…), jamais l’état de l’instrument. Enveloppe CloudEvents 1.0.2 en mode structuré JSON ; aucun identifiant de tenant n’est transporté. Unicité du fait : (restriction, type_de_fait).

asyncapi: 3.0.0
info:
title: instruments — l'événement de négociabilité
version: 0.2.0
x-ruptures:
- version: 0.2.0
rupture: "propriété retirée : data.categorie ; la portée se réduit à (instrument, vehicule)"
motif: >-
Fusion arbitrée le 2026-08-13 (journal des décisions) : une catégorie de parts
différenciée EST un instrument — une restriction propre à une catégorie se pose
sur son instrument.
description: >-
Les faits des restrictions de négociabilité — posée, levée. Hors cycle de vie :
une restriction touche des capacités (souscription, rachat…), jamais l'état de
l'instrument. Enveloppe CloudEvents 1.0.2 en mode structuré JSON ; aucun
identifiant de tenant n'est transporté. Unicité du fait :
(restriction, type_de_fait).
x-producteurs:
- instruments
x-consommateurs:
- composant: carnet-ordres
- composant: operations
defaultContentType: application/cloudevents+json
channels:
negociabilite:
address: instruments.negociabilite
description: >-
Canal logique des restrictions de négociabilité. L'ordre n'est garanti que par
producteur (sequence strictement croissante par instrument), jamais entre
producteurs.
messages:
restrictionPosee:
$ref: '#/components/messages/restrictionPosee'
restrictionLevee:
$ref: '#/components/messages/restrictionLevee'
operations:
publierLaNegociabilite:
action: send
channel:
$ref: '#/channels/negociabilite'
summary: La pose et la levée publient leur fait au moment où elles prennent effet, retenu en boîte d'envoi.
messages:
- $ref: '#/channels/negociabilite/messages/restrictionPosee'
- $ref: '#/channels/negociabilite/messages/restrictionLevee'
components:
messages:
restrictionPosee:
name: restriction-posee
title: Restriction posée
contentType: application/cloudevents+json
payload:
allOf:
- $ref: '#/components/schemas/enveloppeCloudEvents'
- type: object
required: [data]
properties:
type: { const: fr.epargne.instruments.restriction.posee.v1 }
dataschema: { const: 'urn:schema:epargne:instruments:restriction:1' }
data: { $ref: '#/components/schemas/restriction' }
restrictionLevee:
name: restriction-levee
title: Restriction levée
summary: La levée borne la période — la restriction reste lisible à jamais.
contentType: application/cloudevents+json
payload:
allOf:
- $ref: '#/components/schemas/enveloppeCloudEvents'
- type: object
required: [data]
properties:
type: { const: fr.epargne.instruments.restriction.levee.v1 }
dataschema: { const: 'urn:schema:epargne:instruments:restriction:1' }
data:
allOf:
- $ref: '#/components/schemas/restriction'
- 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'instrument dont la négociabilité change.
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 instrument chez le producteur, strictement croissante.
data: true
restriction:
type: object
required: [restriction, instrument, type_restriction, capacites_touchees, du]
properties:
restriction: { type: string, description: L'identifiant de la restriction — le fait de levée le référence. }
instrument: { type: string, description: L'identifiant publié — répété depuis le sujet. }
type_restriction:
type: string
enum: [ferme_aux_souscriptions, ferme_aux_rachats, suspendu, ferme_aux_nouveaux_versements]
capacites_touchees:
type: array
minItems: 1
items:
type: string
enum: [souscription, rachat, arbitrage_entrant, arbitrage_sortant, transfert, affectation_ccb]
portee:
type: string
enum: [instrument, vehicule]
default: instrument
du: { type: string, format: date }
heure_effet: { type: string, pattern: '^([01][0-9]|2[0-3]):[0-5][0-9]$' }
fuseau: { type: string, description: Le fuseau IANA de l'heure d'effet. }
au: { type: string, format: date, description: La borne de levée, exclue — portée par le fait de levée. }
source:
type: string
enum: [document, saisie, flux_de_place]
description: D'où la restriction est établie.
urgence: { type: boolean, description: Posée par le circuit d'urgence — la validation a posteriori est en cours. }
motif:
type: string
description: Le motif, quand il circule — celui d'une mesure de conformité ne circule jamais.