客户一次运输常对应多份合同或同一合同内同品同包装多行(单价不同)。现行合同禁止同品同包装重复,运输计划每段只能选一份合同,用量按 (productId, packageSpec) 匹配,无法按合同明细行记账。计划员出车前已知道各合同行的目标量,归档时再确认实际量;司机与现场只需对货、不必见合同。
contract_id + contract_product_id,填写目标量(plan_qty)。UI 示意:docs/superpowers/demos/2026-10-05-contract-plan-line-qty-demo.html。
contract-line-plan-qty-bind:合同同品同包装多行;计划段多合同并绑定合同产品行;目标量/实际量分阶段校验;司机现场不暴露合同。openspec/specs/。落地后覆盖 crm-contract-multi-package-shared-qty 中「同一 productId 下包装规格全局不重复」及「计划不绑 contractProductId」的假定;一行多包装共享池仍有效。pl_plan_load_product / pl_plan_delivery_product(及必要的 pl_plan_product)增列;assert_at_most_one_contract;pl_contract_plan_qty.py 主键;安排硬拦;归档超交确认;arrange-qty API。ContractFormDialog 去重;PlPlanFormDialog 多合同与合同行选品;归档弹窗实际量、地磅合计、超交二次确认;合同详情按行挂量。docs/sql/ + 迁移脚本。