| controllers | ||
| data | ||
| models | ||
| security | ||
| static/src/kiosk | ||
| views | ||
| __init__.py | ||
| __manifest__.py | ||
| .gitignore | ||
| README.md | ||
HR Expense Account Split & Kiosk (Odoo 19)
This module enhances Odoo's standard Expense workflow by providing account-splitting logic, an Anonymous Expense Kiosk for employees, and automated realization accounting.
🚀 Features
1. Dynamic Sequences
- Employee Reimbursement (RMBS): Expenses paid by the employee follow the prefix
RMBS/YYYY/MM/XXXXX. - Company Advance (KSBN): Expenses paid by the company (Kasbon) follow the prefix
KSBN/YYYY/MM/XXXXX. - This ensures clear separation between standard reimbursements and company-issued advances at a glance.
2. Enhanced Status Workflow (Odoo 19 Refined)
- Wait Post Status (Yellow): A new intermediate status for company-paid expense reports.
- Workflow:
Approved->Posted->Wait Post->Done. - Logic: The report moves to Wait Post after the advance is paid. It stays here until the employee submits all receipts and the accountant posts the final realization journal.
- Done (Green): Only reached when all realization accounting is completed, ensuring the physical and financial cycles are fully synchronized.
- Architectural Note: In Odoo 19, the legacy
hr.expense.sheetlogic has been merged directly into the corehr.expensemodel for better performance and consistency.
3. Account Splitting & Kasbon Logic
- Dynamic Selection: Automatically routes expenses to different GL accounts based on the
Paid Byfield. - Configuration: Set distinct
Expense Account (Employee)andExpense Account (Company)directly on the Expense Category form. - Advance Account: Company-paid advances (Kasbon) use account 115101 for the debit side of the initial payment journal entry.
4. Journal Entry Safeguards
- Reversal Protection: The Reverse Entry button is automatically hidden on journal entries linked to expenses. This prevents accidental reversals that would cause the accounting ledger to fall out of sync with the expense status.
5. Anonymous Expense Kiosk
- PIN-Protected Access: Secure employee login via a 4-digit PIN on a tablet interface.
- Real-Time Totaling: Automatically summarizes multiple physical receipts into a single realization.
- Image Optimization: Client-side JPEG compression (1024px, 70% quality) reduces server storage usage by ~90%.
6. Automated Realization Accounting
- Balanced Journal Entries: Automatically calculates discrepancies between the advance paid and actual spending.
- Discrepancy Accounts:
- Over-spent (Spent > Paid): Balance is moved to
216109 Biaya Lain yang masih harus dibayar(Liability/Payable). - Under-spent (Spent < Paid): Balance is moved to
114101 Piutang Karyawan(Receivable).
- Over-spent (Spent > Paid): Balance is moved to
- Discrepancy Settlement:
- Create Vendor Payment: One-click button on the realization form to pay the employee the difference.
- Create Customer Payment: One-click button on the realization form to record the employee returning the excess funds.
🛠 Configuration
- GL Accounts:
- Expenses > Configuration > Expense Categories.
- Define the two accounts under the Accounting tab.
- Kiosk Activation:
- Go to Expenses > Configuration > Settings.
- The Kiosk URL is displayed in the "Expense Kiosk" block. You can regenerate the token here if needed.
- Employee PINs:
- Set 4-digit PINs on employee records for Kiosk access.
📋 Technical Notes
- Odoo Version: 19.0
- Controller:
/hr_expense/kiosk/<token> - Models:
hr.expense,hr.expense.realization,account.move,account.payment - JS Framework: Odoo 19 OWL