docs: confirm import provenance req and batch
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
# req-021: Import provenance and sensitive-data policy
|
||||
|
||||
- Status: Approved
|
||||
- Type: Data
|
||||
- Priority: High
|
||||
- Owner: 렛저장인
|
||||
|
||||
## Intent
|
||||
- `dcy-014`에서 확정된 import provenance 및 민감자료 저장 정책을 구현 가능한 requirement로 정규화한다.
|
||||
- Jarca Ledger는 import rollback, duplicate detection, audit investigation에 필요한 lineage를 보존하되, 운영 DB·repo fixture·logs·MCP/Streamlit responses에 원본 금융 증빙을 과도하게 저장하거나 노출하지 않아야 한다.
|
||||
- finance agent와 operator-facing surface는 raw evidence가 아니라 normalized provenance metadata를 소비해야 한다.
|
||||
|
||||
## Requirement
|
||||
- 시스템은 모든 import source에 대해 표준 provenance envelope를 정의하고, source kind, parser identity, source hash, import batch id, row/page/sheet reference, external id, dedupe key, validation summary를 일관되게 보존해야 한다.
|
||||
- `transactions.raw_payload` 저장 정책은 기본 `minimize`로 한다. 원본 문서/row 덤프를 저장하지 않고 source별 allowlist에 포함된 normalized 최소 필드만 저장하거나, allowlist 밖 key는 제거/마스킹해야 한다.
|
||||
- `import_batches.filename`은 전체 file path를 저장하지 않고 `masked-basename + source_hash` 정책을 사용해야 한다.
|
||||
- MCP provenance exposure는 기본 `minimal`, operator-facing `operator-summary`, explicit debug gate가 필요한 `debug-gated` 수준으로 분리해야 한다.
|
||||
- finance agent는 raw financial evidence를 직접 받지 않고 normalized provenance metadata만 받아야 한다.
|
||||
- 기존 운영 DB에 이미 저장된 raw payload/file path sanitization은 본 REQ의 destructive migration 범위에 포함하지 않는다. 별도 GitHub Project Todo/후속 SDLC에서 scan/preview/backup/approval/migration 순서로 다룬다.
|
||||
- `docs/data-model.md`, `docs/project-structure.md`, `docs/runtime-flows.md`는 import provenance envelope, sensitive-data boundary, MCP exposure level, existing DB sanitization split을 반영해야 한다.
|
||||
|
||||
## Acceptance Criteria
|
||||
1. Given synthetic import inputs for KB Bank PDF, Toss Bank PDF, Toss Securities PDF, SeoulPay XLSX, and CSV preview/import paths, When import preview or import is executed, Then each result exposes or stores a normalized provenance envelope with source kind, parser identity, source hash, import batch id where applicable, row/page/sheet reference where available, external id/dedupe key where applicable, and validation summary.
|
||||
2. Given an import source file path containing personal/environmental path segments, When an import batch is recorded, Then `import_batches.filename` or its successor field contains no full path and uses masked basename plus source hash for operator identification and audit correlation.
|
||||
3. Given source transactions contain raw parser payloads, file paths, account/card identifiers, passwords, tokens, secrets, or arbitrary CSV columns, When data is persisted to `transactions.raw_payload` or returned through preview/response payloads, Then only the source-specific allowlisted minimized fields remain and forbidden fields are removed or masked.
|
||||
4. Given MCP default tools return transaction/import provenance, When called by a normal finance-agent client, Then the response uses the `minimal` level and excludes raw financial evidence, full file paths, passwords, tokens/secrets, raw document text, and non-allowlisted payload fields.
|
||||
5. Given an operator-facing view or tool explicitly requests operator summary, When provenance is shown, Then masked filename, parser identity, source hash prefix, row/page/sheet reference, and validation summary may be included without exposing raw document text or full paths.
|
||||
6. Given debug diagnostics are needed, When a debug-gated path is used, Then debug details are available only through an explicit gate and still exclude passwords, tokens/secrets, and full source document dumps by default.
|
||||
7. Given existing operating DB rows may contain legacy raw payload/file path data, When REQ-021 delivery runs, Then it must not destructively rewrite existing operating DB content; it may add read-time sanitization or new-write policy only. Existing-data cleanup must remain in the separate Todo follow-up.
|
||||
8. Given CI and test fixtures run import-related tests, When pytest/AppTest/HTTP smoke/contract tests execute, Then they use synthetic/temp DBs and static/contract checks verify that forbidden sensitive fields are not emitted in default MCP responses or committed fixtures.
|
||||
9. Given baseline documentation is updated, When `docs/data-model.md`, `docs/project-structure.md`, and `docs/runtime-flows.md` are reviewed, Then they describe the provenance envelope, `raw_payload=minimize`, masked filename + source hash, MCP exposure levels, and the explicit split of existing DB sanitization.
|
||||
10. Given implementation is complete, When `python -m ruff check .`, full pytest, contract regression, dashboard tests/smoke where affected, and StagePilot doctor are run, Then current-batch regressions must be clear; pre-existing unrelated doctor debt may be reported separately.
|
||||
|
||||
## Impacted Area
|
||||
- Docs:
|
||||
- `docs/discovery/dcy-014_20260708_import-provenance-sensitive-data-policy.md`
|
||||
- `docs/data-model.md`
|
||||
- `docs/project-structure.md`
|
||||
- `docs/runtime-flows.md`
|
||||
- 후속 batch planning/design/verification 문서
|
||||
- Modules:
|
||||
- `jarca_ledger_mcp/application/imports_service.py`
|
||||
- `jarca_ledger_mcp/infrastructure/parsers/*`
|
||||
- `jarca_ledger_mcp/infrastructure/sqlite/schema.py`
|
||||
- `jarca_ledger_mcp/infrastructure/sqlite/migrations.py`
|
||||
- `jarca_ledger_mcp/adapters/mcp/server.py`
|
||||
- `jarca_ledger_mcp/adapters/mcp/tool_contracts.py`
|
||||
- Streamlit import/operations gateway/page surfaces where provenance is displayed
|
||||
- Tests:
|
||||
- source-specific import regression tests
|
||||
- sensitive-field/static scan tests
|
||||
- MCP contract/default response tests
|
||||
- fixture/log safety checks where applicable
|
||||
|
||||
## Notes
|
||||
- Source Discovery: `docs/discovery/dcy-014_20260708_import-provenance-sensitive-data-policy.md`.
|
||||
- Confirmed decisions from dcy-014:
|
||||
- `raw_payload`: `minimize`.
|
||||
- `import_batches.filename`: `masked-basename + source_hash`, no full path.
|
||||
- MCP exposure: default `minimal`, operator-facing `operator-summary`, debug `debug-gated`.
|
||||
- existing operating DB sanitization: split to separate GitHub Project Todo.
|
||||
- finance agent privacy boundary: normalized provenance only.
|
||||
- destructive migration: prohibited without preview/backup/explicit approval.
|
||||
- Code-derived source matrix from dcy-014:
|
||||
- KB Bank PDF: source hash, page count, metadata, validation, parsed row count, file path, raw payload/summary, branch/balance, external id, dedupe key currently appear in import flow.
|
||||
- Toss Bank PDF: source hash, page count, metadata, validation, parsed row count, file path, action/counterparty/balance/raw payload/summary, external id, dedupe key currently appear in import flow.
|
||||
- Toss Securities PDF: source hash, page count, metadata, validation, parsed row count, file path, section/action/code/name/quantity/unit price/fee/tax/balance/raw payload currently appear in import flow.
|
||||
- SeoulPay XLSX: source hash, sheet name, metadata, validation, parsed row count, file path, transaction kind/payment kind/no/merchant id/channel/raw payload currently appear in import flow.
|
||||
- CSV preview: current preview can echo raw CSV rows and full local path, so it requires allowlist/masking policy before broader exposure.
|
||||
- Out of scope:
|
||||
- Existing operating DB sanitization migration.
|
||||
- External legal review or third-party security audit.
|
||||
- File vault/encryption system for original source documents.
|
||||
- External public API auth/TLS design.
|
||||
|
||||
## Change Log
|
||||
|
||||
### CHG-20260708-01
|
||||
- Date: 2026-07-08
|
||||
- Author: 가웨인
|
||||
|
||||
#### Change Summary
|
||||
- dcy-014 confirmed 범위를 REQ-021 Proposed 요구사항으로 생성했다.
|
||||
|
||||
#### Intent
|
||||
- import provenance와 민감자료 저장/노출 정책을 delivery input으로 사용할 수 있는 단일 Data requirement로 정규화하기 위해 생성했다.
|
||||
|
||||
#### Acceptance Criteria Delta
|
||||
- Added:
|
||||
- provenance envelope, raw_payload minimize, masked filename + source hash, MCP exposure levels, finance-agent privacy boundary, existing DB sanitization split, fixture/log/MCP sensitive-data checks를 acceptance criteria로 추가했다.
|
||||
- Updated:
|
||||
- none
|
||||
- Removed:
|
||||
- none
|
||||
|
||||
#### Impacted Area Delta
|
||||
- Docs:
|
||||
- `docs/srs/index.md`
|
||||
- `docs/srs/Data/req-021_import-provenance-sensitive-data-policy.md`
|
||||
- `docs/discovery/dcy-014_20260708_import-provenance-sensitive-data-policy.md`
|
||||
- Modules:
|
||||
- none yet; implementation pending
|
||||
- Tests:
|
||||
- none yet; implementation pending
|
||||
|
||||
#### Delivery Trace Delta
|
||||
- Batches:
|
||||
- none yet
|
||||
- Releases:
|
||||
- none
|
||||
|
||||
#### Revalidation Impact
|
||||
- Reverification Needed: yes
|
||||
- Existing Implementation Invalidated: no
|
||||
- Status Recommendation: keep-current
|
||||
- Follow-up Action: run `confirm-req` for REQ-021 before batch selection/drafting.
|
||||
|
||||
#### Validation Plan
|
||||
- Before implementation approval, verify source-specific provenance envelope behavior, sensitive-field filtering, MCP exposure-level defaults, synthetic fixture safety, full pytest, lint, relevant dashboard/MCP smoke, DB safety smoke, and baseline document updates.
|
||||
|
||||
### CHG-20260708-02
|
||||
- Date: 2026-07-08
|
||||
- Author: 가웨인
|
||||
|
||||
#### Change Summary
|
||||
- REQ-021 승인 게이트를 통과해 Status를 Approved로 전환했다.
|
||||
|
||||
#### Intent
|
||||
- dcy-014 결정사항이 모두 해소되었고, raw_payload minimize, masked filename + source hash, MCP exposure boundary, existing DB sanitization split, finance-agent privacy boundary, destructive migration 금지 원칙이 delivery input으로 충분히 구체화되어 승인했다.
|
||||
|
||||
#### Acceptance Criteria Delta
|
||||
- Added:
|
||||
- none
|
||||
- Updated:
|
||||
- none
|
||||
- Removed:
|
||||
- none
|
||||
|
||||
#### Impacted Area Delta
|
||||
- Docs:
|
||||
- `docs/srs/Data/req-021_import-provenance-sensitive-data-policy.md`
|
||||
- `docs/srs/index.md`
|
||||
- Modules:
|
||||
- none
|
||||
- Tests:
|
||||
- none
|
||||
|
||||
#### Delivery Trace Delta
|
||||
- Batches:
|
||||
- none yet
|
||||
- Releases:
|
||||
- none
|
||||
|
||||
#### Revalidation Impact
|
||||
- Reverification Needed: yes
|
||||
- Existing Implementation Invalidated: no
|
||||
- Status Recommendation: keep-current
|
||||
- Follow-up Action: draft batch for REQ-021 before implementation.
|
||||
|
||||
#### Validation Plan
|
||||
- Validate through source-specific import tests, sensitive-field filtering/static scan, MCP exposure-level contract checks, fixture/log safety checks, full pytest, lint, relevant dashboard/MCP smoke, and baseline document updates.
|
||||
|
||||
Reference in New Issue
Block a user