병리판독의·진단검사의 4종 — 106종 → 110종

ETC_병리판독의사명/전문의번호(bzDataInterface.vb:17318/:17515 — M_UidMst
UidDtrYon='Y' AND UidDepCod='TLAB' + 유효기간), ETC_진단검사의사명/
전문의번호(:17550/:17655 — M_DepMst DepGrpCod='LAB' 조인 + UidLicNum
IS NOT NULL). 환자와 무관한 원내 의사 조회지만 레거시가 환자 태그로
노출하므로 PatientTagResolver 에 둔다(lazy 소스 + 캐시 — 이 태그가
없는 서식이 대부분이라 프리페치하지 않는다).

의도적 이탈 하나: 원문엔 ORDER BY 가 없어 TLAB 의사가 둘이면
이름과 전문의번호가 서로 다른 사람이 될 수 있었다(태그마다 따로
조회하므로). ORDER BY UidCod + 1행 고정으로 두 태그가 반드시 같은
사람을 가리키게 했다 — 담당의 때 정한 결정 규칙의 세 번째 적용.

- dotnet test 338/338 · --edit-smoke 실패 0 (이름 검사 110종)
- --db-patient ①~㉚ 전건 통과 — ㉚ 신설: 두 조회가 예외 없이 돈다
  (이 시험 DB 는 TLAB·LAB 의사 0행 — 태그는 사유로 완결되는 정상 경로)
- --db-render P062 md5 8d683835f5d81e7bb41c79071d6bf954 불변

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Msystech
2026-08-19 16:18:37 +09:00
co-authored by Claude Fable 5
parent 4dad271e9c
commit ba6da2252f
6 changed files with 137 additions and 3 deletions
@@ -2291,6 +2291,29 @@ public static class DbSmoke
Check("㉙ 바이탈 조회가 값을 돌려준다", weight.Length > 0,
"EmdWeight 널 필터나 조인을 의심할 것");
}
// ㉚ 병리판독의·진단검사의 — 환자와 무관한 원내 의사 조회.
// 이 시험 DB 에 TLAB 소속·LAB 그룹 의사가 없을 수 있다 —
// 0행은 실패가 아니라 태그가 사유로 완결되는 정상 경로다.
// 여기서 지키는 것은 "예외 없이 돈다"(컬럼·조인 이름이 맞다)이다.
try
{
var contextStore = new PatientContextStore(conn);
var pathologyRow = contextStore.PathologyDoctor();
var labRow = contextStore.LabDoctor();
static string Shape(IReadOnlyDictionary<string, string> row)
=> row.Count == 0 ? "0행"
: $"이름 {(row.TryGetValue("UidNam", out var n) ? n.Trim().Length : 0)}자"
+ $"·전문의번호 {(row.TryGetValue("UidSpcLic", out var s) ? s.Trim().Length : 0)}자";
lines.Add($" 병리판독의(TLAB): {Shape(pathologyRow)}"
+ $" / 진단검사의(LAB그룹): {Shape(labRow)} (값은 기록하지 않는다)");
Check("㉚ 병리·진단검사 의사 조회가 예외 없이 돈다", true, "");
}
catch (Exception ex)
{
Check("㉚ 병리·진단검사 의사 조회가 예외 없이 돈다", false,
$"{ex.GetType().Name}: {ex.Message.Split('\n')[0]}");
}
}
}
}