feat(WHE-29): add v1 accounting schema migration and seed fixtures

This commit is contained in:
2026-03-05 04:13:00 +04:00
parent 27205bc90b
commit b3ae1a51e4
10 changed files with 1841 additions and 2 deletions

View File

@@ -0,0 +1,83 @@
# HOUSEBOT-012: V1 Accounting Schema
## Summary
Define and migrate a production-ready accounting schema for household rent/utilities/purchases and settlement snapshots.
## Goals
- Support all v1 finance flows in database form.
- Enforce idempotency constraints for Telegram message ingestion.
- Store all monetary values in minor integer units.
- Provide local seed fixtures for fast end-to-end development.
## Non-goals
- Bot command implementation.
- Settlement algorithm implementation.
## Scope
- In: Drizzle schema + generated SQL migration + seed script + runbook update.
- Out: adapter repositories and service handlers.
## Interfaces and Contracts
Tables covered:
- `households`
- `members`
- `billing_cycles`
- `rent_rules`
- `utility_bills`
- `presence_overrides`
- `purchase_entries`
- `processed_bot_messages`
- `settlements`
- `settlement_lines`
## Domain Rules
- Minor-unit integer money only (`bigint` columns)
- Deterministic one-cycle settlement snapshot (`settlements.cycle_id` unique)
- Message idempotency enforced via unique source message keys
## Data Model Changes
- Add new finance tables and indexes for read/write paths.
- Add unique indexes for idempotency and period uniqueness.
- Preserve existing household/member table shape.
## Security and Privacy
- Store internal member IDs instead of personal attributes in finance tables.
- Keep raw purchase text for audit/parser debugging only.
## Observability
- `processed_bot_messages` and settlement metadata provide traceability.
## Edge Cases and Failure Modes
- Duplicate message ingestion attempts.
- Missing active cycle when writing purchases/bills.
- Partial fixture seed runs.
## Test Plan
- Generate and check migration metadata.
- Typecheck db package.
- Execute seed script on migrated database.
## Acceptance Criteria
- [ ] `bun run db:generate` produces migration SQL for schema updates.
- [ ] `bun run db:check` passes.
- [ ] Schema supports v1 rent/utilities/purchase/settlement workflows.
- [ ] Idempotency indexes exist for Telegram ingestion.
- [ ] Migration runbook includes rollback notes.
## Rollout Plan
- Apply migration in dev, run seed, validate queryability.
- Promote migration through CI/CD pipeline before production cutover.