vendor_payment_diff_amount/FIX_SUMMARY.md
2025-12-06 10:24:16 +07:00

5.4 KiB

Fix Summary: "Missing required account on accountable line" Error

Problem

When creating a vendor payment with deductions, the system threw the error:

The operation cannot be completed: Missing required account on accountable line.

This occurred because Odoo validates that lines with payable/receivable accounts must have a partner_id set.

Root Cause

The issue had two parts:

  1. Deduction lines were incorrectly getting partner_id: All deduction lines were being created with partner_id, but deduction accounts (like tax accounts) are typically NOT payable/receivable accounts and should NOT have a partner.

  2. Odoo's validation: When a line has a payable/receivable account type, Odoo requires the partner_id field. When a line has other account types (expense, liability, etc.), the partner_id should be optional or omitted.

Solution

Modified the _prepare_move_line_default_vals method to:

  1. Ensure counterpart line has partner: The payable/expense line (counterpart) always gets partner_id set
  2. Conditional partner on deduction lines: Only add partner_id to deduction lines if the account type requires it

Code Change

Before:

deduction_line = {
    'name': deduction_line_name,
    'date_maturity': self.date,
    'amount_currency': -deduction.amount_substract,
    'currency_id': self.currency_id.id,
    'debit': 0.0,
    'credit': deduction_balance,
    'partner_id': self.partner_id.id,  # ❌ Always added
    'account_id': deduction.substract_account_id.id,
}

After:

deduction_line = {
    'name': deduction_line_name,
    'date_maturity': self.date,
    'amount_currency': -deduction.amount_substract,
    'currency_id': self.currency_id.id,
    'debit': 0.0,
    'credit': deduction_balance,
    'account_id': deduction.substract_account_id.id,
}

# Only add partner_id if the account requires it
if deduction.substract_account_id.account_type in ('asset_receivable', 'liability_payable'):
    deduction_line['partner_id'] = self.partner_id.id  # ✅ Conditionally added

Account Types

Accounts that REQUIRE partner_id:

  • asset_receivable (Customer accounts)
  • liability_payable (Vendor accounts)

Accounts that DON'T need partner_id:

  • liability_current (Tax payable accounts like PPh 21, PPh 29)
  • expense (Expense accounts)
  • income (Income accounts)
  • asset_cash (Bank accounts)
  • All other account types

Result

Now the journal entry is created correctly:

Example: Payment Rp 2,000,000 with PPh 21 (Rp 100,000) and PPh 29 (Rp 50,000)

Account                              | Debit           | Credit          | Partner
-------------------------------------|-----------------|-----------------|------------------
Accounts Payable                     | Rp 2,000,000.00 |                 | PT Telkom ✅
PPh 21 (Tax Payable)                 |                 | Rp 100,000.00   | (none) ✅
PPh 29 (Tax Payable)                 |                 | Rp 50,000.00    | (none) ✅
Bank Account                         |                 | Rp 1,850,000.00 | (none) ✅
-------------------------------------|-----------------|-----------------|------------------
TOTAL                                | Rp 2,000,000.00 | Rp 2,000,000.00 |

Key Points:

  • Payable account has partner (required)
  • Tax accounts don't have partner (correct)
  • Bank account doesn't have partner (correct)
  • Entry is balanced
  • No validation errors

Testing

To test the fix:

  1. Create a payment without expense account:

    - Partner: Any vendor
    - Amount: 1000
    - Deduction: PPh 21 - 100 (use a tax account)
    - Result: Should post successfully
    
  2. Create a payment with expense account:

    - Partner: Any vendor
    - Amount: 2000
    - Expense Account: Telepon & Internet
    - Deduction 1: PPh 21 - 100
    - Deduction 2: PPh 29 - 50
    - Result: Should post successfully
    
  3. Verify journal entries:

    • Check that payable/expense line has partner
    • Check that tax lines don't have partner
    • Check that entry is balanced

Important Notes

Deduction Account Selection

When adding deductions, make sure to use the correct account types:

Correct accounts for deductions:

  • Tax payable accounts (PPh 21, PPh 23, PPh 29, etc.)
  • Expense accounts (if recording as expense)
  • Liability accounts (for other withholdings)

Don't use these for deductions:

  • Accounts Payable (vendor accounts)
  • Accounts Receivable (customer accounts)

Why This Matters

Using payable/receivable accounts for deductions would create confusion:

  • It would require a partner on the deduction line
  • It would mix vendor payables with tax payables
  • It would complicate reconciliation
  • It's not the correct accounting treatment

Files Modified

  1. models/account_payment.py

    • Added conditional partner_id logic for deduction lines
    • Ensured counterpart line always has partner_id
  2. SCENARIOS.md

    • Updated validation rules
    • Added explanation about partner_id handling
    • Updated troubleshooting section
  3. FIX_SUMMARY.md (this file)

    • Documented the fix and reasoning

Version

This fix is included in version 2.0.0 of the module.

  • "Missing required account on accountable line" error
  • Partner validation on journal entry lines
  • Deduction account configuration

Credits

Fixed based on user feedback and testing with real-world scenarios.