# Synthetic request workflow / Flux sintetic / Processus synthétique

## English

An executable teaching example, not client work or a production integration.
The validation, in-memory ID reservation, retry loop and event results are real
local logic. The receiving system and delivery responses are simulated. There
is no network call, backend, credential, package dependency or data transfer.

Use **Node.js 22 or later**. Save these files together, keeping their names:

- `workflow.mjs` — the implementation shared by the browser, CLI and checks.
- `workflow-scenarios.mjs` — fixed synthetic records and simulated responses.
- `workflow-cli.mjs` — local command-line runner.
- `workflow-checks.mjs` — dependency-free `node:test` checks.
- `README.md` — these instructions.

Run from that folder; no `npm install` is required:

```text
node workflow-cli.mjs retry
node workflow-cli.mjs all
node --test workflow-checks.mjs
```

Other scenario names: `accepted`, `invalid`, `duplicate`, `conflict`,
`permanent`, `exhausted`. Every scenario starts a new workflow instance. The
duplicate and conflict scenarios each submit two records inside one instance.
The CLI writes JSON. A completed scenario exits 0, including deliberately
invalid/rejected/exhausted examples; inspect each result's `status`. An unknown
scenario exits 2. Timing is illustrative, not a performance measurement.

Exactly four input fields are accepted: a `DEMO-` request ID (1–24 uppercase
letters, digits or hyphens after the prefix), a `SYN-` account with three digits,
`SKU-ALPHA` or `SKU-BETA`, and an integer quantity from 1 to 100. Extra fields
and implicit type conversion are rejected. An identical completed request is
suppressed; a changed payload under the same ID conflicts. An in-flight repeat
is suppressed in the same instance. At most three attempts follow classified
transient responses, with 250ms and 500ms waits. Permanent responses,
unclassified sender exceptions and unknown responses stop without retry.

**Limits:** the ledger has no durable store, cross-process coordination, retention
policy, cleanup or delivery acknowledgement. Reloading/restarting loses its
memory. Failed and exhausted IDs remain reserved until that instance is discarded.
The sender has no real side effect. Uncertain remote delivery, sender timeouts,
authentication, reconciliation, monitoring and operator recovery are not
implemented. Do not infer an exactly-once, security, compliance, availability
or performance guarantee. A real integration requires its own design and tests.

The optional `.d.mts` files provide TypeScript types for website integration;
they are not needed for the downloaded CLI or checks.

## Română

Exemplu educațional executabil cu date sintetice, nu un proiect pentru client
sau o integrare în producție. Validarea, rezervarea ID-urilor în memorie,
reîncercările și rezultatele se execută local. Sistemul destinatar și
răspunsurile sunt simulate. Nu există apeluri de rețea, backend, credențiale,
dependențe sau transfer de date.

Folosește **Node.js 22 sau ulterior**. Salvează cele cinci fișiere enumerate
mai sus în același dosar, cu numele originale. Rulează comenzile de mai sus din
acel dosar, fără `npm install`. CLI produce JSON. Codul de ieșire 0 indică
executarea scenariului, inclusiv a unuia cu rezultat nevalid, respins sau cu
reîncercări epuizate; verifică `status`. Un scenariu necunoscut produce codul 2.

Fiecare scenariu pornește o instanță nouă. Scenariile `duplicate` și `conflict`
procesează câte două înregistrări în aceeași instanță. Contractul permite doar
`requestId`, `account`, `item`, `quantity`, prefixele sintetice, cele două
articole și cantități întregi între 1 și 100. Răspunsurile temporare permit cel
mult trei încercări, cu așteptări de 250ms și 500ms. Un răspuns permanent sau
neclasificat oprește fluxul. Timpii sunt ilustrativi, nu măsurători de performanță.

**Limite:** memoria dispare la resetare sau repornire; instanțele separate nu
se coordonează. ID-urile cu eroare rămân rezervate în instanța curentă. Nu sunt
implementate stocarea durabilă, curățarea, confirmarea reală a livrării,
autentificarea, limitele de timp, reconcilierea, monitorizarea sau recuperarea
operațională. Exemplul nu garantează livrarea exact o dată, securitatea,
conformitatea, disponibilitatea sau performanța. O integrare reală necesită
proiectare și teste proprii. Fișierele `.d.mts` sunt opționale pentru CLI.

## Français

Exemple pédagogique exécutable avec des données synthétiques, sans mission
client ni intégration en production. La validation, la réservation des
identifiants en mémoire, les tentatives et les résultats s’exécutent localement.
Le destinataire et ses réponses sont simulés. Aucun appel réseau, backend,
identifiant d’accès, paquet externe ou transfert de données n’est utilisé.

Utilisez **Node.js 22 ou ultérieur**. Enregistrez les cinq fichiers énumérés
ci-dessus dans un même dossier en conservant leurs noms. Exécutez les commandes
ci-dessus depuis ce dossier, sans `npm install`. La CLI produit du JSON. Le code
de sortie 0 indique l’exécution du scénario, même avec un résultat non valide,
refusé ou épuisé ; examinez `status`. Un scénario inconnu produit le code 2.

Chaque scénario crée une nouvelle instance. `duplicate` et `conflict` traitent
chacun deux enregistrements dans une instance. Le contrat accepte uniquement
`requestId`, `account`, `item`, `quantity`, les préfixes synthétiques, les deux
articles et les quantités entières de 1 à 100. Une réponse temporaire autorise
au maximum trois tentatives, avec des attentes de 250ms et 500ms. Une réponse
permanente ou non classifiée arrête le processus. Ces délais sont illustratifs,
pas des mesures de performance.

**Limites :** la mémoire disparaît lors d’une remise à zéro ou d’un redémarrage ;
les instances séparées ne se coordonnent pas. Les identifiants en échec restent
réservés dans l’instance courante. Le stockage durable, le nettoyage, l’accusé
de réception réel, l’authentification, les délais limites, la réconciliation,
la supervision et la reprise opérationnelle ne sont pas implémentés. Aucune
garantie de transmission exactement une fois, de sécurité, de conformité,
de disponibilité ou de performance n’est établie. Une intégration réelle
nécessite sa propre conception et ses tests. Les `.d.mts` sont facultatifs
pour la CLI.
