진료과·병동·병실·요양기관명을 옮긴다 — 26종 → 30종
사용자가 서식에서 빈칸으로 확인한 자리들이다(B·C 배치). ## 본문에서 확인한 것 - OCM_병동 / OCM_병실 (bzDataInterface.vb:6718, 6801) 문맥의 CowInf 행에서 <b>코드값 그대로</b>다(CowWadCod·CowRomCod). 마스터로 이름을 찾지 않는다 — 레거시가 코드를 그대로 찍는다. 외래는 CowInf 가 0행이라 자연히 빈 값(레거시도 외래·비낮병동은 ""). - OCM_진료과 (:5437-5495) M_DepMst 를 CodDepCod + 접수일자 BETWEEN 으로 찾는다. 유효기간 일자는 입원·외래 무관하게 <b>접수일자</b>다(:5445). 이름 선택: NH 는 DepOfcNam, 그 밖은 개원일 2022-07-01 이후 + DepOfcNam 존재 시 DepOfcNam, 아니면 DepKorNam. 개원일은 세션에 없어 빈 값 결정(기존과 동일)이라 그 갈래는 DepKorNam 으로 간다. - ETC_요양기관명칭_병원명 (:15792-15860) M_DepMst ⨝ M_HspMst(DepHspCod=HspCod) 에서 HspInsNam.Trim. 진료과 코드로 병원을 찾는 구조다(다부지 구성). 판정 일자가 진료과와 다르다 — ILV 는 퇴원일시·재원 중은 지금·외래는 접수일시. 문맥의 적용일시가 정확히 그 판정이라 AdpDtm 을 그대로 쓴다. 원본 마스터 조회에 ORDER BY 가 없어 담당의 때와 같은 규칙(최신순 1행)으로 고정했다. ## 왕복은 환자당 두 번 추가 진료과·요양기관명을 환자를 붙일 때 한 번씩 읽는다(주민번호·주소·담당의와 같은 정책). 미리보기 창과 Ctrl+P 인쇄(PatientSession.ResolversFor) 둘 다 같은 재료를 받는다. ## 실DB 확인 --db-patient ㉓·㉔ 신규: 진료과 코드 '0506' → 44열·한글명 5자, 요양기관명 6자. 코드가 이름이 되는 것까지 확인해야 태그가 값을 낸다. ## 게이트 - dotnet test 338/338 · --edit-smoke 실패 0(이름 검사 30종) - --db-patient ①~㉔ 전건 통과 - --db-render P062 md5 8d683835f5d81e7bb41c79071d6bf954 불변 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
db969fc6b5
commit
e62e43d176
@@ -173,6 +173,53 @@ public sealed class PatientContextStore
|
||||
("c", code));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 진료과 마스터 한 행 — <c>OCM_진료과</c>(bzDataInterface.vb:5437-5495)의 조회.
|
||||
/// <c>WHERE DepCod = :d AND :day BETWEEN DepStrDte AND DepEndDte</c>.
|
||||
///
|
||||
/// 유효기간 판정 일자는 레거시가 <b>입원·외래 무관하게 접수일자</b>를 쓴다(:5445 sAcpDte).
|
||||
/// 원본에는 ORDER BY 가 없고 Rows(0) 을 집는다 — 담당의 때와 같은 이유로
|
||||
/// 최신순 1행으로 고정한다(기간이 겹친 이력에서 비결정적이 되는 것을 막는다).
|
||||
/// </summary>
|
||||
public IReadOnlyDictionary<string, string> Department(string? depCod, string? day)
|
||||
{
|
||||
var code = (depCod ?? string.Empty).Trim();
|
||||
var date = (day ?? string.Empty).Trim();
|
||||
if (code.Length == 0 || date.Length < 8)
|
||||
{
|
||||
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||
}
|
||||
using var connection = new OracleConnection(connectionString);
|
||||
connection.Open();
|
||||
return Row(connection,
|
||||
"SELECT * FROM (SELECT * FROM M_DepMst WHERE TRIM(DepCod) = :d"
|
||||
+ " AND :y BETWEEN DepStrDte AND DepEndDte ORDER BY DepStrDte DESC) WHERE ROWNUM = 1",
|
||||
("d", code), ("y", date[..8]));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 요양기관명 — <c>ETC_요양기관명칭_병원명</c>(bzDataInterface.vb:15792-15860)의 조회.
|
||||
/// <c>M_DepMst ⨝ M_HspMst(DepHspCod=HspCod)</c> 에서 <c>HspInsNam</c> 하나를 뽑아 Trim.
|
||||
/// 진료과 코드로 병원을 찾는 구조다 — 다부지(병원 코드가 다른 진료과) 구성 때문으로 보인다.
|
||||
/// </summary>
|
||||
public string HospitalName(string? depCod, string? day)
|
||||
{
|
||||
var code = (depCod ?? string.Empty).Trim();
|
||||
var date = (day ?? string.Empty).Trim();
|
||||
if (code.Length == 0 || date.Length < 8)
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
using var connection = new OracleConnection(connectionString);
|
||||
connection.Open();
|
||||
var row = Row(connection,
|
||||
"SELECT HspInsNam FROM (SELECT HspInsNam FROM M_DepMst"
|
||||
+ " INNER JOIN M_HspMst ON DepHspCod = HspCod AND :y BETWEEN HspStrDte AND HspEndDte"
|
||||
+ " WHERE TRIM(DepCod) = :d AND :y BETWEEN DepStrDte AND DepEndDte) WHERE ROWNUM = 1",
|
||||
("d", code), ("y", date[..8]));
|
||||
return PatientContext.Value(row, "HspInsNam");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 건물관리번호로 주소 — 레거시 <c>GetZipInfoByBuildingNumber</c>(clsCommonLib.vb:16600).
|
||||
///
|
||||
|
||||
Reference in New Issue
Block a user