evenements-publies
Événement (AsyncAPI) — version 0.1.0. Producteur : relation-tiers. Consommateurs déclarés : conformite, operations, back-office.
Les faits au passé du domaine sous l’enveloppe canonique — le tenantId est obligatoire dans l’enveloppe et dans la partition de transport, et le consommateur vérifie leur concordance. Données interdites, partie intégrante du contrat : contenu libre, nom, courriel, téléphone, adresse, IBAN complet, pièce jointe, secret, statut ou identifiant de CRM, copie complète d’un acteur ou d’un objet externe. Un événement publié ne se supprime jamais : la correction est un fait nouveau portant correctionOfEventId.
La spécification
Section intitulée « La spécification »asyncapi: 3.0.0info: title: relation-tiers — les événements publiés version: 0.1.0 x-ruptures: [] # première publication — aucune rupture description: >- Les faits au passé du domaine sous l'enveloppe canonique — le tenantId est obligatoire dans l'enveloppe et dans la partition de transport, et le consommateur vérifie leur concordance. Données interdites, partie intégrante du contrat : contenu libre, nom, courriel, téléphone, adresse, IBAN complet, pièce jointe, secret, statut ou identifiant de CRM, copie complète d'un acteur ou d'un objet externe. Un événement publié ne se supprime jamais : la correction est un fait nouveau portant correctionOfEventId. x-producteurs: - relation-tiers x-consommateurs: - composant: conformite statut: pressenti — les faits relationnels comme signaux - composant: operations statut: pressenti — faits de mandat et résultats de traitement - composant: back-office statut: pressenti — projections d'interfacedefaultContentType: application/jsonchannels: acteurs: address: relation-tiers.acteurs.v1 description: >- Les faits des ancres d'acteurs, identifiants et rapprochements. L'ordre est garanti par agrégat (partition dérivée de tenantId et aggregateId) et par producteur, jamais entre producteurs. messages: acteurReference: { $ref: '#/components/messages/acteurReference' } acteurSuspendu: { $ref: '#/components/messages/acteurSuspendu' } acteurRedirige: { $ref: '#/components/messages/acteurRedirige' } identifiantQualifie: { $ref: '#/components/messages/identifiantQualifie' } identiteContestee: { $ref: '#/components/messages/identiteContestee' } rapprochementConfirme: { $ref: '#/components/messages/rapprochementConfirme' } rapprochementEcarte: { $ref: '#/components/messages/rapprochementEcarte' } relationsEtMandats: address: relation-tiers.relations-et-mandats.v1 description: Les faits des relations, rôles, périmètres, mandats et délégations. messages: relationEtablie: { $ref: '#/components/messages/relationEtablie' } relationSuspendue: { $ref: '#/components/messages/relationSuspendue' } relationCloturee: { $ref: '#/components/messages/relationCloturee' } roleAttribue: { $ref: '#/components/messages/roleAttribue' } roleRetire: { $ref: '#/components/messages/roleRetire' } perimetreModifie: { $ref: '#/components/messages/perimetreModifie' } mandatEnregistre: { $ref: '#/components/messages/mandatEnregistre' } mandatActive: { $ref: '#/components/messages/mandatActive' } mandatRevoque: { $ref: '#/components/messages/mandatRevoque' } mandatExpire: { $ref: '#/components/messages/mandatExpire' } contactsEtCanaux: address: relation-tiers.contacts-et-canaux.v1 description: >- Les faits des rattachements de contact, points de contact et autorisations de canal — aucune adresse, aucun numéro, aucun endpoint n'y figure. messages: contactRattache: { $ref: '#/components/messages/contactRattache' } contactRemplace: { $ref: '#/components/messages/contactRemplace' } pointContactVerifie: { $ref: '#/components/messages/pointContactVerifie' } canalAutorise: { $ref: '#/components/messages/canalAutorise' } canalSuspendu: { $ref: '#/components/messages/canalSuspendu' } demandesEtEchanges: address: relation-tiers.demandes-et-echanges.v1 description: >- Les faits des demandes et des échanges — sujets, résumés, participants nominatifs et contenus restent consultables par API autorisée, jamais par le bus. messages: demandeRecue: { $ref: '#/components/messages/demandeRecue' } demandeurIdentifie: { $ref: '#/components/messages/demandeurIdentifie' } demandeQualifiee: { $ref: '#/components/messages/demandeQualifiee' } demandeAffectee: { $ref: '#/components/messages/demandeAffectee' } demandeTransferee: { $ref: '#/components/messages/demandeTransferee' } demandeEscaladee: { $ref: '#/components/messages/demandeEscaladee' } objetRattache: { $ref: '#/components/messages/objetRattache' } objetDetache: { $ref: '#/components/messages/objetDetache' } echangeEnregistre: { $ref: '#/components/messages/echangeEnregistre' } echangeRattache: { $ref: '#/components/messages/echangeRattache' } echangeDetache: { $ref: '#/components/messages/echangeDetache' } demandesRegroupees: { $ref: '#/components/messages/demandesRegroupees' } demandeDissociee: { $ref: '#/components/messages/demandeDissociee' } traitementsEtReponses: address: relation-tiers.traitements-et-reponses.v1 description: Les faits des traitements externes, échéances et réponses. messages: traitementDemande: { $ref: '#/components/messages/traitementDemande' } traitementAccepte: { $ref: '#/components/messages/traitementAccepte' } traitementRejete: { $ref: '#/components/messages/traitementRejete' } resultatRecu: { $ref: '#/components/messages/resultatRecu' } resultatCorrige: { $ref: '#/components/messages/resultatCorrige' } echeanceCalculee: { $ref: '#/components/messages/echeanceCalculee' } echeanceMenacee: { $ref: '#/components/messages/echeanceMenacee' } echeanceDepassee: { $ref: '#/components/messages/echeanceDepassee' } reponsePreparee: { $ref: '#/components/messages/reponsePreparee' } reponseValidee: { $ref: '#/components/messages/reponseValidee' } reponseEnvoyee: { $ref: '#/components/messages/reponseEnvoyee' } reponseRemise: { $ref: '#/components/messages/reponseRemise' } demandeResolue: { $ref: '#/components/messages/demandeResolue' } demandeCloturee: { $ref: '#/components/messages/demandeCloturee' } demandeRouverte: { $ref: '#/components/messages/demandeRouverte' }operations: publierLesFaitsDesActeurs: action: send channel: $ref: '#/channels/acteurs' summary: Relation tiers publie les faits des ancres, identifiants et rapprochements. publierLesFaitsDesRelationsEtMandats: action: send channel: $ref: '#/channels/relationsEtMandats' summary: Relation tiers publie les faits des relations, rôles et mandats. publierLesFaitsDesContactsEtCanaux: action: send channel: $ref: '#/channels/contactsEtCanaux' summary: Relation tiers publie les faits des contacts et canaux, valeurs masquées. publierLesFaitsDesDemandesEtEchanges: action: send channel: $ref: '#/channels/demandesEtEchanges' summary: Relation tiers publie les faits des demandes et des échanges. publierLesFaitsDesTraitementsEtReponses: action: send channel: $ref: '#/channels/traitementsEtReponses' summary: Relation tiers publie les faits des traitements, échéances et réponses.components: schemas: Enveloppe: type: object description: >- L'enveloppe canonique de la conception — se projettera sur CloudEvents à la liaison Kafka, au premier contrat qui l'applique. required: - eventId - eventType - schemaVersion - tenantId - aggregateType - aggregateId - aggregateVersion - occurredAt - recordedAt - data properties: eventId: type: string description: L'identifiant unique — la clé d'idempotence des consommateurs. eventType: type: string schemaVersion: type: integer tenantId: type: string description: >- Obligatoire ici et dans la partition de transport — le consommateur vérifie la concordance. aggregateType: type: string aggregateId: type: string aggregateVersion: type: integer description: Le numéro de séquence par entité — l'assise de l'ordre. occurredAt: type: string format: date-time effectiveAt: type: string format: date-time recordedAt: type: string format: date-time publishedAt: type: string format: date-time correlationId: type: string causationId: type: string correctionOfEventId: type: string description: Présent sur un fait de correction — l'original demeure. data: type: object messages: acteurReference: name: ActeurTiersReference title: Acteur tiers référencé summary: Une ancre est utilisable — mode d'ancrage et référence propriétaire. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [actorId, identityMode, actorNature] properties: actorId: { type: string } identityMode: { type: string } actorNature: { type: string } ownerReference: type: object properties: domain: { type: string } objectType: { type: string } objectId: { type: string } acteurSuspendu: name: ActeurTiersSuspendu title: Acteur tiers suspendu summary: Une ancre est suspendue — raison codée et date d'effet. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [actorId, reasonCode] properties: actorId: { type: string } reasonCode: { type: string } acteurRedirige: name: ActeurTiersRedirige title: Acteur tiers redirigé summary: Une ancre pointe logiquement vers une canonique — fusion logique datée. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [sourceActorId, canonicalActorId] properties: sourceActorId: { type: string } canonicalActorId: { type: string } identifiantQualifie: name: IdentifiantTiersQualifie title: Identifiant tiers qualifié summary: >- Un identifiant a été validé — l'ID de l'identifiant par défaut, la valeur seulement si non personnelle, nécessaire et approuvée par le schéma. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [externalIdentifierId, actorId, identifierType, issuer, verificationStatus] properties: externalIdentifierId: { type: string } actorId: { type: string } identifierType: { type: string } issuer: { type: string } verificationStatus: { type: string } identiteContestee: name: IdentiteTiersContestee title: Identité tiers contestée summary: Une contradiction affecte l'ancre — code d'anomalie. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [actorId, anomalyCode] properties: actorId: { type: string } anomalyCode: { type: string } rapprochementConfirme: name: RapprochementTiersConfirme title: Rapprochement tiers confirmé summary: Une décision humaine établit la correspondance — jamais l'IA. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [caseId, actorIds, decision] properties: caseId: { type: string } actorIds: type: array items: { type: string } decision: { type: string } rapprochementEcarte: name: RapprochementTiersEcarte title: Rapprochement tiers écarté summary: Deux ancres sont distinctes — la paire est exclue des propositions répétées. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [caseId, actorIds] properties: caseId: { type: string } actorIds: type: array items: { type: string } relationEtablie: name: RelationTiersEtablie title: Relation tiers établie summary: Relation active — parties, nature, période. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [relationshipId, actorIds, relationshipType] properties: relationshipId: { type: string } actorIds: type: array items: { type: string } relationshipType: { type: string } validFrom: { type: string, format: date-time } validTo: { type: string, format: date-time } relationSuspendue: name: RelationTiersSuspendue title: Relation tiers suspendue summary: Relation suspendue — raison et effet. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [relationshipId, reasonCode] properties: relationshipId: { type: string } reasonCode: { type: string } relationCloturee: name: RelationTiersCloturee title: Relation tiers clôturée summary: Relation terminée — raison et fin ; jamais écrasée. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [relationshipId, reasonCode] properties: relationshipId: { type: string } reasonCode: { type: string } validTo: { type: string, format: date-time } roleAttribue: name: RoleTiersAttribue title: Rôle tiers attribué summary: Rôle applicable — code canonique, relation, période. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [roleAssignmentId, actorId, roleCode, relationshipId] properties: roleAssignmentId: { type: string } actorId: { type: string } roleCode: { type: string } relationshipId: { type: string } validFrom: { type: string, format: date-time } validTo: { type: string, format: date-time } roleRetire: name: RoleTiersRetire title: Rôle tiers retiré summary: Rôle retiré — fin et raison, l'historique demeure. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [roleAssignmentId, reasonCode] properties: roleAssignmentId: { type: string } reasonCode: { type: string } validTo: { type: string, format: date-time } perimetreModifie: name: PerimetreRelationModifie title: Périmètre de relation modifié summary: Nouvelle version de portée — les membres restent consultables par API. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [scopeId, relationshipId, scopeVersion] properties: scopeId: { type: string } relationshipId: { type: string } scopeVersion: { type: integer } mandatEnregistre: name: MandatTiersEnregistre title: Mandat tiers enregistré summary: Mandat accepté dans le référentiel — parties, type, statut. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [mandateId, grantorActorId, granteeActorId, mandateType, status] properties: mandateId: { type: string } grantorActorId: { type: string } granteeActorId: { type: string } mandateType: { type: string } status: { type: string } mandatActive: name: MandatTiersActive title: Mandat tiers activé summary: >- Mandat applicable — période et actes codés ; aucune pièce ni condition libre n'est publiée. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [mandateId, actions] properties: mandateId: { type: string } actions: type: array items: { type: string } validFrom: { type: string, format: date-time } validTo: { type: string, format: date-time } mandatRevoque: name: MandatTiersRevoque title: Mandat tiers révoqué summary: >- Révocation enregistrée — la date d'effet peut précéder la date de connaissance, les décisions passées ne sont pas réécrites. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [mandateId, reasonCode] properties: mandateId: { type: string } reasonCode: { type: string } mandatExpire: name: MandatTiersExpire title: Mandat tiers expiré summary: Fin atteinte. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [mandateId] properties: mandateId: { type: string } validTo: { type: string, format: date-time } contactRattache: name: ContactTiersRattache title: Contact tiers rattaché summary: Personne rattachée à une organisation — période, aucun pouvoir implicite. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [assignmentId, personActorId, organisationActorId] properties: assignmentId: { type: string } personActorId: { type: string } organisationActorId: { type: string } validFrom: { type: string, format: date-time } validTo: { type: string, format: date-time } contactRemplace: name: ContactTiersRemplace title: Contact tiers remplacé summary: Suppléance ou remplacement établi — rattachements et période. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [substitutedAssignmentId, substituteAssignmentId] properties: substitutedAssignmentId: { type: string } substituteAssignmentId: { type: string } validFrom: { type: string, format: date-time } validTo: { type: string, format: date-time } pointContactVerifie: name: PointContactTiersVerifie title: Point de contact tiers vérifié summary: Point vérifié — type, finalité, niveau, date ; jamais la valeur. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [contactPointId, channelType, purpose, level, verifiedAt] properties: contactPointId: { type: string } channelType: { type: string } purpose: { type: string } level: { type: string } verifiedAt: { type: string, format: date-time } canalAutorise: name: CanalTiersAutorise title: Canal tiers autorisé summary: Usage autorisé — finalité et période ; jamais la valeur. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [authorizationId, contactPointId, purpose] properties: authorizationId: { type: string } contactPointId: { type: string } purpose: { type: string } validFrom: { type: string, format: date-time } validTo: { type: string, format: date-time } canalSuspendu: name: CanalTiersSuspendu title: Canal tiers suspendu summary: Canal inutilisable — finalités touchées, effet, raison (NPAI, compromission). payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [contactPointId, reasonCode] properties: contactPointId: { type: string } purposes: type: array items: { type: string } reasonCode: { type: string } demandeRecue: name: DemandeTiersRecue title: Demande tiers reçue summary: Demande durablement reçue — référence, canal, réception, statut du demandeur. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [requestId, readableReference, originChannel, receivedAt, requesterStatus] properties: requestId: { type: string } readableReference: { type: string } originChannel: { type: string } receivedAt: { type: string, format: date-time } requesterStatus: { type: string } demandeurIdentifie: name: DemandeurTiersIdentifie title: Demandeur tiers identifié summary: Demandeur rapproché ou vérifié — acteur et niveau. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [requestId, actorId, level] properties: requestId: { type: string } actorId: { type: string } level: { type: string } demandeQualifiee: name: DemandeTiersQualifiee title: Demande tiers qualifiée summary: Catégorie et priorité acceptées — taxonomie versionnée. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [requestId, categoryCode, taxonomyVersion] properties: requestId: { type: string } categoryCode: { type: string } taxonomyVersion: { type: string } priority: { type: string } demandeAffectee: name: DemandeTiersAffectee title: Demande tiers affectée summary: Affectation active — file et affectation. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [requestId, queueId, assignmentId] properties: requestId: { type: string } queueId: { type: string } assignmentId: { type: string } demandeTransferee: name: DemandeTiersTransferee title: Demande tiers transférée summary: Changement de responsabilité — files source et cible, motif. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [requestId, sourceQueueId, targetQueueId, reasonCode] properties: requestId: { type: string } sourceQueueId: { type: string } targetQueueId: { type: string } reasonCode: { type: string } demandeEscaladee: name: DemandeTiersEscaladee title: Demande tiers escaladée summary: Niveau d'escalade relevé — motif ; l'escalade reste après clôture. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [requestId, level, reasonCode] properties: requestId: { type: string } level: { type: integer } reasonCode: { type: string } objetRattache: name: ObjetMetierRattacheADemande title: Objet métier rattaché à une demande summary: Lien externe accepté — domaine, type, objet, finalité ; jamais l'état copié. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [requestId, ownerDomain, objectType, objectId, purpose] properties: requestId: { type: string } ownerDomain: { type: string } objectType: { type: string } objectId: { type: string } purpose: { type: string } objetDetache: name: ObjetMetierDetacheDeDemande title: Objet métier détaché d'une demande summary: Lien clôturé — motif, l'histoire demeure. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [linkId, reasonCode] properties: linkId: { type: string } reasonCode: { type: string } echangeEnregistre: name: EchangeTiersEnregistre title: Échange tiers enregistré summary: Échange durable — direction, canal, instant métier ; jamais le contenu. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [interactionId, direction, channel, businessAt] properties: interactionId: { type: string } direction: { type: string } channel: { type: string } businessAt: { type: string, format: date-time } echangeRattache: name: EchangeTiersRattacheADemande title: Échange tiers rattaché à une demande summary: Lien actif — demande, échange, rôle. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [linkId, requestId, interactionId, role] properties: linkId: { type: string } requestId: { type: string } interactionId: { type: string } role: { type: string } echangeDetache: name: EchangeTiersDetacheDeDemande title: Échange tiers détaché d'une demande summary: Lien corrigé — motif (RATTACHE_PAR_ERREUR), jamais supprimé. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [linkId, reasonCode] properties: linkId: { type: string } reasonCode: { type: string } demandesRegroupees: name: DemandesTiersRegroupees title: Demandes tiers regroupées summary: Doublon logique établi — la principale et les secondaires. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [primaryRequestId, secondaryRequestIds] properties: primaryRequestId: { type: string } secondaryRequestIds: type: array items: { type: string } demandeDissociee: name: DemandeTiersDissociee title: Demande tiers dissociée summary: Demandes dérivées créées — la source reste consultable. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [sourceRequestId, derivedRequestIds] properties: sourceRequestId: { type: string } derivedRequestIds: type: array items: { type: string } traitementDemande: name: TraitementMetierDemande title: Traitement métier demandé summary: Commande émise — domaine cible, type et identifiant idempotent de commande. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [treatmentId, requestId, targetDomain, commandType, commandId] properties: treatmentId: { type: string } requestId: { type: string } targetDomain: { type: string } commandType: { type: string } commandId: { type: string } traitementAccepte: name: TraitementMetierAccepte title: Traitement métier accepté summary: Le domaine cible a accepté. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [treatmentId] properties: treatmentId: { type: string } sourceTreatmentId: { type: string } traitementRejete: name: TraitementMetierRejete title: Traitement métier rejeté summary: Commande rejetée — motif codé. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [treatmentId, reasonCode] properties: treatmentId: { type: string } reasonCode: { type: string } resultatRecu: name: ResultatTraitementMetierRecu title: Résultat de traitement métier reçu summary: Résultat disponible — code et version source. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [treatmentId, resultCode] properties: treatmentId: { type: string } resultCode: { type: string } sourceVersion: { type: string } resultatCorrige: name: ResultatTraitementMetierCorrige title: Résultat de traitement métier corrigé summary: Résultat précédent régularisé — nouveau résultat lié, jamais une réécriture. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [treatmentId, correctionOf, resultCode] properties: treatmentId: { type: string } correctionOf: { type: string } resultCode: { type: string } echeanceCalculee: name: EcheanceDemandeCalculee title: Échéance de demande calculée summary: Échéance matérialisée — règle et version citées, instant dû. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [deadlineId, requestId, ruleId, ruleVersion, dueAt] properties: deadlineId: { type: string } requestId: { type: string } ruleId: { type: string } ruleVersion: { type: string } dueAt: { type: string, format: date-time } echeanceMenacee: name: EcheanceDemandeMenacee title: Échéance de demande menacée summary: Seuil atteint — niveau d'alerte. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [deadlineId, alertLevel] properties: deadlineId: { type: string } alertLevel: { type: string } echeanceDepassee: name: EcheanceDemandeDepassee title: Échéance de demande dépassée summary: Délai franchi — le premier dépassement est immuable. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [deadlineId, firstBreachedAt] properties: deadlineId: { type: string } firstBreachedAt: { type: string, format: date-time } reponsePreparee: name: ReponseTiersPreparee title: Réponse tiers préparée summary: Projet disponible — nombre de sources citées. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [responseId, requestId] properties: responseId: { type: string } requestId: { type: string } sourceCount: { type: integer } reponseValidee: name: ReponseTiersValidee title: Réponse tiers validée summary: Validation acquise — politique de validation citée. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [responseId] properties: responseId: { type: string } validationPolicy: { type: string } reponseEnvoyee: name: ReponseTiersEnvoyee title: Réponse tiers envoyée summary: Émission constatée — échange sortant et canal. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [responseId, interactionId, channel] properties: responseId: { type: string } interactionId: { type: string } channel: { type: string } reponseRemise: name: ReponseTiersRemise title: Réponse tiers remise summary: Remise prouvée — référence de preuve. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [responseId, evidenceRef] properties: responseId: { type: string } evidenceRef: { type: string } demandeResolue: name: DemandeTiersResolue title: Demande tiers résolue summary: Résultat suffisant — code de résolution. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [requestId, resolutionCode] properties: requestId: { type: string } resolutionCode: { type: string } demandeCloturee: name: DemandeTiersCloturee title: Demande tiers clôturée summary: Suivi terminé — code de clôture, échéances et dépassements figés. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [requestId, closureCode] properties: requestId: { type: string } closureCode: { type: string } demandeRouverte: name: DemandeTiersRouverte title: Demande tiers rouverte summary: Suivi repris — motif, append-only. payload: allOf: - $ref: '#/components/schemas/Enveloppe' - type: object properties: data: type: object required: [requestId, reasonCode] properties: requestId: { type: string } reasonCode: { type: string }