insertGetId([ 'name' => 'DA', 'slug' => 'da', 'description' => 'Direct Assignment system configuration for Odoo JV entries.', 'is_active' => true, 'created_at' => $now, 'updated_at' => $now, ]); DB::table('odoo_systems')->insert([ [ 'name' => 'Credit Fair', 'slug' => 'credit-fair', 'description' => 'Credit Fair system configuration for Odoo JV entries.', 'is_active' => true, 'created_at' => $now, 'updated_at' => $now, ], [ 'name' => 'Co-lending', 'slug' => 'co-lending', 'description' => 'Co-lending system configuration for Odoo JV entries.', 'is_active' => true, 'created_at' => $now, 'updated_at' => $now, ], ]); // ── DA Sections + Steps + Entries (migrated from hardcoded config) ──── $sections = [ // ── 1. Disbursement ─────────────────────────────────────────────── [ 'name' => 'Disbursement', 'sort_order' => 1, 'steps' => [ [ 'step_key' => 'disbursement_pv', 'label' => 'Disbursement PV', 'voucher_type' => 'Payment Voucher', 'is_enabled' => true, 'sort_order' => 1, 'entries' => [ [ 'sequence' => 1, 'type' => 'Dr', 'account' => 'Loans and Advances', 'gl_code' => '130001', 'summary' => 'Disbursed Amount', 'amount_field' => 'disbursement_amount', // falls back to principal_total 'is_balancing_credit'=> false, ], [ 'sequence' => 2, 'type' => 'Cr', 'account' => 'Bank A/c', 'gl_code' => '100201', 'summary' => '', 'amount_field' => null, 'is_balancing_credit'=> true, // sum of all Dr entries in this step ], ], ], ], ], // ── 2. Interest ─────────────────────────────────────────────────── [ 'name' => 'Interest', 'sort_order' => 2, 'steps' => [ [ 'step_key' => 'interest_accrued_not_due_month_end_jv', 'label' => 'Interest Accrued Not Due – Month End JV', 'voucher_type' => 'Journal Voucher', 'is_enabled' => false, 'sort_order' => 1, 'entries' => [ [ 'sequence' => 1, 'type' => 'Dr', 'account' => 'Accrued Interest for Loans not Due', 'gl_code' => '142001', 'summary' => '', 'amount_field' => null, 'is_balancing_credit'=> false, ], [ 'sequence' => 2, 'type' => 'Cr', 'account' => 'Interest Income', 'gl_code' => '403003', 'summary' => '', 'amount_field' => null, 'is_balancing_credit'=> true, ], ], ], [ 'step_key' => 'reversal_interest_accrued_not_due_jv', 'label' => 'Reversal – Interest Accrued Not Due JV', 'voucher_type' => 'Journal Voucher', 'is_enabled' => false, 'sort_order' => 2, 'entries' => [ [ 'sequence' => 1, 'type' => 'Dr', 'account' => 'Interest Income', 'gl_code' => '403003', 'summary' => '', 'amount_field' => null, 'is_balancing_credit'=> false, ], [ 'sequence' => 2, 'type' => 'Cr', 'account' => 'Accrued Interest for Loans not Due', 'gl_code' => '142001', 'summary' => '', 'amount_field' => null, 'is_balancing_credit'=> true, ], ], ], [ 'step_key' => 'interest_due_for_the_month', 'label' => 'Interest Due for the Month', 'voucher_type' => 'Journal Voucher', 'is_enabled' => true, 'sort_order' => 3, 'entries' => [ [ 'sequence' => 1, 'type' => 'Dr', 'account' => 'Accrued Interest for Loans Due', 'gl_code' => '142000', 'summary' => 'Interest due for the month', 'amount_field' => 'interest_due', 'is_balancing_credit'=> false, ], [ 'sequence' => 2, 'type' => 'Cr', 'account' => 'Interest Income', 'gl_code' => '403003', 'summary' => '', 'amount_field' => null, 'is_balancing_credit'=> true, ], ], ], ], ], // ── 3. Penal Charges ────────────────────────────────────────────── [ 'name' => 'Penal Charges', 'sort_order' => 3, 'steps' => [ [ 'step_key' => 'penal_charges_jv', 'label' => 'Penal Charges JV', 'voucher_type' => 'Journal Voucher', 'is_enabled' => true, 'sort_order' => 1, 'entries' => [ [ 'sequence' => 1, 'type' => 'Dr', 'account' => 'Penal Charges Receivable', 'gl_code' => '115004', 'summary' => 'Penal charges received', 'amount_field' => 'penal_charges_received', 'is_balancing_credit'=> false, ], [ 'sequence' => 2, 'type' => 'Cr', 'account' => 'Penal Charges', 'gl_code' => '403005', 'summary' => '', 'amount_field' => null, 'is_balancing_credit'=> true, ], ], ], ], ], // ── 4. Foreclosure Charges ──────────────────────────────────────── [ 'name' => 'Foreclosure Charges', 'sort_order' => 4, 'steps' => [ [ 'step_key' => 'foreclosure_charges_jv', 'label' => 'Foreclosure Charges JV', 'voucher_type' => 'Journal Voucher', 'is_enabled' => false, 'sort_order' => 1, 'entries' => [ [ 'sequence' => 1, 'type' => 'Dr', 'account' => 'Foreclosure Charges Receivable', 'gl_code' => '115006', 'summary' => '', 'amount_field' => null, 'is_balancing_credit'=> false, ], [ 'sequence' => 2, 'type' => 'Cr', 'account' => 'Foreclosure Charges', 'gl_code' => '400011', 'summary' => '', 'amount_field' => null, 'is_balancing_credit'=> false, ], [ 'sequence' => 3, 'type' => 'Cr', 'account' => 'IGST @ 18% Receivable', 'gl_code' => '209012', 'summary' => '', 'amount_field' => null, 'is_balancing_credit'=> false, ], [ 'sequence' => 4, 'type' => 'Cr', 'account' => 'CGST @ 9% Receivable', 'gl_code' => '209004', 'summary' => '', 'amount_field' => null, 'is_balancing_credit'=> false, ], [ 'sequence' => 5, 'type' => 'Cr', 'account' => 'SGST @ 9% Receivable', 'gl_code' => '209009', 'summary' => '', 'amount_field' => null, 'is_balancing_credit'=> false, ], ], ], ], ], // ── 5. Collections ──────────────────────────────────────────────── [ 'name' => 'Collections', 'sort_order' => 5, 'steps' => [ [ 'step_key' => 'collections_rv', 'label' => 'Collections RV', 'voucher_type' => 'Receipt Voucher', 'is_enabled' => false, 'sort_order' => 1, 'entries' => [ ['sequence' => 1, 'type' => 'Cr', 'account' => 'Accrued Interest for Loans Due', 'gl_code' => '142000', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => false], ['sequence' => 2, 'type' => 'Cr', 'account' => 'Loans and Advances', 'gl_code' => '130001', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => false], ['sequence' => 3, 'type' => 'Cr', 'account' => 'Penal Charges Receivable', 'gl_code' => '115004', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => false], ['sequence' => 4, 'type' => 'Cr', 'account' => 'Foreclosure Charges Receivable', 'gl_code' => '115006', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => false], ['sequence' => 5, 'type' => 'Cr', 'account' => 'Excess / advance received from customers','gl_code' => '236004', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => false], ['sequence' => 6, 'type' => 'Dr', 'account' => 'Bank A/c', 'gl_code' => '100201', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => false], ], ], [ 'step_key' => 'refund_of_excess_pv', 'label' => 'Refund of Excess PV', 'voucher_type' => 'Payment Voucher', 'is_enabled' => false, 'sort_order' => 2, 'entries' => [ ['sequence' => 1, 'type' => 'Dr', 'account' => 'Excess / advance received from customers', 'gl_code' => '236004', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => false], ['sequence' => 2, 'type' => 'Cr', 'account' => 'Bank A/c', 'gl_code' => '100201', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => false], ], ], [ 'step_key' => 'emi_amount_received', 'label' => 'EMI Amount Received', 'voucher_type' => 'Payment Voucher', 'is_enabled' => true, 'sort_order' => 3, 'entries' => [ [ 'sequence' => 1, 'type' => 'Cr', 'account' => 'Bank A/c', 'gl_code' => '160002', 'summary' => 'EMI received', 'amount_field' => 'total_emi_received', 'is_balancing_credit'=> false, ], [ 'sequence' => 2, 'type' => 'Dr', 'account' => 'Accrued Interest for Loans Due', 'gl_code' => '142000', 'summary' => 'Interest received', 'amount_field' => 'total_interest_received', 'is_balancing_credit'=> false, ], [ 'sequence' => 3, 'type' => 'Dr', 'account' => 'Loans and Advances', 'gl_code' => '130001', 'summary' => 'Principal received', 'amount_field' => 'total_principal_received', 'is_balancing_credit'=> false, ], ], ], ], ], // ── 6. NPA / Bad Debts ──────────────────────────────────────────── [ 'name' => 'NPA / Bad Debts', 'sort_order' => 6, 'steps' => [ [ 'step_key' => 'bad_debts_written_off_jv', 'label' => 'Bad Debts Written Off JV', 'voucher_type' => 'Journal Voucher', 'is_enabled' => false, 'sort_order' => 1, 'entries' => [ ['sequence' => 1, 'type' => 'Dr', 'account' => 'Bad Debts Written-Off', 'gl_code' => '418012', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => false], ['sequence' => 2, 'type' => 'Cr', 'account' => 'Loans and Advances', 'gl_code' => '130001', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => false], ], ], [ 'step_key' => 'write_off_collections_rv', 'label' => 'Write-Off Collections RV', 'voucher_type' => 'Receipt Voucher', 'is_enabled' => false, 'sort_order' => 2, 'entries' => [ ['sequence' => 1, 'type' => 'Cr', 'account' => 'Write Back/ Bad Debts Recovered', 'gl_code' => '409006', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => false], ['sequence' => 2, 'type' => 'Dr', 'account' => 'Bank A/c', 'gl_code' => '100201', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => false], ], ], ], ], // ── 7. Loan Processing Fee ──────────────────────────────────────── [ 'name' => 'Loan Processing Fee', 'sort_order' => 7, 'steps' => [ [ 'step_key' => 'loan_processing_fee_gst_invoice', 'label' => 'Loan Processing Fee – GST Invoice', 'voucher_type' => 'GST Invoice', 'is_enabled' => false, 'sort_order' => 1, 'entries' => [ ['sequence' => 1, 'type' => 'Dr', 'account' => 'Processing / Upfront Fee', 'gl_code' => '400007', 'summary' => '', 'amount_field' => 'processing_fee', 'is_balancing_credit' => false], ['sequence' => 2, 'type' => 'Dr', 'account' => 'Documentation/ Transaction Handling Charges', 'gl_code' => '400002', 'summary' => '', 'amount_field' => 'document_charges', 'is_balancing_credit' => false], ['sequence' => 3, 'type' => 'Dr', 'account' => 'Duties & Taxes - LWF', 'gl_code' => '206003', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => false], ['sequence' => 4, 'type' => 'Cr', 'account' => 'Loan Processing Fee Receivable', 'gl_code' => '154005', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => true], ], ], [ 'step_key' => 'tds_on_lpf_jv', 'label' => 'TDS on LPF JV', 'voucher_type' => 'Journal Voucher', 'is_enabled' => false, 'sort_order' => 2, 'entries' => [ ['sequence' => 1, 'type' => 'Dr', 'account' => 'Loan Processing Fee Receivable / Party Name', 'gl_code' => '', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => false], ['sequence' => 2, 'type' => 'Cr', 'account' => 'TDS - Recoverable - Loans', 'gl_code' => '157022', 'summary' => '', 'amount_field' => null, 'is_balancing_credit' => false], ], ], [ 'step_key' => 'lpf_received_rv', 'label' => 'LPF Received RV', 'voucher_type' => 'Receipt Voucher', 'is_enabled' => false, 'sort_order' => 3, 'entries' => [ [ 'sequence' => 1, 'type' => 'Dr', 'account' => 'Bank A/c', 'gl_code' => '160002', 'summary' => '', 'amount_field' => 'processing_fee', 'is_balancing_credit'=> false, ], [ 'sequence' => 2, 'type' => 'Cr', 'account' => 'Loan Processing Fee Receivable', 'gl_code' => '154005', 'summary' => '', 'amount_field' => null, 'is_balancing_credit'=> true, ], ], ], ], ], ]; // ── Insert DA sections, steps, entries ──────────────────────────────── foreach ($sections as $sectionData) { $sectionId = DB::table('odoo_jv_sections')->insertGetId([ 'system_id' => $daId, 'name' => $sectionData['name'], 'sort_order' => $sectionData['sort_order'], 'created_at' => $now, 'updated_at' => $now, ]); foreach ($sectionData['steps'] as $stepData) { $stepId = DB::table('odoo_jv_steps')->insertGetId([ 'section_id' => $sectionId, 'step_key' => $stepData['step_key'], 'label' => $stepData['label'], 'voucher_type' => $stepData['voucher_type'], 'is_enabled' => $stepData['is_enabled'], 'sort_order' => $stepData['sort_order'], 'created_at' => $now, 'updated_at' => $now, ]); foreach ($stepData['entries'] as $entry) { DB::table('odoo_jv_entries')->insert([ 'step_id' => $stepId, 'type' => $entry['type'], 'account' => $entry['account'], 'gl_code' => $entry['gl_code'], 'sequence' => $entry['sequence'], 'summary' => $entry['summary'], 'amount_field' => $entry['amount_field'], 'is_balancing_credit'=> $entry['is_balancing_credit'], 'created_at' => $now, 'updated_at' => $now, ]); } } } } }