diff --git a/docs/TAG-PORTABLE-48.md b/docs/TAG-PORTABLE-48.md index 2ca91cb..71a131e 100644 --- a/docs/TAG-PORTABLE-48.md +++ b/docs/TAG-PORTABLE-48.md @@ -105,3 +105,54 @@ ETC_로그인_사용자ID_사용자명 Return moWrkInfoBiz.UidMst.Item("UidCod" 지어낸 이름 셋이 조용히 앉아 있던 적이 있다. - 짐작한 컬럼·계산식은 넣지 않는다. 종이에 그럴듯한 값이 찍히면 아무도 의심하지 않는다. - 값이 아니라 사유를 돌려주는 쪽이 항상 안전하다. + +--- + +## 배치 1 준비 — `OCM_담당의사` 계열 (SQL 확보 완료) + +`GetCodInfDT(comNum, adpDtm, 1)` = `EN_JOIN.With_Join` (dtCommonLib.vb:2777-2830): + +```sql +SELECT Cod.*, DepKorNam CodDepCod_Nam, + Usr.UidNam CodDtrCod_Nam, Umt.UidNam CodStfCod_Nam +FROM P_CodInf Cod +LEFT OUTER JOIN M_UidMst Usr ON Usr.UidCod = CodDtrCod AND Usr.UidDtrYon = 'Y' + AND :d BETWEEN Usr.UidStrDte AND Usr.UidEndDte +LEFT OUTER JOIN M_UidMst Umt ON Umt.UidCod = CodStfDtr AND Umt.UidDtrYon = 'Y' + AND :d BETWEEN Umt.UidStrDte AND Umt.UidEndDte +LEFT OUTER JOIN M_DepMst Dep ON DepCod = CodDepCod AND DepHspCod = Usr.UidHspCod + AND DepWrkTyp IN ('D','A') -- SYBS·NYHY 는 ('D','A','B') + AND :d BETWEEN DepStrDte AND DepEndDte +WHERE CodComNum = :n AND CodMtiSeq = '0' +``` + +`:d` 는 넘긴 적용일시의 **앞 8자리**(비면 서버 날짜). + +호출 갈래(bzDataInterface.vb `OCM_담당의사`): + +| 조건 | 넘기는 시각 | UidMst 조회 날짜 | +| --- | --- | --- | +| 입원 · `ComPrgStt='ILV'` | `ComLevDtm[0..12]` | `CodEndDtm[0..8]` | +| 입원 · 그 밖 | 서버 현재일시 | `CodEndDtm[0..8]` | +| 외래 | `ComAcpDtm[0..12]` | `ComAcpDtm[0..8]` | + +세 태그의 차이는 마지막 한 줄뿐이다 — +`UidNam` / `UidNam(UidCod)` / `UidMblPhn`. + +### 옮기기 전에 정해야 할 것 둘 + +**① 이 조회에는 정렬이 없다.** `CodComNum` + `CodMtiSeq='0'` 으로만 거르고 +`ORDER BY` 가 없는데 호출부는 `Rows(0)` 을 집는다. 한 내원에 진료과 이력이 여럿이면 +오라클이 어느 행을 먼저 주느냐에 따라 담당의가 달라진다. +레거시의 실제 동작이 비결정적이라는 뜻이라, "그대로 옮긴다"가 성립하지 않는다. +정렬을 넣으면 레거시와 달라질 수 있고, 안 넣으면 우리도 비결정적이 된다. +→ 어느 쪽인지 사용자와 정하고 근거를 주석에 남긴다. + +**② 두 번 조회한다.** 위 SQL 이 이미 `CodDtrCod_Nam`(담당의 이름)을 돌려주는데 +태그는 그것을 쓰지 않고 `GetUidMst` 로 다른 날짜를 써서 다시 찾는다. +날짜가 다르므로 두 값이 갈릴 수 있다. 어느 쪽이 맞는지는 레거시 동작을 따라야 한다 +(= 두 번째 조회 결과를 쓴다). 왕복을 줄이려고 첫 결과를 쓰면 값이 달라진다. + +또한 이 조회는 `PatientContextStore` 가 이미 읽는 `CodInf` 와 선택 규칙이 다르다 +(그쪽은 적용일시 BETWEEN + 최신순 1행). 같은 표를 두 규칙으로 읽게 되므로 +문맥의 `CodInf` 를 재사용하면 안 된다.