Schémas et types publics

Les contrats Ormuz distinguent les objets métier persistés, les objets externes fournis par les extensions et les valeurs sémantiques communes. Cette distinction est conservée dans l’API, les nodes et les bindings de processus.

Trois familles de types

PréfixeRôleExemples
platform.*Objets publics Ormuz, persistés ou projections canoniques.platform.company, platform.invoice, platform.credit_exposure
extension.*Objets provider normalisés exposés par une extension.extension.stripe.customer, extension.sumsub.applicant
common.*Valeurs sémantiques et structures réutilisables qui ne sont pas des ressources métier autonomes.common.amount, common.metadata, common.form_spec
Le type exprime une garantie Deux valeurs JSON qui se ressemblent ne sont pas nécessairement interchangeables. Un platform.invoice est un objet Ormuz hydraté et adressable ; un objet de transport provider ou un draft n’offre pas les mêmes garanties.

Types sémantiques communs

Les sous-types common.* empêchent de perdre une règle métier importante derrière un simple type JSON.

TypeReprésentationGarantie
common.amountintegerMontant dans l’unité mineure de la devise. Jamais un flottant.
common.currency_codestringCode devise ISO 4217, par exemple EUR.
common.datestringDate civile au format YYYY-MM-DD.
common.datetimestringInstant ISO 8601 avec séparateur T et timezone.
common.emailstringAdresse e-mail validée selon le contrat du champ.
common.phonestringNuméro de téléphone sous forme sémantique plutôt qu’une chaîne arbitraire.
common.urlstringURL validée.
common.metadataobjectDictionnaire plat de valeurs scalaires réservé à l’intégrateur.
Montants financiers Un common.amount est un entier sûr exprimé dans l’unité mineure de la devise : 125000 EUR signifie 1 250,00 EUR. N’utilisez ni flottants ni montants en unité majeure dans un champ typé common.amount.

Objets persistés, projections et drafts

Une ressource plateforme persistée possède un identifiant et peut être référencée durablement. Une projection, comme receivable ou payable, est calculée à partir de l’état courant et n’a pas nécessairement d’identité autonome.

Un draft n’est pas une famille parallèle telle que company_draft. Il conserve le même objet métier cible, mais le type de processus porte mode: draft et le payload n’a pas encore d’ID.

JSON
{1 item
"type":{3 items
"type":"object"
"subtype":"platform.company"
"mode":"draft"
}
}
{
  "type": {
    "type": "object",
    "subtype": "platform.company",
    "mode": "draft"
  }
}

Le passage draft → ressource persistée doit être explicite dans le processus. La création n’est autorisée que lorsque le contrat d’autorité de l’objet permet ce chemin.

Identifiants et relations

Les contrats publics utilisent des IDs opaques préfixés — par exemple cmp_*, inv_* ou pci_*. Un champ de relation exposé par l’API référence l’ID de l’objet lié.

Lorsqu’un node déclare une sortie platform.company, il doit produire un objet suffisamment hydraté pour être utilisé par les nodes suivants ; un simple stub { id, object } ne constitue pas une sortie conforme à cette promesse.

Metadata : un contrat volontairement étroit

Tout champ nommé metadata suit common.metadata : dictionnaire plat dont les valeurs sont uniquement string, number ou boolean. Les objets imbriqués, tableaux et valeurs null sont interdits.

LimiteValeur
Taille sérialisée16 KB par map
Nombre de clés50
Longueur d’une clé64 caractères
Valeur string2 KB

Les clés absentes lors d’une mise à jour sont conservées ; la suppression passe par le sous-endpoint metadata dédié. Les données dont le Core dépend pour décider d’un comportement doivent être des champs canoniques, pas des conventions cachées dans metadata.

Types dans les processus

Les bindings comparent les types déclarés des entrées et sorties. Une collection array<platform.invoice> conserve le type concret de ses éléments à travers les nodes de collection, et un champ sémantique reste distingué d’un simple string lorsque cette distinction protège le contrat.

Les nodes dynamiques — subworkflow, Decision, Agent task, formulaire ou attente d’événement — dérivent leurs champs du contrat réellement sélectionné. L’éditeur valide donc le mapping par rapport à cette révision ou ce schéma, pas contre un JSON générique.

Où trouver le contrat exact ?

Cette page décrit les conventions transverses. Lorsqu’une contrainte appartient à un objet précis — enum de statut, relation obligatoire, transition autorisée — sa page canonique et le schéma API de cette ressource restent la référence détaillée.