워크플로 조사(읽기 5 + 반박 검증 5)로 전송 계층과 태그 17종을 훑었고,
검증이 조사서의 "FTP" 단정을 반박해 실체가 드러났다: 전송 수단은 단일
프로토콜이 아니라 DB 설정(M_DtlMst 'EMR_FileTransfer' Type)이 고르는
5갈래이고, 새 진단 --db-filecfg 로 확인한 우리 사이트 값은 Type=1 =
FileServer = ActiveX OCX(AxBITSFTLib.AxbitSFT)다. OCX 내부 프로토콜은
코드에 없고 서드파티·ActiveX 는 배포 금지라 <b>다운로드는 재현할 수 없다</b>.
그래서 받지 않고 찾는다: ①레거시 EMR 이 같은 단말에 이미 받아 둔 캐시
({설치경로}\Tmp\DownLoadedFiles\Signature\ — 레거시가 쓰는 그 폴더),
②DB 경로 자체가 열리는 경우(이 병원 저장 형태는 드라이브 절대경로).
둘 다 없으면 사유 → 종이는 빈칸(어제 결정). 판정은 순수 함수
SignatureImagePath 로 두고 테스트 7건(캐시 우선·직접 경로·둘 다 없음·
빈 경로·설치경로 없음·UNC).
경로 조회는 전부 순수 SQL 이라 그대로 이식(SignatureStore): 집도의
(DTRUIDCOD)·마취(수술 ANEUIDCOD / 부서 — 개원일 2021-03-01 분기)·
영상의학(XRAY)·진단검사(LAB)·외출외박 승인자(병동/원무)·병동 수간호사·
병원로고(M_HspMst.HspLgoPth)·병원직인(주석과 달리 DB_REGISTRY 의
'직인경로'). 로그인 사용자 3종은 세션 행에 UidImgPth 를 얹어 왕복 0,
담당의·진단서 의사는 프리페치 행 재사용.
레거시 결함 보존 2건: ETC_병리판독의사싸인은 SELECT 에 UidNam 만 있고
UidImgPth 를 읽어 항상 예외→빈 값(:17434), OCM_Cosign_싸인은 저장 기록
키(EmrKey) 의존이라 미리보기에서 값이 될 수 없다 — 둘 다 사유로 완결.
렌더: PictureBox 가 자리표시자만 그리던 것을 실제 이미지로. 파일을
잠그지 않고(OnLoad) 읽으며, 인쇄가 SizeMode 를 무시하고 사각형에 늘려
그리는 레거시 동작에 맞춰 기본 Stretch=Fill(Zoom 만 비율 유지).
WithTagValue 는 이미지류에서 Text 대신 경로 속성을 채운다.
분류도 정정 — 싸인 계열이 Image(글자만 보여 준다)에서 PatientContext 로.
- dotnet test 354/354 (경로 판정 7건 추가) · --edit-smoke 실패 0
- --db-patient ①~㊲ 전건 통과 — ㊲ 신설: 9개 경로 조회 실행,
마취과 의사 싸인 경로가 실값 29자로 나온다
- --db-filecfg 신설(값 없이 모드만): Type=1 · E_FilInf 102만행 ·
UidImgPth 157행 · 경로 모양 드라이브 절대경로
- --db-render P062 md5 8d683835f5d81e7bb41c79071d6bf954 불변
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
79 lines
3.1 KiB
C#
79 lines
3.1 KiB
C#
using SheetMe.Core.Catalog;
|
|
|
|
namespace SheetMe.Core.Tests;
|
|
|
|
/// <summary>
|
|
/// 싸인 이미지 경로 판정 — 파일서버 전송(ActiveX)을 옮기지 않았으므로
|
|
/// "받지 않고 찾는" 규칙이 값의 유무를 가른다. DB·파일 없이 검증한다.
|
|
/// </summary>
|
|
[TestClass]
|
|
public sealed class SignatureImagePathTests
|
|
{
|
|
#region Methods
|
|
private const string Install = @"C:\MsystechHIS_Ver.2";
|
|
private const string Remote = @"C:\Sign\Server\hong.tif";
|
|
private static readonly string Cached = @"C:\MsystechHIS_Ver.2\Tmp\DownLoadedFiles\Signature\hong.tif";
|
|
|
|
[TestMethod]
|
|
public void 레거시가_받아둔_캐시가_있으면_그것을_쓴다()
|
|
{
|
|
var result = SignatureImagePath.Resolve(Remote, Install, p => p == Cached);
|
|
Assert.AreEqual(SignatureImageOrigin.LegacyCache, result.Origin);
|
|
Assert.AreEqual(Cached, result.LocalPath);
|
|
Assert.AreEqual("hong.tif", result.FileName);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void 캐시가_없으면_DB_경로_자체를_본다()
|
|
{
|
|
var result = SignatureImagePath.Resolve(Remote, Install, p => p == Remote);
|
|
Assert.AreEqual(SignatureImageOrigin.DirectPath, result.Origin);
|
|
Assert.AreEqual(Remote, result.LocalPath);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void 캐시가_원격보다_먼저다()
|
|
{
|
|
// 둘 다 있으면 캐시 — 레거시가 그 폴더에 받아 두고 그 경로를 돌려준다
|
|
var result = SignatureImagePath.Resolve(Remote, Install, _ => true);
|
|
Assert.AreEqual(SignatureImageOrigin.LegacyCache, result.Origin);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void 둘_다_없으면_없음이고_파일명은_남는다()
|
|
{
|
|
// 파일명은 사유 문구에 쓴다 — "무엇을 못 찾았는지" 를 말할 수 있어야 한다
|
|
var result = SignatureImagePath.Resolve(Remote, Install, _ => false);
|
|
Assert.AreEqual(SignatureImageOrigin.None, result.Origin);
|
|
Assert.AreEqual(string.Empty, result.LocalPath);
|
|
Assert.AreEqual("hong.tif", result.FileName);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void 경로가_비면_아무것도_찾지_않는다()
|
|
{
|
|
var result = SignatureImagePath.Resolve(" ", Install, _ => true);
|
|
Assert.AreEqual(SignatureImageOrigin.None, result.Origin);
|
|
Assert.AreEqual(string.Empty, result.FileName);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void 설치경로가_없으면_캐시를_보지_않는다()
|
|
{
|
|
// 레거시는 설치 경로가 없으면 "\Tmp\..." 라는 루트 상대경로를 만든다 — 그 결함은 안 옮긴다
|
|
Assert.AreEqual(string.Empty, SignatureImagePath.CacheFolder(null));
|
|
var result = SignatureImagePath.Resolve(Remote, null, p => p == Remote);
|
|
Assert.AreEqual(SignatureImageOrigin.DirectPath, result.Origin);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void UNC_공유_경로도_파일명을_뗀다()
|
|
{
|
|
var unc = @"\\fileserver\sign\kim.jpg";
|
|
var result = SignatureImagePath.Resolve(unc, Install, p => p == unc);
|
|
Assert.AreEqual(SignatureImageOrigin.DirectPath, result.Origin);
|
|
Assert.AreEqual("kim.jpg", result.FileName);
|
|
}
|
|
#endregion
|
|
}
|