obligations-de-reglement
Événement (AsyncAPI) — version 0.2.0. Producteur : carnet-ordres. Consommateurs déclarés : banque-flux-financiers.
LES MOUVEMENTS D’ESPÈCES QUE L’EXÉCUTION D’UN ORDRE REND DUS. UNE OBLIGATION DE RÈGLEMENT EST UNE DEMANDE, JAMAIS UN CONSTAT : elle ne vaut ni mouvement, ni écriture, ni position. Le carnet ATTESTE LES TITRES, la banque ATTESTE LES ESPÈCES, et aucun ne se déduit de l’autre. AUCUNE OBLIGATION N’EST PUBLIÉE AVANT L’EXÉCUTION QUI LA FONDE — une intention n’est pas un fait générateur.
La spécification
Section intitulée « La spécification »asyncapi: 3.0.0info: title: carnet-ordres — les obligations de règlement 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 MOUVEMENTS D'ESPÈCES QUE L'EXÉCUTION D'UN ORDRE REND DUS. UNE OBLIGATION DE RÈGLEMENT EST UNE DEMANDE, JAMAIS UN CONSTAT : elle ne vaut ni mouvement, ni écriture, ni position. Le carnet ATTESTE LES TITRES, la banque ATTESTE LES ESPÈCES, et aucun ne se déduit de l'autre. AUCUNE OBLIGATION N'EST PUBLIÉE AVANT L'EXÉCUTION QUI LA FONDE — une intention n'est pas un fait générateur. x-producteurs: - carnet-ordres x-consommateurs: - banque-flux-financiersdefaultContentType: application/json
channels:
obligationsDeReglement: address: carnet-ordres.obligation-reglement description: >- Les obligations de règlement vers la banque et flux financiers. UN CANAL PROPRE : les retours vers Opérations et les comptes rendus vers la tenue de compte ont les leurs — trois consommateurs, trois rythmes, trois canaux. messages: reglementSouscriptionDu: { $ref: '#/components/messages/reglementSouscriptionDu' } produitRachatAttendu: { $ref: '#/components/messages/produitRachatAttendu' } reglementTransactionDu: { $ref: '#/components/messages/reglementTransactionDu' } obligationAnnulee: { $ref: '#/components/messages/obligationAnnulee' }
operations:
publierLesObligationsDeReglement: action: send channel: { $ref: '#/channels/obligationsDeReglement' } summary: >- Annoncer les espèces dues à la place au titre d'une exécution. Le carnet NE DEMANDE JAMAIS UN PAIEMENT À UN ÉPARGNANT : cela reste au domaine Opérations. messages: - $ref: '#/channels/obligationsDeReglement/messages/reglementSouscriptionDu' - $ref: '#/channels/obligationsDeReglement/messages/produitRachatAttendu' - $ref: '#/channels/obligationsDeReglement/messages/reglementTransactionDu' - $ref: '#/channels/obligationsDeReglement/messages/obligationAnnulee'
components:
messages:
reglementSouscriptionDu: name: reglement-souscription-du title: Règlement de souscription dû summary: Des espèces sont à verser au fonds ou à la contrepartie au titre d'une souscription exécutée. contentType: application/json payload: { $ref: '#/components/schemas/obligation' }
produitRachatAttendu: name: produit-rachat-attendu title: Produit de rachat attendu summary: Des espèces sont attendues en encaissement au titre d'un rachat exécuté. contentType: application/json payload: { $ref: '#/components/schemas/obligation' }
reglementTransactionDu: name: reglement-transaction-du title: Règlement de transaction dû summary: >- Les espèces d'un achat ou d'une vente de titres, dans un dénouement livraison contre paiement ou franco. contentType: application/json payload: { $ref: '#/components/schemas/obligation' }
obligationAnnulee: name: obligation-annulee title: Obligation annulée summary: >- UNE DEMANDE NOUVELLE, PAS UN RETRAIT : un message émis ne se dé-publie pas. Elle cite l'obligation visée et lui succède. contentType: application/json payload: { $ref: '#/components/schemas/obligationAnnulee' }
schemas:
enveloppe: type: object required: [evenementId, typeEvenement, versionContrat, dateEvenement, producteur, obligationRef, cleIdempotence] properties: evenementId: type: string description: >- Identifiant unique — LA CLÉ D'IDEMPOTENCE DES CONSOMMATEURS. La livraison est au moins une fois : le rejeu ne doit produire qu'un effet. typeEvenement: { type: string } versionContrat: { type: string } dateEvenement: { type: string, format: date-time } producteur: { type: string, const: carnet-ordres } sequenceEntite: { type: integer } obligationRef: type: string description: >- L'identifiant de l'obligation. C'EST LUI QUI CORRÈLE LES DEUX VOLETS : le suspens espèces chez la banque et le suspens de dénouement chez le carnet le citent tous deux. cleIdempotence: { type: string }
obligation: allOf: - $ref: '#/components/schemas/enveloppe' - type: object required: [sens, montantCt, devise, contrepartieRef, dateReglementAttendue, centralisationRef, nbOrdresCouverts, executionRef] properties: sens: type: string enum: [DECAISSEMENT, ENCAISSEMENT] description: >- DECAISSEMENT pour une souscription ou un achat, ENCAISSEMENT pour un rachat ou une vente — vu depuis le teneur de compte. montantCt: type: integer format: int64 description: >- En CENTIMES. LE MONTANT N'EXISTAIT PAS AVANT L'EXÉCUTION : c'est exactement pour cela que la jambe espèces d'un rachat suit la jambe titres, et non l'inverse. Fil rouge de la campagne : 51227644 (512 276,44 €). devise: { type: string } contrepartieRef: type: string description: >- Identifiant publié de la contrepartie de place. AUCUNE COORDONNÉE BANCAIRE ICI : la coordonnée exécutable appartient à la banque, qui la résout et la fige à l'exécution. dateReglementAttendue: type: string format: date description: >- Dérivée de la date de centralisation par le profil de chaîne, et BORNÉE : dix jours ouvrés au plus entre centralisation et règlement-livraison (R-ORDRE-DELAI-REGLEMENT). centralisationRef: type: string description: >- LA MAILLE EST L'OBLIGATION, PAS L'ORDRE : un virement par centralisation et par contrepartie, non un par porteur — c'est ainsi que le règlement se fait. nbOrdresCouverts: type: integer description: >- Le nombre d'ordres individuels couverts, POUR CONTRÔLE. Le message ne porte jamais leur détail : la banque n'a pas à connaître les porteurs. executionRef: { type: string } supportRef: { type: string } dateVl: { type: string, format: date } profilReglement: type: string description: >- Le profil de dénouement qui dit quelles preuves sont exigées : FONDS_COMPTE_EMISSION, LIVRAISON_CONTRE_PAIEMENT, LIVRAISON_FRANCO, GRE_A_GRE.
obligationAnnulee: allOf: - $ref: '#/components/schemas/enveloppe' - type: object required: [obligationVisee, motif] properties: obligationVisee: { type: string } motif: type: string description: 'Codifié. On ne rappelle pas une obligation en silence.'