개념 해설 · 2026-09-03

예외를 규칙의 바깥에 두면 왜 결론이 흔들리는가

가족 자산운용을 위한 세법 온톨로지 제작 프로젝트 15편

ontologyknowledge-graph

예외는 법률 텍스트의 괄호가 아니다. 어느 날짜에 어떤 사건을 기본 규칙에서 분기시킬지 정하는 또 하나의 판정 경로다.


실제 사례

가상의 사례에서 B는 주택을 양도하기 전, 예전에 들었던 한시적 예외가 자신에게도 남아 있는지 묻는다. 계약일은 예외의 종료일 뒤이고, B는 예외 이름을 기억하지만 자신의 주택 수와 거래일, 자산 조건이 모두 그 예외와 맞는지는 확인하지 못했다.

“예외가 있었다”는 기억만으로 기본 규칙을 건너뛸 수는 없다. 거래일이 예외의 유효기간 안인지, 예외가 요구하는 자산·당사자 조건이 무엇인지가 먼저다. 종료일이 지난 예외라면 다른 조건을 아무리 갖춰도 그 예외로 결론을 바꿀 수 없다.


법조문 해석

법조문의 예외는 본칙의 반대말이 아니다. 대개 본칙에 붙은 별도의 적용요건이다. 따라서 예외를 읽을 때는 ‘무엇을 제외하는가’뿐 아니라 ‘언제까지’, ‘누구에게’, ‘어떤 자산·거래에’ 적용되는가를 함께 읽어야 한다.

한시적 문언은 특히 그렇다. 예외 문언이 법령에 한 번 존재했다는 사실과 B의 거래일에 유효하다는 사실은 다르다. 법조문 해석에서 시간은 주석이 아니라 적용요건의 일부다.

여기에 적용 기준일도 섞이면 안 된다. 계약일, 잔금일, 양도일 가운데 무엇을 기준으로 삼는지는 각 규칙의 문언과 사건 정의를 따라 정리해야 한다. “예외를 알고 있다”는 기억이 아니라, 그 예외가 어떤 사실을 어느 시점에서 요구하는지를 다시 읽어야 결론이 흔들리지 않는다.


온톨로지 구조 해석

korean-tax은 기본 규칙과 예외를 TaxRule과 ExceptionRule로 나눈다. ExceptionRule은 본칙을 지우는 텍스트 메모가 아니라, 필요한 사실과 유효기간을 가진 독립된 객체다. family-wealth의 resolver는 TaxRule.validFrom, ExceptionRule.validTo, TimePoint.isoDate를 거래 기준일과 비교해 시행 전 규칙을 배제하고 만료된 예외를 후보에서 제거한다.

예외 조건이 아직 구조화되지 않았거나 필요한 사실이 비어 있으면 엔진은 APPLICABLE로 올리지 않는다. INSUFFICIENT_FACTS로 남긴다. 반면 종료된 예외를 먼저 제거하지 않으면 이미 끝난 문언이 불확실성처럼 남아 정상 거래까지 멈출 수 있다. 예외를 모델링한다는 것은 법 문장을 더 많이 저장하는 일이 아니라, 이 두 경우를 구분하는 일이다.

이 분기는 후보 검색 뒤에 붙는 장식이 아니다. 기본 규칙과 예외 규칙이 같은 사건을 서로 다른 시간 창으로 읽는다면, 둘은 각자의 유효기간과 조건을 가진 판정 객체여야 한다.

거래 사건 + 기준일
        │
        ├─ TaxRule: 유효기간과 본칙 요건 확인
        └─ ExceptionRule: 유효기간과 예외 요건 확인
                         │
                    적용·만료·사실부족으로 분기

이렇게 두면 만료된 예외는 명시적으로 제외되고, 아직 확인하지 못한 예외 요건은 불확실성으로 남는다. 규칙의 밖에 있던 예외를 판정 경로 안으로 옮길 때, “모른다”와 “적용되지 않는다”가 처음으로 다른 결과가 된다.


참고와 범위

이 글은 korean-tax의 ExceptionRule·TimePoint 모델과 family-wealth의 시행일·만료 예외 게이트를 바탕으로 한 구현 관찰이다. 사례의 거래일·자산·인물은 설명을 위한 가상 구성이다.

실제 예외 적용 여부는 거래일, 해당 시점 유효 법령, 자산과 당사자 사실, 예외의 정확한 요건을 함께 확인해야 한다. 이 글은 개별 세무 자문이 아니다.