C 를 먼저 세 봤다 — 25,488건이 걸린다. "레거시 그대로"는 선택지가 아니다
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>
This commit is contained in:
co-authored by
Claude Opus 5
parent
3e9f50ee52
commit
942780ae97
@@ -156,3 +156,34 @@ WHERE CodComNum = :n AND CodMtiSeq = '0'
|
||||
또한 이 조회는 `PatientContextStore` 가 이미 읽는 `CodInf` 와 <b>선택 규칙이 다르다</b>
|
||||
(그쪽은 적용일시 BETWEEN + 최신순 1행). 같은 표를 두 규칙으로 읽게 되므로
|
||||
문맥의 `CodInf` 를 재사용하면 안 된다.
|
||||
|
||||
### 조사 결과 — ① 은 실재하는 문제다
|
||||
|
||||
운영 DB(SRCH_TEST)에서 센 결과:
|
||||
|
||||
| 항목 | 값 |
|
||||
| --- | --- |
|
||||
| `CodMtiSeq=0` 행이 2개 이상인 내원 | **25,488건** |
|
||||
| 한 내원의 최대 행수 | **41행** |
|
||||
|
||||
0건이면 없는 문제였겠지만 아니다. 그리고 41행짜리 내원에서
|
||||
정렬 없는 `Rows(0)` 은 <b>사실상 무작위</b>다.
|
||||
즉 레거시는 지금 이 순간에도 그 25,488건에 대해 담당의를 확정적으로 찍고 있지 않다.
|
||||
|
||||
**"레거시 그대로"는 선택지가 아니다** — 재현할 대상 자체가 없다.
|
||||
|
||||
#### 정황 하나 더
|
||||
|
||||
레거시는 `GetCodInfDT` 에 적용일시를 <b>넘기면서도 그것으로 거르지 않는다</b>.
|
||||
넘긴 날짜는 `M_UidMst`·`M_DepMst` 의 유효기간 조인에만 쓰인다.
|
||||
`P_CodInf` 자체에는 `CodStrDtm`/`CodEndDtm` 이 있는데 `WHERE` 에 없다 —
|
||||
"그 시점의 진료과"를 뽑으려던 의도가 코드에 반쯤만 구현된 것으로 보인다.
|
||||
|
||||
`PatientContextStore` 가 문맥의 `CodInf` 를 읽을 때는 그 조건을 이미 쓴다
|
||||
(`:t BETWEEN CodStrDtm AND CodEndDtm`, 최신순 1행).
|
||||
|
||||
#### 권고
|
||||
|
||||
적용일시로 거르고 최신순 1행을 집는다 — 문맥 조회와 같은 규칙.
|
||||
결정적이 되고, 레거시가 의도한 것으로 보이는 동작과도 맞는다.
|
||||
이는 <b>의도적으로 레거시와 다르게 가는</b> 첫 사례이므로 코드 주석과 여기에 근거를 남긴다.
|
||||
|
||||
Reference in New Issue
Block a user