diff --git a/docs/CTX-INTEGRATION-PLAN.md b/docs/CTX-INTEGRATION-PLAN.md new file mode 100644 index 0000000..a7cc5c0 --- /dev/null +++ b/docs/CTX-INTEGRATION-PLAN.md @@ -0,0 +1,114 @@ +# CTX 통합 계획 — 실제 순증은 48종이다 + +검증 통과 태그를 SheetMe 현행 구현과 대조한 결과(에이전트 6, 73만 토큰). + +| 상태 | 수 | 뜻 | +| --- | --- | --- | +| new | **48** | 순증 — 값 생성 코드가 없다 | +| already | 13 | 현행이 같은 값을 낸다 — 건드리지 않는다 | +| conflict | **6** | 처리하지만 값 규칙이 다르다 — 고쳐야 한다 | +| skip | 1 | 죽은 코드 | + +즉 통합하면 26종 → 74종이 되고, 그와 별개로 6건을 고쳐야 한다. + +## 내가 지난 커밋에 적은 것 하나가 틀렸다 + +`WORKFLOW-CTX-ROUND1.md` 에 `ETC_로그인_사용자명` 이 `NVL(UidNam,' ')` 때문에 +레거시와 갈린다고 적었다. **틀렸다.** `UserContextStore.cs:80` 의 `.Trim()` 이 그 공백을 +도로 걷어내서 NULL 케이스는 양쪽 다 `""` 다. 검증이 코드를 직접 읽고 반박했다. + +남는 실차이는 다른 것이다 — SheetMe 만 Trim 한다(레거시 16713 은 안 한다). + +## conflict 6건 — 고칠 것 + +| 태그 | 어떻게 다른가 | +| --- | --- | +| `ETC_로그인_사용자ID_사용자명` | 레거시는 항상 `ID.이름` 결합. SheetMe(`TagPreviewCatalog.cs:197`)는 둘 다 비어 있지 않을 때만 | +| `ETC_로그인_사용자ID` | 유효기간 기준일 — 레거시 `GetAdpDtm` 앞 8자, SheetMe `SYSDATE`. 그리고 SheetMe 만 Trim | +| `ETC_로그인_사용자명` | SheetMe 만 Trim / 기준일 차이 | +| `ETC_로그인_사용자연락처` | 레거시는 유효기간으로 고른 행, SheetMe(`TagPreviewStore.cs:83`)는 `WHERE UIDCOD` 만으로 첫 행 | +| `ETC_로그인_원내연락처` | 같은 조회를 공유하므로 같은 결함 | +| `ETC_현재년도` | 레거시는 "2026년"(접미 "년"), SheetMe 는 "2026" | + +`ETC_현재년도` 는 앞선 문서에 없던 네 번째 차이다. +고칠 때 `tests/SheetMe.Core.Tests/TagPreviewCatalogTests.cs:108` 이 "2026" 을 단정하고 있어 +그 판정도 함께 바뀌어야 한다 — 검증이 짚어 줬다. + +## 통합 순서 + +1. conflict 6건 수정 + 관련 테스트 갱신 +2. new 48종을 배치로 통합(배치마다 `--edit-smoke` 이름 검사 · `--db-patient` · md5) +3. already 13종은 건드리지 않는다 + +## 태그별 판정 + +| 상태 | 태그 | +| --- | --- | +| already | `ETC_로그인_사용자연락처` | +| already | `ETC_로그인_원내연락처` | +| already | `ETC_현재시간` | +| already | `ETC_현재일시_1_년` | +| already | `ETC_현재일시_2_월` | +| already | `ETC_현재일시_3_일` | +| already | `ETC_현재일시_4_몇시` | +| already | `ETC_현재일시_5_몇분` | +| already | `ETC_현재일시_MaskBox` | +| already | `ETC_현재일시` | +| already | `ETC_현재일자_영문` | +| already | `ETC_현재일자` | +| already | `OCM_수술일자_Refer` | +| conflict | `ETC_로그인_사용자ID_사용자명` | +| conflict | `ETC_로그인_사용자ID` | +| conflict | `ETC_로그인_사용자명` | +| conflict | `ETC_로그인_사용자연락처` | +| conflict | `ETC_로그인_원내연락처` | +| conflict | `ETC_현재년도` | +| new | `ETC_로그인사용자_서명` | +| new | `OCM_OPNAME` | +| new | `OCM_STFDTR` | +| new | `OCM_User진료과_Refer` | +| new | `OCM_User진료과_한글명칭` | +| new | `OCM_User진료과` | +| new | `OCM_User진료의사명_Refer` | +| new | `OCM_User진료의사명` | +| new | `OCM_내원유형` | +| new | `OCM_담당의사_Refer` | +| new | `OCM_담당의사_영문_Refer` | +| new | `OCM_담당의사_영문` | +| new | `OCM_담당의사면허번호_Refer` | +| new | `OCM_담당의사면허번호` | +| new | `OCM_담당의사싸인_Refer` | +| new | `OCM_담당의사싸인` | +| new | `OCM_담당의사전문의번호_Refer` | +| new | `OCM_담당의사전문의번호` | +| new | `OCM_로그인_사용자싸인` | +| new | `OCM_병동_Refer` | +| new | `OCM_병동_병실_베드` | +| new | `OCM_병동_병실` | +| new | `OCM_병동` | +| new | `OCM_병실베드` | +| new | `OCM_부상병POA_Refer` | +| new | `OCM_부상병POA` | +| new | `OCM_부상병명_Refer` | +| new | `OCM_부상병코드_Refer` | +| new | `OCM_부상병코드` | +| new | `OCM_상병명_가로_Refer` | +| new | `OCM_상병명_가로` | +| new | `OCM_상병명_영어_가로_Refer` | +| new | `OCM_상병명_영어_가로` | +| new | `OCM_상병명_영어_세로_Refer` | +| new | `OCM_상병명_영어_세로` | +| new | `OCM_상병코드_가로_Refer` | +| new | `OCM_상병코드_가로` | +| new | `OCM_상병코드_세로_Refer` | +| new | `OCM_상병코드_세로` | +| new | `OCM_수술_OprPatETC` | +| new | `OCM_수술부위` | +| new | `OCM_수술상병` | +| new | `OCM_수술주상병` | +| new | `OCM_심사_부상병명` | +| new | `OCM_심사_부상병코드` | +| new | `OCM_심사_주상병명` | +| new | `OCM_심사_주상병코드` | +| new | `OCM_외래내원일시_Refer` | +| skip | `ETC_건강보험증번호_Refer` |