레지스트리 분석 및 자동화
TL; DR
신뢰할 수있는 "검증" 자동화는 결정 론적 섭취 (안전한 전달, dempotence, 무결성 제어), 정규화 된 데이터 계층 (단일 체계, 일치 키, 표준화 된 시간/통화/표시 단위) 및 엄격한 품질 규율 (유효성, 허용 오차, DLQ, 경고, 자동 수정). 목표는 잡종 파일/웹 후크를 SLA를 사용하여 조정, 보고 및 BI를 위해 안정적인 테이블로 전환하는 것입니다.
1) 출처 및 형식 조경
1. 1 출처
PSP/인수자/애그리 게이터: 거래, 세트, 수수료, 분쟁.
은행: MT940, ISO 20022 CAMT를 추출합니다. 052/053/054, PAIN 결제. 001/002.
AWS/지갑/지불 (OCT/RTP/SEPA): 지불 레지스터, 반품.
암호화 사용자 정의/거래소: 체인 트랜잭션, 변환/커미션 보고서.
세금/국가 포털: 때로는 스크립트 브라우저를 통해 CS/XLSX/PDF를 사용합니다.
1. 2 가지 형식
CSV/TSV (가변 분리기, 로케일, 인코딩).
XLSX (멀티 시트, 병합 셀).
XML (ISO 20022 CAMT/PAIN, XSD 사용자 정의 스키마).
SWIFT MT940/942 (위치 필드).
JSON-API/NDJSON (증분 업로드, 커서).
(PHP 3 = 3.0.6, PHP 4) 스캔-OCR).
우편/TAR. GZ (다중 파일 배치).
2) 섭취 파이프 라인 아키텍처
컨투어:1. 랜딩: 안전한 파일 수락 (STP/FTPS/api/webhooks) → 즉시 체크섬을 고려하고 원자재를 항상 유지하십시오.
2. 날짜: 날짜/제공자/버치 별 레이아웃, 버전이있는 스토리지.
3. 정규화: 구문 분석 → 유형/단위 통합 → 정규화 된 테이블.
4. 검증: 검증 후 (품질 규칙) → 플래그, DLQ.
5. 일치: 내부 이벤트/뱅크에 매핑.
6. 서빙/BI: 화해/재무/거래 사례를 표시합니다.
주요 요구 사항:- 섭취의 dempotency: '(제공자, 파일 _ 네임, 파일 _ 크기, 체크섬, 문 _ 날짜)' → 고유 키.
- 재실행/재실행: 파일 재실행은 중복을 만들지 않습니다.
- DLQ (데드 레터 큐): 모든 인식 할 수없는/위반 규칙-격리 된 큐에 대한
- Versioning: 같은 날 새 파일 → 이전 버전에 대한 링크가있는 새 버전입니다.
3) 배달 및 비밀 보안
채널: 키가 제한된 SFT; FTPS - 엄격한 TLS에서만; API - OAuth2/짧은 TTL 토큰.
콘텐츠 암호화: 파일을 다운로드 할 때 PGP/GPG; 전자 메일받은 편지함 (사용되는 경우) 의 경우 S/MIML입니다.
무결성 검사: 해시 매니페스트와 비교하여 www- 256/512 체크섬.
비밀: Vault/KMS에 저장, 회전, 파일/로그 설정시 금지.
액세스: RBAC + "최소 권한" 원칙, 별도의 서비스 계정.
4) 정규화 및 데이터 체계
4. 1 보편적 규칙
시간: 항상 ISO-8601의 UTC; 정산 날짜, TZ가없는 'DATE'
금액: 사소한 단위의 'DECIMAL (p, s)' + 개별 '스케일'; 기호: 사전에 따라 엄격하게 수령/비용.
통화: ISO-4217, 'fx _ src' 가있는 고정 요금 표.
Locali: 자동 감지 금지-분리기/소수점/천분의 명시 적 설정.
(PHP 3 = 3.0.6, PHP 4) 다른 사람-로그로 변환.
4. 2 정규화 된 "평평한" 레이어 (예)
json
{
"provider": "Acquirer_A",
"source_kind": "PSP_TX PSP_SETTLEMENT BANK WALLET CRYPTO",
"kind": "AUTH CAPTURE REFUND PAYOUT FEE SETTLEMENT CHARGEBACK",
"payment_id": "pay_123", // ваше
"provider_txid": "psp_abc_789", // внешнее
"merchant_ref": "mr_456",
"sequence": 0, // partial/refund line index
"amount_minor": 100000, // 1000.00
"currency": "EUR",
"fee_minor": 120, // 1.20
"fx_rate": 1.0000,
"fx_src": "PSP ECB BANK",
"event_ts": "2025-11-03T12:00:00Z",
"value_date": "2025-11-05",
"account": "PSP_MERCHANT_CARD_A",
"bin": "425000",
"last4": "1234",
"status": "APPROVED CAPTURED SUCCESS FAILED SETTLED",
"file_id": "ing_20251103_001",
"row_hash": "sha256(raw_row)"
}
5) 형식 별 파서: 간계 및 레이크
5. 1 CSV/TSV
'구분 기호', '할당량', '탈출', '인코딩' 을 명시 적으로 지정하십시오.
5. XLSX 2 개
시트 화이트리스트별로 읽기; 자동 병합 금지 - Flattens 병합 셀.
공식을 값으로 변환; Excel → UTC 날짜는 명시적인 TZ입니다.
5. 3 XML (ISO 20022 CAMT/PAIN)
XSD에 의한 검증; XPath ID 매핑 ('<Ntry>', '<TxDtls>', '<Amt>', '<CdtDbtInd>').
신용/직불 표준화 → 부호; 다중 '<Chrgs>', '<RmtInf>' 에 대한 지원.
5. 4 MT940
구문 분석 태그 ': 61:', ': 86:'; 국가 확장에 대한 지원; 위치 필드 → 슬라이싱 규칙.
여러 ': 61:' 을 하나의 배치로 통합합니다.
5. 5 JSON/NDJSON/API
5. 6 PDF/OCR
먼저, 테이블 구문 분석 (테이블 검출기) 을 시도한 다음 화이트리스트 문자가있는 OCR (Tesserce) 만 시도하십시오.
검증 후: 양, 제어 합계, 줄 수의 조정.
5. 7 개의 아카이브/배치
구조 보존으로 포장 해제; 각 파일 - 별도의 '파일 _ id'; 모든 부품을 제어합니다.
6) 데이터 품질 검증 및 규칙
필수 점검:- 스키마-필요한 모든 필드가 있습니다.
- 유형: 양-숫자, 날짜-구문 분석.
- 체크 섬/총계-행 합계 = 총 파일 (있는 경우).
- 범위: 합리적인 창으로 날짜; 합계> 0 (또는 허용 된 음의 사전에 따름).
- 독창성: '(공급자, 공급자 _ txid, 시퀀스)' 는 정규화에서 복제되지 않습니다.
- 공차는 '양/fx/시간' 불일치가 허용됩니다.
결과: 'VALID', 'VALID _ WIT _ WARNINGS', 'INVALID → DLQ (reason _ code)'.
7) 정체성과 중복 제거
섭취 키: '(공급자, 파일 이름, 파일 화면, 체크섬, 명세서 _ 날짜)' → 단일 '파일 _ id'.
행 레벨 idem: 'row _ hash = sha256 (normalized _ row _ compact)'; 재 장전은 새로운 레코드를 만들지 않습니다.
Webhooks/API: 'idempotency _ key' 공급자 + 태그 ('exec_ id'), TTL 저장.
공급자의 복제: 불일치가있는 경우 DLQ _ DUPLICATE에서 'provider _ txid' + 'sequence' 에 의한 결제.
8) 오케스트레이션 및 일정
따라서 다음과 같은 내용이 포함되어 있습니다.
SLA/SLO: 파일 발생에서 'normalized = READY' 까지 'TTA (Time-to-Availability)'.
Retrai: 지수 백오프 + 지터; 시도 제한; 명확한 상태.
동시성 및 격리: CPU/RAM 제한이있는 별도의 풀/워커에서 무거운 OCR/파싱 XLSX.
DLQ- 재생: 규칙/매핑을 업데이트 할 때주기적인 재처리.
9) 관찰 및 경고
메트릭:- 섭취 성공%, 출처 별 Parse Success%.
- TtA p50/p95, 처리량 (라인/분).
- DLQ 속도 ging DLQ p50/p95.
- 스키마 드리프트 사건.
- (PHP 3 = 3.0.6, PHP 4)
- 'TtA p95> SLA' → P1.
- → 공급자 P1의 시간당 'DLQ 속도> 2%'.
- '스키마 드리프트 감지' → P0 (소스별로 자동 일치 중지).
- '중복 스파이크' → P2 (체크 제공자/웹 후크).
Dashbord: 깔때기 '파일 → rows _ raw → rows _ norm → rows _ formate → rows _ matched', 이유로 DLQ 카드, TtA-popeles.
10) 자동 보정 및 매핑
헤더 별칭: 버전이있는 사전 (예: 'Amount' → 'amt', 'AMOUNT' → 'amt').
11) "PSP 지불 및 보고서의 조정" 링크
준비된 정규화 된 계층-일치를위한 입력 (provesser _ txid/ref _ fuzzy/fuzzy), diff-taxonomy, auto-logs 및 demilation bank-stitching 계산. 주요 필드: 'provesser _ txid', 'sequence', 'kind', 'mount _ minor', '출력', '출력'.
12) 스토리지 모델 및 테이블
착륙 파일 표:sql
CREATE TABLE landed_files (
file_id TEXT PRIMARY KEY,
provider TEXT,
source_kind TEXT,
file_name TEXT,
file_size BIGINT,
checksum TEXT,
statement_date DATE,
received_at TIMESTAMP WITH TIME ZONE,
version INT,
status TEXT, -- RECEIVED PARSED FAILED error TEXT
);
정규화 된 행:
sql
CREATE TABLE psp_norm (
row_id BIGSERIAL PRIMARY KEY,
file_id TEXT REFERENCES landed_files(file_id),
provider TEXT,
source_kind TEXT,
kind TEXT,
payment_id TEXT,
provider_txid TEXT,
merchant_ref TEXT,
sequence INT,
amount_minor BIGINT,
currency CHAR(3),
fee_minor BIGINT,
fx_rate NUMERIC(18,8),
fx_src TEXT,
event_ts TIMESTAMPTZ,
value_date DATE,
account TEXT,
status TEXT,
row_hash TEXT UNIQUE,
repair_flags TEXT[]
);
CREATE INDEX idx_psp_norm_txid ON psp_norm(provider, provider_txid, sequence);
13) 파서 의사 코드
SS/XLSX:python def parse_table(file, spec):
df = load_csv_or_xlsx(file, delimiter=spec.delim, encoding=spec.enc, sheet=spec.sheet)
df = rename_headers(df, spec.header_aliases)
df = clean_amounts(df, thousand=spec.thousand, decimal=spec.decimal, sign_policy=spec.sign)
rows = []
for r in df.itertuples():
rows.append(normalize_row(r, spec))
return rows
XML CAMT:
python def parse_camt(xml):
root = parse_xml(xml, xsd="camt053.xsd")
for ntry in root.findall('.//Ntry'):
sign = 1 if ntry.findtext('CdtDbtInd') == 'CRDT' else -1 amt = Decimal(ntry.findtext('Amt')) sign
... map to normalized fields
(PHP 3 = 3.0.6, PHP 4)
python def parse_pdf_ocr(pdf):
text = tesseract(pdf, lang="eng", psm=6, whitelist="0123456789.,-;:/A-Za-z")
table = detect_table(text)
return normalize_table(table)
14) GDPR/PII 및 로그 편집
마스킹/해싱: PAN/이메일/전화 → 'sha256 + 소금', 로그-기본 값이 없습니다.
보존 정책: 소스 유형별 '보존' (AML/회계).
PII 액세스 - 역할별로 만; 읽기/내보내기 감사.
15) KPI 및 대상 (파싱/섭취 용)
Parse Success%
섭취 성공% 보다 99 이상입니다. 소스 당 5 %/일.
TtA p95 (fayl → normalized)
스키마 드리프트 사건: 경고/수정없이 0/월.
(PHP 3 = 3.0.6, PHP 4) 05%.
16) 사건 플레이 북
스키마 드리프트: 자동 매칭을 중지하고 스피커의 ML 감지로 "소프트" 파서를 켜고 별칭 패치를 준비하고 DLQ- 재생을 실행하십시오.
DLQ 급증: 최신 파일을 디버깅하고 인코딩/로케일/부호를 확인하고 공차의 심각성을 일시적으로 낮추십시오 (플래그 포함).
STP 지연: API 폴링/웹 후크로 전환, 재추적 증가, 공급자와의 통신.
스파이크 중복: 추가 검증 'row _ hash', 명확해질 때까지 반복 블록을 활성화하십시오.
17) 테스트 케이스 패키지 (UAT/Prod-Ready)
1. 이념성: 동일한로드 → 1 'File _ id', 0 개의 새 줄을 반복하십시오.
2. 로케일: ', '/' 로 파일. '/공간 → 정확한 합계.
3. 부분/환불: 하나의 '제공자 _ txid' 에 대한 여러 '시퀀스'.
4. XML XSD: 잘못된 CAMT → 'INVALID' + DLQ.
5. MT940 변형: 국가 확장 → 올바른 분석.
6. PDF→ OCR: 노이즈 → 스캔으로 기본 규칙을 추출하고 전달합니다.
7. 스키마 드리프트: 기록 파일의 새로운 헤더 → 별칭 패치 및 재 처리.
8. 처리량: N 파일/시간 → TtA SLA 준수에 대한로드 테스트.
9. PII 판: PAN/전자 메일이없는 로그 만 해시합니다.
18) 구현 점검표
- 출처 등록: 프로토콜, 일정, SLA, 형식, 연락처.
- 보안 채널 (STP/PGP/API), 비밀을위한 Vault
- 이념적 섭취 + 체크섬 + 버전.
- 형식, 별칭 사전, 서명/로케일 정책 별 파서.
- 정규화 된 레이어 및 키 인덱스.
- 검증 규칙, 공차, DLQ 및 재생.
- 오케스트레이터 (DAG), Retrai/Backoff, 리소스 풀.
- 관찰 가능성: 지표, 대시 보드, 경고.
- GDPR/PII 마스킹, 액세스 감사.
- 테스트 케이스 및 정기적 인 스키마 드리프트 드릴.
요약 다시 시작
구문 분석 자동화는 "파서를 작성" 하는 것이 아니라 안정적인 전달 및 암호화, dempotent 파이프 라인, 엄격한 정규화, 품질 규칙 및 투명한 경고와 같은 산업 회로를 구축하는 것입니다. 이러한 개요는 조정, 재무 및 관리보고의 기초 인 데이터 가용성에 대한 SLA를 보장하여 레지스터를 예측 가능한 테이블로 전환합니다.