Skip to main content

Expense Claim Storage

Summary

ExpenseClaim is stored as the aggregate root with a stable native identifier and a unique compatibility identifier. Claimant, Money, and ExpenseCategory are owned values stored with the aggregate. Lifecycle status is persisted as text. Workflow and actor references are logical identifiers, not database relationships.

Audience

Backend developers, database reviewers, QA, architects, DevOps, support, and implementation teams.

Confirmed persistence

ExpenseClaim is stored as the aggregate root with a stable native identifier and a unique compatibility identifier. Claimant, Money, and ExpenseCategory are owned values stored with the aggregate. Lifecycle status is persisted as text. Workflow and actor references are logical identifiers, not database relationships.

Indexes cover unique compatibility identity, tenant/status queries, and workflow lookup. No soft-delete marker or concurrency token is configured. Pending deletion is a hard aggregate delete; receipt children cascade. Audit/timeline rows have no configured claim foreign key and therefore are not cascade children.

Requires confirmation

Production migration governance, retention, archival, masking, performance targets, concurrency roadmap, operational-store access, and rollback ownership remain unconfirmed unless narrowed above.

Source References

  • microservices/src/expense-service/Infrastructure/ExpenseDbContext.cs
  • microservices/src/expense-service/Domain/Expense/ExpenseClaim.cs

See Also

Keywords

  • Expense database
  • Expense Claim Storage

Revision Information

  • Status: Draft
  • Last reviewed: 2026-07-16
  • Review cycle: Quarterly