13.4.3.2 업무 단위 캘린더(Business Calendar) 워킹데이 기반 기한(Due Date) 검증
단순히 날짜의 역전(역인과율)을 부등식으로 방어하는 1차원적 수준을 넘어, 엔터프라이즈 MLOps 백엔드는 B2B 결제 생태계의 고유하고 복잡한 기업 ’도메인 지식(Domain Knowledge)’마저도 2단계 오라클 런타임에 깊숙이 내재화시켜야 한다. 그중 가장 치명적이고 난이도 높은 검문소가 바로 ‘Net 30’, ’Net 60’과 같은 계약상의 결제 조건(Payment Terms)과 연동된 워킹데이(Working Day, 영업일) 기반 기한 검증이다.
글로벌 B2B 상거래 송장(Invoice)에는 구체적인 날짜 대신 “결제 기한: 발급일로부터 영업일 기준 30일 이내(Net 30)“와 같은 자연어 텍스트 형태의 비즈니스 규칙이 매우 자주 등장한다.
만약 LLM 에이전트가 이를 훌륭하게 해석해서 due_date 필드 값을 자체적으로 날짜 계산하여 반환해 냈는데, 시스템 달력을 확인해 보니 그 날짜가 하필 미국의 추수감사절이나 크리스마스 같은 법정 휴일(Holiday)로 찍혀있거나, 모든 은행이 문을 닫는 일요일로 지정되어 있다면 어떻게 될까? 이는 명백히 LLM이 인간 사회의 물리적인 ‘비즈니스 달력(Business Calendar)’ 개념을 상실한 채, 맹목적이고 기계적인 +30일의 산술 연산만을 피상적으로 수행했음을 보여주는 전형적인 **‘도메인 지식 결여 환각(Domain-ignorant Hallucination)’**이다.
이 불완전한 날짜가 시스템에 그대로 삽입되면, 만기일 당일에 은행 자동 이체 송금 배치가 실패하며 수천 건의 트랜잭션 예외 처리 지옥이 펼쳐지게 된다.
1. Business Calendar 프로그래밍과 자동 휴일(Holiday) 방어 로직
진정한 의미의 2단계 시맨틱 오라클은 파이썬의 workalendar 라이브러리나 pandas.tseries.offsets.BusinessDay 같은 로컬 캘린더 모듈을 통해, 해당 벤더사가 속한 국가나 주(State)에 맞는 법정 공휴일을 역으로 연산하여 LLM의 대답이 지닌 논리적 유효성을 심판한다.
from pydantic import BaseModel, model_validator
from datetime import date
from workalendar.usa import UnitedStates
class BusinessDayOracle(BaseModel):
invoice_date: date
due_date: date
payment_term_days: int = 30 # Default Net 30 조건
@model_validator(mode='after')
def verify_business_day_domain_logic(self):
"""
단순 날짜 부등식을 넘어, 실제 은행 영업일 규칙을 적용한 LLM 교차 검증을 수행한다.
"""
# 이 예시에서는 벤더 국가 파라미터가 미국(US)이라고 가정하고 미국 달력 인스턴스화
cal = UnitedStates()
# 1. 1차 관문: 기한일(Due Date)이 실제 은행 영업일(Working Day)인지 논리 무결성 확인
if not cal.is_working_day(self.due_date):
raise ValueError(
f"[비즈니스 논리 검증 실패] 추출된 납부 만기일({self.due_date})은 "
f"미국 현지 기준 주말 또는 법정 공휴일로 영업일이 아닙니다. "
f"LLM이 캘린더 개념 없이 기계적 덧셈 환각을 일으켰으므로 반려합니다."
)
# 2. 2차 관문: 송장 발행일로부터의 워킹데이 산술 계산 역검증 (제한적 타격)
# 완벽히 Net 30 영업일을 계산하여 LLM이 도출한 답의 정밀도를 체크
expected_business_due = cal.add_working_days(self.invoice_date, self.payment_term_days)
# (참고: 기업의 회계 유연성 방침에 따라 완전한 == 연산 일치 여부 대신,
# +/- 2일 정도의 합리적 오차 마진(Grace Period)을 두고 에러를 격발할 수 있다)
return self
2. 도메인 지식(Domain Knowledge) 내재화 오라클의 궁극적 가치
이처럼 비즈니스 캘린더 모듈을 내장에 이식한 거대한 오라클 시스템은, LLM 에이전트의 역할을 단순히 그림 파일에서 글자를 “광학적으로 눈으로 읽고 파싱하는 것(Perception)” 수준을 아득히 초월하게 만든다. MLOps 파이프라인의 백엔드 시스템 자체가 스스로 **“금융 회계법과 국가별 달력의 사회적 상식(Domain Common Sense)”**을 즉각 도출하고 집행하는 강력한 AI의 재판관으로 시스템 코어 아키텍처를 승격시키는 것이다.
만기일이 일요일이나 공휴일로 무지성으로 잡혀서 다운스트림(Downstream)의 수조 원 단위 은행 이체 배치(Batch) 스크립트가 꼬이고 마비되는 기계적 참사를 오라클이 사전에 방파제처럼 잡아주고, 즉시 13.3.7절의 에러 템플릿을 통해 LLM에게 수정과 재요청(Retry)을 강제함으로써, 비즈니스 애플리케이션들은 언제 어떠한 문서가 쏟아져 들어오더라도 언제나 깨끗하게 정제되고 상법상으로도 완벽하게 결점이 없는 유효 트랜잭션 수치만을 안전하고 달콤하게 소비할 수 있게 된다.