Aller au contenu

administration-des-calendriers

Interface synchrone (OpenAPI) — version 0.1.0. Producteur : instruments. Consommateurs déclarés : backoffice, alimentation-documentaire.

Les portes d’écriture des calendriers. Un établissement crée une demande de validation (contrat administration-du-referentiel — quatre yeux, valideur distinct du préparateur) ; l’exception d’urgence prend effet immédiatement, sa demande se valide a posteriori avec échéance de revue. La publication d’une version validée recalcule les horizons et publie ses impacts (contrat evenement-de-valorisation-prevue), sans réécrire une décision passée. Tout ou rien : un rejet (422, motivé) ne retient rien. Le teneur de compte ne se donne jamais dans l’adresse.

openapi: 3.1.0
info:
title: instruments — administration des calendriers
version: 0.1.0
x-ruptures: []
summary: >-
Référencer un calendrier, préparer une version immuable, saisir une exception —
d'urgence au besoin —, mesurer l'impact avant publication.
description: >-
Les portes d'écriture des calendriers. Un établissement crée une demande de
validation (contrat administration-du-referentiel — quatre yeux, valideur distinct
du préparateur) ; l'exception d'urgence prend effet immédiatement, sa demande se
valide a posteriori avec échéance de revue. La publication d'une version validée
recalcule les horizons et publie ses impacts (contrat
evenement-de-valorisation-prevue), sans réécrire une décision passée. Tout ou
rien : un rejet (422, motivé) ne retient rien. Le teneur de compte ne se donne
jamais dans l'adresse.
x-producteurs:
- instruments
x-consommateurs:
- composant: backoffice
- composant: alimentation-documentaire
paths:
/calendriers:
post:
operationId: referencerUnCalendrier
summary: Référencer un calendrier — l'identité durable, sans version.
security:
- authentification: [instruments:administration]
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [nom, type, fuseau]
properties:
nom: { type: string, minLength: 1 }
type:
type: string
enum: [place_de_negociation, jours_feries, contractuel_de_fonds, fonds_maitre,
reglement_livraison, paiement, fenetre_liquidite_non_cote,
operationnel_de_service, interets_ccb, remboursement_ccb]
description: Des natures non substituables entre elles.
fuseau: { type: string, minLength: 1, description: Le fuseau IANA de référence. }
perimetre: { type: string }
autorite: { type: string, description: L'autorité responsable des jours et des exceptions. }
provenance: { $ref: '#/components/schemas/Provenance' }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamille' }
'422': { $ref: '#/components/responses/rejete' }
/calendriers/{calendrier}/versions:
post:
operationId: preparerUneVersion
summary: Préparer une version — immuable une fois publiée ; la validation la publie.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/calendrier'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [valide_du, regle_jour_ouvre]
properties:
valide_du: { type: string, format: date }
valide_au: { type: string, format: date, description: La borne de fin, exclue — absente si la validité court. }
regle_jour_ouvre:
type: object
required: [jours_ouvres]
properties:
jours_ouvres:
type: array
minItems: 1
items: { type: string, enum: [lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche] }
jours_feries_reference: { type: string, description: Le calendrier de jours fériés référencé, le cas échéant. }
politique_demi_seance: { type: string }
preuves:
type: array
items: { type: string }
provenance: { $ref: '#/components/schemas/Provenance' }
responses:
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamille' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/calendriers/{calendrier}/exceptions:
post:
operationId: saisirUneException
summary: Saisir une exception — sourcée, datée de sa connaissance ; l'urgence s'applique immédiatement.
description: >-
Une exception ordinaire crée une demande de validation. Une exception
d'URGENCE (fermeture décidée en séance) prend effet immédiatement, recalcule
les occurrences futures, publie ses impacts — les ordres déjà affectés se
signalent chez leurs domaines par les faits publiés — et ouvre la demande a
posteriori, avec échéance de revue obligatoire.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/calendrier'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [date, nature, source, connue_le]
properties:
date: { type: string, format: date, description: La date visée. }
nature:
type: string
enum: [fermeture, ouverture_exceptionnelle, demi_seance, changement_heure_limite, statut_incertain]
heure_limite_modifiee: { type: string, pattern: '^([01][0-9]|2[0-3]):[0-5][0-9]$' }
motif: { type: string }
source: { type: string, minLength: 1 }
connue_le: { type: string, format: date, description: La date de connaissance — distincte de la date visée. }
urgence: { type: boolean, default: false }
echeance_de_revue: { type: string, format: date, description: Obligatoire quand urgence est vrai, ou pour un statut incertain. }
responses:
'201':
description: URGENCE — l'exception est en vigueur, les impacts sont publiés ; la demande a posteriori est créée.
content:
application/json:
schema:
type: object
required: [exception, demande]
properties:
exception: { type: string }
demande: { type: string }
echeance_de_revue: { type: string, format: date }
'202': { $ref: '#/components/responses/demandeCreee' }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamille' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
/calendriers/{calendrier}/analyses-d-impact:
post:
operationId: mesurerLImpact
summary: Mesurer l'impact d'une version en préparation — une lecture calculée, rien n'est publié.
security:
- authentification: [instruments:administration]
parameters:
- $ref: '#/components/parameters/calendrier'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [version]
properties:
version: { type: string, description: La version en préparation à mesurer. }
horizon_jours: { type: integer, minimum: 1, maximum: 730, default: 90 }
responses:
'200':
description: L'impact mesuré sur l'horizon.
content:
application/json:
schema:
type: object
required: [version, fonds_touches, occurrences]
properties:
version: { type: string }
fonds_touches:
type: array
items:
type: object
required: [instrument, directe]
properties:
instrument: { type: string }
libelle: { type: string }
directe: { type: boolean, description: Faux quand l'impact passe par le fonds maître. }
occurrences:
type: object
properties:
ajoutees: { type: integer }
supprimees: { type: integer }
reportees: { type: integer }
heures_limites_deplacees: { type: integer }
'400': { $ref: '#/components/responses/irrecevable' }
'401': { $ref: '#/components/responses/sansIdentite' }
'403': { $ref: '#/components/responses/horsFamille' }
'404': { $ref: '#/components/responses/inconnu' }
'422': { $ref: '#/components/responses/rejete' }
components:
parameters:
calendrier:
name: calendrier
in: path
required: true
schema: { type: string, minLength: 1 }
securitySchemes:
authentification:
type: http
scheme: bearer
description: >-
Tout appel est authentifié (401) et autorisé par famille d'accès (403) — la famille en
portée, sous la forme instruments:famille.
responses:
demandeCreee:
description: La demande de validation est créée — l'effet attend sa validation (contrat administration-du-referentiel).
content:
application/json:
schema:
type: object
required: [demande, objet]
properties:
demande: { type: string }
objet: { type: string, enum: [referencement, version_de_calendrier, exception_de_calendrier] }
cible: { type: string }
irrecevable:
description: La demande est irrecevable — le motif nomme le champ.
content:
application/json:
schema: { $ref: '#/components/schemas/Erreur' }
sansIdentite:
description: Aucune identité présentée.
horsFamille:
description: L'identité présentée n'a pas la famille d'accès instruments:administration.
inconnu:
description: Le calendrier — ou la version — est inconnu de ce tenant.
content:
application/json:
schema: { $ref: '#/components/schemas/Erreur' }
rejete:
description: >-
Le domaine refuse (version publiée intouchable, chevauchement de validité,
heure sans fuseau, urgence sans échéance de revue…) — rien n'est retenu ; le
motif nomme l'invariant.
content:
application/json:
schema: { $ref: '#/components/schemas/Erreur' }
schemas:
Provenance:
type: object
required: [source]
properties:
source: { type: string, enum: [document, saisie, flux_de_place] }
document: { type: string, description: Obligatoire quand la source est un document. }
Erreur:
type: object
required: [motif]
properties:
motif: { type: string }