Petty cash management
Operations of Fixed Imprest Funds, custodian spending limits, maker-checker governance, physical cash drawer denomination audits, and replenishment cycles.
SmartERP Petty Cash Management (custom_petty_cash and smarterp_approval_petty_cash) provides strict governance over petty cash disbursements, imprest floats, cash drawer audits, and fund replenishment.

Fixed Imprest Fund Principles#
Under the fixed imprest system, each department or branch is allocated a fixed cash float. The custodian is personally accountable for the physical currency plus valid disbursement vouchers:
$$ ext{Fixed Float Amount} = ext{Physical Cash in Drawer} + \sum ext{Paid Unreplenished Vouchers}$$
SmartERP enforces this equation through real-time computed balances:
$$ ext{current_balance} = ext{float_amount} - \sum_{ ext{state} = ext{'paid'}} ext{voucher.amount}$$

Petty Cash Fund Architecture#
Funds are configured under Accounting → Configuration → Petty Cash Funds (petty.cash.fund):
| Field Name | Technical Identifier | Type & Requirement | Business Logic / Validation Rule |
|---|---|---|---|
| Fund Name | name | Char (Required) | Descriptive title, e.g., "Head Office Operating Imprest Fund". |
| Custodian | custodian_id | Many2one res.users (Required) | The designated employee held legally liable for cash counts and vouchers. |
| Department | department_id | Many2one hr.department | Assigned department responsible for operational expenses. |
| Petty Cash Journal | journal_id | Many2one account.journal (Required) | Must be an active journal of type cash linked to petty cash GL account 111150. |
| Float Amount | float_amount | Monetary (Required, Tracked) | Authorized ceiling of the fund (e.g. ETB 50,000.00). |
| Current Balance | current_balance | Monetary (Computed, Stored) | Real-time available cash calculated from paid vouchers. |
| Fund Status | state | Selection (Tracked) | States: draft → active → closed. Vouchers can only be drawn against active funds. |
Step-by-Step Procedure: Raising and Settling a Voucher#
Every minor operational expenditure (courier, office supplies, emergency maintenance) follows a rigorous maker-checker flow:
+----------------------------------------------------------------------------------------------------+
| PETTY CASH VOUCHER GOVERNANCE LIFECYCLE |
+----------------------------------------------------------------------------------------------------+
| |
| [Step 1: Draft Creation] -------------------> Custodian enters Beneficiary, Purpose, Amount |
| | Defines Accounting Distribution (Debit Expense) |
| v |
| [Step 2: Action Check] ---------------------> Verified by Supervisor / Reviewer |
| | MAKER-CHECKER RULE: checked_by_id != prepared_by_id |
| v |
| [Step 3: Action Approve] -------------------> Department Head / Finance Manager Approval |
| | GATED APPROVAL: Requires SmartERP Approval (PCV) |
| v |
| [Step 4: Action Post / Pay] ----------------> Cashier disburses physical currency |
| | Creates & Posts General Ledger Journal Entry |
| v |
| [Audit & Replenishment] --------------------> Physical cash drawer count + Imprest top-up |
+----------------------------------------------------------------------------------------------------+
1. Draft Voucher Creation#
- Navigate to Accounting → Petty Cash → Vouchers and click New.
- Select the Petty Cash Fund. The currency and journal default automatically.
- In Paid To (
paid_to_id), select the partner or employee receiving cash. - Enter the In Settlement Of (Reason) explaining the expenditure.
- In the Accounting Lines (
line_ids) grid, specify the debit GL account:- Example: Debit Office Supplies Expense (
611200) ETB 1,450.00.
- Example: Debit Office Supplies Expense (
- The system computes
amount_in_wordsautomatically.
2. Maker-Checker Segregation Rule#
The user who prepared the voucher cannot check or approve it. The platform enforces this constraint in addons/smarterp_approval_petty_cash:
def action_check(self):
for voucher in self:
if voucher.prepared_by_id and voucher.prepared_by_id == self.env.user:
raise UserError(_(
"%s prepared this voucher and cannot also check it - maker and checker "
"must be different people."
) % voucher.prepared_by_id.display_name)
return super().action_check()
3. Integrated Approval Gate (GATE_CODE = 'PCV')#
When expenditure exceeds basic operational thresholds, clicking Approve or Post triggers an automatic gate check:
- If a formal approval request is active, the voucher remains locked until the request reaches
approvedstate insmarterp.approval.request. - Attempting to bypass the UI by updating
state = 'paid'via RPC or automated scripts is blocked by model-level write constraints.
4. Cash Disbursement & Automatic GL Posting#
Clicking Pay / Post (action_post) commits the transaction:
- Debit: Expense Account (e.g.
611200 Office Supplies) - Credit: Petty Cash Ledger Account (
111150 Head Office Imprest Cash) - Sets
voucher.state = 'paid'and recordscashier_id. - Reduces
current_balanceon the linked fund.
Warning
Unlinking (deleting) a petty cash voucher that has left draft state is strictly prohibited by system constraints to preserve an uncompromised audit trail. If a mistake occurs, cancel the voucher (action_cancel).
Petty Cash Payment Voucher ASCII Print Layout#
+----------------------------------------------------------------------------------------------------+
| አሸዋ ቴክኖሎጂ ሶሉሽንስ አ.ማ ቀን / Date: 2026-10-15 |
| ASHEWA TECHNOLOGY SOLUTION S.C. Voucher No: PCV-2026-00318 |
| Mob. +251 94 345 1226 / Addis Ababa, Ethiopia |
+----------------------------------------------------------------------------------------------------+
| አነስተኛ የጥሬ ገንዘብ ክፍያ ሰነድ / PETTY CASH PAYMENT VOUCHER |
+----------------------------------------------------------------------------------------------------+
| የከፋይ ስም / Paid To: Abebe Kebede (Maintenance Contractor) |
| የገንዘብ መጠን በፊደል / Amount in Words: One Thousand Eight Hundred Fifty Birr Only |
| በቁጥር / In Figure: [ ETB 1,850.00 ] |
| ክፍያው የተፈጸመበት ምክንያት / In Settlement Of: Emergency Data Center Cooling Unit Repair |
+----------------------------------------------------------------------------------------------------+
| ያዘጋጀው / Prepared By | ያረጋገጠው / Checked By | ያፀደቀው / Approved By |
| Sara Tadesse (Custodian) | Michael Bekele (Audit) | Dawit Haile (Finance Mgr) |
+------------------------------+-------------------------------+-------------------------------------+
| የተቀባይ ሙሉ ስም / Receipt Name: Abebe Kebede ፊርማ / Signature: _______________________ |
| የገንዘብ ያዥ ስም / Cashier Name: Tigist Girma ፊርማ / Signature: _______________________ |
+----------------------------------------------------------------------------------------------------+
| የሂሳብ ቁጥር / Account Number | ዴቢት / Debit (ETB) | ክሬዲት / Credit (ETB) |
+--------------------------------------+-------------------------------+-------------------------------------+
| 611400 Equipment Repair & Maint. | 1,850.00 | 0.00 |
| 111150 Head Office Imprest Fund | 0.00 | 1,850.00 |
+--------------------------------------+-------------------------------+-------------------------------------+
| Distribution: Original: Customer / Payer | 2nd Copy: Accountant | 3rd Copy: Pad |
+----------------------------------------------------------------------------------------------------+
Daily Cash Drawer Audit and Denomination Worksheet#
At the close of business every day, the custodian and internal auditor perform a physical denomination count using the standardized denomination schedule:
+----------------------------------------------------------------------------------------------------+
| CASH DRAWER PHYSICAL DENOMINATION AUDIT |
+-------------------------+----------------------+--------------------+------------------------------+
| Currency Denomination | Physical Bill Count | Subtotal (ETB) | Audit Notes |
+-------------------------+----------------------+--------------------+------------------------------+
| ETB 200 Note | 120 | 24,000.00 | High-denomination safe stack |
| ETB 100 Note | 145 | 14,500.00 | Working operational drawer |
| ETB 50 Note | 64 | 3,200.00 | Small change drawer |
| ETB 10 Note | 80 | 800.00 | Small change drawer |
| ETB 5 Note | 50 | 250.00 | Small change drawer |
| ETB 1 Coin | 75 | 75.00 | Coin tray |
+-------------------------+----------------------+--------------------+------------------------------+
| TOTAL PHYSICAL CASH: | | [ ETB 42,825.00 ] | (A) Actual Physical Currency |
| TOTAL PAID VOUCHERS: | 12 Vouchers on Pad | [ ETB 7,175.00 ] | (B) Paid Vouchers in Drawer |
+-------------------------+----------------------+--------------------+------------------------------+
| TOTAL ACCOUNTED (A + B):| | ETB 50,000.00 | MUST EQUAL FLOAT AMOUNT |
| AUTHORIZED FLOAT: | | ETB 50,000.00 | |
| AUDIT VARIANCE: | | [ ETB 0.00 ] | Balanced (Zero Discrepancy) |
+-------------------------+----------------------+--------------------+------------------------------+
Resolving Audit Discrepancies#
- Cash Shortage: If physical cash + vouchers < float, a shortage entry is recorded:
- Debit: Receivables from Employees - Cashier Shortage (
112950) - Credit: Petty Cash Fund (
111150)
- Debit: Receivables from Employees - Cashier Shortage (
- Cash Surplus: If physical cash + vouchers > float, the surplus is recognized:
- Debit: Petty Cash Fund (
111150) - Credit: Miscellaneous Non-Operating Income (
421900)
- Debit: Petty Cash Fund (
Fund Replenishment Lifecycle#
When a fund's current_balance drops below its replenishment trigger (typically 25% of float, e.g., ETB 12,500.00):
- The custodian opens Accounting → Petty Cash → Summary Wizard (
petty.cash.summary.wizard). - The wizard compiles all paid vouchers since the last replenishment date.
- The Finance Controller reviews the attached fiscal receipts and approves the replenishment batch.
- A Bank Payment Voucher (BPV) or Cheque Payment Voucher (CPV) is issued from the main corporate bank account:
- Debit: Petty Cash Imprest Account (
111150) ETB 37,500.00 - Credit: Corporate Bank Account (
111200) ETB 37,500.00
- Debit: Petty Cash Imprest Account (
- The custodian cashes the cheque, restores physical currency in the drawer to ETB 50,000.00, and archives the paid voucher batch into the completed audit folder.