From 35934e75ab041bd9266160871fb560896505088c Mon Sep 17 00:00:00 2001 From: Suherdy Yacob Date: Wed, 6 May 2026 11:33:11 +0700 Subject: [PATCH] docs: convert README from Markdown to reStructuredText format --- README.md | 56 -------------------------------------------- README.rst | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 56 deletions(-) delete mode 100644 README.md create mode 100644 README.rst diff --git a/README.md b/README.md deleted file mode 100644 index 20b2d79..0000000 --- a/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# 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.sheet` logic has been merged directly into the core `hr.expense` model for better performance and consistency. - -### 3. Account Splitting & Kasbon Logic -- **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. -- **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). -- **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 - -1. **GL Accounts**: - - **Expenses > Configuration > Expense Categories**. - - Define the two accounts under the **Accounting** tab. -2. **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. -3. **Employee PINs**: - - Set 4-digit PINs on employee records for Kiosk access. - -## 📋 Technical Notes -- **Odoo Version**: 19.0 -- **Controller**: `/hr_expense/kiosk/` -- **Models**: `hr.expense`, `hr.expense.realization`, `account.move`, `account.payment` -- **JS Framework**: Odoo 19 OWL diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..36f23f2 --- /dev/null +++ b/README.rst @@ -0,0 +1,68 @@ +========================================= +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.sheet` logic has been merged directly into the core `hr.expense` model for better performance and consistency. + +3. Account Splitting & Kasbon Logic +----------------------------------- +* **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. +* **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). +* **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 +============= + +1. **GL Accounts**: + * **Expenses > Configuration > Expense Categories**. + * Define the two accounts under the **Accounting** tab. +2. **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. +3. **Employee PINs**: + * Set 4-digit PINs on employee records for Kiosk access. + +Technical Notes +=============== +* **Odoo Version**: 19.0 +* **Controller**: `/hr_expense/kiosk/` +* **Models**: `hr.expense`, `hr.expense.realization`, `account.move`, `account.payment` +* **JS Framework**: Odoo 19 OWL