feat: 알림 입금 인식 + 미확인 수입 기본 은행계좌
CI / build (push) Successful in 34s

- 네이티브 알림 필터에 입금/이체/송금 키워드 추가(입금 알림도 수집)
- 미확인(pending) 내역: 수입(입금)이면 기본 계좌종류 은행, 지출이면 카드

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ByungCheol
2026-06-09 22:50:23 +09:00
parent 2cde893d55
commit 9807472474
2 changed files with 9 additions and 7 deletions
@@ -50,15 +50,17 @@ public class CardNotifListenerService extends NotificationListenerService {
}
/**
* 결제 알림 후보 판별: 금액(####원) + 결제/승인/출금 키워드.
* '카드'는 광고에도 흔해 제외. 강한 승인신호(승인/출금/취소/환불) 없이 광고성 표현이 있으면 제외.
* (1차 필터 — 최종 판별 백엔드 파서)
* 결제/이체 알림 후보 판별: 금액(####원) + 승인/결제/출금/입금/이체/취소 키워드.
* '카드'는 광고에도 흔해 제외. 강한 신호 없이 광고성 표현이 있으면 제외.
* (1차 필터 — 최종 판별/분류는 백엔드 파서)
*/
private boolean looksLikePayment(String s) {
boolean money = s.matches("(?s).*\\d[\\d,]{2,}\\s*원.*");
boolean kw = s.contains("승인") || s.contains("결제") || s.contains("출금");
boolean kw = s.contains("승인") || s.contains("결제") || s.contains("출금")
|| s.contains("입금") || s.contains("이체") || s.contains("송금");
if (!money || !kw) return false;
boolean strong = s.contains("승인") || s.contains("출금") || s.contains("취소") || s.contains("환불");
boolean strong = s.contains("승인") || s.contains("출금") || s.contains("입금")
|| s.contains("이체") || s.contains("송금") || s.contains("취소") || s.contains("환불");
boolean adLike = s.matches("(?s).*(이벤트|광고|혜택|쿠폰|할인|적립|포인트|캐시백|마일리지|리워드|당첨|응모|추첨|프로모션|배너|무료|증정|모집).*");
return strong || !adLike;
}
+2 -2
View File
@@ -380,10 +380,10 @@ function openEdit(e) {
category: e.category || '',
amount: e.amount,
memo: e.memo || '',
// 알림 자동인식(pending) 건은 카드 결제이므로 매칭 실패해도 '카드'로 기본 선택(현금 X)
// 알림 자동인식(pending): 매칭 실패 시 수입(입금)=은행, 지출(카드결제)=카드로 기본 선택(현금 X)
walletKind: e.walletId
? walletKindOf(e.walletId)
: (e.pending ? 'CARD' : (e.type === 'TRANSFER' ? '' : 'CASH')),
: (e.pending ? (e.type === 'INCOME' ? 'BANK' : 'CARD') : (e.type === 'TRANSFER' ? '' : 'CASH')),
walletId: e.walletId || '',
toWalletKind: walletKindOf(e.toWalletId),
toWalletId: e.toWalletId || '',