Aller au contenu

demandes-d-execution

Événement (AsyncAPI) — version 0.2.0. Producteur : operations. Consommateurs déclarés : carnet-ordres, banque-flux-financiers, relation-tiers.

CE QUI FRANCHIT LA FRONTIÈRE AVAL DU DOMAINE. « Opérations publie ce qui doit être exécuté ; les domaines aval constatent ce qui a réellement été exécuté. » UNE DEMANDE D’EXÉCUTION N’EST DONC JAMAIS UN COMPTE RENDU D’ÉVÉNEMENT : elle demande, elle ne constate pas, et la publier ne vaut jamais mise à jour de position. Chaque fait EMPORTE OBLIGATION DE TRAITEMENT : zéro consommateur n’est pas un état admissible, c’est une anomalie que la réconciliation détecte.

asyncapi: 3.0.0
info:
title: operations — les demandes 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: >-
CE QUI FRANCHIT LA FRONTIÈRE AVAL DU DOMAINE. « Opérations publie ce qui doit être exécuté ;
les domaines aval constatent ce qui a réellement été exécuté. » UNE DEMANDE D'EXÉCUTION
N'EST DONC JAMAIS UN COMPTE RENDU D'ÉVÉNEMENT : elle demande, elle ne constate pas, et la
publier ne vaut jamais mise à jour de position. Chaque fait EMPORTE OBLIGATION DE TRAITEMENT
: zéro consommateur n'est pas un état admissible, c'est une anomalie que la réconciliation
détecte.
x-producteurs:
- operations
x-consommateurs:
- carnet-ordres
- banque-flux-financiers
- relation-tiers
defaultContentType: application/json
channels:
annoncesDOrdre:
address: operations.annonce-ordre
description: >-
Les annonces d'ordre vers le carnet d'ordres. UN CANAL PAR DESTINATAIRE, et non un
canal unique : les rythmes, les volumétries et les habilitations diffèrent trop — un
rejeu massif d'annonces ne doit pas retarder une demande de paiement.
messages:
annonceDOrdre: { $ref: '#/components/messages/annonceDOrdre' }
annulationDemandee: { $ref: '#/components/messages/annulationDemandee' }
demandesEspeces:
address: operations.demande-especes
description: >-
Les demandes d'encaissement, de paiement et de reversement vers la banque et flux
financiers. Chez elle, une demande d'encaissement donne naissance à un FLUX ATTENDU,
et une demande de paiement à un PAIEMENT — ces objets lui appartiennent.
messages:
demandeDEncaissement: { $ref: '#/components/messages/demandeDEncaissement' }
demandeDePaiement: { $ref: '#/components/messages/demandeDePaiement' }
demandeDeReversement: { $ref: '#/components/messages/demandeDeReversement' }
annulationDemandee: { $ref: '#/components/messages/annulationDemandee' }
demandesDeNotification:
address: operations.demande-notification
description: >-
Les demandes de notification vers la relation tiers. LE MESSAGE NE PORTE AUCUNE
COORDONNÉE : il nomme le destinataire par son identifiant publié et laisse le canal
au domaine qui le détient.
messages:
demandeDeNotification: { $ref: '#/components/messages/demandeDeNotification' }
operations:
publierLesAnnoncesDOrdre:
action: send
channel: { $ref: '#/channels/annoncesDOrdre' }
summary: >-
Opérations exprime le besoin d'une instruction de marché ou de fonds. Le carnet
d'ordres en contrôle l'EXÉCUTABILITÉ — jamais la recevabilité métier, qui est déjà
tranchée.
messages:
- $ref: '#/channels/annoncesDOrdre/messages/annonceDOrdre'
- $ref: '#/channels/annoncesDOrdre/messages/annulationDemandee'
publierLesDemandesDEspeces:
action: send
channel: { $ref: '#/channels/demandesEspeces' }
summary: Faire entrer, décaisser ou reverser des espèces — sans jamais les manipuler.
messages:
- $ref: '#/channels/demandesEspeces/messages/demandeDEncaissement'
- $ref: '#/channels/demandesEspeces/messages/demandeDePaiement'
- $ref: '#/channels/demandesEspeces/messages/demandeDeReversement'
- $ref: '#/channels/demandesEspeces/messages/annulationDemandee'
publierLesDemandesDeNotification:
action: send
channel: { $ref: '#/channels/demandesDeNotification' }
summary: Demander la délivrance d'un message, sans connaître ni canal ni coordonnée.
messages:
- $ref: '#/channels/demandesDeNotification/messages/demandeDeNotification'
components:
messages:
annonceDOrdre:
name: annonce-ordre
title: Annonce d'ordre
summary: Une instruction titres est prête à être exécutée.
contentType: application/json
payload: { $ref: '#/components/schemas/annonceDOrdre' }
demandeDEncaissement:
name: demande-encaissement
title: Demande d'encaissement
summary: Faire entrer ou constater des espèces.
contentType: application/json
payload: { $ref: '#/components/schemas/demandeDEncaissement' }
demandeDePaiement:
name: demande-paiement
title: Demande de paiement
summary: >-
Décaisser un montant vers un bénéficiaire. L'acte amont porte le nom consacré de
MISE EN PAIEMENT ; l'exécution bancaire s'appelle un PAIEMENT et appartient à la
banque.
contentType: application/json
payload: { $ref: '#/components/schemas/demandeDePaiement' }
demandeDeReversement:
name: demande-reversement
title: Demande de reversement
summary: Régler à une administration un prélèvement dû, sur la dette validée par la fiscalité.
contentType: application/json
payload: { $ref: '#/components/schemas/demandeDeReversement' }
demandeDeNotification:
name: demande-notification
title: Demande de notification
summary: Délivrer un message sur un canal autorisé, que le producteur ne connaît pas.
contentType: application/json
payload: { $ref: '#/components/schemas/demandeDeNotification' }
annulationDemandee:
name: annulation-demandee
title: Annulation demandée
summary: >-
UNE DEMANDE NOUVELLE, PAS UN RETRAIT : un message émis ne se dé-publie pas. Elle
cite la demande visée et lui succède. Elle n'a d'effet que si l'exécution n'a pas
eu lieu.
contentType: application/json
payload: { $ref: '#/components/schemas/annulationDemandee' }
schemas:
enveloppe:
type: object
required: [evenementId, typeEvenement, versionContrat, dateEvenement, producteur, operationRef, 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: operations }
sequenceEntite:
type: integer
description: >-
Numéro de séquence PAR ENTITÉ ET PAR PRODUCTEUR — l'assise de la garantie
d'ordre. Rien n'est garanti entre producteurs.
operationRef:
type: string
description: L'identifiant publié de l'opération individuelle qui demande.
operationCollectiveRef: { type: string }
jambeNo:
type: integer
description: La jambe dont la condition de libération est satisfaite.
cleIdempotence:
type: string
description: Clé stable de la demande, distincte de celle du message.
causaliteReference:
type: string
description: >-
Facultative en général, OBLIGATOIRE sur tout fait de compensation.
annonceDOrdre:
allOf:
- $ref: '#/components/schemas/enveloppe'
- type: object
required: [sens, supportRef, supportVersion, dispositifRef, compteRef, origineAvoir]
properties:
sens:
type: string
enum: [SOUSCRIPTION, RACHAT, ECHANGE]
description: >-
TRANSFORMATION n'y figure pas : une opération sur titres de structure n'émet
AUCUN ORDRE — le carnet d'ordres est hors circuit.
supportRef: { type: string }
supportVersion: { type: string }
dispositifRef: { type: string }
compteRef: { type: string }
origineAvoir:
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.
montantCt:
type: integer
format: int64
description: En CENTIMES. Un ordre à montant ou un ordre à quantité, jamais les deux.
quantiteUpm:
type: integer
format: int64
description: En MILLIONIÈMES de part.
dateValeurSouhaitee: { type: string, format: date }
instructionNo: { type: integer }
demandeDEncaissement:
allOf:
- $ref: '#/components/schemas/enveloppe'
- type: object
required: [objet, montantCt, moyen, payeurRef]
properties:
objet: { type: string }
montantCt: { type: integer, format: int64 }
moyen: { type: string }
payeurRef:
type: string
description: Identifiant publié du payeur. JAMAIS un nom, jamais une coordonnée.
mandatRef:
type: string
description: >-
Pour un prélèvement, la référence du mandat exécutable. Le CONSENTEMENT et
son parcours appartiennent à l'épargnant ; le mandat exécutable à la banque.
dateValeurSouhaitee: { type: string, format: date }
demandeDePaiement:
allOf:
- $ref: '#/components/schemas/enveloppe'
- type: object
required: [objet, montantCt, beneficiaireRef, coordonneeRef]
properties:
objet: { type: string }
montantCt:
type: integer
format: int64
description: >-
LE MONTANT EXÉCUTÉ, NET des prélèvements applicables — pas le montant
demandé. Sur un rachat, il n'existe qu'après l'exécution à la valeur
liquidative.
beneficiaireRef: { type: string }
coordonneeRef:
type: string
description: >-
RÉFÉRENCE OPAQUE ET VERSIONNÉE, jamais la valeur. DOUBLE FIGEMENT : Opérations
fige la RÉFÉRENCE au moment engageant, la banque fige la VERSION exécutable à
l'exécution — l'activation d'une version postérieure ne réoriente jamais un
paiement engagé.
differeAu:
type: string
format: date
description: >-
Pour un paiement différé, seule forme qui reste révocable avant son
échéance (R-BFF-ORDRE-DIFFERE-REVOCATION).
demandeDeReversement:
allOf:
- $ref: '#/components/schemas/enveloppe'
- type: object
required: [organismeRef, montantCt, liquidationFiscaleRef]
properties:
organismeRef: { type: string }
montantCt: { type: integer, format: int64 }
liquidationFiscaleRef:
type: string
description: >-
La dette VALIDÉE par la fiscalité. Opérations ne recalcule ni assiette ni
taux, et la banque ne corrige jamais un montant dû.
echeanceLe: { type: string, format: date }
referenceDeclarative: { type: string }
demandeDeNotification:
allOf:
- $ref: '#/components/schemas/enveloppe'
- type: object
required: [destinataireRef, gabarit]
properties:
destinataireRef:
type: string
description: >-
Identifiant publié. LE MESSAGE NE CONTIENT PAS LA COORDONNÉE du
destinataire : le canal appartient au domaine qui le détient.
gabarit: { type: string }
variables:
type: object
description: >-
Les valeurs à insérer. Aucune donnée sensible : un motif de déblocage peut
révéler une situation de santé, de violences ou de surendettement.
additionalProperties: true
annulationDemandee:
allOf:
- $ref: '#/components/schemas/enveloppe'
- type: object
required: [demandeVisee, motif]
properties:
demandeVisee:
type: string
description: La référence de la demande à annuler.
motif:
type: string
description: Codifié. On ne rappelle pas une demande en silence.