[ { "id": "F001", "description": "Document and codify the grouped automatic-invoices model: parent rows group by `client + invoice window`, child rows remain the atomic execution units.", "implemented": true, "prdRefs": ["Summary", "Product Decisions"] }, { "id": "F002", "description": "Refactor the automatic-invoices ready-work view model so each group carries explicit parent summary data separate from child execution rows.", "implemented": true, "prdRefs": ["Requirements", "Data / API / Integrations"] }, { "id": "F003", "description": "Add stable parent-group identity and grouped selection keys for parent rows, distinct from child selector inputs.", "implemented": true, "prdRefs": ["Requirements", "Data / API / Integrations"] }, { "id": "F004", "description": "Replace the flat automatic-invoices ready table with an expandable parent/child grouped UI.", "implemented": true, "prdRefs": ["UX / UI Notes", "Requirements"] }, { "id": "F005", "description": "Render parent-row summaries including client name, invoice window, child count, aggregate amount, and combinability state.", "implemented": true, "prdRefs": ["UX / UI Notes", "Requirements"] }, { "id": "F006", "description": "Render child-row detail with contract or assignment identity, cadence source, billing timing, service period, and amount.", "implemented": true, "prdRefs": ["UX / UI Notes", "Requirements"] }, { "id": "F007", "description": "Compute parent combinability from effective invoice-level financial scope: client, currency, PO scope, tax source, and export shape.", "implemented": true, "prdRefs": ["Product Decisions", "Requirements"] }, { "id": "F008", "description": "Enable the parent checkbox only when the currently eligible children are combinable as one invoice.", "implemented": true, "prdRefs": ["Product Decisions", "Requirements"] }, { "id": "F009", "description": "Support child-level selection regardless of parent combinability, including tri-state parent behavior for partial selection.", "implemented": true, "prdRefs": ["Product Decisions", "Requirements"] }, { "id": "F010", "description": "Implement smart `Select All` semantics that select parents for combinable groups and child rows individually for non-combinable groups.", "implemented": true, "prdRefs": ["Product Decisions", "Requirements"] }, { "id": "F011", "description": "Keep blocked child candidates visible inside groups while preventing their selection and reflecting their status in the parent summary.", "implemented": true, "prdRefs": ["UX / UI Notes", "Requirements"] }, { "id": "F012", "description": "Expose explicit incompatibility reasons on non-combinable parent rows, including PO, currency, tax, and export-shape differences.", "implemented": true, "prdRefs": ["UX / UI Notes", "Requirements"] }, { "id": "F013", "description": "Add grouped preview request semantics so the preview stack can accept parent selections and exact child selections rather than only one selector input.", "implemented": true, "prdRefs": ["Requirements", "Data / API / Integrations"] }, { "id": "F014", "description": "Render preview output that clearly states whether the current selection will produce one invoice or several, with grouped or split preview presentation as appropriate.", "implemented": true, "prdRefs": ["UX / UI Notes", "Requirements"] }, { "id": "F015", "description": "Add grouped generation request semantics so parent selections and arbitrary child selections execute exactly the selected scope.", "implemented": true, "prdRefs": ["Requirements", "Data / API / Integrations"] }, { "id": "F016", "description": "Implement exact-scope grouped execution so selected parent or child rows never re-expand into unselected sibling candidates.", "implemented": true, "prdRefs": ["Requirements"] }, { "id": "F017", "description": "Support true combined invoice generation for compatible grouped selections spanning multiple child candidates.", "implemented": true, "prdRefs": ["Goals", "Requirements", "Data / API / Integrations"] }, { "id": "F018", "description": "Preserve fan-out generation for incompatible grouped selections so the same grouped UI can still produce multiple invoices safely.", "implemented": true, "prdRefs": ["Goals", "Requirements"] }, { "id": "F019", "description": "Redesign duplicate-prevention and idempotency logic so grouped parent selections and multi-child executions are safe against re-invoicing.", "implemented": true, "prdRefs": ["Requirements", "Data / API / Integrations"] }, { "id": "F020", "description": "Redesign invoice persistence so a combined multi-assignment invoice does not require a fake single `client_contract_id` invoice owner.", "implemented": true, "prdRefs": ["Product Decisions", "Data / API / Integrations", "Rollout / Migration"] }, { "id": "F021", "description": "Make charge-level assignment attribution authoritative for combined invoices and preserve that attribution through billing persistence.", "implemented": true, "prdRefs": ["Product Decisions", "Data / API / Integrations"] }, { "id": "F022", "description": "Update invoice reads, history, and billing query surfaces so combined invoices remain explainable and queryable without relying on invoice-header assignment ownership alone.", "implemented": true, "prdRefs": ["Requirements", "Data / API / Integrations"] }, { "id": "F023", "description": "Keep purchase-order enforcement safe by disabling combined execution when selected children do not share compatible PO scope and by preserving correct PO behavior for valid combinations.", "implemented": true, "prdRefs": ["Product Decisions", "Requirements", "Data / API / Integrations"] }, { "id": "F024", "description": "Preserve existing single-assignment and single-child recurring invoice behavior so the grouped model is additive rather than regressive.", "implemented": true, "prdRefs": ["Requirements", "Acceptance Criteria"] }, { "id": "F025", "description": "Update billing docs, runbooks, and in-product explanatory copy to describe grouped selection, combinability, and smart `Select All` semantics.", "implemented": true, "prdRefs": ["UX / UI Notes", "Rollout / Migration", "Acceptance Criteria"] } ]