LabHub
배우기 러닝패스 코스

보험 도메인 심화 · 보장 조건을 코드로 옮기기 · 실습

청구 한 건에 얼마를 지급하는가

LabHub 에서 이어서 보기

목표

약관의 보장 조건을 코드로 옮겨, 청구 한 건의 지급액과 그 근거를 내는 판정기를 만든다. 자기부담금·공동부담률·건당 한도·연간 한도를 정해진 순서로 적용하고, 면책기간과 보장 제외로 거절하고, 같은 사고의 복수 청구를 합산한 뒤, 청구 141건 전체를 판정해 집계와 보고서를 낸다.

왜 중요한가

약관은 말로 적혀 있고 순서를 명시하지 않는다. 공제를 먼저 하는지 비율을 먼저 곱하는지, 자기부담금이 청구마다인지 사고마다인지, 연간 한도를 사고일과 접수일 중 무엇으로 세는지에 따라 같은 청구의 지급액이 달라진다. 그런데 어느 쪽도 오류를 내지 않는다.
그래서 이 판정은 값이 맞느냐 이전에 설명할 수 있느냐 가 먼저다. 규칙 수치를 표로 빼고, 어떤 규칙이 얼마를 깎았는지 청구마다 남기면, 그 기록이 고객 안내문이자 회귀 시험의 기대값이 된다.
이 실습의 약관 수치(자기부담금 1만 원에서 3만 원, 공동부담 10%에서 20%, 건당 한도 30만 원에서 100만 원, 연간 한도 100만 원에서 500만 원, 면책기간 30·90·180일)는 실제 상품이 아니라 이 실습을 위해 지어낸 합성 표다.
채점기는 여러분의 판정 문구를 믿지 않는다. 임시 디렉터리에 채점기가 만든 약관·계약·청구를 차려 놓고 매번 다른 수치로 여러분의 판정기를 실제로 실행해, 지급액과 판정 근거를 채점기가 따로 계산한 값과 대조한다.

단계

1. /root/coverage/gen_claims.py 를 만들어 실행해 /root/coverage/claims.db 를 만드세요. 약관 3종, 계약 12건, 보장 제외 5줄, 청구 141건입니다.
2. 적용 순서 두 가지의 합계를 견주어 /root/coverage/order_compare.json 에 claims·order_a_total·order_b_total·difference 로 적으세요.
3. /root/coverage/adjudicate.py 를 만들어 자기부담금 → 공동부담 → 건당 한도 순서로 깎고, 깎은 금액을 steps 로 남기세요.
4. 보장기간 밖·면책기간 안·보장 제외 항목의 청구를 거절하세요. decision 은 denied, payable 은 0, reasons 에 사유를 모두 담습니다.
5. 자기부담금을 사고 하나에 한 번만 쓰게 하세요. 같은 사고의 두 번째 청구는 남은 자기부담금만큼만 깎입니다.
6. 연간 한도를 넣으세요. 계약마다 사고 연도 기준으로 쌓이고, 접수일 순서대로 소진되며, 해가 바뀌면 다시 살아납니다.
7. 약관 수치를 표에서만 읽게 하고, 공동부담 계산의 반올림을 사사오입(ROUND_HALF_UP) 으로 못 박으세요.
8. /root/coverage/make_payout.py 로 청구 141건을 모두 판정해 /root/coverage/payout.json/root/coverage/coverage_report.md 를 만드세요.

참고

단계 8개

  1. 약관표와 청구 스냅샷 만들기
  2. 적용 순서가 합계를 얼마나 벌리나
  3. 공제 · 공동부담 · 건당 한도를 순서대로
  4. 보장기간 · 면책기간 · 제외 항목으로 거절하기
  5. 자기부담금은 사고 하나에 한 번
  6. 연간 한도를 소진시키기
  7. 수치는 표에, 반올림은 정책으로
  8. 전체 판정과 지급 보고서