Aller au contenu principal

Schema DSL

En bref

Le package @ontologie/schema fournit des builders TypeScript pour declarer vos entites metier, relations et mutations de maniere type-safe. Le schema compile vers un manifeste JSON pousse vers votre workspace.

Installation

npm install @ontologie/schema

Declarer une entite

import { objectType, string, number, date, boolean, enumType } from '@ontologie/schema';

const Status = enumType('Status', ['draft', 'active', 'archived']);

const Contract = objectType('Contract', {
title: string().required(),
amount: number().required().indexed(),
status: Status.default('draft'),
signedAt: date().optional(),
autoRenew: boolean().default(false),
});

Types primitifs

TypeDescriptionExemple
string()TexteNom, description, email
number()NumeriqueMontant, quantite
date()Date ISO 8601Echeance, signature
boolean()Vrai/fauxActif, verifie
json()Objet arbitraireMetadata, configuration

Modificateurs de proprietes

ModificateurEffet
.required()Champ obligatoire a la creation
.optional()Champ facultatif (par defaut)
.default(value)Valeur par defaut
.indexed()Indexe pour les recherches
.mutableBy([actions])Restreint la modification aux actions listees

Enumerations

const Priority = enumType('Priority', ['low', 'medium', 'high', 'critical']);

Les valeurs peuvent etre ajoutees mais pas supprimees sans changement de schema majeur.

import { link } from '@ontologie/schema';

const ContractVendor = link('Contract', 'Vendor', {
cardinality: 'many_to_one',
label: 'fournisseur',
});
CardinaliteDescription
one_to_oneRelation 1:1
one_to_manyUn parent, plusieurs enfants
many_to_onePlusieurs enfants, un parent
many_to_manyRelation N:N

Actions

Les actions declarent des mutations gouvernees sur vos entites :

import { action } from '@ontologie/schema';

const ApproveContract = action('Contract.approve')
.input({ approverNote: string().optional() })
.when({ status: { eq: 'draft' } })
.risk('medium')
.executionMode('plan_only')
.roles(['manager', 'admin']);

Modes d'execution

ModeDescription
descriptiveAucune mutation — information seulement
plan_onlyGenere un plan signe, necessite approbation
twin_applyExecute sur le digital twin (reversible)
human_handoffDelegation a un humain
workflow_handoffDelegation a un workflow
external_commitCommit vers un systeme externe

Niveaux de risque

RisqueTTL du planUsage
low7 joursLectures, mises a jour mineures
medium24 heuresModifications standard
high1 heureSuppressions, actions financieres

Preconditions (.when())

Operateurs disponibles : .eq(), .neq(), .in(), .notIn(), .gt(), .gte(), .lt(), .lte(), .contains(), .startsWith().

// L'action n'est executable que si le montant > 10000
const EscalateContract = action('Contract.escalate')
.when({ amount: { gt: 10000 } })
.risk('high');

Compilation

Exportez votre schema via compile() :

import { compile } from '@ontologie/schema';

export default compile({
types: [Contract, Vendor, Priority, Status],
actions: [ApproveContract, EscalateContract],
links: [ContractVendor],
});

Workflow CLI

# Generer le manifeste et verifier les differences
npx ontologie schema diff

# Pousser le schema vers votre workspace
npx ontologie schema push

# Generer les types TypeScript depuis le manifeste
npx ontologie generate

Voir aussi