Data Layer medium complexity backend
0
Dependencies
0
Dependents
1
Entities
0
Integrations

Description

Persistence layer that stores receipt binaries in managed object storage and keeps metadata rows linking each object to its parent expense and tenant. Provides the lookup surface used by the upload service and by coordinator review flows.

Feature: Receipt Photo Upload

receipt-store

Sources & reasoning

Section 2.1 explicitly requires receipt photos above a 100 NOK threshold for HLF. Receipt upload is a direct sub-capability of the travel reimbursement workflow listed in Phase 2 (Core Product) in section 5.

Responsibilities

  • Persist receipt binaries in object storage with stable keys
  • Maintain metadata rows (expense_id, tenant_id, content hash, uploaded_at)
  • Enforce retention rules required for Bufdir-style grant accounting
  • Resolve receipt references to signed access URLs
  • Support deletion and replacement while preserving audit trail

Interfaces

putObject(key, bytes, metadata): ReceiptRef
getObject(receiptId): ReceiptBinary
findByExpenseId(expenseId): ReceiptRef[]
deleteObject(receiptId): void

Related Data Entities (1)

Data entities managed by this component