Go to file
2026-04-21 09:23:39 +07:00
controllers refactor: remove HrExpenseSheet model and consolidate expense status logic into HrExpense and HrExpenseRealization models 2026-04-21 09:23:39 +07:00
data feat: implement split expense sequences and add wait_post state for company-paid expenses with pending realizations 2026-04-02 15:35:22 +07:00
models refactor: remove HrExpenseSheet model and consolidate expense status logic into HrExpense and HrExpenseRealization models 2026-04-21 09:23:39 +07:00
security feat: implement expense realization module with receipt tracking and automated journal entries 2026-04-01 13:56:03 +07:00
static/src/kiosk feat: implement HR expense kiosk interface for employee self-service expense reporting and realization 2026-04-01 17:19:17 +07:00
views refactor: remove HrExpenseSheet model and consolidate expense status logic into HrExpense and HrExpenseRealization models 2026-04-21 09:23:39 +07:00
__init__.py feat: register controllers module in package initialization 2026-04-07 15:05:10 +07:00
__manifest__.py migrate to odoo 19.0 2026-04-20 10:51:36 +07:00
.gitignore first commit 2026-03-31 17:25:04 +07:00
README.md feat: update version and document new realization accounting workflow and kiosk features 2026-04-02 15:42:05 +07:00

HR Expense Account Split & Kiosk

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

  • 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.

3. Account Splitting

  • Dynamic Selection: Automatically routes expenses to different GL accounts based on the Paid By field.
  • Configuration: Set distinct Expense Account (Employee) and Expense Account (Company) directly on the Expense Category form.

4. 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%.

5. 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).
  • 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.

6. Validation & Security

  • Mandatory Receipts: Prevents submission of employee-paid expenses without attachments.
  • Overdue Tracking: Highlights missing realization receipts in red/alerts for company-paid expenses.

🛠 Configuration

  1. GL Accounts:
    • Expenses > Configuration > Expense Categories.
    • Define the two accounts under the Accounting tab.
  2. Kiosk Token:
    • URL structure: /hr_expense/kiosk/d56db48c463444c88b86f14980d7a185.
  3. Employee PINs:
    • Set 4-digit PINs on employee records for Kiosk access.

📋 Technical Notes

  • Controller: /hr_expense/kiosk/<token>
  • Models: hr.expense, hr.expense.sheet, hr.expense.realization, account.payment
  • JS Framework: Odoo 17 OWL