CodMtiSeq=0 행이 2개 이상인 내원: 25,488건, 최대 41행.
0건이면 없는 문제였겠지만 아니었다.
41행짜리 내원에서 ORDER BY 없는 Rows(0) 은 사실상 무작위다.
레거시는 지금도 그 25,488건의 담당의를 확정적으로 찍지 못하고 있다 —
재현할 대상 자체가 없으므로 "그대로 옮긴다"가 성립하지 않는다.
정황이 하나 더 있다. 레거시는 GetCodInfDT 에 적용일시를 넘기면서도
그것으로 P_CodInf 를 거르지 않는다(넘긴 날짜는 마스터 유효기간 조인에만 쓴다).
P_CodInf 에 CodStrDtm/CodEndDtm 이 있는데 WHERE 에 없다 —
"그 시점의 진료과"를 뽑으려던 의도가 반쯤만 구현된 것으로 보인다.
측정 코드는 진단에 남겼다. 세기 전에는 A 와 B 중 어느 쪽인지 알 수 없었다.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
조회 두 개(GetCodInfDT With_Join · GetUidMst)와 세 갈래 호출 조건을
문서에 그대로 옮겼다 — 다음 세션이 다시 파헤치지 않아도 된다.
## 그 과정에서 걸린 것 둘
① 조회에 ORDER BY 가 없는데 호출부가 Rows(0) 을 집는다.
한 내원에 진료과 이력이 여럿이면 <b>오라클이 어느 행을 먼저 주느냐에 따라
담당의가 달라진다</b>. 레거시 동작 자체가 비결정적이라
"그대로 옮긴다"가 성립하지 않는다 — 정할 문제다.
② 위 SQL 이 이미 담당의 이름(CodDtrCod_Nam)을 돌려주는데
태그는 그것을 안 쓰고 다른 날짜로 GetUidMst 를 한 번 더 친다.
날짜가 다르니 두 값이 갈릴 수 있다. 왕복을 줄이려고 첫 결과를 쓰면
값이 달라진다 — 레거시를 따르려면 두 번 쳐야 한다.
그리고 이 조회는 PatientContextStore 가 읽는 CodInf 와 선택 규칙이 다르다
(그쪽은 BETWEEN + 최신순 1행). 문맥의 CodInf 를 재사용하면 안 된다.
코드 변경 없음(문서만). 게이트는 앞 커밋 상태 그대로다.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
남은 363종의 성격이 서로 달라 한 번에 갈 수 없다.
232종은 각각 자기 SQL 을 든 별도 이식이고,
48종은 MessageBox 를 띄워 미리보기에서 원리상 실행할 수 없다.
다음 배치를 순서대로 적어 뒀다. OCM_담당의사 계열이 먼저인 이유는
그것이 요구하는 조회 둘(GetCodInfDT·GetUidMst)을 만들고 나면
뒤따르는 여러 태그가 같은 것을 재사용하기 때문이다.
배치마다 지킬 것도 함께 적었다 — 근거 줄번호, 이름 검사,
짐작 금지, 값보다 사유.
문서만 변경. 게이트는 앞 커밋 상태 그대로다.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
"나머지도 전부 옮기자" — 추측하지 않고 386종을 본문 모양으로 분류했다.
## 실제 분포 (bzDataInterface.vb 386종)
자기 SQL 을 든 것 232 각각 별도 이식 — 본문 SQL 을 읽고 바인드로 옮기고 실DB 로 확인
MessageBox 를 띄우는 것 48 대화형이라 미리보기에서 <b>돌 수 없다</b>
문맥만 읽는 것 48 옮길 수 있는 것
기타(다른 라이브러리 호출) 55 하나씩 봐야 한다
HspCod 로 갈리는 것 3 병원별 분기
즉 "전부"는 태그 늘리기가 아니라 <b>232건의 데이터 접근 이식</b>이다.
48종 목록은 docs/TAG-PORTABLE-48.md 에 본문째로 뽑아 뒀다 — 다음 작업이 기계적이 된다.
## 이번에 옮긴 8종
순수 형식 가공만 하는 것들. Computed 표(태그 → 문맥 함수)를 새로 뒀다 —
컬럼 하나로 안 되는 것(두 컬럼을 보거나 잘라 붙이는 것)을 담는다.
PAT_생년월일_영문 · PAT_생년월일_영문_일월년도 자리만 바꿔 붙인다
PAT_연락처 휴대전화가 있으면 그것, 없으면 자택
PAT_연락처_뒷4자리 · PAT_휴대전화번호_뒷4자리 -, . 을 걷고 뒤 4자리
OCM_외래내원일자 · OCM_입원전환일자 ComAcpDtm·ComTrsDtm 앞 8자리
OCM_입원전환일시 12자리를 일시 형태로
자리수가 모자라면 <b>빈 값</b>이다. 잘라서 그럴듯하게 만들지 않는다.
## 이번에 뺀 것과 이유
PAT_우편번호 · PAT_도로명주소 · PAT_지번주소 · PAT_영문도로명주소
→ GetZipInfoByBuildingNumber_Simple 조회가 먼저 필요하다(왕복 추가)
OCM_담당의사 계열
→ GetCodInfDT + GetUidMst 두 조회를 거치고 입원/외래로 갈린다
OCM_외래내원일시
→ 별도 헬퍼(외래내원일시)의 형식을 아직 안 봤다
## 게이트
- dotnet test 336/336
- --edit-smoke 실패 0 — 이름 검사가 19종 전부 실제 태그임을 확인
(지어낸 이름 셋이 조용히 앉아 있던 적이 있어서 이 검사가 있다)
- --db-patient ①~㉑ 전건 통과
- --db-render P062 md5 8d683835f5d81e7bb41c79071d6bf954 불변
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>