auto: 일일 백업 2026-08-21 02:00

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
hyowons
2026-08-21 02:00:05 +09:00
parent 4321b38e30
commit 815b8cc6c4
169 changed files with 4358 additions and 1510 deletions
@@ -204,7 +204,7 @@ def parse_kakao_bank(raw: str, created_at: str) -> "dict | None":
# 누적1,466,011원 누적4,696,608원
# 앞의 `현대카드[^\n]*` 가 greedy 라 "승인취소" 형태도 kind=취소 로 잡힌다.
HYUNDAI_CARD_RE = re.compile(
r"^\s*현대카드[^\n]*(?P<kind>승인|취소)\s*\n"
r"^\s*현대(?:카드)?[^\n]*(?P<kind>승인|취소)\s*\n"
r"(?P<who>[^\n]+)\s*\n"
r"(?P<amount>[\d,]+)\s*원[^\n]*\n"
r"\d{2}/\d{2}\s+\d{2}:\d{2}\s*\n"
@@ -216,7 +216,7 @@ HYUNDAI_CARD_RE = re.compile(
# RCS/MAAP 형식은 한 줄로 들어온다:
# [Web발신] 현대카드 블루멤버스 승인 방*원 84,000원 일시불 05/16 11:57 네이버페이 누적820,000원
HYUNDAI_CARD_INLINE_RE = re.compile(
r"현대카드[^\n]*(?P<kind>승인|취소)\s+"
r"현대(?:카드)?[^\n]*(?P<kind>승인|취소)\s+"
r"(?P<who>\S+)\s+"
r"(?P<amount>[\d,]+)\s*원[^\n]*?"
r"\d{2}/\d{2}\s+\d{2}:\d{2}\s+"
@@ -225,10 +225,24 @@ HYUNDAI_CARD_INLINE_RE = re.compile(
re.MULTILINE,
)
# 현대카드 자동납부 한 줄 형식:
# [Web발신] [현대카드] 자동납부 승인 방*원님 라이나생명 31,100원
HYUNDAI_AUTOPAY_RE = re.compile(
r"\[?현대카드\]?\s*자동납부\s*(?P<kind>승인|취소|승인취소)\s+"
r"(?P<who>\S+?님)\s+"
r"(?P<merchant>.+?)\s+"
r"(?P<amount>[\d,]+)\s*원\s*$",
re.MULTILINE,
)
def parse_hyundai_card(raw: str, created_at: str) -> "dict | None":
text = _normalize(raw).replace("[Web발신]", "").strip()
m = HYUNDAI_CARD_RE.search(text) or HYUNDAI_CARD_INLINE_RE.search(text)
m = (
HYUNDAI_AUTOPAY_RE.search(text)
or HYUNDAI_CARD_RE.search(text)
or HYUNDAI_CARD_INLINE_RE.search(text)
)
if not m:
return None
amount = int(m.group("amount").replace(",", ""))
@@ -240,8 +254,9 @@ def parse_hyundai_card(raw: str, created_at: str) -> "dict | None":
"merchant": merchant,
"raw": raw,
}
if m.group("cumulative"):
result["cumulative"] = int(m.group("cumulative").replace(",", ""))
cumulative = m.groupdict().get("cumulative")
if cumulative:
result["cumulative"] = int(cumulative.replace(",", ""))
return result