# EditReceiptInput

input type

Edit-input for a Receipt. Every field optional, at least ONE required; supplied fields REPLACE, omitted fields are preserved (no clearing semantic yet; the ONE exception: an EMPTY landedComponents array CLEARS the estimates). DRAFT-ONLY WHOLESALE (the family stance): caption + a FULL line replace + a FULL component replace while draft; the parent PO and the LF are BIRTH-FIXED (wrong LF = cancel + recreate — the Transfer pair precedent); a live post-draft doc refuses CONFLICT/REF_STATE naming the required draft state; a write in an immutable terminal (posted / cancelled) refuses CONFLICT/IMMUTABLE.

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `caption` | [String](/types/#scalars) | no | No further notes. |
| `lines` | [ReceiptLineInput](/types/ReceiptLineInput/) `[ReceiptLineInput!]` | no | The wholesale line replacement (draft-only) — same shape and gates as create; the WHOLE set, up to 1000.: it PERSISTS as a DIFF by the natural (poLineNo x disposition) key — an unchanged line costs no write, a kept line KEEPS its lineNo and createdAt, a new key mints at nextLineNo, an absent key deletes; a delta past 90 line actions refuses VALIDATION/INVALID naming the budget and the three line ops. |
| `landedComponents` | [LandedCostComponentInput](/types/LandedCostComponentInput/) `[LandedCostComponentInput!]` | no | The wholesale component replacement (draft-only); an EMPTY array clears the estimates. |

## Used by

- [updateReceipt](/reference/receipt/updateReceipt/)
