Production
Read Conventions first.
production_boms
One BOM per product item.
id,business_id,product_item_id→ items - UNIQUE (business_id, product_item_id)warehouse_id,price_list_idnullableplanned_production_qtynumeric(14,4) DEFAULT 1product_pricenumeric(14,2)distribution_rule,project- free text, not FKscreated_by,created_at,updated_at
production_bom_lines
Standard cost is not stored - computed live from the component’s default_purchase_price.
id,production_bom_idCASCADE,line_nointcomponent_item_id→ items NOT NULLquantity,additional_quantitynumeric(14,3)warehouse_id,price_list_idnullable;unit_pricenumeric(14,2) (denormalized)issue_methodCHECK IN (‘manual’,‘backflush’)comments,created_at
production_orders
id,business_id,document_no- UNIQUE (business_id, document_no)branch_idNOT NULLorder_typeDEFAULT ‘standard’ - CHECK IN (‘standard’,‘disassembly’); disassembly inverts which side Issue/Receipt act onproduct_item_idNOT NULL,production_bom_idNOT NULL,warehouse_idNOT NULLplanned_quantitynumeric(14,3) NOT NULLproduct_quantity_done- standard: product received so far; disassembly: product issued (torn down) so fardue_date,remarksstatusCHECK IN (‘draft’,‘posted’,‘closed’,‘cancelled’)posted_at/posted_by,created_by,created_at
production_order_lines
Snapshot of the BOM, scaled by planned_quantity / production_boms.planned_production_qty.
id,production_order_idCASCADE,line_noint,component_item_idNOT NULLplanned_quantitynumeric(14,3)quantity_done- standard: issued so far; disassembly: received back so farwarehouse_id,issue_methodCHECK IN (‘manual’,‘backflush’),row_statusCHECK IN (‘open’,‘closed’)created_at
production_issues / production_issue_lines
- production_issues -
id,business_id,document_noUNIQUE (business_id, document_no);branch_idNOT NULL,production_order_idNOT NULL,issue_date,remarks;statusCHECK IN (‘draft’,‘posted’,‘cancelled’);posted_at/posted_by,created_by,created_at - production_issue_lines -
id,production_issue_idCASCADE;source_order_line_id→ production_order_lines RESTRICT NULL - NULL means “this line is the order’s own product” (the disassembly case);item_idNOT NULL,warehouse_idNOT NULL,quantity,unit_cost,line_total,cost_center_id,created_at
production_receipts / production_receipt_lines
- production_receipts - same shape as production_issues with
receipt_date; UNIQUE (business_id, document_no) - production_receipt_lines - mirror of production_issue_lines, plus batch/serial capture.
id,production_receipt_idCASCADE,source_order_line_idNULL (NULL = receives the order’s own product);item_id,warehouse_id,quantity,unit_cost,line_total;batch_number,expiry_date,serial_numbers,admission_date;cost_center_id,created_at