Handoff records are only created for invoices that reached a valid CIM (Common Invoice Model). The pipeline goes: normalise → map → derive → CIM build → validate. If an invoice fails before the CIM build step (typically missing mandatory fields like buyer_tax_id for foreign / B2C customers, or a malformed date), the platform doesn't have enough data to construct a Peppol-shippable document — so no Handoff Record.
The math:
invoices fetched
− invoices that failed before CIM build ← mapping errors, missing fields, CIM Pydantic
= invoices with cim_invoice
= handoff records created
Those pre-CIM failures still appear in the invoice table above (with verdict fail) and on the /errors/ dashboard — they just don't have an HR row because there's nothing to ship.