Service Layer medium complexity backend
0
Dependencies
0
Dependents
6
Entities
0
Integrations

Description

Business logic layer that processes reviewer decisions on expense claims. Validates reviewer permissions against organizational hierarchy, applies approval/rejection state transitions, and triggers downstream notifications to the submitting peer mentor.

Feature: Expense Approval Queue

expense-approval-service

Sources & reasoning

Source lines 68-70 establish that HLF requires threshold-based manual attestation for expenses above the auto-approval limit, implying a manual review queue is needed in the admin portal. Line 342 places reimbursement handling in Phase 2 (v1.0). The blueprint lists this as an admin-web-portal feature under admin-expense-approval.

  • docs/source/likeperson.md · line 68-70
    Begge organisasjoner har behov for registrering av kilometergodtgjørelse, bompenger, parkering og kollektivt. Behovene er like, men HLF har mest detaljert krav: - Automatisk godkjenning under 50 km / uten utlegg, manuell attestering ellers (HLF).
  • docs/source/likeperson.md · line 342
    Reiserefusjonshåndtering (faste valg, terskelbasert godkjenning)

Responsibilities

  • Validate that the acting reviewer has authority over the claim's organizational unit
  • Execute state transitions (pending → approved / rejected / correction-requested)
  • Send notifications to submitters upon decision
  • Retrieve filtered and paginated claim lists for the queue view
  • Log approval decisions with reviewer identity and timestamp for audit trail

Interfaces

getQueue(reviewerId: string, filters: QueueFilters, page: number, pageSize: number): PagedResult<ExpenseClaim>
approveClaim(reviewerId: string, claimId: string): ApprovalResult
rejectClaim(reviewerId: string, claimId: string, reason: string): ApprovalResult
requestCorrection(reviewerId: string, claimId: string, note: string): ApprovalResult
getClaimDetail(reviewerId: string, claimId: string): ExpenseClaimDetail