콘텐츠로 이동

자주 발생하는 데이터 이슈

진입: 좌측 메뉴 운영 가이드 → 자주 발생하는 이슈

한 줄 요약

슬랙 정합성 봇 알림 13+2종 외에 현장에서 자주 겪는 데이터 이슈 처리 모음. 개별 환자 사고 → 어디서 어떻게 정정하는지 직원 가이드.

정합성 봇 13+2종은 별도 페이지

매일 06:00 슬랙 봇 알림 처리는 정합성 13+2종 처리 참조. 본 페이지는 봇 알림과 무관한 운영 사고를 다룹니다.


1. 수납팝업 미수가 음수로 표시됨

증상: 환자의 수납팝업에서 미수액이 -1,234,567 같이 음수로 표시됨.

원인 (주요 시나리오): - 결제 금액이 차트의 청구액보다 큼 (over-paid) - 선납권 결제가 시술 차트에 잘못 연결됨 (WI#101 본체 케이스) - 결제 취소 후 환불 처리 누락

처리 방법: 1. 환자 수납팝업 진입 → 우측 「수납목록」 탭에서 의심 결제 식별 2. 차트 ID 와 결제의 progress_note_id 매핑 확인 3. 잘못 연결됐으면: - 운영자: [결제취소] 후 올바른 차트에 재결제 - 관리자(Level 1~2): DB 직접 수정 (UPDATE payments SET progress_note_id=NULL WHERE id=?) 4. WI#101 fallback 가드 (2026-05-19) 가 적용된 이후엔 자동 재발 차단

상세: 정합성 #1 paid_amount 불일치


2. 선납권 차감이 포인트 우선 안 되었을 때

증상: 시술비를 선납권에서 차감했는데 포인트 잔액이 그대로 남아있음.

원인: 정책 = "포인트 → 선납금" 차감 순서. 자동 차감 로직(patientPackages.activate)이 호출되지 않거나, orphan 차트 매핑 버그로 차트 미수가 음수가 되어 자동 차감 step에 도달 못 함 (WI#101 본체 사고).

처리 방법: 1. 수납팝업 → 「선수납 결제/내역」 탭에서 차감 이력 확인 2. 포인트가 그대로면 → 관리자에게 DB 정정 요청 (예: wi101-repair-kim-kyungmin-prepaid-v2.sql 스크립트 패턴) 3. 표준 분배: - point_balance 사용분 → 우선 차감 - 나머지 → prepaid_balance에서 차감

상세: 데이터 복구 스크립트는 git repo scripts/wi101-repair-kim-kyungmin-prepaid-v2.sql 참조 (관리자에게 요청).


3. 동행자 환자 카드 미생성

증상: 메인 환자와 같은 전화번호로 등록한 동행자의 예약카드가 안 생김.

원인: 동행자 검색 시 phone+name 조합으로 매칭하는데, name 미입력 또는 같은 phone+name인 다른 환자에 잘못 매핑.

처리 방법 (WI#99 fix 적용 이후): 1. 신청자관리 → 해당 lead 진입 2. 동행자 정보 다시 입력 (name 반드시 채움) 3. 자동 예약카드 생성 — 그래도 안 되면 관리자에게 lead_companions / patient_reservations DB 정정 요청

WI#99 fix 대상: lead 4757 — 김인순 동행자 (scripts/wi99-repair-lead4757.sql 참고)


4. 환자가 두 명으로 분리됨 (중복)

증상: 같은 사람인데 시스템에 patient_uid 2개 (또는 차트번호 2개) 존재.

원인: - 인바운드 신청자 등록 + 직원이 환자 직접 등록 → 중복 patients INSERT - 전화번호 변경된 환자가 다시 신청 → 다른 lead → 다른 patient

처리 방법: 1. 환자관리 → 중복환자 정리 페이지 진입 2. 동일 전화번호 / 동일 이름+생년월일 기준 후보 표시 3. 정정 대상 선택 → [합치기] → 한쪽으로 통합 (차트/결제/예약 모두 이관) 4. 사고 방지: 신환 등록 전 환자 검색 먼저 실행


5. 신환인데 CS 실장 미배정

증상: 인하우스 통계에서 신환 카운트는 1인데 실장별 통계는 0.

원인: inhouse_consult.type='new_patient' 인데 assigned_counselor_name NULL.

처리 방법: 1. 인하우스 화면 진입 → 미배정 신환 IC 행 확인 2. 행 우클릭 → 실장 배정 3. WI#69 마이그레이션 078 이후엔 자동 배정되지만 옛 데이터 일부 누락 가능

정합성 봇 알림 항목 (baseline 9 — 2026-05-14 기준).


6. 차트 paid_amount 와 결제 합계 불일치

증상: progress_notes.paid_amount 값과 SUM(payments.paid_amount WHERE progress_note_id = X) 가 다름.

원인: - 결제 INSERT 후 차트 paid_amount 동기화 실패 (트랜잭션 누락) - 결제 삭제했는데 차트 paid_amount 차감 안 함 - 선납권 사용은 payments INSERT 없이 차트 paid_amount만 += 처리

처리 방법 (관리자):

UPDATE progress_notes pn
SET paid_amount = (SELECT COALESCE(SUM(paid_amount),0) FROM payments 
                   WHERE progress_note_id = pn.id AND status != 'cancelled' AND is_refund = 0)
                + (SELECT COALESCE(SUM(amount),0) FROM patient_prepaid
                   WHERE progress_note_id = pn.id AND type = 'usage' AND is_cancelled = 0)
WHERE pn.id = ?;

상세: 정합성 #1


7. orphan 차트 / orphan 결제

증상: 차트는 있는데 reservation_id NULL → 예약 못 찾음 / 결제는 있는데 progress_note_id NULL → 차트 못 찾음.

원인: - 예약 취소 → 차트만 남음 (강숙님 사례, 2026-04-29) - 선납권 직접 결제 → 차트 미연결 정상 (이건 의도된 동작)

처리 방법: 1. 진료실 차트 페이지 → 좌측 "미정리 차트" 배지 (WI#70) 2. 배지 클릭 → orphan 차트 목록 3. 각 행 → 환자/예약 매핑 또는 삭제

WI#70 슬랙 실시간 알림 + 차트 목록 배지 적용 (2026-05-14).


8. 결산이 안 맞을 때

증상: 일일결산 합계와 실제 카드/현금 정산이 안 맞음.

원인 (자주): - 환불 차감 미반영 - 선납권 충전 vs 사용 구분 오류 - 결제 시각 timezone 문제 (toISOString() 사용한 옛 코드)

처리 방법: 1. 일일결산 페이지 → 결제수단별 합계 확인 2. 의심 시 [수납목록] 탭 → 개별 결제 점검 3. 환불은 is_refund=1, paid_amount<0 으로 차감됨 — 카운트에서 빼지 않음 4. 선납권 충전(memo LIKE '선납권%충전%') 은 매출에만 포함, 시술 매출 아님

상세: 정합성 #8 일일결산


9. 예약 시간 변경이 자동 SMS 발송 차단 안 함

증상: 환자 예약 시간 바꿨는데 옛 시간 안내 문자가 발송됨.

원인: sms_reserve.status='pending' 행이 옛 시간으로 남아있어 1분 cron이 발송.

처리 방법: 1. 예약 변경 시 자동으로 옛 sms_reserve 취소 (status='cancelled') — 코드 수정 적용됨 2. 그래도 안 되면 예약노트 좌측 "발송 이력" → 옛 행 [취소]


10. 신환이 인하우스에 안 잡힘

증상: 환자 접수했는데 인하우스 화면에 신환으로 안 보임.

원인: - inhouse_consult 행 자동 생성 실패 — visit_type 불일치 (5개 visit_type만 자동 생성: '진료', '상담', '재상담', '소개예약', '신환상담') - reception_time 조건 미충족

처리 방법 (WI#98 fix 적용 이후): 1. 환자 접수 시 visit_type 정확히 지정 2. 자동 생성 실패해도 인하우스에서 수동 추가 가능 3. 정합성 봇이 알림 (2026-05-19 WI#98 Phase 1 적용)


11. 토큰 만료 후 모든 페이지에서 무한 로딩

증상: 잠시 자리 비웠다 오면 어떤 페이지를 열어도 spinner만 돔.

원인: JWT 토큰 24h 만료. 또는 PM2 재시작 직후 inflight 요청 401 cascade (2026-05-19 WI#101 후속에서 fix 적용).

처리 방법: 1. 모든 탭/팝업 닫기 2. https://app-jjang.genaidev.io/login 새로 로그인 3. 재현되면 #dev 문의 (서버 측 401 처리 점검 필요)

WI#101 후속 fix 적용 이후: PM2 재시작 시 cascade 차단됨 (1회 redirect만, 30초 내 중복 차단).


관련 페이지