e-CF lifecycle
An electronic fiscal voucher (e-CF) goes through seven states from the client request to the 10-year archive required by DGII.
States
| State | Visible in API | Description |
|---|---|---|
received | pending | Payload was accepted and persisted to DynamoDB. |
validated | pending | Passed Pydantic and arithmetic validations. |
signed | pending | XAdES-BES generated by the signer Lambda (US-EP-05). |
submitted | pending | RecepcionECF to the DGII server; trackId obtained. |
accepted | accepted | DGII confirmed via TrackStatus. |
rejected_local | rejected | ERPly Pro rejected before DGII (validation, mathematical-discrepancy). |
rejected_dgii | rejected | DGII rejected after receiving the e-CF. |
archived | n/a | Moved to S3 Glacier IR with Object Lock COMPLIANCE (US-EP-08). |
Idempotency
Every POST /v1/invoices requires a unique per-client Idempotency-Key. ERPly Pro persists the result of the first invocation for 24 h in a DynamoDB table; any replay with the same key returns the same docId/trackId with HTTP 200 (instead of 202).
SLA guarantees
| Operation | p99 target |
|---|---|
POST /v1/invoices (validation + persistence) | 1.5 s |
| XAdES-BES signing + DGII submission | 4 s |
| Webhook after DGII ACK | < 1 s |