SmartERP Documentation An Ashewa Technology Solutions Platform

Financial approval governance

Multi-tiered financial delegation of authority, spend limits, vendor bill approval gates, budget validation, maker-checker controls, and working-hour SLA escalations.

SmartERP Financial Approval Governance enforces enterprise internal controls, multi-level spend authorization limits, segregation of duties (SoD), and hard posting blocks across all monetary commitments.

Finance Executive My Approvals Worklist

Financial Delegation of Authority (DoA) Matrix#

Financial commitments are governed by a 4-tier delegation matrix configured in smarterp_approval:

Authorization TierSpend Range (ETB)Required ApproversSLA Escalation WindowGovernance Rules
Tier 1: Operational$\le$ ETB 10,000.00Department Head / Unit Supervisor24 Working HoursFast-track approval for standard consumables.
Tier 2: DepartmentalETB 10,001.00 – ETB 100,000.00Department Head + Finance Controller48 Working HoursMandatory verification of budget line availability.
Tier 3: ExecutiveETB 100,001.00 – ETB 500,000.00Finance Controller + Deputy CEO / CFO48 Working Hours3-way matching audit and cash flow allocation check.
Tier 4: Board / CEO$>$ ETB 500,000.00CFO + Chief Executive Officer (CEO)72 Working HoursStrategic Capex review; requires Board notification if $>$ ETB 2M.

Vendor Bill Hard Gate Enforcement (GATE_CODE = 'BILL')#

SmartERP eliminates unapproved vendor bill commitments through an immutable gate implemented in addons/smarterp_approval_account and addons/account_bill_approval.

+----------------------------------------------------------------------------------------------------+
|                                VENDOR BILL APPROVAL GATE STATE MACHINE                             |
+----------------------------------------------------------------------------------------------------+
|                                                                                                    |
|  [Vendor Bill Created (Draft)]                                                                     |
|           |                                                                                        |
|           v                                                                                        |
|  [Step 1: Confirm Bill] ---------> Sets approval_state = 'confirmed'                               |
|           |                                                                                        |
|           v                                                                                        |
|  [Step 2: Check Bill] -----------> Checked by AP Specialist / Reviewer                             |
|           |                        Sets approval_state = 'checked', checked_by, checked_date       |
|           v                                                                                        |
|  [Step 3: Request Gate Approval] -> Spawns smarterp.approval.request (Category: 'BILL')             |
|           |                        Routes through Tier 1-4 Signatories based on amount_total       |
|           v                                                                                        |
|  [Step 4: Action Approve] -------> Sets approval_state = 'approved', approved_by, approved_date   |
|           |                                                                                        |
|           v                                                                                        |
|  [Step 5: Action Post] ----------> Calls account.move._post()                                      |
|                                    HARD GATE CHECK: Re-verifies approval_state == 'approved'       |
|                                    BLOCKS direct RPC, cron auto-post, and bulk wizards if unapproved|
+----------------------------------------------------------------------------------------------------+

The Architectural Interception in _post()#

Hiding the "Post" button in the XML view is insufficient for enterprise compliance. SmartERP overrides _post() at the ORM layer:

def _post(self, soft=True):
    for move in self.filtered(lambda m: m.move_type in ('in_invoice', 'in_receipt') and m.state == 'draft'):
        if move.approval_state != 'approved':
            raise UserError(_(
                "%s must complete Confirm / Check / Approve before it can be posted."
            ) % move.display_name)
    return super()._post(soft=soft)

Any attempt to post an unapproved bill—whether via XML-RPC APIs, bulk posting wizards, or automated system crons—is intercepted and rejected with a descriptive error.

Financial Controller Decision Inbox


Payment Request Governance (payment_request)#

For ad-hoc disbursements, operational advances, and contractor milestones that do not originate from a standard PO, SmartERP provides the payment.req workflow:

  1. Submission (draft): The requester specifies the Debit Expense GL account, Cash/Bank account, partner, and line item justifications.
  2. Manager Approval (approved): Direct department supervisor verifies operational necessity.
  3. Executive Review (dceo_approval / ceo_approval): High-value requests route to the Deputy CEO and CEO.
  4. Finance Verification (finance_approval): Treasury verifies cash runway and tax compliance.
  5. Payment Registration & Settlement:
    • Clicking Register Payment opens payment.register.wizard.
    • Records Cheque Reference, Bank Transfer ID, and CPV Number.
    • Automatically generates and posts the journal entry:
      • Debit: Expense / Advance GL (payment.req.account_id)
      • Credit: Bank / Cash Account (payment.req.cash_account_id)
  6. Settlement Smart Button: For employee travel or operational advances, clicking Create Settlement generates a pre-balanced offsetting entry crediting the advance GL and debiting actual documented expenses.

Budgetary Overrun Control & Real-Time Alerts#

SmartERP integrates with base_account_budget to enforce budget discipline prior to payment approvals:

  • Headroom Calculation: Every purchase line checks available budget: $$ ext{Remaining Budget} = ext{Planned Budget} - \sum ext{Committed POs} - \sum ext{Posted Invoices}$$
  • Three-Tier Warning Thresholds:
    • Green (0% – 79%): Normal processing.
    • Amber (80% – 99%): Warning banner displayed on bill form; requires Department Head written justification.
    • Red ($\ge$ 100%): Hard overrun block. The system prevents bill confirmation unless an authorized Budget Override Request is approved by the CFO.

SLA Escalations and Working-Hour Timers#

To prevent operational bottlenecks:

  • Every approval step is tracked by an active SLA timer that counts only official working hours (configured in resource.calendar, e.g. Monday–Friday 8:30 AM to 5:30 PM, excluding statutory Ethiopian public holidays).
  • Auto-Reminder: If a request remains undecided at 50% of the SLA window, an automated email reminder is dispatched to the approver.
  • Escalation Notification: If the SLA expires (100%), the request automatically escalates to the approver's hierarchical manager, and the compliance officer is flagged.
Last updated: 2026-10-16