가상 의원 · 합성 예약 · 기준 9/21(월) 10:00 · [가정] 규칙 — 병원 확인 전 · 가예약은 이 기기에서만

빈자리전화 예약의 빈 시간 — 계산은 규칙이, 확정은 사람이

샘플의원 네 도구

한창구(글로 온 문의의 답장 초안) · 다시봄(병원이 먼저 거는 사후관리 연락) · 같은각도(경과 사진을 같은 조건으로) · 빈자리(전화로 온 예약 요청의 빈 시간). 도구끼리 연동은 없습니다.

평가

모두 합성 데이터 기준입니다. 규칙 문서(B01)·합성 예약·엔진·검사기·기대값을 같은 도구(Claude Code)로 만들었고, 기대값(경계 사례 표·규칙 해석)은 AI 작성·사람 검수 전입니다. 두 구현이 같은 문서를 같은 쪽으로 잘못 읽은 해석 실수(접수 마감 포함, 점심 맞닿음)는 여기 숫자로 잡히지 않습니다. 못 미쳐도 그대로 싣습니다.

한눈에

규칙 위반(따로 짠 검사기)0건앱이 낸 칸 335,936개 · 기준 시각 2,215개(9/21(월) 10:00 ~ 10/6(화) 19:00, 10분 간격) × 안건 6
심은 경계 사례32 / 32의도대로 판정된 사례 / 사례(판정은 앱 엔진)
결정성0건결과가 달라진 쌍 / 90쌍(기준 시각 5 × 안건 6 × 변형 3)
별도 구현 대조3,580 / 3,580행앱 코드를 쓰지 않는 파이썬 계산기(data/scripts/slots_expected.py)가 기준 시각 5 × 안건 6의 모든 시작 후보를 판정한 행(휴진일은 날짜당 1행)과 판정·떨어진 까닭까지 같은 행. 빈 칸 779개 중 잘못 냄 0 · 빠뜨림 0. 화면이 아니라 시험(src/core/expected.test.ts)이 npm run verify마다 다시 확인합니다. 같은 AI가 같은 문서를 해석했으므로 해석 실수(접수 마감 포함, 점심 맞닿기, 리드 올림)는 못 잡습니다.
사람 손 검수미실시사람이 달력과 예약표로 확인한 행 0 / 20(사람 몫, 목표가 아님)

규칙 위반 — 규칙별

기준 시각을 9/21(월) 10:00 ~ 10/6(화) 19:00에서 10분마다 바꿔 가며, 앱이 낸 모든 칸을 엔진의 판정 함수를 쓰지 않고 따로 짠 검사기(src/demo/violations.ts)로 봅니다. 가예약 3건(첫 상담 9/21(월) 14:00, 두피 주사 9/21(월) 11:00, 모발이식 수술(하루) 9/28(월) 10:00, 9/21 10:00에 만듦)을 넣었습니다. 분모가 0이면 위반 0은 의미가 없습니다.

규칙어긴 칸 / 검사한 칸
휴진일·공휴일 미확인 날에 낸 칸0 / 335,936
점심과 겹침0 / 314,386
접수 마감 뒤 시작0 / 335,936
진료 종료 넘김(준비 시간 포함)0 / 335,936
수술 없는 요일(토요일) 수술0 / 21,550
다음 날(D+1) 휴진인 수술0 / 21,550
D+7 내원 창에 진료일 없는 수술0 / 21,550
하루 최대 초과0 / 72,416
사람·방 수 초과(기존 예약 + 가예약 + 이 칸)0 / 335,936
살아 있는 가예약과 같은 칸0 / 335,936
첫 예약 가능 시각 전0 / 335,936

심은 경계 사례(PRD 7절)

칸안건기대앱 판정결과
9/22(화) 12:00
점심과 맞닿기만 함 · 기준 09-21 10:00
첫 상담가능가능통과
9/22(화) 12:30
점심 겹침 · 기준 09-21 10:00
첫 상담불가(점심과 겹침)불가(점심과 겹침)통과
9/22(화) 12:30
점심 전에 끝나는 주사 · 기준 09-21 10:00
두피 주사가능가능통과
9/22(화) 14:00
점심 직후 · 기준 09-21 10:00
첫 상담가능가능통과
9/22(화) 18:00
평일 마지막 60분 칸 · 기준 09-21 10:00
첫 상담가능가능통과
9/22(화) 18:30
진료 종료 넘김 · 기준 09-21 10:00
첫 상담불가(진료 종료 넘김)불가(진료 종료 넘김)통과
9/22(화) 18:30
접수 마감 포함 · 기준 09-21 10:00
두피 주사가능가능통과
10/1(목) 20:00
목요일 야간 자원 안 · 기준 09-21 10:00
첫 상담가능가능통과
10/1(목) 20:30
목요일 진료 종료 넘김 · 기준 09-21 10:00
첫 상담불가(진료 종료 넘김)불가(진료 종료 넘김)통과
10/1(목) 20:30
목요일 접수 마감 포함 · 기준 09-21 10:00
두피 주사가능가능통과
10/10(토) 14:00
토요일 마지막 60분 칸 · 기준 10-06 10:00
첫 상담가능가능통과
10/10(토) 14:30
토요일 진료 종료 넘김 · 기준 10-06 10:00
첫 상담불가(진료 종료 넘김)불가(진료 종료 넘김)통과
10/10(토) 14:30
토요일 접수 마감 포함 · 기준 10-06 10:00
두피 주사가능가능통과
10/10(토) 10:00
평범한 토요일 수술 · 기준 10-06 10:00
모발이식 수술(하루)불가(수술 없는 날)불가(수술 없는 날, 다음 날 휴진, 첫 예약 가능 시각 전, 진료 종료 넘김, 사람·방 없음)통과
10/2(금) 10:00
다음 날 10/3 개천절 · 기준 09-21 10:00
모발이식 수술(하루)불가(다음 날 휴진)불가(다음 날 휴진, 사람·방 없음)통과
10/8(목) 10:00
다음 날 10/9 한글날 · 기준 09-21 10:00
모발이식 수술(하루)불가(다음 날 휴진)불가(다음 날 휴진, 사람·방 없음)통과
10/15(목) 10:00
다음 날 10/16 임시 휴진 · 기준 10-06 10:00
모발이식 수술(하루)불가(다음 날 휴진)불가(다음 날 휴진, 사람·방 없음)통과
10/1(목) 10:00
다음 날 10/2 진료 · 기준 09-21 10:00
모발이식 수술(하루)가능가능통과
10/23(금) 10:00
다음 날 토요일 진료 · 기준 10-06 10:00
모발이식 수술(하루)가능가능통과
9/28(월) 10:00
수술실 정리 18:00~18:30이 진료 종료 안 · 기준 09-21 10:00
모발이식 수술(하루)가능가능통과
10/16(금) 11:00
10/16 임시 휴진 · 기준 10-06 10:00
첫 상담불가(휴진)불가(휴진)통과
10/16(금) 11:00
10/16 임시 휴진 · 기준 10-06 10:00
의료진 재진 상담불가(휴진)불가(휴진)통과
10/16(금) 11:00
10/16 임시 휴진 · 기준 10-06 10:00
두피 주사불가(휴진)불가(휴진)통과
10/16(금) 11:00
10/16 임시 휴진 · 기준 10-06 10:00
두피 관리불가(휴진)불가(휴진)통과
10/16(금) 10:00
10/16 임시 휴진 · 기준 10-06 10:00
모발이식 수술(하루)불가(휴진)불가(휴진)통과
10/16(금) 10:00
10/16 임시 휴진 · 기준 10-06 10:00
모발이식 수술(반나절)불가(휴진)불가(휴진)통과
1/4(화) 11:00
공휴일 확인 기간 밖(2028-01-04) · 기준 09-21 10:00
첫 상담불가(공휴일 미확인 — 계산하지 않음)불가(공휴일 미확인 — 계산하지 않음)통과
9/30(수) 첫 상담 — 의료진 1명 휴무 + 합성 수술예약 꽉 참예약 꽉 참통과
주사 첫 예약 가능 시각 — 기준 09-21 10:009/21(월) 11:009/21(월) 11:00통과
주사 첫 예약 가능 시각 — 기준 09-21 11:009/21(월) 12:009/21(월) 12:00통과
주사 첫 예약 가능 시각 — 기준 09-23 12:509/23(수) 14:009/23(수) 14:00통과
주사 첫 예약 가능 시각 — 기준 10-01 20:1010/2(금) 10:0010/2(금) 10:00통과

통화 중 조작 수(설계상 값)

버튼을 누르기 시작해 첫 빈 시간이 보일 때까지의 누름 수입니다. 화면 상태 함수(callReducer)로 모든 길을 실제로 눌러 센 값이고, 사람이 전화를 받으며 잰 값이 아닙니다.

길찾는 안건누름
상담 → 예, 처음첫 상담2번
상담 → 아니오, 재진의료진 재진 상담2번
시술 → 모발이식 수술 → 예모발이식 수술(하루)3번
시술 → 모발이식 수술 → 아니오첫 상담 (첫 상담으로 바뀜)3번
시술 → 두피 주사 → 처음(진찰 전)첫 상담 (첫 상담으로 바뀜)3번
시술 → 두피 주사 → 시작·다음 회차두피 주사3번
시술 → 두피 주사 → 회차 옮기기두피 주사4번
시술 → 두피 관리 → 예, 처음첫 상담 (첫 상담으로 바뀜)3번
시술 → 두피 관리 → 아니오두피 관리3번
재시술 → 예, 여기서의료진 재진 상담2번
재시술 → 다른 병원첫 상담 (첫 상담으로 바뀜)2번

수술 크기를 반나절로 바꾸면 +1, 거르개 하나 +1, 칸을 눌러 문장을 보면 +1, 가예약 +1.

기준 시각 9/21(월) 10:00의 첫 빈 시간

첫 상담9/21(월) 11:00 · 9/21(월) 11:30 · 9/21(월) 14:00 · 9/21(월) 17:30 · 9/22(화) 12:0038칸
의료진 재진 상담9/21(월) 11:00 · 9/21(월) 11:30 · 9/21(월) 12:00 · 9/21(월) 14:00 · 9/21(월) 14:3057칸
두피 주사9/21(월) 11:00 · 9/21(월) 11:30 · 9/21(월) 12:00 · 9/21(월) 14:00 · 9/21(월) 14:3050칸
두피 관리9/21(월) 15:00 · 9/21(월) 15:30 · 9/21(월) 16:00 · 9/21(월) 16:30 · 9/21(월) 17:0031칸
모발이식 수술(하루)9/28(월) 10:00 · 10/1(목) 10:00 · 10/12(월) 10:00 · 10/14(수) 10:004칸
모발이식 수술(반나절)9/28(월) 10:00 · 9/29(화) 14:30 · 10/1(목) 10:00 · 10/7(수) 10:00 · 10/12(월) 10:006칸

재지 않은 것

  • 변이 검사(규칙을 일부러 틀리게 바꾸기)는 저장소 밖 스크립트로 2026-09-30에 한 번 돌렸습니다: 42개 중 42개를 시험이 잡음(시간대 결함 하나는 UTC 실행에서만 잡힘). 빌드마다 다시 돌지는 않습니다.
  • 375×667에서 첫 칩 줄이 스크롤 없이 보이는 것은 상담 → 예, 처음(657px)뿐입니다. 재시술·주사·수술은 안내 줄과 하위 칩 때문에 첫 칩 줄이 화면 아래(767~856px)로 내려갑니다(헤드리스 크롬으로 잼).
  • 도입 뒤 볼 것: 통화 한 건 시간이 줄었는지, 잘못 안내해 다시 건 전화 수, 가예약이 실제 예약으로 이어진 비율.