협진과·입퇴원의사 4종 — 152종 → 156종
OCM_협진과(bzDataInterface.vb:6360 Case Else — 회신 완료 CstSttFlg='G' 협진의 회신 과, DISTINCT + 시작일 순 앞 2건을 ", " 결합. GNBEDRO 의 이중 DISTINCT 분기는 미이식), OCM_협진과_협진의(:6437 — M_UidMst 조인 + 앞 3건을 "과[의사]" 결합), OCM_입원의사(:6499 — 접수 시점 담당의 코드 → 접수일자 기준 UidNam), OCM_퇴원의사(:6583 — 퇴원일시가 비면 바로 빈 값, ILV 면 퇴원 시점·아니면 현재 시점 담당의 → 퇴원일자 기준 이름. 원문의 "퇴원일시 빈 값" If 갈래는 위의 조기 반환 탓에 도달 불가한 데드코드라 옮기지 않았다). CodInfAt(진료과+담당의 코드 행)·UserNameAt·Consults 를 신설. 이 시험 DB 에 O_CstInf 가 15,224행 있어 ㉞(회신 완료 협진이 있는 내원 → 협진과 실값)를 신설했다 — 2건 결합 확인. - dotnet test 338/338 · --edit-smoke 실패 0 (이름 검사 156종) - --db-patient ①~㉞ 전건 통과 - --db-render P062 md5 8d683835f5d81e7bb41c79071d6bf954 불변 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
c0ad782b6a
commit
f2f4cf81d3
@@ -948,9 +948,10 @@ public sealed class PatientTagResolver : ITagValueResolver
|
||||
/// </summary>
|
||||
private TagValue? FromDeptAt(string tag)
|
||||
{
|
||||
var admission = tag is "OCM_입원과" or "OCM_입원과_한글명칭";
|
||||
var discharge = tag is "OCM_퇴원과" or "OCM_퇴원과_한글명칭";
|
||||
if (!admission && !discharge)
|
||||
var admission = tag is "OCM_입원과" or "OCM_입원과_한글명칭" or "OCM_입원의사";
|
||||
var discharge = tag is "OCM_퇴원과" or "OCM_퇴원과_한글명칭" or "OCM_퇴원의사";
|
||||
var consult = tag is "OCM_협진과" or "OCM_협진과_협진의";
|
||||
if (!admission && !discharge && !consult)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@@ -989,6 +990,19 @@ public sealed class PatientTagResolver : ITagValueResolver
|
||||
? office
|
||||
: PatientContext.Value(row, "DepKorNam").Trim();
|
||||
}
|
||||
if (consult)
|
||||
{
|
||||
// 회신 완료된 협진의 과(2건)·과[의사](3건)를 ", " 로 잇는다(:6410-6480)
|
||||
var rows = store.Consults(m, withDoctor: tag == "OCM_협진과_협진의");
|
||||
if (rows.Count == 0)
|
||||
{
|
||||
return new TagValue(false, "회신 완료(CstSttFlg='G')된 협진이 없습니다");
|
||||
}
|
||||
var joined = string.Join(", ", rows.Select(r => tag == "OCM_협진과"
|
||||
? PatientContext.Value(r, "DepKorNam").Trim()
|
||||
: $"{PatientContext.Value(r, "DepKorNam").Trim()}[{PatientContext.Value(r, "UidNam").Trim()}]"));
|
||||
return new TagValue(true, joined);
|
||||
}
|
||||
if (admission)
|
||||
{
|
||||
var acp = PatientContext.Value(context.ComInf, "ComAcpDtm");
|
||||
@@ -996,12 +1010,20 @@ public sealed class PatientTagResolver : ITagValueResolver
|
||||
{
|
||||
return new TagValue(false, "이 내원의 접수일시를 읽지 못했습니다");
|
||||
}
|
||||
var depCod = store.DepartmentCodeAt(m, acp[..12]);
|
||||
if (depCod.Length == 0)
|
||||
var codRow = store.CodInfAt(m, acp[..12]);
|
||||
if (codRow.Count == 0)
|
||||
{
|
||||
return new TagValue(false, "접수 시점의 진료 행(P_CodInf)이 없습니다");
|
||||
}
|
||||
var row = store.Department(depCod, acp[..8]);
|
||||
if (tag == "OCM_입원의사")
|
||||
{
|
||||
// 접수 시점 담당의 코드 → 접수일자 기준 이름(:6499-6527)
|
||||
var name = store.UserNameAt(PatientContext.Value(codRow, "CodDtrCod"), acp[..8]);
|
||||
return name.Length > 0
|
||||
? new TagValue(true, name)
|
||||
: new TagValue(false, "접수 시점 담당의가 사용자 마스터에 없습니다");
|
||||
}
|
||||
var row = store.Department(PatientContext.Value(codRow, "CodDepCod"), acp[..8]);
|
||||
if (row.Count == 0)
|
||||
{
|
||||
return new TagValue(true, string.Empty); // 레거시도 마스터 0행이면 "" 다
|
||||
@@ -1012,15 +1034,27 @@ public sealed class PatientTagResolver : ITagValueResolver
|
||||
}
|
||||
var prg = PatientContext.Value(context.ComInf, "ComPrgStt");
|
||||
var lev = PatientContext.Value(context.ComInf, "ComLevDtm");
|
||||
var depAtLeave = store.DepartmentCodeAt(m,
|
||||
if (tag == "OCM_퇴원의사" && lev.Trim().Length == 0)
|
||||
{
|
||||
return new TagValue(true, string.Empty); // 퇴원일시가 없으면 레거시가 바로 "" 다(:6592)
|
||||
}
|
||||
var leaveRow = store.CodInfAt(m,
|
||||
prg == "ILV" && lev.Length >= 12 ? lev[..12] : null);
|
||||
if (depAtLeave.Length == 0)
|
||||
if (leaveRow.Count == 0)
|
||||
{
|
||||
return new TagValue(true, string.Empty); // 레거시가 명시적으로 "" 를 돌려준다(:6189)
|
||||
}
|
||||
if (tag == "OCM_퇴원의사")
|
||||
{
|
||||
var name = store.UserNameAt(PatientContext.Value(leaveRow, "CodDtrCod"), lev[..8]);
|
||||
return name.Length > 0
|
||||
? new TagValue(true, name)
|
||||
: new TagValue(false, "퇴원 시점 담당의가 사용자 마스터에 없습니다");
|
||||
}
|
||||
var anchor = tag == "OCM_퇴원과_한글명칭" && lev.Trim().Length == 0
|
||||
? "ComAcpDtm" : "ComLevDtm";
|
||||
var deptRow = store.DischargeDepartment(m, depAtLeave, anchor);
|
||||
var deptRow = store.DischargeDepartment(m,
|
||||
PatientContext.Value(leaveRow, "CodDepCod"), anchor);
|
||||
if (deptRow.Count == 0)
|
||||
{
|
||||
return new TagValue(true, string.Empty);
|
||||
@@ -1418,6 +1452,7 @@ public sealed class PatientTagResolver : ITagValueResolver
|
||||
"OCM_최초내원일", "OCM_초진일_발병일", "OCM_신환_초진일",
|
||||
"OCM_진료과_그룹코드", "OCM_진료과_영어", "OCM_진료과대외명칭", "OCM_진료과약어명칭",
|
||||
"OCM_입원과", "OCM_입원과_한글명칭", "OCM_퇴원과", "OCM_퇴원과_한글명칭",
|
||||
"OCM_입원의사", "OCM_퇴원의사", "OCM_협진과", "OCM_협진과_협진의",
|
||||
"OCM_입원시간", "OCM_입원일시", "OCM_입원일시_영문", "OCM_입실시간",
|
||||
"OCM_의사퇴원예고일시", "OCM_퇴원예정일시", "OCM_퇴원시간", "OCM_퇴원일시",
|
||||
"OCM_퇴원예고일시", "OCM_재원일수", "OCM_퇴원예고재원일수", "OCM_입원일자_낮병동",
|
||||
|
||||
Reference in New Issue
Block a user