
=== vendor_purchase_bills ===
  id  int(11) unsigned
  bill_no  varchar(50)
  vendor_invoice_no  varchar(100)
  vendor_invoice_date  date
  vendor_id  int(11)
  po_id  int(11)
  grn_id  int(11)
  currency  varchar(10)
  subtotal  decimal(15,2)
  tax_amount  decimal(15,2)
  cgst_amount  decimal(15,2)
  sgst_amount  decimal(15,2)
  igst_amount  decimal(15,2)
  freight_amount  decimal(15,2)
  debit_note_amount  decimal(15,2)
  retention_amount  decimal(15,2)
  tds_amount  decimal(15,2)
  net_payable  decimal(15,2)
  match_status  enum('pending','matched','variance','hold')
  posting_status  enum('not_posted','posted','failed')
  payment_status  enum('unpaid','partial','paid')
  due_date  date
  status  enum('draft','submitted','approved','posted','closed','rejected')
  rejection_reason  text
  notes  text
  created_by  int(11)
  updated_by  int(11)
  approved_by  int(11)
  approved_at  datetime
  created_at  datetime
  updated_at  datetime
  deleted_at  datetime

=== vendor_purchase_bill_items ===
  id  int(11) unsigned
  bill_id  int(11)
  po_item_id  int(11)
  grn_item_id  int(11)
  item_id  int(11)
  item_description  varchar(500)
  uom  varchar(30)
  billed_qty  decimal(15,3)
  accepted_qty  decimal(15,3)
  unit_rate  decimal(15,4)
  po_rate  decimal(15,4)
  variance_qty  decimal(15,3)
  variance_rate  decimal(15,4)
  variance_amount  decimal(15,2)
  tax_amount  decimal(15,2)
  line_total  decimal(15,2)
  match_status  enum('matched','qty_variance','rate_variance','tax_variance','pending')
  created_at  datetime
  updated_at  datetime
MISSING: goods_receipt_notes

=== grn_items ===
  id  int(11)
  grn_id  int(11)
  item_id  int(11)
  qty_ordered  int(11)
  qty_received  int(11)
  qty_accepted  int(11)
  qty_rejected  int(11)
  batch_number  varchar(50)
  serial_number  varchar(50)
  unit_price  decimal(12,2)
  qc_passed  tinyint(1)
  created_at  timestamp

=== purchase_orders ===
  id  int(10) unsigned
  po_no  varchar(30)
  po_type  enum('material','service','subcontract','hire','asset','consumable')
  pr_id  int(10) unsigned
  comparison_id  int(10) unsigned
  vendor_id  int(10) unsigned
  site_id  int(10) unsigned
  po_date  date
  required_by  date
  created_by  int(10) unsigned
  subtotal_amount  decimal(18,4)
  gst_amount  decimal(14,4)
  cgst_amount  decimal(14,4)
  sgst_amount  decimal(14,4)
  igst_amount  decimal(14,4)
  supply_type  enum('intra_state','inter_state')
  other_charges  decimal(14,4)
  total_amount  decimal(18,4)
  discount_percent  decimal(5,2)
  discount_amount  decimal(14,4)
  net_amount  decimal(18,4)
  payment_terms  varchar(255)
  delivery_terms  varchar(255)
  special_instructions  text
  inco_terms  varchar(50)
  po_status  enum('DRAFT','PENDING_APPROVAL','APPROVED','ISSUED','PARTIALLY_RECEIVED','FULLY_RECEIVED','CANCELLED','REJECTED')
  approval_status  enum('NOT_SUBMITTED','AWAITING_APPROVAL','APPROVED','REJECTED')
  issued_at  datetime
  issued_by  int(10) unsigned
  approved_at  datetime
  approved_by  int(10) unsigned
  erp_sync_status  enum('PENDING','SYNCED','FAILED')
  erp_sync_at  datetime
  erp_reference  varchar(50)
  remarks  text
  created_at  datetime
  updated_at  datetime
  source_type  enum('rfq','comparison','rate_contract','direct','emergency')
  indent_id  int(11)
  rfq_id  int(11)
  quote_id  int(11)
  contract_id  int(11)
  project_id  int(11)
  department_id  int(11)
  budget_id  int(11)
  cost_code_id  int(11)
  store_id  int(11)
  currency  varchar(10)
  exchange_rate  decimal(15,6)
  freight_amount  decimal(15,2)
  packing_forwarding_amount  decimal(15,2)
  insurance_amount  decimal(15,2)
  taxable_amount  decimal(15,2)
  tax_amount  decimal(15,2)
  round_off_amount  decimal(8,2)
  retention_percent  decimal(8,3)
  retention_amount  decimal(15,2)
  advance_percent  decimal(8,3)
  advance_amount  decimal(15,2)
  delivery_terms_id  int(11)
  payment_terms_id  int(11)
  warranty_terms_id  int(11)
  inspection_terms_id  int(11)
  status  varchar(50)
  acknowledged_by_vendor_at  datetime
  delivery_status  enum('pending','partial','complete','overdue')
  billing_status  enum('not_billed','partial','fully_billed')
  payment_status  enum('unpaid','partial','paid')
  closure_status  enum('open','closed','cancelled','on_hold')
  closed_at  datetime
  closure_reason  varchar(255)
  erp_sync_reference  varchar(100)
  erp_sync_error  text
  updated_by  int(11)
  deleted_at  datetime

=== purchase_order_items ===
  id  int(11) unsigned
  po_id  int(11)
  pr_item_id  int(11)
  rfq_item_id  int(11)
  quote_item_id  int(11)
  item_id  int(11)
  item_code_snapshot  varchar(100)
  item_name_snapshot  varchar(500)
  uom_id  int(11)
  uom  varchar(30)
  ordered_qty  decimal(15,3)
  received_qty  decimal(15,3)
  accepted_qty  decimal(15,3)
  rejected_qty  decimal(15,3)
  returned_qty  decimal(15,3)
  billed_qty  decimal(15,3)
  balance_qty  decimal(15,3)
  unit_rate  decimal(15,4)
  discount_percent  decimal(8,3)
  hsn_sac  varchar(20)
  tax_profile_id  int(11)
  cgst_rate  decimal(8,3)
  sgst_rate  decimal(8,3)
  igst_rate  decimal(8,3)
  line_tax_amount  decimal(15,2)
  line_total  decimal(15,2)
  delivery_date  date
  delivery_schedule_id  int(11)
  inspection_required  tinyint(1)
  warranty_months  int(11)
  specifications  text
  status  enum('pending','issued','partial','received','closed','cancelled')
  notes  text
  sort_order  int(11)
  created_at  datetime
  updated_at  datetime
