업무 흐름 · 선택안 B

프로필이 바뀌어도 확정하지 않은 예약만 다시 판단한다

CRM은 최소 변경 신호만 보낸다. 예약서비스는 최신 revision으로 수렴시키고 병원별 처리 기회를 공정하게 배분하며, 예약 transaction에서 기존 약속을 보호한다. 프로필 원문은 이 경계를 넘지 않는다.

English
1

CRM 최소 변경 이벤트

Fingerprint, revision, assessment reference만 보낸다. 이름, 진단, 특징, 점수, 설명, 프로필 원문은 보내지 않는다.

2

신뢰 검증과 최신 revision

Producer, signature, issuer, audience, hash, schema, replay window와 병원 범위를 검증한다. 중복은 합치고 이전 작업은 stale로 만든다.

3

병원 간 공정 dispatch

병원 전체에서 HELD를 PROPOSED보다 먼저 처리한다. 전역·병원별 동시성, keyset page, DB lease와 작업 상한을 적용한다.

4

현재 assessment 조회

처리 시점에 opaque reference를 고정 host HTTPS로 조회한다. 응답 크기, schema, identity, timeout과 동시성을 엄격히 제한한다.

5

원자적 상태 판단

현재 revision과 예약 version을 잠근다. 최신 상태의 대상만 변경하고 allocation 교체와 outbox 기록을 한 transaction에서 끝낸다.

6

Outbox와 운영 지표

결과 분류, 최소 감사 정보와 낮은 cardinality 지표만 남긴다. tenant, clinic, patient, appointment, event ID를 metric label로 쓰지 않는다.

PROPOSED · 후보 갱신

현재 proposal을 최신 유효 후보로 대체한다. active allocation을 해제할 일은 없다.

HELD · 유지, 교체 또는 제안 상태 복귀

유효한 hold는 유지한다. 바꿔야 하면 새 allocation을 먼저 확보한 뒤 기존 것을 해제한다. 대체 자원이 없으면 중복 allocation 없이 `PROPOSED`로 돌아간다.

CONFIRMED · 건너뜀

고객과 확정한 약속을 그대로 둔다. 프로필 이벤트만으로 취소·이동·교체하거나 조용히 다시 해석하지 않는다.

기술 오류 · 제한된 복구

Jitter와 총 경과 시간 상한을 적용해 재시도한다. 만료 lease는 회수하고, 한도를 소진한 작업은 범위를 지정한 preview와 redrive가 필요하다. 더 최신 revision이 오면 이전 작업은 stale다.

!

신뢰·개인정보 오류 · 중단과 증거 보존

제한된 envelope를 암호화해 격리하고 안전하지 않은 유입을 멈춘다. 보안·개인정보 담당자와 CRM 담당자가 함께 조사하며 일반 retry로 돌리지 않는다.