심사 상병 4종을 옮긴다 — 59종 → 63종. 워크플로가 조사한 new 는 이제 상병·수술·심사까지 끝났다
Bkd_상병쿼리(bzDataInterface.vb:14625-14811)의 이식. DiagnosisStore 와 구조가 같고 표만 B_OkdInf(심사분)다. SQL 52줄 원문 기계 추출(블록1 UNION 블록2, 주/부 필터는 각 블록의 RN 접기 앞). 병원 분기는 KIMEYE 하나 — 그 병원만 미이식 안내. 태그 4종(본문 확인): 심사_주상병명/코드는 첫 행, 심사_부상병명/코드는 줄바꿈 결합 (가로형이 없다). ## 게이트 - dotnet test 338/338 · --edit-smoke 실패 0(이름 검사 63종) - --db-patient 전건 통과 (B_OkdInf 도 이 시험 DB 에 없을 수 있어 수술과 같은 취급 — 런타임에서 해석기가 예외를 사유로 바꾼다) - --db-render P062 md5 불변 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
460f6c4a91
commit
ef4f36419f
@@ -0,0 +1,109 @@
|
||||
using Oracle.ManagedDataAccess.Client;
|
||||
|
||||
namespace SheetMe.Data.Stores;
|
||||
|
||||
/// <summary>
|
||||
/// 심사 상병 조회 — 레거시 <c>Bkd_상병쿼리</c>(bzDataInterface.vb:14625-14811)의 이식.
|
||||
/// <see cref="DiagnosisStore"/>(O_OkdInf)와 구조가 같고 표만 <b>B_OkdInf</b>(심사분)다.
|
||||
/// 병원 분기는 KIMEYE 하나뿐이라 그 병원만 미이식 안내가 필요하다.
|
||||
/// SQL 은 원문 기계 추출(52줄) — 블록1 UNION 블록2, 주/부 필터는 각 블록의 RN 접기 앞.
|
||||
/// </summary>
|
||||
public sealed class ReviewDiagnosisStore
|
||||
{
|
||||
#region Member Fields
|
||||
private readonly string connectionString;
|
||||
|
||||
private const string Template = @"
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT OkdKcdCod, OkdNam, OkdKcdSeq, OkdDspSeq, OkdCfmSus, OkdEntDtf
|
||||
, KcdCod, KcdElcCod, KcdKorNam, KcdEngNam
|
||||
, ROW_NUMBER() OVER(PARTITION BY KcdCod ORDER BY KcdStrDte DESC) AS OKD_RN
|
||||
FROM B_OkdInf
|
||||
INNER JOIN P_ComInf
|
||||
ON OkdComNum = ComNum
|
||||
INNER JOIN M_KcdMst
|
||||
ON KcdCod = TRIM(OkdKcdCod)
|
||||
AND OkdKcdSeq = KcdSeq
|
||||
AND KcdEndDte >= SUBSTR(ComAcpDtm, 1, 8)
|
||||
AND KcdStrDte <= SUBSTR(ComAcpDtm, 1, 8)
|
||||
WHERE OkdComNum = :piComNum
|
||||
AND OkdStt = 'E'
|
||||
{TYPE}
|
||||
) OKD
|
||||
WHERE OKD_RN = 1
|
||||
|
||||
UNION
|
||||
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT OkdKcdCod, OkdNam, OkdKcdSeq, OkdDspSeq, OkdCfmSus, OkdEntDtf
|
||||
, KCD.KcdCod, KCD.KcdElcCod, KCD.KcdKorNam, KCD.KcdEngNam
|
||||
, ROW_NUMBER() OVER(PARTITION BY KCD.KcdCod ORDER BY KCD.KcdStrDte DESC) AS OKD_RN
|
||||
FROM (
|
||||
SELECT OkdKcdCod, OkdNam, OkdKcdSeq, OkdDspSeq, OkdCfmSus, OkdEntDtf
|
||||
, KcdCod, KcdElcCod, KcdKorNam, KcdEngNam
|
||||
FROM B_OkdInf
|
||||
INNER JOIN P_ComInf
|
||||
ON OkdComNum = ComNum
|
||||
LEFT JOIN M_KcdMst
|
||||
ON KcdCod = TRIM(OkdKcdCod)
|
||||
AND OkdKcdSeq = KcdSeq
|
||||
AND KcdEndDte >= SUBSTR(ComAcpDtm, 1, 8)
|
||||
AND KcdStrDte <= SUBSTR(ComAcpDtm, 1, 8)
|
||||
WHERE OkdComNum = :piComNum
|
||||
AND OkdStt = 'E'
|
||||
) OKD
|
||||
INNER JOIN M_KcdMst KCD
|
||||
ON KCD.KcdCod = TRIM(OkdKcdCod)
|
||||
AND OkdKcdSeq = KCD.KcdSeq
|
||||
WHERE 1=1
|
||||
AND (OKD.KcdCod IS NULL OR OKD.KcdCod = ' ')
|
||||
{TYPE}
|
||||
) OKD
|
||||
WHERE OKD_RN = 1
|
||||
)
|
||||
ORDER BY OkdDspSeq
|
||||
";
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
public ReviewDiagnosisStore(string connectionString) => this.connectionString = connectionString;
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
/// <summary>이 내원의 심사 상병 행들 — 표시 순서대로. 없으면 빈 목록</summary>
|
||||
public List<Dictionary<string, string>> Diagnoses(decimal comNum, DiagnosisStore.Scope scope)
|
||||
{
|
||||
var filter = scope switch
|
||||
{
|
||||
DiagnosisStore.Scope.Main => " AND OkdDspSeq = '1' ",
|
||||
DiagnosisStore.Scope.Sub => " AND OkdDspSeq <> '1' ",
|
||||
_ => string.Empty,
|
||||
};
|
||||
using var connection = new OracleConnection(connectionString);
|
||||
connection.Open();
|
||||
using var command = connection.CreateCommand();
|
||||
command.BindByName = true;
|
||||
command.CommandText = Template.Replace("{TYPE}", filter);
|
||||
command.Parameters.Add(new OracleParameter("piComNum", comNum));
|
||||
|
||||
var rows = new List<Dictionary<string, string>>();
|
||||
using var reader = command.ExecuteReader();
|
||||
while (reader.Read())
|
||||
{
|
||||
var row = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||
for (var i = 0; i < reader.FieldCount; i++)
|
||||
{
|
||||
row[reader.GetName(i)] = reader.IsDBNull(i)
|
||||
? string.Empty
|
||||
: reader.GetValue(i).ToString()!.Trim();
|
||||
}
|
||||
rows.Add(row);
|
||||
}
|
||||
return rows;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
Reference in New Issue
Block a user