From 17ad101eb12199fcce3c90acd3ee02a5bde2e586 Mon Sep 17 00:00:00 2001 From: hyowons Date: Mon, 29 Jun 2026 02:00:02 +0900 Subject: [PATCH] =?UTF-8?q?auto:=20=EC=9D=BC=EC=9D=BC=20=EB=B0=B1=EC=97=85?= =?UTF-8?q?=202026-06-29=2002:00?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- .../skills/whooing-sync/scripts/parsers.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/agents/budget/workspace/skills/whooing-sync/scripts/parsers.py b/agents/budget/workspace/skills/whooing-sync/scripts/parsers.py index e3182e1..166db74 100644 --- a/agents/budget/workspace/skills/whooing-sync/scripts/parsers.py +++ b/agents/budget/workspace/skills/whooing-sync/scripts/parsers.py @@ -135,8 +135,32 @@ KAKAOBANK_RE = re.compile( ) +KAKAOBANK_CARD_RE = re.compile( + r"\[Web발신\]\s*\[카카오뱅크\]\s+카드결제\s+" + r"(?P\S+)\s+" + r"(?P\d{2}/\d{2})\s+(?P\d{2}:\d{2})\s+" + r"(?P[\d,]+)원\s+" + r"(?P[^\n]+?)" + r"(?:\s+잔액\s+(?P[\d,]+)원?)?\s*$", + re.DOTALL, +) + + def parse_kakao_bank(raw: str, created_at: str) -> "dict | None": text = _normalize(raw) + card = KAKAOBANK_CARD_RE.search(text) + if card: + result = { + "kind": "withdrawal", + "entry_date": _iso_to_kst_date(created_at), + "amount": int(card.group("amount").replace(",", "")), + "merchant": _normalize(card.group("merchant")).split("\n")[0].strip() or "(메모없음)", + "raw": raw, + } + if card.group("balance"): + result["balance"] = int(card.group("balance").replace(",", "")) + return result + m = KAKAOBANK_RE.search(text) if not m: return None