diff --git a/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/import.dom.html b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/import.dom.html new file mode 100644 index 0000000..eb7248f --- /dev/null +++ b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/import.dom.html @@ -0,0 +1,241 @@ + + + + + + + Jarca Ledger + + + + + + + + +
+
๐Ÿ“ฅ Statement Import
+

Import

+

PDF/XLSX ๊ฑฐ๋ž˜๋‚ด์—ญ์„ ๋จผ์ € Preview๋กœ ๊ฒ€์ฆํ•œ ๋’ค ์›์žฅ์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

+
Preview ์šฐ์„ ์ค‘๋ณต skipImport ์ด๋ ฅ
+

ํ† ์Šค์ฆ๊ถŒ ๊ฑฐ๋ž˜๋‚ด์—ญ์„œ PDF๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด ํˆฌ์ž๊ณ„์ขŒ ๊ฑฐ๋ž˜๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋งค์ˆ˜/๋งค๋„/ํ™˜์ „/์ž…์ถœ๊ธˆ์€ ์ด์ฒด/ํˆฌ์ž์ด๋™, ๋ฐฐ๋‹น/์ด์ž๋Š” ์‹ค์ œ ์ˆ˜์ž…์œผ๋กœ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.


ํ† ์Šค๋ฑ…ํฌ ๊ณ„์ขŒ ๊ฑฐ๋ž˜๋‚ด์—ญ PDF๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด ์ž…์ถœ๊ธˆ/์ด์ฒด/์นด๋“œ๊ฒฐ์ œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ํƒ€์ธ ์ด์ฒด/์ถœ๊ธˆ์€ ์ด์ฒด/ํ™•์ธํ•„์š”๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค.


+ + + \ No newline at end of file diff --git a/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/import.png b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/import.png new file mode 100644 index 0000000..7693d3a Binary files /dev/null and b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/import.png differ diff --git a/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/manifest.json b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/manifest.json new file mode 100644 index 0000000..282d5b6 --- /dev/null +++ b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/manifest.json @@ -0,0 +1,74 @@ +{ + "success": true, + "base_url": "http://127.0.0.1:18501", + "output_dir": "/root/projects/jarca-ledger-mcp/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358", + "fixture": { + "account_id": "acct_2e22ac8ac63a", + "transaction_ids": [ + "tx_14dd02c2fe6c", + "tx_8a75d20fcd87", + "tx_88bdacc43404", + "tx_c0418db6d784", + "tx_7b21f4085a1d" + ], + "db_path": "docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/fixture.sqlite3" + }, + "chrome": "/usr/bin/google-chrome-stable", + "streamlit": ".venv/bin/streamlit", + "pages": [ + { + "page": "์š”์•ฝ", + "url": "http://127.0.0.1:18501/?page=%EC%9A%94%EC%95%BD", + "screenshot": "docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/overview.png", + "screenshot_bytes": 340145, + "snapshot": "docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/overview.dom.html", + "snapshot_bytes": 31902, + "devtools_port": 19222, + "inner_text_head": "๐Ÿ’ฐ Jarca Ledger\n\n๊ฐ€๊ณ„๋ถ€ ยท ๋ถ„๋ฅ˜ ยท Import ์šด์˜ ์ฝ˜์†”\n\n๋ฉ”๋‰ด\n์š”์•ฝ\n์ž์‚ฐ/๋งˆ๊ฐ\n๊ฑฐ๋ž˜๋‚ด์—ญ\nํ™•์ธํ•„์š” ํ\n๋ฏธ๋ถ„๋ฅ˜\n๋ถ„๋ฅ˜ ๊ทœ์น™\n์นดํ…Œ๊ณ ๋ฆฌ\n๊ณ„์ขŒ\nImport\n\n์ƒˆ๋กœ๊ณ ์นจ\n\nStop\nDeploy\n๐Ÿ“Š ์š”์•ฝ\n๊ฐ€๊ณ„๋ถ€ ์šด์˜ ๋Œ€์‹œ๋ณด๋“œ\n\n์ด๋ฒˆ ๋‹ฌ ์‹ค์ œ ํ˜„๊ธˆํ๋ฆ„, ์ž์‚ฐ ์œ ๋™์„ฑ, ์šด์˜ ๊ฒฝ๊ณ ๋ฅผ ์šฐ์„ ์ˆœ์œ„๋Œ€๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.\n\nschema v10\nKST ์ด๋ฒˆ ๋‹ฌ\nlast_balance ๊ธฐ์ค€ ์ž์‚ฐ\n\nDB: /root/projects/jarca-ledger-mcp/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/fixture.sqlite3\n\n๐Ÿ’Ž\n์ด๋ฒˆ ๋‹ฌ ์ˆ˜์ž…/์ง€์ถœ ํ˜„ํ™ฉ\n\n๊ธฐ์ค€: KST ํ˜„์žฌ ์›” 2026-07, transactions.transaction_date, ledger_categories.cashflow_kind ์‹ค์ œ ํ˜„๊ธˆํ๋ฆ„\n\n์‹ค์ œ ์ˆ˜์ž…\n\n0์›\n\n์‹ค์ œ ์ง€์ถœ\n\n0์›\n\n์ˆœ" + }, + { + "page": "๋ถ„๋ฅ˜ ๊ทœ์น™", + "url": "http://127.0.0.1:18501/?page=%EB%B6%84%EB%A5%98%20%EA%B7%9C%EC%B9%99", + "screenshot": "docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/rules.png", + "screenshot_bytes": 366052, + "snapshot": "docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/rules.dom.html", + "snapshot_bytes": 165223, + "devtools_port": 19223, + "inner_text_head": "๐Ÿ’ฐ Jarca Ledger\n\n๊ฐ€๊ณ„๋ถ€ ยท ๋ถ„๋ฅ˜ ยท Import ์šด์˜ ์ฝ˜์†”\n\n๋ฉ”๋‰ด\n์š”์•ฝ\n์ž์‚ฐ/๋งˆ๊ฐ\n๊ฑฐ๋ž˜๋‚ด์—ญ\nํ™•์ธํ•„์š” ํ\n๋ฏธ๋ถ„๋ฅ˜\n๋ถ„๋ฅ˜ ๊ทœ์น™\n์นดํ…Œ๊ณ ๋ฆฌ\n๊ณ„์ขŒ\nImport\nStop\nDeploy\nโš™๏ธ Rule Engine\n๋ถ„๋ฅ˜ ๊ทœ์น™\n\n๋ฐ˜๋ณต๋˜๋Š” ์‚ฌ์šฉ์ฒ˜์™€ ๊ฑฐ๋ž˜ ํŒจํ„ด์„ ๊ทœ์น™์œผ๋กœ ๊ด€๋ฆฌํ•ด ๋ถ„๋ฅ˜ ์ž๋™ํ™” ํ’ˆ์งˆ์„ ๋†’์ž…๋‹ˆ๋‹ค.\n\n์ž๋™ ๋ถ„๋ฅ˜\nPreview\nSeed/Update\nkeyboard_arrow_right\n\n๐ŸŸข ํ™˜๊ธ‰ ยท merchant/contains โ†’ ์ˆ˜์ž… / ํ™˜๊ธ‰ ยท p10 ยท income\n\nkeyboard_arrow_right\n\n๐ŸŸข ๊ธ‰์—ฌ ยท merchant/contains โ†’ ์ˆ˜์ž… / ๊ธ‰์—ฌ ยท p10 ยท income\n\nkeyboard_arrow_right\n\n๐ŸŸข ์ด์ž ยท merchant/contains โ†’ ์ˆ˜์ž… / ์ด์ž ยท p10 ยท income\n\nkeyboard_arrow_right\n\n๐ŸŸข ๊ตญ๋ฏผ์นด๋“œ ยท raw_summary/equals โ†’ ๊ธˆ์œต / ์นด๋“œ๋Œ€๊ธˆ ยท p20 ยท expense\n\nkeyboard" + }, + { + "page": "ํ™•์ธํ•„์š” ํ", + "url": "http://127.0.0.1:18501/?page=%ED%99%95%EC%9D%B8%ED%95%84%EC%9A%94%20%ED%81%90", + "screenshot": "docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/transfer-review.png", + "screenshot_bytes": 303427, + "snapshot": "docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/transfer-review.dom.html", + "snapshot_bytes": 25158, + "devtools_port": 19224, + "inner_text_head": "๐Ÿ’ฐ Jarca Ledger\n\n๊ฐ€๊ณ„๋ถ€ ยท ๋ถ„๋ฅ˜ ยท Import ์šด์˜ ์ฝ˜์†”\n\n๋ฉ”๋‰ด\n์š”์•ฝ\n์ž์‚ฐ/๋งˆ๊ฐ\n๊ฑฐ๋ž˜๋‚ด์—ญ\nํ™•์ธํ•„์š” ํ\n๋ฏธ๋ถ„๋ฅ˜\n๋ถ„๋ฅ˜ ๊ทœ์น™\n์นดํ…Œ๊ณ ๋ฆฌ\n๊ณ„์ขŒ\nImport\n\n์ƒˆ๋กœ๊ณ ์นจ\n\nStop\nDeploy\n๐Ÿ” Transfer Review\nKBโ†”ํ† ์Šค๋ฑ…ํฌ ํ™•์ธํ•„์š” ํ\n\n๋‚ ์งœยท๊ธˆ์•กยท์ƒ๋Œ€ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์ขŒ ๊ฐ„ ์ด๋™ ํ›„๋ณด๋ฅผ ๋Œ€์กฐํ•˜๊ณ , ๋“œ๋ผ์ด๋Ÿฐ ํ›„ ์•ˆ์ „ํ•˜๊ฒŒ ๋งค์นญํ•ฉ๋‹ˆ๋‹ค.\n\n๋“œ๋ผ์ด๋Ÿฐ ์šฐ์„ \n๋ณธ์ธ๊ณ„์ขŒ์ด๋™\n์ˆ˜๋™ ๊ฒ€ํ† \n\n๋ฏธ๋ฆฌ๋ณด๊ธฐ(๋“œ๋ผ์ด๋Ÿฐ)\n\n์ž๋™ ๋งค์นญ ์‹คํ–‰\n\n๐Ÿ“Œ\nํ™•์ธํ•„์š” ํ\n\n๊ฑฐ๋ž˜ ID: tx_7b21f4085a1d\n\n2026-06-29 ยท SYNTHETIC_TRANSFER ยท 120,000์›" + }, + { + "page": "Import", + "url": "http://127.0.0.1:18501/?page=Import", + "screenshot": "docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/import.png", + "screenshot_bytes": 298860, + "snapshot": "docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/import.dom.html", + "snapshot_bytes": 25118, + "devtools_port": 19225, + "inner_text_head": "๐Ÿ’ฐ Jarca Ledger\n\n๊ฐ€๊ณ„๋ถ€ ยท ๋ถ„๋ฅ˜ ยท Import ์šด์˜ ์ฝ˜์†”\n\n๋ฉ”๋‰ด\n์š”์•ฝ\n์ž์‚ฐ/๋งˆ๊ฐ\n๊ฑฐ๋ž˜๋‚ด์—ญ\nํ™•์ธํ•„์š” ํ\n๋ฏธ๋ถ„๋ฅ˜\n๋ถ„๋ฅ˜ ๊ทœ์น™\n์นดํ…Œ๊ณ ๋ฆฌ\n๊ณ„์ขŒ\nImport\nStop\nDeploy\n๐Ÿ“ฅ Statement Import\nImport\n\nPDF/XLSX ๊ฑฐ๋ž˜๋‚ด์—ญ์„ ๋จผ์ € Preview๋กœ ๊ฒ€์ฆํ•œ ๋’ค ์›์žฅ์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.\n\nPreview ์šฐ์„ \n์ค‘๋ณต skip\nImport ์ด๋ ฅ\n๐Ÿ“ˆ\nํ† ์Šค์ฆ๊ถŒ ๊ฑฐ๋ž˜๋‚ด์—ญ PDF ๊ฐ€์ ธ์˜ค๊ธฐ\n\nํ† ์Šค์ฆ๊ถŒ ๊ฑฐ๋ž˜๋‚ด์—ญ์„œ PDF๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด ํˆฌ์ž๊ณ„์ขŒ ๊ฑฐ๋ž˜๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋งค์ˆ˜/๋งค๋„/ํ™˜์ „/์ž…์ถœ๊ธˆ์€ ์ด์ฒด/ํˆฌ์ž์ด๋™, ๋ฐฐ๋‹น/์ด์ž๋Š” ์‹ค์ œ ์ˆ˜์ž…์œผ๋กœ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.\n\n๐Ÿฆ\nํ† ์Šค๋ฑ…ํฌ ๊ฑฐ๋ž˜๋‚ด์—ญ PDF ๊ฐ€์ ธ์˜ค๊ธฐ\n\nํ† ์Šค๋ฑ…ํฌ ๊ณ„์ขŒ ๊ฑฐ๋ž˜๋‚ด์—ญ PDF๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด ์ž…์ถœ๊ธˆ/์ด์ฒด/์นด๋“œ๊ฒฐ์ œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ํƒ€์ธ ์ด์ฒด/์ถœ๊ธˆ์€ ์ด์ฒด/ํ™•์ธํ•„์š”๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค.\n\n๐Ÿงพ\nImport ์ด๋ ฅ" + } + ], + "server_command": [ + ".venv/bin/streamlit", + "run", + "dashboard/app.py", + "--server.address", + "127.0.0.1", + "--server.port", + "18501", + "--server.headless", + "true", + "--browser.gatherUsageStats", + "false" + ], + "server_log_tail": "" +} \ No newline at end of file diff --git a/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/overview.dom.html b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/overview.dom.html new file mode 100644 index 0000000..9e11b66 --- /dev/null +++ b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/overview.dom.html @@ -0,0 +1,241 @@ + + + + + + + Jarca Ledger + + + + + + + + +

๐Ÿ’ฐ Jarca Ledger

๊ฐ€๊ณ„๋ถ€ ยท ๋ถ„๋ฅ˜ ยท Import ์šด์˜ ์ฝ˜์†”

๋ฉ”๋‰ด
+
๐Ÿ“Š ์š”์•ฝ
+

๊ฐ€๊ณ„๋ถ€ ์šด์˜ ๋Œ€์‹œ๋ณด๋“œ

+

์ด๋ฒˆ ๋‹ฌ ์‹ค์ œ ํ˜„๊ธˆํ๋ฆ„, ์ž์‚ฐ ์œ ๋™์„ฑ, ์šด์˜ ๊ฒฝ๊ณ ๋ฅผ ์šฐ์„ ์ˆœ์œ„๋Œ€๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

+
schema v10KST ์ด๋ฒˆ ๋‹ฌlast_balance ๊ธฐ์ค€ ์ž์‚ฐ
+

DB: /root/projects/jarca-ledger-mcp/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/fixture.sqlite3

๊ธฐ์ค€: KST ํ˜„์žฌ ์›” 2026-07, transactions.transaction_date, ledger_categories.cashflow_kind ์‹ค์ œ ํ˜„๊ธˆํ๋ฆ„

0์›

0์›

0์›

-

๊ธฐ์ค€: service ๊ณตํ†ต ํ‰๊ฐ€ ํ—ฌํผ(accounts.last_balance + manual_assets ๋ณด๊ฐ•). ๊ฑฐ๋ž˜ ํ•ฉ๊ณ„๋กœ ๋น„๊ฑฐ๋ž˜ ์ž์‚ฐ์„ ์ถ”์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

6,250,000์›

2,000,000์›

4,250,000์›

+ + + \ No newline at end of file diff --git a/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/overview.png b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/overview.png new file mode 100644 index 0000000..f4a54d5 Binary files /dev/null and b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/overview.png differ diff --git a/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/rules.dom.html b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/rules.dom.html new file mode 100644 index 0000000..b7ca212 --- /dev/null +++ b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/rules.dom.html @@ -0,0 +1,869 @@ + + + + + + + Jarca Ledger + + + + + + + + +
+
โš™๏ธ Rule Engine
+

๋ถ„๋ฅ˜ ๊ทœ์น™

+

๋ฐ˜๋ณต๋˜๋Š” ์‚ฌ์šฉ์ฒ˜์™€ ๊ฑฐ๋ž˜ ํŒจํ„ด์„ ๊ทœ์น™์œผ๋กœ ๊ด€๋ฆฌํ•ด ๋ถ„๋ฅ˜ ์ž๋™ํ™” ํ’ˆ์งˆ์„ ๋†’์ž…๋‹ˆ๋‹ค.

+
์ž๋™ ๋ถ„๋ฅ˜PreviewSeed/Update
+
keyboard_arrow_right

๐ŸŸข ํ™˜๊ธ‰ ยท merchant/contains โ†’ ์ˆ˜์ž… / ํ™˜๊ธ‰ ยท p10 ยท income

+
+
IF
+
merchant contains โ€œํ™˜๊ธ‰โ€
+
+
โ†’
+
+
THEN
+
์ˆ˜์ž… / ํ™˜๊ธ‰
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p10 + ๊ฑฐ๋ž˜์œ ํ˜•: income + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_27e1f28d78df +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ๊ธ‰์—ฌ ยท merchant/contains โ†’ ์ˆ˜์ž… / ๊ธ‰์—ฌ ยท p10 ยท income

+
+
IF
+
merchant contains โ€œ๊ธ‰์—ฌโ€
+
+
โ†’
+
+
THEN
+
์ˆ˜์ž… / ๊ธ‰์—ฌ
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p10 + ๊ฑฐ๋ž˜์œ ํ˜•: income + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_2c7b389e6056 +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ์ด์ž ยท merchant/contains โ†’ ์ˆ˜์ž… / ์ด์ž ยท p10 ยท income

+
+
IF
+
merchant contains โ€œ์ด์žโ€
+
+
โ†’
+
+
THEN
+
์ˆ˜์ž… / ์ด์ž
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p10 + ๊ฑฐ๋ž˜์œ ํ˜•: income + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_f1a8a1ad65bc +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ๊ตญ๋ฏผ์นด๋“œ ยท raw_summary/equals โ†’ ๊ธˆ์œต / ์นด๋“œ๋Œ€๊ธˆ ยท p20 ยท expense

+
+
IF
+
raw_summary equals โ€œ๊ตญ๋ฏผ์นด๋“œโ€
+
+
โ†’
+
+
THEN
+
๊ธˆ์œต / ์นด๋“œ๋Œ€๊ธˆ
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p20 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์˜ˆ + ID: rule_b2c4de43ec4a +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข KB์นด๋“œ์ถœ๊ธˆ ยท merchant/contains โ†’ ๊ธˆ์œต / ์นด๋“œ๋Œ€๊ธˆ ยท p20 ยท expense

+
+
IF
+
merchant contains โ€œKB์นด๋“œ์ถœ๊ธˆโ€
+
+
โ†’
+
+
THEN
+
๊ธˆ์œต / ์นด๋“œ๋Œ€๊ธˆ
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p20 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์˜ˆ + ID: rule_f19cadd86ece +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข SKํ…”๋ ˆ์ฝค ยท merchant/contains โ†’ ํ†ต์‹  / ํœด๋Œ€ํฐ ยท p30 ยท expense

+
+
IF
+
merchant contains โ€œSKํ…”๋ ˆ์ฝคโ€
+
+
โ†’
+
+
THEN
+
ํ†ต์‹  / ํœด๋Œ€ํฐ
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p30 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์˜ˆ + ID: rule_0203c1d7aaff +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข KTํ†ต์‹  ยท merchant/contains โ†’ ํ†ต์‹  / ํ†ต์‹ ์š”๊ธˆ ยท p30 ยท expense

+
+
IF
+
merchant contains โ€œKTํ†ต์‹ โ€
+
+
โ†’
+
+
THEN
+
ํ†ต์‹  / ํ†ต์‹ ์š”๊ธˆ
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p30 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์˜ˆ + ID: rule_bc8450f5eec0 +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ๋ณ‘์› ยท merchant/contains โ†’ ์˜๋ฃŒ / ๋ณ‘์› ยท p40 ยท expense

+
+
IF
+
merchant contains โ€œ๋ณ‘์›โ€
+
+
โ†’
+
+
THEN
+
์˜๋ฃŒ / ๋ณ‘์›
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p40 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_1a99df6cd690 +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ์น˜๊ณผ ยท merchant/contains โ†’ ์˜๋ฃŒ / ์น˜๊ณผ ยท p40 ยท expense

+
+
IF
+
merchant contains โ€œ์น˜๊ณผโ€
+
+
โ†’
+
+
THEN
+
์˜๋ฃŒ / ์น˜๊ณผ
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p40 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_716485eae54b +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ๊ต์Šต์†Œ ยท merchant/contains โ†’ ๊ต์œก / ์˜ˆ์ฒด๋Šฅ ยท p40 ยท expense

+
+
IF
+
merchant contains โ€œ๊ต์Šต์†Œโ€
+
+
โ†’
+
+
THEN
+
๊ต์œก / ์˜ˆ์ฒด๋Šฅ
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p40 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_76934f9f4225 +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ์•ฝ๊ตญ ยท merchant/contains โ†’ ์˜๋ฃŒ / ์•ฝ๊ตญ ยท p40 ยท expense

+
+
IF
+
merchant contains โ€œ์•ฝ๊ตญโ€
+
+
โ†’
+
+
THEN
+
์˜๋ฃŒ / ์•ฝ๊ตญ
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p40 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_9db280a016d1 +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ์—ฐ์„ธ๋Œ€ํ•™๊ต ยท merchant/contains โ†’ ์˜๋ฃŒ / ๋ณ‘์› ยท p40 ยท expense

+
+
IF
+
merchant contains โ€œ์—ฐ์„ธ๋Œ€ํ•™๊ตโ€
+
+
โ†’
+
+
THEN
+
์˜๋ฃŒ / ๋ณ‘์›
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p40 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_b414f40c1906 +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ์˜์› ยท merchant/contains โ†’ ์˜๋ฃŒ / ๋ณ‘์› ยท p40 ยท expense

+
+
IF
+
merchant contains โ€œ์˜์›โ€
+
+
โ†’
+
+
THEN
+
์˜๋ฃŒ / ๋ณ‘์›
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p40 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_f1c39dc1d67f +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ํ•™์› ยท merchant/contains โ†’ ๊ต์œก / ํ•™์› ยท p40 ยท expense

+
+
IF
+
merchant contains โ€œํ•™์›โ€
+
+
โ†’
+
+
THEN
+
๊ต์œก / ํ•™์›
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p40 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_f84267f0a392 +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ์Šคํƒ€๋ฒ…์Šค ยท merchant/contains โ†’ ์‹๋น„ / ์นดํŽ˜ ยท p50 ยท expense

+
+
IF
+
merchant contains โ€œ์Šคํƒ€๋ฒ…์Šคโ€
+
+
โ†’
+
+
THEN
+
์‹๋น„ / ์นดํŽ˜
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p50 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_2510ea4a82fb +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ์ƒํ˜‘ ยท merchant/contains โ†’ ์‹๋น„ / ๋งˆํŠธ ยท p50 ยท expense

+
+
IF
+
merchant contains โ€œ์ƒํ˜‘โ€
+
+
โ†’
+
+
THEN
+
์‹๋น„ / ๋งˆํŠธ
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p50 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_8b48227ec858 +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ์ปคํ”ผ ยท merchant/contains โ†’ ์‹๋น„ / ์นดํŽ˜ ยท p50 ยท expense

+
+
IF
+
merchant contains โ€œ์ปคํ”ผโ€
+
+
โ†’
+
+
THEN
+
์‹๋น„ / ์นดํŽ˜
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p50 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_b75d541ca28d +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ๋ฉ”๊ฐ€MGC ยท merchant/contains โ†’ ์‹๋น„ / ์นดํŽ˜ ยท p50 ยท expense

+
+
IF
+
merchant contains โ€œ๋ฉ”๊ฐ€MGCโ€
+
+
โ†’
+
+
THEN
+
์‹๋น„ / ์นดํŽ˜
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p50 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_ba80a638c8fd +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ์ด๋งˆํŠธ ยท merchant/contains โ†’ ์‹๋น„ / ๋งˆํŠธ ยท p50 ยท expense

+
+
IF
+
merchant contains โ€œ์ด๋งˆํŠธโ€
+
+
โ†’
+
+
THEN
+
์‹๋น„ / ๋งˆํŠธ
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p50 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_c51d103dac30 +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ๋งค๋จธ๋“œ ยท merchant/contains โ†’ ์‹๋น„ / ์นดํŽ˜ ยท p50 ยท expense

+
+
IF
+
merchant contains โ€œ๋งค๋จธ๋“œโ€
+
+
โ†’
+
+
THEN
+
์‹๋น„ / ์นดํŽ˜
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p50 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_d643e2ec46a9 +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ์˜ค์•„์‹œ์Šค๋งˆ์ผ“ ยท merchant/contains โ†’ ์‹๋น„ / ๋งˆํŠธ ยท p50 ยท expense

+
+
IF
+
merchant contains โ€œ์˜ค์•„์‹œ์Šค๋งˆ์ผ“โ€
+
+
โ†’
+
+
THEN
+
์‹๋น„ / ๋งˆํŠธ
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p50 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_d98939f3d8ca +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ์Šค์‹œ ยท merchant/contains โ†’ ์‹๋น„ / ์™ธ์‹ ยท p60 ยท expense

+
+
IF
+
merchant contains โ€œ์Šค์‹œโ€
+
+
โ†’
+
+
THEN
+
์‹๋น„ / ์™ธ์‹
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p60 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_26077a6e1464 +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ์งœ์žฅ ยท merchant/contains โ†’ ์‹๋น„ / ์™ธ์‹ ยท p60 ยท expense

+
+
IF
+
merchant contains โ€œ์งœ์žฅโ€
+
+
โ†’
+
+
THEN
+
์‹๋น„ / ์™ธ์‹
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p60 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_2b44245daabc +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข KFC ยท merchant/contains โ†’ ์‹๋น„ / ์™ธ์‹ ยท p60 ยท expense

+
+
IF
+
merchant contains โ€œKFCโ€
+
+
โ†’
+
+
THEN
+
์‹๋น„ / ์™ธ์‹
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p60 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_c421de3acf1d +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ์Œ€๊ตญ์ˆ˜ ยท merchant/contains โ†’ ์‹๋น„ / ์™ธ์‹ ยท p60 ยท expense

+
+
IF
+
merchant contains โ€œ์Œ€๊ตญ์ˆ˜โ€
+
+
โ†’
+
+
THEN
+
์‹๋น„ / ์™ธ์‹
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p60 + ๊ฑฐ๋ž˜์œ ํ˜•: expense + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_e2f3a75aa88d +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
keyboard_arrow_right

๐ŸŸข ์Šค๋งˆํŠธ์ถœ๊ธˆ ยท raw_summary/equals โ†’ ์ด์ฒด / ํ˜„๊ธˆ/๊ณ„์ขŒ์ด๋™ ยท p80 ยท ์ „์ฒด

+
+
IF
+
raw_summary equals โ€œ์Šค๋งˆํŠธ์ถœ๊ธˆโ€
+
+
โ†’
+
+
THEN
+
์ด์ฒด / ํ˜„๊ธˆ/๊ณ„์ขŒ์ด๋™
+
+
+
+ ์ƒํƒœ: ํ™œ์„ฑ + ์šฐ์„ ์ˆœ์œ„: p80 + ๊ฑฐ๋ž˜์œ ํ˜•: ์ „์ฒด + ์กฐ๊ฑด: ์ถ”๊ฐ€ ์กฐ๊ฑด ์—†์Œ + person: - + ๊ณ ์ •๋น„: ์•„๋‹ˆ์˜ค + ID: rule_76597eedff7f +
+
๋ฉ”๋ชจ: default: initial Jarca ledger categorization
์‚ญ์ œ๋ณด๋‹ค ๋น„ํ™œ์„ฑํ™”๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
+ + + \ No newline at end of file diff --git a/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/rules.png b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/rules.png new file mode 100644 index 0000000..494c0d4 Binary files /dev/null and b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/rules.png differ diff --git a/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/transfer-review.dom.html b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/transfer-review.dom.html new file mode 100644 index 0000000..476b41a --- /dev/null +++ b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/transfer-review.dom.html @@ -0,0 +1,241 @@ + + + + + + + Jarca Ledger + + + + + + + + +

๐Ÿ’ฐ Jarca Ledger

๊ฐ€๊ณ„๋ถ€ ยท ๋ถ„๋ฅ˜ ยท Import ์šด์˜ ์ฝ˜์†”

๋ฉ”๋‰ด
+
๐Ÿ” Transfer Review
+

KBโ†”ํ† ์Šค๋ฑ…ํฌ ํ™•์ธํ•„์š” ํ

+

๋‚ ์งœยท๊ธˆ์•กยท์ƒ๋Œ€ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์ขŒ ๊ฐ„ ์ด๋™ ํ›„๋ณด๋ฅผ ๋Œ€์กฐํ•˜๊ณ , ๋“œ๋ผ์ด๋Ÿฐ ํ›„ ์•ˆ์ „ํ•˜๊ฒŒ ๋งค์นญํ•ฉ๋‹ˆ๋‹ค.

+
๋“œ๋ผ์ด๋Ÿฐ ์šฐ์„ ๋ณธ์ธ๊ณ„์ขŒ์ด๋™์ˆ˜๋™ ๊ฒ€ํ† 
+

๊ฑฐ๋ž˜ ID: tx_7b21f4085a1d

2026-06-29 ยท SYNTHETIC_TRANSFER ยท 120,000์›

+ + + \ No newline at end of file diff --git a/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/transfer-review.png b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/transfer-review.png new file mode 100644 index 0000000..32df035 Binary files /dev/null and b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/transfer-review.png differ diff --git a/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/verification.md b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/verification.md index 20ddc3f..3cb43e2 100644 --- a/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/verification.md +++ b/docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/verification.md @@ -4,7 +4,7 @@ Status: PASS -All required code-path checks for BAT-014 passed. A manual local browser-evidence launch was attempted but blocked by the runtimeโ€™s consent guard for long-running local server startup, so the close-out evidence uses AppTest + full pytest + MCP discovery + structural call-site verification. No production ledger DB or real financial files were used. +All required code-path checks for BAT-014 passed, and local browser-level screenshot/DOM evidence was successfully captured against a synthetic fixture DB. No production ledger DB, real financial statement files, passwords, or raw financial payloads were used. ## Acceptance criteria evidence @@ -18,26 +18,57 @@ All required code-path checks for BAT-014 passed. A manual local browser-evidenc - `search_files(pattern='service\\.', path='dashboard', file_glob='app.py')` returned 0 matches after rewiring. - Dynamic hot-reload lookup now targets passed gateway modules (`categorization_gateway`, `transfers_gateway`) instead of a flat `service` binding. -### AC-3. Regression and adapter verification pass +### AC-3. Regression, adapter verification, and browser smoke pass - `python3 -m py_compile jarca_ledger_mcp/adapters/mcp/*.py jarca_ledger_mcp/adapters/streamlit/*.py dashboard/app.py` โ†’ PASS - `pytest -q tests/test_dashboard_app.py` โ†’ PASS (`....`) - `pytest -q` โ†’ PASS (`........................ss...............ss...`) - `hermes mcp test jarca-ledger` โ†’ PASS, 56 tools discovered +- `.venv/bin/python scripts/streamlit_browser_evidence.py` โ†’ PASS + - Output dir: `docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/` + - Artifacts: `overview.png`, `rules.png`, `transfer-review.png`, `import.png` plus matching `*.dom.html` and `manifest.json` + - Cleanup check: `search_files('chrome-profile-*')` under the run dir returned 0 results after the retry-cleanup fix -### AC-4. Baseline docs and discovery metadata reflect completion +### AC-4. Baseline docs, discovery metadata, and BAT-local evidence tooling reflect completion - Evidence: - `docs/project-structure.md` updated with new owning services, parser seam, MCP contract helper, and Streamlit page/domain gateways. - `docs/runtime-flows.md` updated with import/parser seam, MCP contract routing, and dashboard gateway flow. + - `docs/runbooks/streamlit-browser-evidence.md` now points at the BAT-014 evidence root and includes `์š”์•ฝ` in the default capture set. - dcy-011 metadata and close-out notes updated to reference `REQ-015`~`REQ-018` / `BAT-011`~`BAT-014` completion. -## Browser evidence note +## Browser evidence details -- Attempted: synthetic local dashboard browser/HTTP smoke. -- Result: blocked by terminal consent guard for long-running local server startup in this session. -- Impact: none on code correctness regression; AppTest remained green and no UI functional regression was detected in test coverage. +Evidence source: `docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/manifest.json` + +### Captured pages +- `์š”์•ฝ` + - Screenshot: `overview.png` + - DOM: `overview.dom.html` + - Evidence text included `๐Ÿ“Š ์š”์•ฝ`, `๊ฐ€๊ณ„๋ถ€ ์šด์˜ ๋Œ€์‹œ๋ณด๋“œ`, and the synthetic fixture DB path under the BAT-014 evidence directory. +- `๋ถ„๋ฅ˜ ๊ทœ์น™` + - Screenshot: `rules.png` + - DOM: `rules.dom.html` + - Evidence text included `โš™๏ธ Rule Engine`, `๋ถ„๋ฅ˜ ๊ทœ์น™`, and seeded default categorization rules. +- `ํ™•์ธํ•„์š” ํ` + - Screenshot: `transfer-review.png` + - DOM: `transfer-review.dom.html` + - Evidence text included `๐Ÿ” Transfer Review`, `KBโ†”ํ† ์Šค๋ฑ…ํฌ ํ™•์ธํ•„์š” ํ`, and a synthetic transfer-review row for `2026-06-29` / `SYNTHETIC_TRANSFER` / `120,000์›` / `์ด์ฒด` / `ํ™•์ธํ•„์š”`. +- `Import` + - Screenshot: `import.png` + - DOM: `import.dom.html` + - Evidence text included `๐Ÿ“ฅ Statement Import`, Toss Securities import copy, and Toss Bank import copy. + +### Automation script close-out +- Script: `scripts/streamlit_browser_evidence.py` +- Behavior: + - Generates a synthetic fixture DB under the BAT-014 evidence run directory. + - Starts Streamlit against that fixture DB only. + - Uses local Chrome DevTools Protocol to capture screenshots and DOM snapshots. + - Writes `manifest.json` with page/url/path/byte-size evidence. + - Retries Chrome profile cleanup and leaves only the intended evidence artifacts in the final run directory. ## Safety boundary - Synthetic/temp DBs only. - No destructive migration. - No production ledger DB mutation. +- No real statement files, passwords, or raw payloads in screenshots, DOM snapshots, or manifest output. diff --git a/docs/runbooks/streamlit-browser-evidence.md b/docs/runbooks/streamlit-browser-evidence.md index 1ee5e7a..b204e5a 100644 --- a/docs/runbooks/streamlit-browser-evidence.md +++ b/docs/runbooks/streamlit-browser-evidence.md @@ -14,9 +14,11 @@ cd /root/projects/jarca-ledger-mcp ๊ธฐ๋ณธ ์‚ฐ์ถœ๋ฌผ ์œ„์น˜: ```text -docs/batches/bat-004_20260629_browser-streamlit-e2e-evidence/evidence/run-YYYYMMDD-HHMMSS/ +docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-YYYYMMDD-HHMMSS/ โ”œโ”€โ”€ fixture.sqlite3 โ”œโ”€โ”€ manifest.json +โ”œโ”€โ”€ overview.png +โ”œโ”€โ”€ overview.dom.html โ”œโ”€โ”€ rules.png โ”œโ”€โ”€ rules.dom.html โ”œโ”€โ”€ transfer-review.png @@ -45,6 +47,7 @@ docs/batches/bat-004_20260629_browser-streamlit-e2e-evidence/evidence/run-YYYYMM ๊ธฐ๋ณธ ๋Œ€์ƒ: +- `์š”์•ฝ` - `๋ถ„๋ฅ˜ ๊ทœ์น™` - `ํ™•์ธํ•„์š” ํ` - `Import` diff --git a/scripts/streamlit_browser_evidence.py b/scripts/streamlit_browser_evidence.py index 293c667..1ca9eed 100755 --- a/scripts/streamlit_browser_evidence.py +++ b/scripts/streamlit_browser_evidence.py @@ -29,10 +29,10 @@ import websockets from jarca_ledger_mcp import service from jarca_ledger_mcp.db import init_db -DEFAULT_PAGES = ["๋ถ„๋ฅ˜ ๊ทœ์น™", "ํ™•์ธํ•„์š” ํ", "Import"] +DEFAULT_PAGES = ["์š”์•ฝ", "๋ถ„๋ฅ˜ ๊ทœ์น™", "ํ™•์ธํ•„์š” ํ", "Import"] DEFAULT_CHROME = "/usr/bin/google-chrome-stable" DEFAULT_STREAMLIT = Path(".venv/bin/streamlit") -DEFAULT_OUTPUT_ROOT = Path("docs/batches/bat-004_20260629_browser-streamlit-e2e-evidence/evidence") +DEFAULT_OUTPUT_ROOT = Path("docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence") def parse_args() -> argparse.Namespace: @@ -181,6 +181,16 @@ def wait_for_devtools(port: int, timeout_seconds: int = 15) -> str: raise SystemExit(f"Chrome DevTools endpoint did not become ready on port {port}: {last_error}") +def remove_tree_with_retries(path: Path, attempts: int = 5, delay_seconds: float = 0.5) -> None: + for attempt in range(1, attempts + 1): + shutil.rmtree(path, ignore_errors=True) + if not path.exists(): + return + time.sleep(delay_seconds * attempt) + if path.exists(): + raise SystemExit(f"temporary Chrome profile cleanup failed: {path}") + + class CdpClient: def __init__(self, ws: websockets.ClientConnection) -> None: self.ws = ws @@ -265,7 +275,8 @@ def capture_page(chrome: str, base_url: str, page: str, output_dir: Path, devtoo chrome_proc.wait(timeout=8) except subprocess.TimeoutExpired: chrome_proc.kill() - shutil.rmtree(profile_dir, ignore_errors=True) + chrome_proc.wait(timeout=5) + remove_tree_with_retries(profile_dir) if not screenshot.exists() or screenshot.stat().st_size <= 0: raise SystemExit(f"Screenshot was not created for {page}: {screenshot}")