Aller au contenu

comptes-rendus-d-operation

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

LES COMPTES RENDUS D’OPÉRATION (CRO) QUE LE DOMAINE PRODUIT : les faits comptables dont il est L’AUTORITÉ — ceux qu’il FIXE LUI-MÊME et que personne d’autre ne constate. CRO DÉSIGNE UNIQUEMENT UNE CATÉGORIE DE CRE — ceux produits par ce domaine — ET JAMAIS UNE ENTITÉ NI UNE TABLE : ce contrat publie des CRE, et « comptes rendus d’opération » nomme la catégorie, pas un objet. Chez le consommateur, l’entité est le CRE quel que soit son producteur, avec l’identifiant de l’opération et de l’instruction d’origine, et une charge utile PHOTOGRAPHIÉE AU GARNISSAGE — un acte de ce domaine. CE QUI RESTE VRAI, et qui est le vrai enjeu de la frontière : le domaine N’INSCRIT AUCUNE ÉCRITURE et ne touche AUCUNE POSITION ; et une DEMANDE D’EXÉCUTION n’est jamais un compte rendu — une intention n’est pas un constat.

asyncapi: 3.0.0
info:
title: operations — les comptes rendus d'opération
version: 0.3.0
x-ruptures:
- >-
0.2.0 → 0.3.0 : propriété retirée — tenant. Isolation forte par tenant : aucun
identifiant de tenant n'est transporté ; l'enveloppe suivie est celle de la
tenue de compte, montée en 0.3 dans le même mouvement.
- >-
0.1.0 → 0.2.0 : le contrat portait UN message, présenté comme l'unique exception à «
Opérations ne produit aucun compte rendu ». Le contrat s'élargit à cinq faits et se
renomme. Aucun consommateur n'était encore branché : la rupture est déclarée, non subie.
description: >-
LES COMPTES RENDUS D'OPÉRATION (CRO) QUE LE DOMAINE PRODUIT : les faits comptables dont il
est L'AUTORITÉ — ceux qu'il FIXE LUI-MÊME et que personne d'autre ne constate. CRO DÉSIGNE
UNIQUEMENT UNE CATÉGORIE DE CRE — ceux produits par ce domaine — ET JAMAIS UNE ENTITÉ NI UNE
TABLE : ce contrat publie des CRE, et « comptes rendus d'opération » nomme la catégorie, pas
un objet. Chez le consommateur, l'entité est le CRE quel que soit son producteur, avec
l'identifiant de l'opération et de l'instruction d'origine, et une charge utile
PHOTOGRAPHIÉE AU GARNISSAGE — un acte de ce domaine. CE QUI RESTE VRAI, et qui est le vrai
enjeu de la frontière : le domaine N'INSCRIT AUCUNE ÉCRITURE et ne touche AUCUNE POSITION ;
et une DEMANDE D'EXÉCUTION n'est jamais un compte rendu — une intention n'est pas un
constat.
x-producteurs:
- operations
x-consommateurs:
- tenue-de-compte
defaultContentType: application/json
channels:
comptesRendusDOperation:
address: operations.cro
description: >-
Canal dédié, et non des messages de plus sur le canal des événements de cycle de vie :
ceux-là décrivent un cycle opérationnel et NE SONT PAS comptabilisables, ceux-ci le sont.
Deux natures, deux contrats, deux canaux — les mêler ouvrirait la porte à une
comptabilisation prématurée. La maille est LE COMPTE : un compte rendu par compte
concerné, jamais un agrégat, parce que la tenue de compte inscrit des écritures par
compte.
messages:
prelevementsAppliques:
$ref: '#/components/messages/prelevementsAppliques'
abondementAcquis:
$ref: '#/components/messages/abondementAcquis'
repartitionArretee:
$ref: '#/components/messages/repartitionArretee'
affectationParDefaut:
$ref: '#/components/messages/affectationParDefaut'
transformationDeclinaison:
$ref: '#/components/messages/transformationDeclinaison'
operations:
publierLesComptesRendusDOperation:
action: send
channel: { $ref: '#/channels/comptesRendusDOperation' }
summary: >-
Constater les faits comptables dont le domaine est l'autorité. Produire un compte rendu
N'EST PAS comptabiliser : la tenue de compte reste seule à interpréter. LES CODES DE TYPE
APPARTIENNENT À SA NOMENCLATURE (cro_type), dont le catalogue reste ouvert jusqu'à la
naissance de ses producteurs.
messages:
- $ref: '#/channels/comptesRendusDOperation/messages/prelevementsAppliques'
- $ref: '#/channels/comptesRendusDOperation/messages/abondementAcquis'
- $ref: '#/channels/comptesRendusDOperation/messages/repartitionArretee'
- $ref: '#/channels/comptesRendusDOperation/messages/affectationParDefaut'
- $ref: '#/channels/comptesRendusDOperation/messages/transformationDeclinaison'
components:
messages:
prelevementsAppliques:
name: cro-prelevements-appliques
title: Prélèvements appliqués à une opération
summary: >-
Les prélèvements retenus sur une opération, en LIGNES PAR TAXE. La fiscalité calcule et
régit ; son anti-périmètre renvoie ici la PERSISTANCE DE LA TRACE, et aucun domaine aval
ne constate le prélèvement — son montant est fixé à la validation.
contentType: application/json
payload: { $ref: '#/components/schemas/croPrelevements' }
abondementAcquis:
name: cro-abondement-acquis
title: Abondement acquis
summary: >-
Le montant d'abondement calculé et figé à la validation. Le moteur est ici et le calcul
est déterministe ; le barème appartient à l'entreprise, mais personne en aval ne
recalcule ni ne constate le montant — c'est une dette de l'entreprise avant d'être une
souscription.
contentType: application/json
payload: { $ref: '#/components/schemas/croAbondement' }
repartitionArretee:
name: cro-repartition-arretee
title: Répartition arrêtée
summary: >-
La quote-part attribuée à un bénéficiaire, au POINT DE NON-RETOUR de l'arrêté. Elle crée
la créance du bénéficiaire AVANT tout encaissement.
contentType: application/json
payload: { $ref: '#/components/schemas/croRepartition' }
affectationParDefaut:
name: cro-affectation-par-defaut
title: Affectation par défaut
summary: >-
L'affectation d'office de sommes qu'aucun choix de porteur ne fonde — donc que personne
d'autre ne peut déclarer.
contentType: application/json
payload: { $ref: '#/components/schemas/croAffectationDefaut' }
transformationDeclinaison:
name: cro-transformation-declinaison
title: Transformation d'une déclinaison
summary: >-
Une position a été transformée par la déclinaison d'une opération sur titres. Le domaine
décline, et PERSONNE D'AUTRE NE LE CONSTATE : le carnet d'ordres est hors circuit, la
tenue de compte n'interprète que ce qu'on lui donne.
contentType: application/json
payload: { $ref: '#/components/schemas/croTransformation' }
schemas:
enveloppe:
type: object
description: >-
L'ENVELOPPE EST CELLE DE LA TENUE DE COMPTE, pas la nôtre : c'est le consommateur qui
fixe la forme de ce qu'il reçoit et déduplique (contrat « enveloppe du compte rendu
d'événement », version 0.3). Nous en remplissons les attributs obligatoires ; `cause`
est facultative en général et OBLIGATOIRE sur la transformation, qui pointe l'événement
d'instrument source.
required: [identifiant, type, version_type, cle_idempotence,
date_fait_generateur, date_valeur, cree_le, cause, charge_utile]
properties:
identifiant:
type: string
description: Identifiant du compte rendu chez son producteur — unique par producteur.
type:
type: string
const: TRANSFORMATION_OST
description: >-
Le seul type que ce contrat produit. Son entrée au catalogue des types de la tenue
de compte est due.
version_type:
type: string
description: Version du schéma de charge utile du type (SemVer).
cle_idempotence:
type: string
description: >-
Clé de déduplication — deux livraisons de la même clé = UNE SEULE
comptabilisation. Composée de l'événement d'instrument, du compte et de la date
d'effet.
entite_sujet:
type: string
description: >-
Optionnelle au contrat d'enveloppe ; nous la renseignons — c'est le compte
transformé.
cause:
type: string
description: >-
L'identifiant du fait causal chez le producteur. OBLIGATOIRE sur la transformation
d'une déclinaison — l'événement d'instrument source —, facultative ailleurs.
reference_extourne:
type: string
description: >-
Présent sur un compte rendu COMPENSATEUR seulement. Un compte rendu émis ne se
corrige pas : il s'extourne.
date_fait_generateur: { type: string, format: date }
date_valeur:
type: string
format: date
description: Obligatoire à l'enveloppe.
cree_le: { type: string, format: date-time }
cree_par: { type: string, const: operations }
croPrelevements:
allOf:
- $ref: '#/components/schemas/enveloppe'
- type: object
required: [charge_utile]
properties:
charge_utile:
type: object
required: [compte_ref, operation_ref, assiette_totale_ct, lignes]
additionalProperties: false
properties:
compte_ref: { type: string }
operation_ref: { type: string }
instruction_ref: { type: string }
liquidation_fiscale_ref:
type: string
description: >-
La décision de la fiscalité, versionnée et justifiée. Elle reste À ELLE :
ce qui voyage ici est la trace de son APPLICATION.
assiette_totale_ct: { type: integer, format: int64 }
lignes:
type: array
minItems: 1
description: >-
LES MONTANTS PAR TAXE SONT DES LIGNES, JAMAIS DES COLONNES — exigence du
consommateur (règle G3 des conventions, et le commentaire de sa table
montant_cro). Chaque ligne est AUTOPORTEUSE : un audit ne rejoue aucun
moteur.
items:
type: object
required: [taxe, assiette_ct, taux_pb, montant_ct, redevable]
additionalProperties: false
properties:
taxe: { type: string }
assiette_ct: { type: integer, format: int64 }
taux_pb:
type: integer
description: Taux en POINTS DE BASE (9,20 % = 920).
montant_ct: { type: integer, format: int64 }
redevable: { type: string, enum: [EPARGNANT, ENTREPRISE] }
reduit_le_net:
type: boolean
description: >-
La distinction qui structure la réconciliation : ce qui réduit le net
et ce qui ne le réduit pas (droits d'entrée à la charge de
l'entreprise).
croAbondement:
allOf:
- $ref: '#/components/schemas/enveloppe'
- type: object
required: [charge_utile]
properties:
charge_utile:
type: object
required: [compte_ref, operation_ref, montant_ct, origine_avoir, bareme_ref, bareme_version]
additionalProperties: false
properties:
compte_ref: { type: string }
operation_ref: { type: string }
montant_ct: { type: integer, format: int64 }
origine_avoir:
type: string
description: ABONDEMENT — elle conditionne l'indisponibilité et le régime fiscal.
bareme_ref:
type: string
description: Le barème publié par l'entreprise, qui en reste le détenteur.
bareme_version: { type: string }
plafond_atteint:
type: boolean
description: >-
Vrai si un écrêtement a joué (R-ABOND-PLAFOND). L'explication détaillée du
calcul reste au journal du domaine — elle n'est pas comptable.
croRepartition:
allOf:
- $ref: '#/components/schemas/enveloppe'
- type: object
required: [charge_utile]
properties:
charge_utile:
type: object
required: [compte_ref, operation_ref, operation_collective_ref, quote_part_ct, origine_avoir]
additionalProperties: false
properties:
compte_ref: { type: string }
operation_ref: { type: string }
operation_collective_ref: { type: string }
entreprise_ref: { type: string }
exercice: { type: integer }
quote_part_ct: { type: integer, format: int64 }
origine_avoir: { type: string }
croAffectationDefaut:
allOf:
- $ref: '#/components/schemas/enveloppe'
- type: object
required: [charge_utile]
properties:
charge_utile:
type: object
required: [compte_ref, operation_ref, montant_ct, dispositif_ref, support_ref, regle_ref]
additionalProperties: false
properties:
compte_ref: { type: string }
operation_ref: { type: string }
montant_ct: { type: integer, format: int64 }
dispositif_ref: { type: string }
support_ref: { type: string }
origine_avoir: { type: string }
regle_ref:
type: string
description: >-
La règle qui fonde l'affectation d'office. Aucun choix de porteur ne la
fonde : c'est pourquoi personne d'autre ne peut la déclarer.
croTransformation:
allOf:
- $ref: '#/components/schemas/enveloppe'
- type: object
required: [charge_utile]
properties:
charge_utile: { $ref: '#/components/schemas/chargeUtileTransformation' }
chargeUtileTransformation:
type: object
description: >-
DES QUANTITÉS, PAS DES VALEURS : aucune valeur liquidative recopiée — la tenue de
compte a la sienne. Et LA MÉMOIRE TRANSPORTÉE EST DANS LE MESSAGE, PAS DÉDUITE : c'est
ce qui rend la transformation prouvablement NEUTRE. Sans les échéances et l'origine
reportées, l'antériorité serait perdue et le régime fiscal faussé — un compte rendu de
transformation qui n'emporterait qu'une quantité serait inutilisable.
required: [compte_ref, operation_ref, instrument_absorbe_ref, instrument_attribue_ref,
parts_absorbees_upm, parts_attribuees_upm, memoire_transportee]
additionalProperties: false
properties:
compte_ref:
type: string
description: Le compte transformé — identifiant publié.
operation_ref:
type: string
description: L'opération individuelle de déclinaison qui a produit ce fait.
operation_collective_ref: { type: string }
instrument_absorbe_ref: { type: string }
instrument_attribue_ref: { type: string }
parts_absorbees_upm:
type: integer
format: int64
description: Quantité en MILLIONIÈMES de part. Jamais de flottant.
parts_attribuees_upm: { type: integer, format: int64 }
parite_numerateur: { type: integer }
parite_denominateur: { type: integer }
rompu_regle_ct:
type: integer
format: int64
description: >-
La fraction de part qui n'a pu être attribuée, réglée en espèces (centimes). Nulle
quand la parité tombe juste.
sous_mesure_ordonnee:
type: boolean
description: >-
Le drapeau n'est pas là pour que la tenue de compte décide quoi que ce soit — elle
n'a rien à décider —, mais pour qu'elle sache que la position d'arrivée est elle
aussi sous mesure, et que son écrêtement doit le refléter SANS ATTENDRE un second
message. Le motif de la mesure ne circule jamais.
memoire_transportee:
type: array
minItems: 1
description: >-
Ce que la transformation REPORTE de la position source vers la position cible.
C'est la preuve de la neutralité, et c'est pourquoi le tableau ne peut pas être
vide.
items:
type: object
required: [origine_avoir, echeance_du, parts_upm]
additionalProperties: false
properties:
origine_avoir:
type: string
description: >-
L'origine reportée — elle conditionne l'indisponibilité et le régime fiscal,
et la tenue de compte l'inscrit dans le lot de droits.
compartiment: { type: string }
echeance_du:
type: string
format: date
description: L'échéance de disponibilité reportée, jamais recalculée.
parts_upm: { type: integer, format: int64 }