Aller au contenu

comptes-rendus-d-execution

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

LES FAITS COMPTABLES DONT LE DOMAINE EST L’AUTORITÉ. Le carnet d’ordres constate L’EXÉCUTION D’UN ORDRE, et personne d’autre ne la constate. CE SONT DES CRE, JAMAIS DES CRO : le mot « compte rendu d’opération » désigne uniquement la catégorie des CRE produits par le domaine Opérations. LE DOMAINE N’INSCRIT AUCUNE ÉCRITURE et ne touche AUCUNE POSITION : produire un compte rendu n’est pas comptabiliser, et la tenue de compte reste seule à interpréter. LA MAILLE EST LE COMPTE — aucun compte rendu agrégé n’existe, ce qui rend structurel l’interdit de double incidence.

asyncapi: 3.0.0
info:
title: carnet-ordres — les comptes rendus d'exécution
version: 0.2.0
x-ruptures:
- version: 0.2.0
rupture: "propriété retirée : tenant"
motif: >-
Isolation forte par tenant — aucun identifiant de tenant n'est transporté ;
l'appartenance est celle de l'installation (précédent instruments 0.4.0).
description: >-
LES FAITS COMPTABLES DONT LE DOMAINE EST L'AUTORITÉ. Le carnet d'ordres constate L'EXÉCUTION
D'UN ORDRE, et personne d'autre ne la constate. CE SONT DES CRE, JAMAIS DES CRO : le mot «
compte rendu d'opération » désigne uniquement la catégorie des CRE produits par le domaine
Opérations. LE DOMAINE N'INSCRIT AUCUNE ÉCRITURE et ne touche AUCUNE POSITION : produire un
compte rendu n'est pas comptabiliser, et la tenue de compte reste seule à interpréter. LA
MAILLE EST LE COMPTE — aucun compte rendu agrégé n'existe, ce qui rend structurel l'interdit
de double incidence.
x-producteurs:
- carnet-ordres
x-consommateurs:
- tenue-de-compte
defaultContentType: application/json
channels:
comptesRendusDExecution:
address: carnet-ordres.compte-rendu-execution
description: >-
Les comptes rendus d'exécution vers la tenue de compte. SEUL CANAL COMPTABILISABLE DU
DOMAINE : les retours vers Opérations et les obligations de règlement vers la banque
ont leurs propres canaux, et les mêler ouvrirait la porte à une comptabilisation
prématurée.
messages:
souscriptionExecutee: { $ref: '#/components/messages/souscriptionExecutee' }
rachatExecute: { $ref: '#/components/messages/rachatExecute' }
achatTitresExecute: { $ref: '#/components/messages/achatTitresExecute' }
venteTitresExecutee: { $ref: '#/components/messages/venteTitresExecutee' }
executionRegularisee: { $ref: '#/components/messages/executionRegularisee' }
operations:
publierLesComptesRendusDExecution:
action: send
channel: { $ref: '#/channels/comptesRendusDExecution' }
summary: >-
Attester un fait définitif d'exécution, selon une RÈGLE DE FINALITÉ VERSIONNÉE portée
par le profil de chaîne — allocation individuelle arrêtée sur une chaîne fonds,
dénouement titres prononcé sur une chaîne de livraison.
messages:
- $ref: '#/channels/comptesRendusDExecution/messages/souscriptionExecutee'
- $ref: '#/channels/comptesRendusDExecution/messages/rachatExecute'
- $ref: '#/channels/comptesRendusDExecution/messages/achatTitresExecute'
- $ref: '#/channels/comptesRendusDExecution/messages/venteTitresExecutee'
- $ref: '#/channels/comptesRendusDExecution/messages/executionRegularisee'
components:
messages:
souscriptionExecutee:
name: souscription-executee
title: Souscription exécutée
summary: Des parts ont été définitivement attribuées à un compte contre un montant investi.
contentType: application/json
payload: { $ref: '#/components/schemas/creDeFonds' }
rachatExecute:
name: rachat-execute
title: Rachat exécuté
summary: Des parts ont été définitivement rachetées et le produit brut est déterminé.
contentType: application/json
payload: { $ref: '#/components/schemas/creDeFonds' }
achatTitresExecute:
name: achat-titres-execute
title: Achat de titres exécuté
summary: Un achat de titres est exécuté et livré.
contentType: application/json
payload: { $ref: '#/components/schemas/creDeTitres' }
venteTitresExecutee:
name: vente-titres-executee
title: Vente de titres exécutée
summary: Une vente de titres est exécutée et livrée.
contentType: application/json
payload: { $ref: '#/components/schemas/creDeTitres' }
executionRegularisee:
name: execution-regularisee
title: Exécution régularisée
summary: >-
Correction d'une exécution antérieure — valeur liquidative corrigée, quantité ou
frais. UN COMPTE RENDU PUBLIÉ N'EST JAMAIS CORRIGÉ EN PLACE : c'est un FAIT NOUVEAU
qui référence le précédent et porte la DIFFÉRENCE SIGNÉE.
contentType: application/json
payload: { $ref: '#/components/schemas/creDeRegularisation' }
schemas:
enveloppe:
description: >-
L'ENVELOPPE EST CELLE DE LA TENUE DE COMPTE (contrat cre-enveloppe 0.3), PAS LA NÔTRE :
c'est le consommateur qui fixe la forme de ce qu'il reçoit et déduplique. DEUX DE SES
CHAMPS RESTENT VIDES POUR CE PRODUCTEUR : dispositif_ref et dispositif_version, que le
carnet ne reçoit pas et n'inventera pas — les Opérations les servent sur leur propre
catégorie, pour le même lot de droits. reservation_ref reste vide aussi : la réservation
de l'enveloppe est une réservation de DROITS chez la tenue de compte, la nôtre est
l'immobilisation d'une quantité pendant l'exécution, et elle ne franchit aucune
frontière.
type: object
required: [identifiant, type, version_type, cle_idempotence,
date_fait_generateur, date_valeur, cree_le, cree_par]
properties:
identifiant:
type: string
description: Identifiant du compte rendu chez son producteur — unique par producteur.
type:
type: string
enum: [CO-SOUSCRIPTION-EXECUTEE, CO-RACHAT-EXECUTE, CO-ACHAT-TITRES-EXECUTE,
CO-VENTE-TITRES-EXECUTEE, CO-EXECUTION-REGULARISEE]
description: >-
Code du type, appartenant à la NOMENCLATURE type_cre DE LA TENUE DE COMPTE, dont le
CATALOGUE DES TYPES posait la catégorie « carnet-ordres » en attendant la naissance
de ce contrat. Chaque code y déclare son AXE TEMPOREL DE SÉLECTION du schéma
comptable et sa RÈGLE D'IDEMPOTENCE : ils ne sont plus uniformes depuis l'enveloppe
0.2. Proposition à CONTRESIGNER par une session de la tenue de compte — le
producteur nomme, le consommateur arrête.
version_type: { type: string, description: 'Version SemVer du schéma de charge utile du type.' }
cle_idempotence:
type: string
description: >-
Clé de déduplication stable. Deux livraisons de la même clé = UNE SEULE
comptabilisation. Forme retenue : « <execution>:allocation:<instruction> ».
entite_sujet:
type: string
description: Facultative — l'ordre individuel dont le compte rendu relate le fait.
sequence_entite: { type: integer }
cause:
type: string
description: Identifiant de l'événement causal chez le producteur (traçabilité).
reference_extourne:
type: string
description: >-
OBLIGATOIRE sur un compte rendu compensateur, ABSENT sinon. Un compte rendu émis
NE SE CORRIGE PAS : il s'extourne.
date_fait_generateur: { type: string, format: date }
date_effet:
type: string
format: date
description: >-
0.2 — la date à laquelle le fait est réputé modifier les droits, quand elle
diffère du fait générateur. Sur une chaîne titres, c'est la DATE DE DÉNOUEMENT.
date_valeur: { type: string, format: date }
cree_le: { type: string, format: date-time }
cree_par: { type: string, const: carnet-ordres }
referencesDOrigine:
type: object
required: [operation_ref, instruction_ref, compte_ref, support_ref, support_version,
origine_avoir, ordre_ref]
properties:
operation_ref:
type: string
description: Identifiant publié de l'opération d'origine (domaine Opérations).
instruction_ref:
type: string
description: >-
Identifiant publié de l'instruction d'origine. LE DÉPOUILLEMENT EST EXACT : chaque
compte rendu désigne l'instruction qu'il sert, jamais un agrégat.
ordre_ref: { type: string, description: 'Identifiant publié de l''ordre individuel chez le carnet.' }
compte_ref: { type: string }
support_ref:
type: string
description: >-
LE SUPPORT SEUL, JAMAIS LE DISPOSITIF. Une instruction est, chez Opérations, un
couple dispositif × support ; seul le support franchit la frontière du carnet. Le
dispositif et sa version restent chez Opérations et gagnent la comptabilité par LEUR
canal — le trajet est Entreprise → Opérations → compte rendu → lot de droits.
support_version: { type: string }
origine_avoir:
type: string
description: >-
Transmise parce que la tenue de compte l'inscrira dans le LOT DE DROITS : c'est
elle qui conditionne l'indisponibilité et le régime fiscal. DEUX ORIGINES
DISTINCTES SUR UN MÊME SUPPORT SONT DEUX COMPTES RENDUS, jamais un seul.
ligneDeFrais:
type: object
required: [nature, montant_ct]
properties:
nature:
type: string
enum: [DROITS_ENTREE, DROITS_SORTIE, FRAIS_BOURSE, COMMISSION, TAXE_TRANSACTION]
montant_ct: { type: integer, format: int64 }
taux_pb: { type: integer, description: 'Taux appliqué en points de base, quand il existe.' }
source:
type: string
description: >-
D'où vient la donnée — la place, le référentiel des instruments, le calcul du
carnet. Le carnet NE RECALCULE PAS un coût rendu par une autorité externe.
creDeFonds:
allOf:
- $ref: '#/components/schemas/enveloppe'
- type: object
required: [charge_utile]
properties:
charge_utile:
allOf:
- $ref: '#/components/schemas/referencesDOrigine'
- type: object
required: [quantite_upm, montant_brut_ct, vl_ue6, date_vl, devise,
finalite_version, execution_ref]
properties:
quantite_upm:
type: integer
format: int64
description: >-
Quantité de parts en MILLIONIÈMES. Fil rouge de la campagne :
68 517 956 (68,517956 parts) pour l'intéressement de Camille
Roussel, 11 851 755 pour son abondement.
montant_brut_ct:
type: integer
format: int64
description: 'Montant brut en CENTIMES. Fil rouge : 167055 et 28896.'
vl_ue6:
type: integer
format: int64
description: >-
Valeur liquidative appliquée, en MICRO-EUROS. Fil rouge :
24381200 (24,3812 €). Le carnet NE FABRIQUE JAMAIS un prix absent.
date_vl: { type: string, format: date }
rang_vl:
type: integer
description: >-
Rang de la valeur liquidative chez instruments — le rang le plus élevé
fait foi. Une correction publie un rang supérieur et produit une
RÉGULARISATION, jamais une réécriture.
devise: { type: string }
frais:
type: array
description: >-
LES FRAIS SONT DES LIGNES, JAMAIS DES COLONNES : une nature nouvelle
est une ligne, aucun changement de schéma. Tableau vide = NÉANT, qui
est un RÉSULTAT et non une absence d'information.
items: { $ref: '#/components/schemas/ligneDeFrais' }
execution_ref: { type: string }
allocation_ref: { type: string }
finalite_version:
type: string
description: >-
Version de la RÈGLE DE FINALITÉ qui a autorisé la publication. Un
compte rendu publié « parce qu'on avait l'information » n'existe pas.
partielle:
type: boolean
description: >-
Vrai quand ce compte rendu atteste UNE TRANCHE d'un ordre non
entièrement servi. Il reste DÉFINITIF POUR SA TRANCHE ; d'autres
suivront, sur d'autres valeurs liquidatives, avec leurs propres clés.
creDeTitres:
allOf:
- $ref: '#/components/schemas/enveloppe'
- type: object
required: [charge_utile]
properties:
charge_utile:
allOf:
- $ref: '#/components/schemas/referencesDOrigine'
- type: object
required: [quantite_upm, montant_brut_ct, prix_moyen_ue6, devise,
finalite_version, execution_ref]
properties:
quantite_upm: { type: integer, format: int64 }
montant_brut_ct: { type: integer, format: int64 }
prix_moyen_ue6: { type: integer, format: int64 }
prix_elementaires:
type: array
description: >-
LES PRIX ÉLÉMENTAIRES SONT CONSERVÉS même si un prix moyen est
calculé pour la restitution : un prix moyen ne remplace jamais ses
composants.
items:
type: object
required: [quantite_upm, prix_ue6]
properties:
quantite_upm: { type: integer, format: int64 }
prix_ue6: { type: integer, format: int64 }
lieu_execution: { type: string }
devise: { type: string }
frais:
type: array
items: { $ref: '#/components/schemas/ligneDeFrais' }
execution_ref: { type: string }
date_denouement: { type: string, format: date }
finalite_version: { type: string }
creDeRegularisation:
allOf:
- $ref: '#/components/schemas/enveloppe'
- type: object
required: [charge_utile]
properties:
charge_utile:
allOf:
- $ref: '#/components/schemas/referencesDOrigine'
- type: object
required: [difference_quantite_upm, difference_montant_ct, motif,
autorite, date_connaissance, finalite_version]
properties:
difference_quantite_upm:
type: integer
format: int64
description: >-
LA DIFFÉRENCE SIGNÉE en millionièmes de part, jamais la nouvelle
valeur absolue : la tenue de compte extourne puis réinscrit, elle ne
recalcule pas.
difference_montant_ct: { type: integer, format: int64 }
vl_corrigee_ue6: { type: integer, format: int64 }
rang_vl: { type: integer }
motif:
type: string
description: >-
Codifié. Une correction sans motif n'existe pas — la contrainte est
portée jusque dans le schéma du producteur.
autorite:
type: string
description: Qui a décidé la correction — la source, jamais le carnet seul.
date_connaissance: { type: string, format: date }
frais:
type: array
items: { $ref: '#/components/schemas/ligneDeFrais' }
finalite_version: { type: string }