docs: initialize StagePilot baseline

This commit is contained in:
Jarca
2026-06-26 22:34:16 +09:00
parent d8e36f6aa8
commit 97115f6acf
9 changed files with 698 additions and 0 deletions
+176
View File
@@ -0,0 +1,176 @@
schema_version: 1
capture_mode: observed
project:
repository_name: jarca-ledger-mcp
display_name: Jarca Ledger MCP
summary: Jarca 가계부 전용 MCP 서버와 Streamlit 대시보드로 계좌/카드 거래, 예산, 분류 규칙, import, 현금흐름 분석을 SQLite에 저장하고 운영한다.
primary_domain: Korean household finance ledger and transaction reconciliation
stack:
tech_stack:
- Python >=3.11
- FastMCP / MCP server
- SQLite
- Streamlit dashboard
- pandas / plotly dashboard dependencies
- PyMuPDF PDF parsing
- openpyxl + msoffcrypto-tool for encrypted Excel imports
- pytest test suite
runtime:
primary_runtime: mixed
primary_entrypoints:
- name: jarca-ledger-mcp
purpose: MCP stdio server exposing ledger/account/category/import/report tools to Hermes Agent.
- name: dashboard/app.py
purpose: Streamlit dashboard for local ledger review, categorization, import, and manual reconciliation.
- name: pytest
purpose: Regression tests for service logic, import parsers, categorization rules, and transfer matching.
interfaces:
contracts:
- name: MCP tool surface
type: internal-service
actors: Hermes Agent and MCP clients
purpose: Provide structured tools for ledger transactions, categories, budgets, imports, reports, and reconciliation.
stability: internal
inputs:
- Python function/tool arguments validated by server.py signatures.
- File paths and optional passwords for import preview/import tools.
outputs:
- Dictionary responses with success/error payloads; existing success shapes should remain backward compatible.
errors:
- validation_error for invalid parameters.
- parser/import-specific errors for unreadable files, password issues, validation failures, or duplicate handling.
compatibility_rules:
- Preserve existing success response shapes for existing tools unless a planned migration states otherwise.
- Additive optional fields are preferred over breaking argument changes.
- name: Streamlit dashboard
type: web-app
actors: Local operator using browser UI
purpose: Display actual cashflow, transaction lists, uncategorized triage, rule management, import batches, and review queues.
stability: internal
inputs:
- Local SQLite database selected through JARCA_LEDGER_DB_PATH or default path.
- Uploaded PDF/XLS/XLSX files for supported import paths.
outputs:
- Streamlit pages, tables, dialogs, categorization updates, import results, and reconciliation actions.
errors:
- UI-level error messages for unavailable service functions, parser failures, and validation problems.
compatibility_rules:
- User-facing category/cashflow semantics must remain stable; UI should surface cashflow_kind where classification matters.
shared_constraints:
- Financial import evidence must preserve raw provenance fields where available.
- Actual income/expense must stay separate from account movement, investment movement, and excluded double-count candidates.
- Destructive DB migrations are not allowed without explicit backup/approval flow.
current_gaps:
- Streamlit UX needs final verification for rule deletion, cancel/original linking, and import E2E flows.
- No formal CI workflow is present yet.
- Project was recently initialized as a git/GitHub repository; release and deployment policy is not yet documented.
structure:
planned_top_level_areas:
- path: jarca_ledger_mcp/
responsibility: MCP server package, SQLite schema, service layer, import parsers, categorization, and reports.
- path: dashboard/
responsibility: Streamlit operator UI for ledger review and manual workflows.
- path: tests/
responsibility: pytest regression tests for parsers, service operations, categorization, and matching.
- path: docs/
responsibility: StagePilot baseline, Discovery, SRS, Batch, and Release documentation.
- path: .stage-pilot/
responsibility: StagePilot bootstrap seed and local process metadata.
data_model:
persistence_backend: SQLite database at ~/.local/share/jarca/ledger.sqlite3 by default, overrideable through JARCA_LEDGER_DB_PATH.
entities:
- name: LedgerAccount
purpose: Represents bank, card, cash, investment, or loan accounts used to attach transaction evidence and balances.
source_of_truth: ledger_accounts table
lifecycle: created -> updated -> inactive/archived
key_fields:
- id :: text :: stable account identifier
- name :: text :: operator-facing account name
- type :: text :: bank/card/cash/investment/loan classification
- last_balance :: integer :: latest known balance when available
relationships:
- Transaction :: account_id links transaction rows to an account
state_rules:
- active=false hides accounts from default listings without deleting history.
- name: Transaction
purpose: Represents imported or manually entered financial event evidence with direction, amount, classification, provenance, and memo tags.
source_of_truth: transactions table
lifecycle: created/imported -> categorized/reconciled -> soft-deleted or retained
key_fields:
- transaction_date :: date text :: ledger date
- type :: text :: income/expense/transfer/refund/adjustment direction
- amount :: integer :: positive KRW amount
- category/subcategory :: text :: household ledger classification
- source/external_id/import_batch_id :: text :: import provenance and dedupe evidence
relationships:
- LedgerAccount :: account_id
- LedgerCategory :: category/subcategory
- ImportBatch :: import_batch_id
state_rules:
- amount is stored as a positive integer; type determines direction.
- refund/cancel rows should be linked to the original transaction when confirmed.
- name: LedgerCategory
purpose: Defines category/subcategory semantics and cashflow_kind used by reports.
source_of_truth: ledger_categories table
lifecycle: seeded/created -> updated -> inactive/deleted
key_fields:
- category :: text :: top-level category
- subcategory :: text :: optional subcategory
- cashflow_kind :: text :: income/expense/transfer/investment/debt_payment/exclude/unknown
relationships:
- Transaction :: category/subcategory lookup
- CategoryRule :: rule target category/subcategory
state_rules:
- cashflow_kind controls actual household cashflow inclusion semantics.
- name: CategoryRule
purpose: Defines automatic categorization rules with field, pattern, priority, and optional amount/day constraints.
source_of_truth: category_rules table
lifecycle: created -> previewed/applied -> updated/deactivated/deleted
key_fields:
- match_field :: text :: merchant/counterparty/raw_summary/etc.
- pattern :: text :: contains/equals/regex match pattern
- amount_min/amount_max/day_of_month :: integer :: optional match constraints
- priority :: integer :: deterministic rule ordering
relationships:
- Transaction :: candidate rows updated by matching rules
state_rules:
- Preview before broad application when changing rules.
- name: ImportBatch
purpose: Tracks grouped imports for rollback and audit.
source_of_truth: import_batches table
lifecycle: previewed -> imported -> optionally rolled back
key_fields:
- id :: text :: batch identifier
- source :: text :: import source kind
- imported_count/skipped_duplicate_count :: integer :: result summary
relationships:
- Transaction :: import_batch_id
state_rules:
- Rollback should soft-delete by default unless explicitly hard-deleted.
consistency_rules:
- transfer/investment/exclude cashflow kinds are excluded from actual income/expense reports unless an account-movement report is requested.
- Cross-account matches require same date, same amount, opposite direction, and compatible source labels before auto-confirmation.
- Imported rows should retain raw_summary/raw_payload/counterparty/balance_after when available.
persistence_notes:
- Schema changes should be idempotent and additive by default.
- Manual DB corrections should be narrow, ID-based, and memo-tagged for auditability.
current_gaps:
- Need formal migration/back-up procedure before destructive or structural migrations.
- Need final UI verification for rule deletion and cancel/original linkage.
notes:
known_unknowns:
- Whether to add CI workflow and deployment/service management for the Streamlit dashboard.
- Final UX acceptance criteria for mobile dashboard pages and rule deletion behavior.
- Long-term handling policy for accounts where downloadable transaction statements are unavailable.
metadata:
captured_at_kst: 2026-06-26 22:24
source: bootstrap-baseline-repo-observation
updated_from: repo-observation