# CVN — állapotok, API és végrehajtás

Egy szerződés lehet részben teljesített, részben kiszámlázott és részben rendezett. Egyetlen életciklus-enum helyett külön dimenziók kellenek.

| Rekord | Állapot |
|---|---|
| Contract | DRAFT → REVIEW → ACTIVE; COMPLETED / CANCELLED |
| Performance | RECORDED → SUBMITTED → PARTIALLY_ACCEPTED / ACCEPTED / REJECTED |
| Invoice | DRAFT → ISSUED → CORRECTED / VOID |
| Receivable | CANDIDATE → IDENTIFIED; vita és teher külön attribútum |
| Position | ACTIVE / FROZEN; maradványból levezetett átadási állapot |
| Policy | ALLOW / BLOCK / REVIEW_REQUIRED; lejárat és inputhash |
| Proposal | RESERVED → PARTY_REVIEW → SIGNED → READY → EFFECTIVE; REJECTED / EXPIRED / CANCELLED |
| Settlement | WAITING_CONDITION → OBLIGATION_REDUCED / OBLIGATION_SETTLED |
| Notice | PREPARED → SENT → DELIVERY_PROVEN / FAILED; acknowledgement külön |
| Anchor | QUEUED → SUBMITTED → CONFIRMED / RECONCILIATION_REQUIRED |

Hatályos ügyletet foglaláslejárat nem bonthat fel. A vitarögzítést nem írhatja felül későbbi láncesemény.

## API-terv

Írásnál szerveroldali vállalati/rekordjogosultság, képviselet, `Idempotency-Key`, `expectedVersion` és normalizált kéréshash. Összeg decimális string legkisebb pénzegységben, pénznem és skála; nincs floating-point pénzügyi számítás.

| Végpont | Feladat |
|---|---|
| POST /v1/contracts | Szerződés és felek |
| POST /v1/contracts/:id/performances | Mérföldkőhöz kötött teljesítés |
| POST /v1/performances/:id/acceptances | Partner és elfogadott rész |
| POST /v1/receivable-candidates | Jogalap; nem automatikus pozíció |
| POST /v1/receivables/:id/policy-decisions | Indokolt reviewer-döntés |
| GET /v1/positions/:id | Maradvány, eredet és korlátozott bizonyíték |
| POST /v1/assignment-proposals | Forrás- és célkeret-foglalás |
| POST /v1/assignment-proposals/:id/disclosure | Ügyleti dokumentumhozzáférés |
| POST /v1/assignment-proposals/:id/acceptances | Befagyasztott csomag/rendezési feltétel |
| POST /v1/assignment-proposals/:id/signatures | Valós aláírás és képviselet eredménye |
| POST /v1/assignment-proposals/:id/notices | Értesítés/utasítás/kézbesítés bizonyítéka |
| POST /v1/assignment-proposals/:id/effectiveness | Feltételek, gyermekpozíció, outbox |
| POST /v1/collections | Igazolt külső teljesítés |
| POST /v1/settlements | Dokumentált kötelezettségcsökkentés |
| GET /v1/settlements/:id/evidence | Manifest és export |
| GET /v1/overview?currency=USD | Források és külön értékdimenziók |
| POST /v1/disputes | Bizonyíték és érintett pozíció |
| GET /v1/admin/reconciliation | DB/jogállapot/lánc eltérés |

Hibák: VERSION_CONFLICT, IDEMPOTENCY_MISMATCH, INSUFFICIENT_AVAILABLE, OBLIGATION_OVERALLOCATED, CURRENCY_MISMATCH, POLICY_REQUIRED, EVIDENCE_CHANGED, NOTICE_CONDITION_PENDING. Hozzáférési hiba nem szivárogtathat más vállalat ügyletéről adatot.

## Atomicitás

Foglalás egy DB-tranzakcióban: minden érintett pozíció/kötelezettség sorzára azonos rendezésben; újraellenőrzés; keretfoglalás; immutable payload és idempotenciarekord. A hatályosítás egy másik DB-tranzakció: maradványok, gyermek, assignment, rendezési feltétel/allokáció, audit és outbox. A külső szolgáltatások dokumentált helyreállítási folyamatban vesznek részt.

Outbox legalább egyszer kézbesíthet; registry operationId és állapotverzió véd replay ellen. Indexer egyedi lánceseménykulcsot használ; az egyeztetés commitmentet/verziót ellenőriz. A lánc nem írja közvetlenül a követelés üzleti összegét.

## Bizonyíték és ellenőrzés

Settlement manifest: UTC idő, felek, célkötelezettség, csökkenés/maradvány, forráspozíció és eredeti kötelezett, mód és hatályesemény, policy, okiratverziók, aláírás/képviselet, értesítés/utasítás, lánc és reconciliation státusz. Könyvelői elfogadás külön.

MVP-kapu: tenant/disclosure; dokumentum/policy/képviselet-változás; reviewer összeférhetetlenség; konkurens foglalás; külső teher/átadás; aláírási replay; hibás kézbesítés; kettős teljesítés; lánc-DB eltérés; mentés/restore és kulcsrotáció. A referencia csak a helyi üzleti invariánsok egy részét vizsgálja.
