hwss-investigation-agent-prototype 기준 본 화면 37개
HWSS 구현 커버리지 맵
프로토타입에서 확정한 화면마다 프론트·백엔드·AI/외부 연동이 어디까지 왔는지 한 장으로 봅니다. 화면 이름 아래 파란 칩은 프로토타입 미리보기와 프론트엔드 가이드로, 클래스 이름은 백엔드 가이드의 그 파일 행으로 갑니다. 상태는 dev 에 머지될 때마다 빌드가 코드에서 계산하고, 열린 PR 이 닿는 화면에는 작업 중(Draft)·리뷰 중 을 붙입니다. 화면 이름 옆 실행 확인 뱃지는 E2E·개발 서버에서 그 화면이 실제로 실행된 정도이고 테스트 커버리지로 이어집니다.
dev 기준 #2181 머지 11/13 17:36 · 커밋 b8b358b4 · 계기 Merge pull request #2181 from fdxchatgpt/feat/proto-front-parity-20261112
프로토·프론트 화면 차이 9건 동일화 (야간 20261112 아침 확인) 완료 · 2026-11-13 17:49 KST 빌드 · 빌드 런
상태가 뜻하는 것 — 빌드가 코드에서 계산
- 구현
- 적힌 라우트·컨트롤러·어댑터가 다 있고 빠진 것이 없음
- 부분
- 있긴 한데 남은 클래스·빠진 것·스텁 경로가 남음
- 미구현
- 라우트·컨트롤러·어댑터가 아직 없음
- 자리값
- 어댑터 없이 AI 결과가 스텁(ResultProvenance.STUB)
- 해당 없음
- AI·외부 연동이 필요 없는 화면 — 위 숫자의 분모에서 뺀다
- 작업 중
- 이 화면에 닿는 Draft PR 이 열려 있음 — 개발하는 중
- 리뷰 중
- Draft 를 푼 열린 PR 이 있음 — 리뷰·머지를 기다리는 중
- 담당
- 그 화면(기능)을 맡은 사람 — 로그인하면 보이고 지정할 수 있음
- E2E 시나리오
- 자동 E2E 시나리오 수(구현 — 사건 여정 포함)와 아직 없는 계획 수. 누르면 E2E 시나리오의 그 화면 절
- 실행 확인
- 프론트 E2E·백엔드 수동(dev)이 그 화면을 실제로 지나간 정도 — 낮은 층 기준. 누르면 테스트 커버리지의 그 화면 행
진행 중 작업
누가 지금 무엇을 하고 있나
열린 PR 3 · 작업 중 2 · 리뷰 중 1
작업을 시작할 때 Draft PR 을 먼저 열면 여기에 작업 중 으로 뜨고, Draft 를 풀어 리뷰를 요청하면 리뷰 중 으로 바뀝니다. PR 본문의 목표일: 줄과 체크박스가 목표일·할 일 진행도로 보이고, 목표일이 지난 PR 은 강조됩니다. 제목과 작성자는 로그인하면 보이고 작성자별로 묶입니다.
담당 현황
누가 무엇을 얼마나 진행했나
화면(기능)마다 담당자를 지정해 두면, 담당자별로 맡은 화면의 상태·남은 것·관련 PR 이력이 여기에 모입니다. 아래 표에서 화면 이름 밑의 + 담당 으로 본인이 맡거나 다른 사람을 지정합니다. PR 이력은 그 화면의 파일을 바꾼 PR 이면 누가 올렸든 자동으로 쌓이고, 담당은 PR 이 머지돼도 유지됩니다.
담당 정보를 불러오는 중입니다.
표 점검
이 표가 코드를 따라가고 있나GitHub
빌드마다 다시 계산
화면 ↔ 라우트 ↔ 클래스의 대응과 코드로는 알 수 없는 빠진 것은 사람이 docs-site/data/coverage.json 에 적고, 상태는 빌드가 코드에서 계산합니다. 적힌 것이 코드에 없으면 배포는 막지 않고 여기에 드러냅니다.
- 코드와 어긋나는 행 5개 — 각 행의 점검 필요 를 보세요. 적어 둔 라우트·클래스가 코드에 없는 경우입니다(이름이 바뀌었거나 삭제).
- 이 표를 고치는 PR 이 열려 있습니다 #2071
집계에서 뺀 화면 40개
기획 Draft·레이아웃 실험 화면, 하위 화면으로 넘기는 진입 경로, LNB 에서 빠진 구 화면, 에이전트 스튜디오로 통합돼 개발 도구에 남은 구 화면은 화면 계약이 아니므로 집계에서 뺀다.
User 콘솔
통합 연동
화면 2개
| 사고조사 전체 업무 흐름6일 전 · #1939일부만 실행E2E 시나리오 1 | 프론트구현백엔드구현AI·외부구현 | 프론트한글 문서 설정의 순서대로 동일 보고서를 접수·검수·분석·반복 수정·최종 전송하는 E2E 통합 카테고리 백엔드중간 업무 결과를 SQL로 만들지 않고 실제 API·화면으로 처리 AI·외부실제 시험 소유 SFTP·공통 S3·Studio. 메일/Smart심사는 시험 소켓 수신기이며 외부 업무 적재가 아님 엔드포인트ImageIntegrationController 0/6 · InvestigationReportController 5/5 · ClassificationResultController 3/5 · ExtractionResultController 2/3 · AnalysisRequestController 2/3 · ReportDraftController 1/8 · ReanalysisController 3/3화면이 부르는 수 / 계약에 있는 수 메모e2e/full-journey의 한글 JSON으로 PDF/ZIP 경로·문서별 검수·업무 순서와 각 분석 실행의 사전분석조건을 지정한다. 95페이지 실문서로 실제 SFTP·공통 S3·Studio와 시험 SMTP를 연결해 개발·운영 각 1개 통과(2026-11-09). 운영은 같은 건에서 조건을 변경해 재분석한 뒤 시험 메일 수신까지 확인했다. 실제 자료가 있는 장비에서 full-journey를 명시적으로 실행하며, 회차별 검증 범위와 이전 실패는 실행기 README에 기록한다. 관련 PR머지 325 · 마지막 머지 11/11
머지된 PR 은 최근 15건만 보여 줍니다 (전체 325건) |
| 이미지시스템 연동6일 전 · #1939일부만 실행E2E 시나리오 12 | 프론트구현백엔드구현AI·외부구현 | 프론트E2E 통합 카테고리. 신규 제품 화면 없이 수신부터 담당자 목록·보고서 진입까지 연결 검증 백엔드API01/02 실제 수신·해시 확인·비동기 압축 해제·낱장 조회 AI·외부시험 소유 SFTPGo 공개키 전송 → 실행 환경의 공통 S3 격리 prefix → 실제 Studio 파일 업로드. 성공 대역·자동 스텁 전환 없음 엔드포인트ImageIntegrationController 0/6 · ReportPageImageController 0/1 · InvestigationReportController 5/5화면이 부르는 수 / 계약에 있는 수 메모실연동 12개(기존 7+보강 5): dev2b3e6c318(#1953) 반영으로 기동 문제 해소, 실제 연동 전체12개 개발/운영 각11통과·1실패(2026-11-07). ZIP 내부 누락·낱장 해시·업로드 전 통지 복구·동시 완료·재시도 대기 인스턴스 교체를 추가. dev b08268177 반영 후 전체12개 실제 연동 개발/운영 각11통과·1실패. 동시 완료 통지 HTTP500은 제품 수정 없이 실패로 보존(2026-11-06). 정상 체인·해시 거절/재전송·손상 ZIP 보존/복구·중복 완료·S3 장애/자동 재시도·Studio 장애/새 전송 복구·비담당자 차단. image-system-integration prepared 개발/운영 실행기에 등록. Infisical dev-server 실제 SFTPGo·공통 S3·Studio에서 두 모드 각 7개 통과(2026-11-05, 최신 dev 4e4396ba8 반영). DB는 전용 PostgreSQL이며 사건·수신 결과는 제품 API가 기록한다. 분류 착수 전까지 검증하고 실제 이미지시스템 운영 SFTP 서버 접속·AI 분류/추출/보고서 생성·메일/Smart심사 전송은 제외한다. 관련 PR머지 306 · 마지막 머지 11/09
머지된 PR 은 최근 15건만 보여 줍니다 (전체 306건) |
User 콘솔
진입·계정
화면 3개
| 로그인2일 전 · #2114일부만 실행E2E 시나리오 18 | 프론트구현백엔드구현AI·외부구현 | 프론트`/auth/start` 는 page.tsx 가 아닌 route.ts(SSO 진입 핸들러)라 라우트 목록에 적지 않는다. `/auth/resume` 은 access 쿠키 없이 연 탭이 refresh 로 세션을 이어받는 경유 화면(proxy.ts 가 보낸다). 백엔드개발용 로그인·SSO 콜백·세션 발급·로그아웃·세션 상태(LNB 타이머) AI·외부SSO 사이트마인더 자체 연동 — WebAgent 식별 헤더, 비밀번호 암호화는 업체 jar 있는 클래스AuthControllerAuthSessionServiceAuthTokenServiceJwtCookieAuthenticationFilterLocalDevIdentityProviderSsoLoginControllerSsoCallbackControllerSsoLogoutCookieSessionLifetimeServiceOrganizationAuthSessionStoreAdapterFieldFormErrorFormActionsSessionResumeRathonSiteMinderPasswordEncoder 엔드포인트AuthController 3/5화면이 부르는 수 / 계약에 있는 수 메모로그인 필수 E2E 11개(11번 새 탭 세션 이어받기는 2026-11-10, prepared/login-essential.spec.ts) 추가: 실제 API·전용 DB·SSO 시험 대역에서 인증 복귀·온보딩·로그아웃·출처/헤더 오류 복구·토큰 재발급·유휴 만료·탭/브라우저 세션을 검증. e2e/login/run.py, 공용 준비형 이력 login 개발/운영에 연결. 실제 SiteMinder·Studio 실연동은 제외. SSO 는 Keycloak 없이 SiteMinder 헤더를 직접 받는다(docs/decisions/20260929-sso-own-session-and-studio-offline-token.md). 세션 정책 — 서버 유휴 판정(60분)·LNB 세션 타이머·60초 전 서버 재확인 후 한 번만 여는 경고 창·연장 요청 중 만료 판정 보류(docs/decisions/20261008-session-lifetime-policy.md), 타이머는 모든 콘솔 화면 LNB 에 있다. 2026-10-21 WBS 2.1.1 — 로그인 폼 하단에 비밀번호 분실(임시 비밀번호 재발급) SSO 화면 새 탭 링크. 관련 PR머지 37 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 37건) |
| 최초 로그인 이메일 등록거의 안 지나감E2E 시나리오 16 | 프론트구현백엔드구현AI·외부해당 없음 | 백엔드온보딩 완료 API 있는 클래스AuthOnboardingControllerAuthOnboardingServiceOrganizationUserSupplementStoreAdapterUserSupplementEntityDuplicateUserEmailExceptionFieldFormErrorFormActions 엔드포인트AuthOnboardingController 1/1화면이 부르는 수 / 계약에 있는 수 메모온보딩 필수 E2E 10개(prepared/onboarding-essential.spec.ts): 공백·대소문자 확인, 도메인 무제한, 특수문자·길이·형식 경계, 연속 제출, 연결 실패 재시도, 만료 시 미저장, 기본 MEMBER 세션, 재로그인 영속성. 기존 e2e/login/run.py와 공용 준비형 login 개발/운영 실행에 연결하며 화면 집계는 onboarding으로 분리. 실제 Spring API·전용 PostgreSQL 사용, 외부 SiteMinder는 시험 대역. 관련 PR머지 19 · 마지막 머지 11/09
머지된 PR 은 최근 15건만 보여 줍니다 (전체 19건) |
| 내 정보실행 확인E2E 시나리오 17 | 프론트구현백엔드구현AI·외부해당 없음 | 프론트요약·기본 정보(HR, 조회 전용)·계정 정보(로그인 계정·보유 레벨 전체는 조회 전용, 이메일은 입력 + 되돌리기·저장). 사용자 콘솔 LNB 카드가 이 화면으로 가는 링크이고 이름·이메일은 /users/me 값 — 저장하면 같은 캐시라 카드도 바로 바뀐다. 메뉴 권한 없이 로그인만 하면 열린다. 화면은 profile-view·profile-email-form, LNB 카드는 workspace-nav-user-card. 백엔드GET /api/v1/users/me(본인 조회)·PUT /api/v1/users/me/email(본인 이메일 수정 — 소문자 저장, 다른 직원 중복 409, 온보딩 전 409). 둘 다 메뉴 권한 없이 로그인만. 변경은 감사 USER_EMAIL_CHANGED(이메일 값 없음) 있는 클래스AuthControllerUserControllerUserEmailChangeServiceProfileEmailFormFieldFieldLabelFieldDescriptionFieldErrorFormActions 엔드포인트UserController 5/6화면이 부르는 수 / 계약에 있는 수 메모내 정보 필수 E2E 10개(prepared/profile-essential.spec.ts): 동일 주소 미전송·길이 경계·중복 제출·연결/세션 실패·계정 전환·콘솔 진입 가능·사고조사 메뉴 차단 계정의 본인 수정·온보딩 우회 방지·감사 개인정보·조회 복구. 기존 e2e/login/run.py와 공용 준비형 login 개발/운영에 연결하고 profile 화면으로 별도 집계. 실제 Spring API·전용 DB, 외부 SiteMinder는 시험 대역. 2026-10-13 WBS 1.1.2 — 본인 조회 API + 화면 + LNB 카드 링크. 2026-10-16 WBS 19.3 — 본인 이메일 수정(UserEmailChangeService, 관리자 조직도 수정도 같은 서비스로 저장) — 결정 20261016-self-email-edit. 2026-10-21 WBS 8.1 — 계정 정보에 비밀번호 변경 SSO 화면 새 탭 링크. 관련 PR머지 26 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 26건) |
User 콘솔
에이전트
화면 3개 · 점검 필요 1
| 에이전트 채팅2일 전 · #2108일부만 실행E2E 시나리오 22(계획 2) | 프론트구현백엔드구현AI·외부구현 | 프론트범용 채팅 — 지식 컬렉션 팝업은 문서 단위 선택(KnowledgeFilePicker, 결정 20261019, WBS 5.1.2 — 진행 중 대화도 같은 팝업을 지금 범위로 펼쳐 열고 `선택 적용` 시 PUT …/knowledge 로 바로 저장·안내, 새 대화와 같은 저장 규칙(문서를 모두 고른 컬렉션은 컬렉션 단위, useSessionKnowledge·fetchPickableFiles, 결정 20261019 개정 2026-10-28) — 분석 조건과 같은 본체 knowledge-archive-picker, 검색 결과 일치 종류별 접힘·펼침·범위 안 검색은 결정 20261026), 파일 첨부(형식 8종·개수 제한 없음·파일당 50MB·대화 누적 100쪽 미만 — 서버 `attachmentPages`에 사전 검사 쪽수를 더해 거른다, 사전 검사→준비→attachmentIds, WBS 5.1.3) 연결. 대화 첨부셋(결정 20261026) — 입력창 위 참조 중인 첨부 줄(`activeAttachments`·대화 누적 쪽수), 참조 중인 첨부가 있는 대화에서 새 첨부를 붙이면 교체 안내. 답변 본문은 마크다운으로 그린다(react-markdown·remark-gfm, 이미지·원문 HTML 차단). 근거 칩은 근거 쪽으로 뷰어를 연다(근거 뷰어 쪽 이동 — PDF 원본 전체·그 외 변환 미리보기, WBS 5.2.2). 사고 모드는 업스테이지 합의로 없앴다(결정 20261029-agent-chat-reasoning-mode-removal). 사용자 URL 직접 접근은 소유 메뉴 권한으로 차단. 대화 용량(결정 20261102) — 서버 `contextUsage` 로 입력창 위 막대·80% 이어 가기·96% 입력 잠금, 구분선·회색 말풍선. 답을 기다리는 대화는 LNB 최근 항목 맨 위 `답변 대기 중`·실패 `보내지 못함`·다른 화면이면 실패 알림 `대화로 이동`(usePendingChatAsks·ChatAskFailureNotifier, 결정 20261030-agent-chat-pending-in-lnb) — 새 대화는 대화 id 받는 즉시 이동, 대화 로딩·오류 중 입력 잠금 백엔드세션·메시지·근거. 대화 중 배경지식 변경 `PUT /api/v1/chat-sessions/{id}/knowledge`(본인 범용 대화만 404·용량 가득 참 409·볼 수 없는 범위는 저장 전 거절, 다음 질문부터 적용 — 결정 20261019 개정 2026-10-28). 대화 용량(결정 20261102) — 직전 답변 usage 를 답변 줄에 남기고, 설정 `hwss.chat.context.*`(524,288·80%·96%) 기준으로 96% 면 질문 거절 409 `CHAT_CONTEXT_FULL`, 구분선 `POST /api/v1/chat-sessions/{id}/context-reset`. 대화 첨부셋(결정 20261026) — 대화 누적 100쪽 미만 재검사, 대화 조회 응답에 `attachmentPages`·`maxAttachmentPages`·`activeAttachments`(마지막 첨부셋). 대화 시작은 `collectionIds` + 문서 단위 `fileIds`(고른 문서 밖 히트는 검색에서 거른다), 파일 요약에 `pageCount`. 첨부는 제한 재검사·PDF 변환·Studio 파일 업로드·원장 저장과 질문 `attachmentIds` 연결까지. 대화 조회·질문 응답의 질문 줄 `attachments`(첨부 이름·쪽 수)로 보낸 질문 아래 첨부를 남긴다. 후속 질문은 Studio 대화 식별자(`chat_sessions.external_conversation_id`)로 잇는다(결정 20261020). 질문마다 Studio 를 세 번 부른다 — ① 의도 게이트(function 툴 강제) → ② 컬렉션 라우팅(`POST /vector_stores/route`, GENERAL 이면 생략) → ③ 본 답변(`file_search` standard·`store_scopes`·첨부 턴 `doc_chat`). 검색 범위는 ② 가 고른 공용 컬렉션 + 고른 컬렉션·문서 + 개인 Store, 근거는 ③ 응답 출처(쪽 번호·첨부 종류)로 남긴다(결정 20261021). `GET /api/v1/chat-sessions/{sessionId}/attachments/{attachmentId}/content`는 본인 대화의 실제 첨부 출처만 Studio 변환 PDF로 inline 중계한다(HWSS 파일 사본 없음). 근거 칩 기준은 설정 `hwss.chat.sources.*`(점수 상위·인용 먼저·인용만), 발췌 없는 턴에만 자체 지식(7항 시험 적용, `prompts.out-of-scope-*`). 첨부 허용 확장자 설정 — 엑셀·PPT 는 422 `CHAT_ATTACHMENT_TYPE_NOT_ALLOWED`(결정 20261013 §1-4, 2026-10-16) AI·외부Studio Chat(Responses — ① 의도 게이트 JSON·② 컬렉션 라우팅·③ 본 답변 스트리밍) — 기본은 스텁, `AI_PLATFORM_STUDIO_CHAT_ENABLED=true`(+ provider=studio)로 실연동. SaaS 실측(2026-10-20): 질문 1건 200, `assistant` 역할 재전송은 400, 후속 질문은 첫 응답의 `conversation.id` 를 `conversation:{id}` 객체로 보내면 이어진다(결정 20261020). 온프렘은 server_error 실측 실패(2026-10-01) 있는 클래스ViewerLoadingChatControllerChatServiceChatAnswerStreamerChatContextPropertiesChatContextGaugeChatContextDividerChatAttachmentSourceViewerChatAttachmentInspectionServiceChatAttachmentPreparationServiceChatAttachmentSelectionServiceChatAttachmentContentServiceChatAttachmentLimitsChatAttachmentEntityChatSessionEntityChatSessionFileEntityKnowledgeFilePickerChatSessionKnowledgeRequestuseSessionKnowledgeChatMessageEntityChatModelPortKnowledgeScopePortKnowledgeScopePortImplChatSourcePropertiesStubChatModelAdapterStudioChatAdapterChatSourceListParentMenuLinkChatScreenFrameChatDeleteHeaderButtonChatSourceViewerChatSentAttachmentsChatActiveAttachmentsattachmentCardMetaOfusePendingChatAsksChatAskFailureNotifierChatTitleGeneratorChatTitlePortSourceHighlightLayerChatSourceRegionChatSourceRegions 엔드포인트ChatController 11/12화면이 부르는 수 / 계약에 있는 수 메모시험 종료 시 새 요청 차단·진행 중 응답 완료 대기 후 Studio 자원 정리, 종료 회귀 4개 추가. 에이전트 채팅 삭제 E2E 10개 — e2e/agent-chat-delete/run.py 전용 실행기, 실제 Studio 채팅·첨부·대화/턴 삭제와 취소·용량 잠금 복원·권한·오류 재시도·과거 응답 ID 누락을 확인한다. 28개 과거 턴 경계와 ID 누락만 시험 DB로 준비하며, 삭제 실패·답변 대기는 시험 프록시로 제어한다. 2026-09-30 야간 NX01·NX03 — 범용 에이전트 채팅. 배경지식은 실측된 VectorSearchPort 로 우리가 직접 검색해 싣는다(에이전트 file_search·vector_store_ids 경로는 업스테이지 회신 대기). 사고조사 챗봇은 9/10 노트 §7 의 구조 문제로 work-plan 이 착수를 막아 둔 항목이다. Studio 어댑터(NX02)는 온프렘 Studio Chat 이 server_error 로 끝나(tiktoken 인코딩 외부 다운로드 실패, 2026-09-29·10-01 실측) 업스테이지 조치 전까지 [!]. 2026-10-01 화면을 프로토타입 배치로 정렬하고 LNB 최근 항목을 붙였다(사고 모드는 계약이 없어 준비 중 비활성, 첨부는 2026-10-19 연결). 채팅 연결 1개 추가: 실제 Studio 답변 생성 후 사용 내역·누적 질의 통계를 대조하고 마지막/전체 삭제 뒤 통계 보존을 검증. 실행기 총 15개. 제목 생성의 실제 완료 응답·제품 상세 반영을 기다린 뒤 전체 동등 비교를 유지하도록 시험 대기 보완. 실제 Studio 채팅 개발15/운영15·프록시14 통과(2026-11-07). 관련 PR머지 101 · 마지막 머지 11/11
머지된 PR 은 최근 15건만 보여 줍니다 (전체 101건) |
| 사용 내역3일 전 · #2094일부만 실행E2E 시나리오 15 | 프론트구현백엔드구현AI·외부해당 없음 | 프론트구분 칩(건수)·기간 select(실제 필터)·제목 검색·`20/50/100` 쪽 나눔을 서버 조회로. 사고조사 에이전트 건은 서버가 같은 계약으로 채우면 그대로 보인다(제목은 서버가 준 값, 행 이동은 `/user/investigations/<보고서번호>`). 사용자 URL 직접 접근은 소유 메뉴 권한으로 차단. 목록 필터를 공통 FilterBar(라벨 없는 한 줄·`초기화`)로 묶고 select 즉시·검색어 400ms 디바운스·시작일 있을 때 날짜 즉시 조회(PR #973, 결정 20261014-list-filter-auto-apply) `조회`·Enter 는 같은 조건이어도 1쪽으로 가 목록을 다시 받는다(받는 동안 표 유지·`조회` 잠금, 결정 20261019-list-filter-apply-always-refetch, PR #1159). 검색어·기간·구분·쪽 번호·쪽 크기는 URL search param(`q`·`period`·`kind`·`page`·`size`)이라 새로고침·링크·뒤로가기에서 그대로 살아난다(결정 20261019-list-filter-url-state, PR #1177). 2026-10-21 프로토 계층 정렬 — 블록 간격을 역할 토큰(`mt-page-body`·`mt-related`·`mt-section`·`mb-toolbar`)으로, 구분 칩을 프로토 알약형, `총 N건` 14px, 행 시각에 전체 일시 툴팁. 2026-10-27 야간 UH02 — 기간 `최근 7일·30일·90일`(기본 90일), 칩·`최근 N일 · 마지막 사용 시각 순`·보관 안내 `ⓘ` 툴팁(서버 `retentionDays`) 한 줄 툴바, `총 N건` 줄 삭제, 보관 만료 7일 이하 범용 대화만 `N일 후 삭제`(서버 `expiresAt`, 결정 20261023). 행을 눌러 넘어간 대화·사고조사 화면은 상단 돌아가기가 보던 사용 내역(조건 포함)으로 돌아온다(`?back=`, `lib/url/back-target.ts`). 백엔드GET /api/v1/chat-sessions(대화 목록) · GET /api/v1/chat-sessions/usage(구분·기간·검색·쪽 나눔, 본인 것만 — 사용 내역 화면과 LNB 최근 항목(1쪽 상위 10건, PR #1564)이 함께 쓴다) · POST /api/v1/chat-sessions/attachments/inspect(최대 5개, DocMate 기준 파일당 100쪽 사전 검사). 범용·사고조사 대화를 본인 기준으로 통합 조회하며 질문 없는 사고조사 대화·보고서 없는 대화는 제외 있는 클래스ChatControllerChatServiceChatUsagePageUsageHistoryViewFilterChipexpiryWarningDaysBackAwareParentMenuLink 엔드포인트ChatController 11/12화면이 부르는 수 / 계약에 있는 수 메모사용 내역 필수 E2E 10개를 prepared/usage-history-essential.spec.ts에 추가. 전용 회차 DB에 시작 직전 자료 준비·권한 복구·개인별 범위/통합/기간/검색/집계/만료/페이지/복귀/오류 검증, 기존 5개 유지·같은 conversations 화면에 정제 수집. Studio 생성·파기 배치는 별도 범위. 2026-09-30 야간 NX03 — 대화 제목·마지막 사용. 시각 표기는 프로토타입 8/18 규칙. 2026-10-12 WBS 1.1.3 — 구분·기간·쪽 나눔을 서버로. 남은 일: 사고조사 에이전트 사용 건(사고조사 챗봇 저장소 선행, 🔴 착수 금지) 관련 PR머지 69 · 마지막 머지 11/11
머지된 PR 은 최근 15건만 보여 줍니다 (전체 69건) 점검 필요
|
| 지식컬렉션 참조 내역E2E 시나리오 0(계획 1) | 프론트미구현백엔드미구현AI·외부미구현 |
User 콘솔
사고조사 AI Agent
화면 9개 · PR 진행 중 1
| 사고조사 목록6일 전 · #1939작업 중 · #2071일부만 실행E2E 시나리오 17 | 프론트구현백엔드구현AI·외부해당 없음 | 프론트글로벌 상태 11종·위험 서브 상태 뱃지, 상태 다중 필터·q 검색 (PR #569). 조직 범위 조회자의 담당 조사자·소속 열과 전체 소속 필터 (PR #588). 조회 범위 설명 문구와 열 수 없는 단계 행의 기본 커서·안내 토스트 (PR #705). 공통 LNB 사용자 카드는 세션의 이름·이메일 표시(PR #771). 청구유형·소속을 서버 조건으로, 선택지는 filter-options(PR #779). `/user` 진입점의 첫 허용 메뉴 이동과 사용자 URL 직접 접근 권한 차단. 목록 필터를 공통 FilterBar(라벨 없는 한 줄·`초기화`)로 묶고 select 즉시·검색어 400ms 디바운스·시작일 있을 때 날짜 즉시 조회(PR #973, 결정 20261014-list-filter-auto-apply) `조회`·Enter 는 같은 조건이어도 1쪽으로 가 목록을 다시 받는다(받는 동안 표 유지·`조회` 잠금, 결정 20261019-list-filter-apply-always-refetch, PR #1159). 백엔드목록·접수일자 범위 조회에 글로벌 상태 11종 다중 필터·q 검색·조직 조회 범위를 더함 (PR #538·#540). 조회 범위는 레벨별 — 본부장·실장 전사, 단장·팀장은 단·팀, 센터장·파트장은 센터·파트 층 조상 기준(2026-10-20, 결정 20261020). 청구유형·소속(담당 조사자 현재 소속 부서 코드) 조건과 GET /investigation-reports/filter-options (PR #779) 있는 클래스InvestigationReportControllerInvestigationReportQueryServiceInvestigationReportEntityInvestigationStatusTransitionWorkflowStatusResolverOrganizationScopeAdapter 엔드포인트InvestigationReportController 5/5화면이 부르는 수 / 계약에 있는 수 판정 제외
메모담당 조사자·소속 열과 전체 소속 필터는 PR #588 로 그렸다 — 노출 판정은 세션 계약에 권한 레벨이 없어 조회된 행으로 가르는 표시 규칙이고(사번 비교·표시명 폴백은 PR #605 가 _lib/investigator.ts 로 모음), 청구유형·소속 필터는 PR #779 부터 서버 조건이다(소속 = 부서 코드, 직접 소속만) — 선택지는 조회 범위 안 건의 값을 filter-options 로 따로 받는다. 화면 기준선 「조직장 조회 전용」의 목록 쪽은 PR #705 로 닫혔다 — 같은 판정으로 설명 문구를 갈라 적고, 남의 건은 AI 보고서 확인 이후 5상태만 열며(백엔드 InvestigationAccessGuard.VIEW_ONLY_OPEN_STAGES 와 같은 집합) 그 전 단계 행은 기본 커서로 그리고 안내 토스트만 띄운다(판정은 _lib/view-stage.ts). 워크스페이스 쪽 조회 전용 잠금·숨김은 workspace-* 행이 갖는다. 사고조사 목록 필수 E2E 10개를 `screens/prepared/investigation-list-essential.spec.ts`에 추가한다. 가이드에 따라 전용 웹·API·DB와 자동 자료 준비·정리를 사용하며 권한·검색·필터·날짜·페이지·상태/위험 표시를 검증한다. 재사용 동작은 actions에 두고 기존 7개를 유지한다. 후행 프로젝트·quick/full·정제 리포터로 같은 구현 시나리오에 수집한다. 원천 상태를 준비한 목록 검증과 실서류/Studio 전체 흐름 검증은 구분한다. 관련 PR작업 중 1 · 머지 84 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 84건) |
| 워크스페이스 · 서류 인입일부만 실행E2E 시나리오 13 | 프론트부분백엔드구현AI·외부부분 | 프론트기준선 7단계 스테퍼(PR #570)·조회 전용 판정과 조회 범위 403 안내(PR #571)·AI 분류 시작 착수 버튼(PR #578)·글로벌 상태 한 원천(PR #586·#587)·스캔 문서함 낱장 삭제와 `문서 편집 · 저장 전 N건` 카드, 저장 전 다음 단계 차단(PR #735)·낱장 순서 변경(드래그·`위로`/`아래로`·`순서변경` 뱃지, PR #736)·저장된 삭제를 제자리 `삭제 예정` 행으로 되돌려 그리고 되돌리기를 저장 전 변경으로 쌓는 것(PR #761)·저장한 편집이 마지막 분류 실행에 반영되지 않았을 때의 저장 뒤 게이트 카드(단계로 강제·비강제를 가른다, PR #763 — `서류 인입` 단계에는 두지 않는다: 그 단계의 `AI 분류 시작` 이 곧 분류부터다). 추가 서류는 SSE 신호(`useReportEvents`)로 새로고침 없이 문서함·진행 상태에 반영된다 — 확정 이후 문서가 바뀐 건은 상단 `추가 서류가 감지되었습니다` 바로 알린다. 폴더를 건너는 이동은 낱장 편집 저장(`report_page_edits`)이 폴더 귀속을 남기도록 설계한 뒤의 일이다 — 지금은 순서·삭제만 남기고 폴더는 분류값으로 다시 묶는다. 상단·스캔 문서함은 단계와 상관없이 접힌 채 시작하고, 펼치면 단계가 바뀌어도 유지하며 `AI 보고서 확인` 으로 넘어갈 때만 다시 접힌다(결정 20261019, `initial-collapse.ts`). `AI 추출 완료` 이후 추출까지 간 문서의 낱장 파일명 앞에 점(`extractedDocumentPageIdsOf`, 결정 20261108-document-box-extracted-dot) 백엔드실시간 갱신 SSE `GET …/events` — 수신·논리 변경·확정·전송 실패를 커밋 뒤 신호로 보내고 화면은 기존 조회를 다시 받는다(결정 20261014-realtime-updates-sse). 이미지 수신 API-01~07·원본 이미지·스테퍼, 사용자 착수 confirmation (PR #541), 상세·하위 조회 범위 검사 (PR #540), 스캔 문서함 낱장 편집 저장 PUT …/page-edits (PR #733) + 상세 조회 겹쳐 보기·`다시 분석` 편집 유무 판정 반영 (PR #734). 낱장 단건·원본 이미지 조회는 오버레이를 거치지 않는다(열린 뷰어 보호). 저장 스냅샷은 화면이 볼 수 있는 낱장에만 미친다 — 요청이 가리키지 않은 삭제 행은 지키고 빈 문서함 가드는 저장분 삭제까지 더해 센다 (PR #737). 저장된 삭제 낱장은 상세 응답 `savedPageDeletions` 로 따로 내려간다 — 목록·머리 장수는 지운 낱장을 끝까지 빼고, 표시 자리 합치기는 화면이 한다 (PR #760). 저장된 편집이 마지막 분류 실행에 반영됐는지는 `다시 분석` 범위 응답의 `savedEditsNotReanalyzed` 가 내려준다 (PR #762) AI·외부이미지시스템 수신 동작, 서버 IP 허용 목록 회신 대기 빠진 것
있는 클래스ImageIntegrationControllerImageTransferReceptionServiceFinalTransferCompletionServiceReportPageImageControllerReportPageImageServiceWorkflowEngineImplWorkflowProgressPortImplInvestigationStartControllerInvestigationAccessGuardReportPageEditControllerReportPageEditServiceReportPageEditOverlayParentMenuLinkInvestigationReportEventControllerReportEventStreamRegistryReportEventStreamListenerReportEventStreamServiceAnalysisConcurrencyLimitServiceInvestigatorStartLockConcurrencyLimitNoticeReclassificationReservationServiceResizeRailClassificationQueueServiceClassificationQueueListenerClassificationQueueSweeperWorkspaceTransitionLockProvider 엔드포인트ImageIntegrationController 0/6 · ReportPageImageController 0/1 · InvestigationStartController 2/2 · ReportPageEditController 1/1 · InvestigationReportEventController 0/1화면이 부르는 수 / 계약에 있는 수 메모분류·추출 중 재확정 예약(결정 20260910 1항)은 백엔드가 받아 단계 종료 뒤 분류부터 자동 재시작하고 상세 응답 `reclassificationReservedAt` 으로 내려 준다 — 화면은 예약이 걸린 건에 `이미지 시스템 확정으로 분류부터 재시작` 배너를 보인다. 착수 API(PR #541)와 화면의 AI 분류 시작 버튼(PR #578)이 연결됐다. 착수 지점의 동시 작업 한도 게이트는 TODO(decision-needed). 낱장 편집은 백엔드 저장·조회 반영(PR #733·#734)에 화면의 휴지통·저장 카드(PR #735)와 순서 변경(PR #736)까지 이어졌다 — 순서 편집의 단위는 폴더 하나이고, 저장은 문서함 정본 순서(낱장 번호) 한 줄로 보낸다. 저장된 삭제를 되돌리는 길은 `orderedSourcePageIds` 에 그 낱장을 실는 것이고(PR #760 이 상세 응답에 되돌릴 거리를 더했다), 화면의 되돌리기가 PR #761 로 붙었다 — 되돌리기는 저장 전 변경으로 쌓여 `편집 저장` 때 그 낱장을 순서 줄에 실어 보낸다. 저장 뒤 `분류부터 다시 시작` 카드·게이트는 후속이다. 서류 인입 필수 E2E 10개를 `screens/prepared/workspace-intake-essential.spec.ts`에 추가한다. 전용 API·DB에서 실제 ZIP 수신·SSE 추가 수신/재연결·실패 수신 보존·낱장 편집/빈 문서함·최신 스냅샷 착수·중복 확정·검증 중 예약·담당자 전용 권한을 확인한다. quick/full 및 정제 리포터로 이 화면의 구현 시나리오에 수집한다. 저장 전 편집 BDD 3개도 추가하며 Studio 분류·추출·요약의 실연동은 범위 밖이다. 관련 PR머지 316 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 316건) |
| 분류 중 · 미분류/저신뢰 조치일부만 실행E2E 시나리오 13 | 프론트구현백엔드부분AI·외부부분 | 프론트classification-review-center 를 프로토타입 카드(문서 확인·저신뢰 AI 확정·정보 추출)로, 분류값 지정은 뷰어 오른쪽 문서 분류 패널에서 한 장씩(PR #596). 조회 전용 잠금(PR #571)·정보 추출 시작 착수 버튼(PR #578)·저장하지 않은 문서 편집(삭제·순서 변경·저장된 삭제 되돌리기)이 있으면 정보 추출 차단(PR #735·#736·#761). 저장한 편집이 마지막 분류 실행에 반영되지 않았으면 `분류부터 다시 시작 필요` 카드와 함께 정보 추출도 같은 사유로 차단(강제 게이트, PR #763). 보정 이력·버전 조회 API 는 미사용. 문서 분류값 Select 는 대분류(온톨로지 v2.0, 분류체계 응답 `majorCategory`)로 묶고 검색 결과 줄에 대분류 표시 백엔드수동 분류·AI 일괄 확정·보정 이력, 사용자 착수 extraction-start (PR #541). 라벨 → 위탁사 폴더 배정(번호 폴더 묶음·표지 경계 병원 순번·초과 병원은 마지막 폴더)·확정된 낱장 재지정(결정 20261101, PR #1702) AI·외부Studio 분류 실연동 배선(PR #576) — hwss.ai-platform.provider=studio + studio.classification.enabled 면 CLASSIFY 가 LIVE 결과, 기본(provider=none)은 스텁. 응답 형태(additional_values·쪽 범위)는 실서버 실측으로 맞춤 빠진 것
남은 클래스PipelineCorrectionSyncPortImplinvestigation-core (AI 실연동) 있는 클래스ViewerLoadingClassificationResultSkeletonInvestigationWorkspaceSkeletonClassificationIssueDialogClassificationResultControllerDocumentBoxFolderResolverScanPdfFileLookupClassificationResultServiceClassificationResultEntityClassificationCorrectionEntityClassificationStepWorkPortImplInvestigationStartControllerAiClassificationJobServiceLegacyStudioLabelsAiPipelineJobPollerAiPipelineJobLedgerStudioClassificationAdapterStudioDocumentFileAdapterStudioClassificationOutputParserParentMenuLinkHospitalFolderAllocatorFolderPlacementLookupPortImplFolderBundlesFieldSetFieldOptionWorkspaceTransitionLockProviderClassificationReviewActionsViewerStageActions 엔드포인트ClassificationResultController 3/5 · InvestigationStartController 2/2화면이 부르는 수 / 계약에 있는 수 메모PipelineCorrectionSyncPort 는 base 에 선언만 있고 main 구현체가 없음(테스트 대역만) — 수동 보정을 플랫폼에 되돌리는 경로는 아직 없다. PR #541 이 마지막 보정의 자동 추출 착수를 뺐고, 조사자가 눌러 넘기는 정보 추출 시작 버튼은 PR #578 로 붙었다. 분류 검수 필수 E2E 12개를 `screens/prepared/workspace-classification-essential.spec.ts`에 추가한다. 전용 API·DB에서 검수 시작 상태를 준비하고 대상 이동·다중 선택·수동 보정 보존·미저장 선택·통신/조회 실패·추출 완료 후 재지정 허용·추출/분석 중 및 전송 완료 저장 거절·편집 후 추출 차단·취소/중복·권한을 확인한다. workspace-classification/quick/full 및 정제 리포터로 수집하고 다중 선택 수용 시나리오 2개를 추가한다. Studio 분류·추출 실연동은 범위 밖이며, 삭제 저장 후·순서 변경 저장 후 재분류 전 추출 차단도 독립 시나리오로 유지한다. 관련 PR머지 321 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 321건) |
| 다시 분석 4범위 (증분·조건부터·추출부터·분류부터)일부만 실행E2E 시나리오 11(계획 3) | 프론트구현백엔드구현AI·외부부분 | 프론트처리 실패 모달·센터의 `다시 시도`(결정 20261104-processing-failed-retry) — 실패 코드 `AI_IMPORT_SHAPE_UNAVAILABLE`·`AI_NO_EXTRACTABLE_DOCUMENT` 이면 같은 자리에 `분류부터 다시 분석`(상단 그룹과 같은 확인 창, 결정 20261108-studio-import-shape-unavailable·20261111-extract-no-routed-document). 상단 `다시 분석` 그룹(펼친 GNB·접힌 슬림 바) + 범위별 확인 창 3종, 노출·비활성은 범위 조회 응답 그대로(PR #698). `분류부터` 확인 창은 응답 `documentEditsSaved` 로 보정 유지·폐기 문구를 가른다. 문서함 맨 위 저장 뒤 게이트 카드의 `분류부터 다시 시작` 은 이 그룹의 `분류부터` 와 같은 확인 창·같은 호출을 타고, 노출·비활성도 같은 범위 항목을 본다 (PR #763). 실행 뒤에는 재시작 지점부터 뒤의 결과 캐시(분류부터=분류·추출·요약·초안, 추출부터=추출·요약·초안, 조건부터=요약·초안)를 비우고, 스캔 문서함·뷰어는 결과가 없는 단계(분류중·추출중)에서 남은 캐시를 읽지 않는다 — 문서함이 재분석 이전의 병원별 보기·AI 분류값을 계속 보이지 않게(PR #1918). `분류부터` 는 `서류 인입` 으로 되돌리고 AI 를 바로 돌리지 않는다 — 가운데 `AI 분류 시작` 을 다시 눌러야 분류하고, 그동안 문서함은 수신 폴더로 보인다(결정 20261107-reanalysis-from-classification-to-intake) `증분`(결정 20261111) — 버튼은 파란 톤 + 화살표, 요약 전 `추출완료` 는 확인 창 없이 바로 실행하고 요약 이후는 확인 창(이어지는 쪽이면 `분류부터` 안내). 실행 뒤 추출·요약·초안 캐시만 비우고 분류는 다시 받는다. 병원별 보기 구간은 분류 차수(`classificationBatchNo`)가 바뀌는 자리에서 끊는다 백엔드`POST /processing-retry` 실패한 단계부터 새 실행. 처리 실패에서는 범위 조회가 `분류부터` 하나를 내려주고 실행도 받는다(결정 20261108). 범위 조회(`documentEditsSaved` 포함) + 4범위 실행(증분·조건부터·추출부터·분류부터). `증분`(결정 20261111)은 추가 인입뿐일 때(`IncrementalClassificationScope`)만 고를 수 있고, 기준 분류 버전을 남겨 `분류중` 으로 새 실행 — CLASSIFY 가 추가 낱장만 분류 Job 으로 보내 기준 버전과 합치고(보정 원장 이관), EXTRACT 는 분류 Job 들을 `source_job_ids` 합본 하나로 이어받는다. 편집 유무 판정 원천은 둘 — 저장된 낱장 편집(`report_page_edits`) 또는 추출 이후 분류값 변경 (PR #734). 저장된 편집이 마지막 분류 실행에 반영됐는가는 따로 내려간다 — `savedEditsNotReanalyzed`, 두 원천의 시각을 최신 분류 결과 생성 시각과 견주고 분류가 도는 중·돌기 전이면 거짓이다. 단계별 강제·비강제는 화면이 정한다 (PR #762). 판정은 `DocumentEditReflection` 한 곳 — 서버는 강제 구간의 두 착수(정보 추출 시작·분석 요청)만 같은 판정으로 409 REPORT_DOCUMENT_CHANGE_DETECTED AI·외부재실행은 Studio 배선을 그대로 쓴다(새 외부 계약 없음). 기본(provider=none)은 스텁. 증분 합본은 추출 `source_job_ids`, 요약 그룹 `review_selector` 여럿(`SourceJobSelectors`) 있는 클래스InvestigationStatusTransitionReanalysisControllerReanalysisServiceReanalysisScopeResolverDocumentEditReflectionParentMenuLinkWorkspaceTransitionLockProviderIncrementalClassificationScopeSourceJobSelectorsStudioClassificationAdapterStudioExtractionAdapterStudioAnalysisAdapter 엔드포인트ReanalysisController 3/3화면이 부르는 수 / 계약에 있는 수 메모필수 회귀 10개를 reanalysis prepared 회차(dev/prod)에 등록: 보존·폐기·저장 편집·취소·변경 감지·중복·연결 실패·한도·늦은 조회 응답. 실제 API/PostgreSQL, AI 스텁. 증분과 미저장 저장+재분석은 제외. S-012 §4 의 3범위를 백엔드·프론트 모두 열었다(야간 20261002 NR01~NR03). `증분` 은 결정 20261111 로 백엔드·프론트에 열었다(추가 낱장만 분류, 추출은 합본 Job 하나, PR #2113). 미저장 문서 편집의 「저장 + 재분석」 한 번 처리는 남아 있다. 확정 뒤 변경의 `문서 변경 감지` 카드·상단 바 `문서 변경 N건 ·` 은 PR #1296 이 넣었다(`증분` 문구 제외). 낱장 편집은 저장(PR #733)·판정 반영(PR #734)이 들어와 `분류부터` 가 낱장만 편집한 건에서도 보정을 유지한다. 「편집이 있는가」(`documentEditsSaved`)와 「그 편집이 반영됐는가」(`savedEditsNotReanalyzed`, PR #762)는 뜻이 달라 서로를 대신하지 않는다 — `분류부터` 는 편집 행을 지우지 않으므로 실행 뒤에도 앞의 값은 참이다. 그 판정을 읽는 저장 뒤 카드·게이트는 PR #763 이 넣었다 — 분류~추출 완료는 강제(다음 단계 차단), 보고서 이후는 비강제이고, 재분류 예약은 여전히 없다. 관련 PR머지 294 · 마지막 머지 11/11
머지된 PR 은 최근 15건만 보여 줍니다 (전체 294건) |
| 추출 완료 · 추출 검수일부만 실행E2E 시나리오 19 | 프론트구현백엔드구현AI·외부부분 | 프론트extraction-review-center · 값 인라인 수정 연결(PR #543), 조회 전용 잠금(PR #571), 프로토타입 배치(문서함 분류 그룹 박스·뷰어 원문 위치 상자·패널 동기 강조, PR #596), 저장하지 않은 문서 편집(삭제·순서 변경·저장된 삭제 되돌리기)이 있으면 분석 요청 차단(PR #735·#736·#761). 저장한 편집이 마지막 분류 실행에 반영되지 않았으면 `분류부터 다시 시작 필요` 카드와 함께 분석 요청도 같은 사유로 차단(강제 게이트, PR #763). 고친 항목은 이름 곁 `수정` 배지·초록 톤(PR #1557). 피보험자 불일치·병원 확인이 남으면 `확인 필요 항목 먼저 처리`·`위험 무시하고 분석 요청` 두 버튼(PR #2145). 추출값을 고친 문서는 문서함 행에 `수정` 배지·초록 강조(PR #2150). 저신뢰 확인 창은 항목마다 문서명·위치 줄 `N페이지 · 항목명`(PR #2152). 버전 조회 API 는 미사용 백엔드최신 결과·항목 수정·수정 이력, 항목의 원문 위치(비율 사각형, V202609281300) 노출, 항목별 수정 여부(`edited`)·최초 AI 값(`originalValue`) AI·외부Studio 추출 실연동 배선(PR #590·#591) — 분류가 LIVE 면 source_job_id 로 이어 실행, 실서버 실측으로 파서 보정(PR #594). 기본(provider=none)은 스텁 빠진 것
있는 클래스CenteredResultCardSkeletonExtractionFieldListSkeletonLowConfidenceConfirmDialogInsuredMismatchConfirmDialogHospitalMatchDialogHospitalMatchServiceHospitalMatchControllerHospitalCoverRelationInsuredNameMatcherExtractionResultControllerExtractionResultServiceExtractionResultFieldEntityExtractionFieldCorrectionEntityExtractionStepWorkPortImplAiExtractionJobServiceStudioExtractionAdapterStudioExtractionOutputParserParentMenuLinkClassificationSelectClassificationEditWhileAiRunningExceptionWorkspaceTransitionLockProvider 엔드포인트ExtractionResultController 2/3화면이 부르는 수 / 계약에 있는 수 메모저신뢰 추출 위험(LOW_CONFIDENCE_EXTRACTION_DETECTED)은 PR #538 이 추출 완료 시 설정 임계로 산출한다. 실제 추출 스키마(문서종별 항목)는 Studio 지시서에 종속이라 미확정. 필수 E2E 10개 추가(2026-10-30): 동명 항목 분리·최초 값/수정 이력·마스킹·저장/조회 장애·저신뢰 확인·저장 편집 후 분석 차단·동시 단계 변경·권한. workspace-extraction-prepared, quick 3개/full 10개. 제품 변경 없이 실제 로컬 API·DB에서 개발/운영 각 8통과·2실패: 삭제·순서 변경 저장 후 재분류 전 분석 API가 200·요청/실행 추가 1회를 허용. 실패 그대로 유지. 스텁 전용으로 실행을 분리해 Studio 회차에는 등록하지 않는다. 별도 실연동 8개 추가(개발/운영 각 6통과·기존 분석 차단 2실패): 현재 Studio 진단서·진료확인서 계약 확인, 가상 PDF/PNG 자동 생성·접수, LIVE 분류/추출 완료 대기 후 실제 값 검수. 저신뢰 수·마스킹 존재·동일 문서종 페이지별 중복은 별도 조건. Studio 보고서 생성 품질은 제외. 최종 dev d2d7d6420 반영 후 동일 결과 재검증, 항목 정체성 기준 전체 값 비교·회귀 2개 추가. 관련 PR머지 316 · 마지막 머지 11/12
머지된 PR 은 최근 15건만 보여 줍니다 (전체 316건) |
| 분석 조건 입력일부만 실행E2E 시나리오 12 | 프론트구현백엔드구현AI·외부해당 없음 | 프론트analysis-summary-center · 분석 조건 입력을 프로토타입 구성의 모달(과거력 확인·부담보 치료력·고지사항·지식컬렉션 칩)로 재작성(PR #597). 상단 `사전분석조건` 은 저장된 조건을 LNB 없는 팝업 라우트에서 읽기 전용으로 보여 준다(PR #924 — 창 이름을 건마다 고정해 같은 창 재사용, 차단 시 허용 안내). 1번은 관리자 `보고서 유형 설정` 청구유형 목록 중복 선택 + 대표 청구유형(대표 지정 불가 유형만 고르면 `분석 시작` 잠김), 계약 카드에 증권번호(스마트심사 연계 자동 채움), 열람 창은 요청 시점 이름 스냅샷으로 그린다(PR #1180, 결정 20261019-analysis-request-claim-type-policy-no). 계약 카드 약관 칸 아래 `공시실에서 찾기 ↗` 는 워크스페이스 `공시실` 과 같은 훅으로 위탁사 공시실 링크를 새 탭으로 연다(없으면 안내, 야간 NL06 PR #1256). 열람 창 ① 구역은 요청 시점 청구유형 목록 전체를 칩으로 세우고 고른 것·대표·대표 불가 유형을 보인다(목록 없는 옛 건은 고른 것만, 야간 NL07 PR #1300). 분석 조건 모달(`AnalysisConditionModal`)과 입력→계약 변환(`analysis-request.ts`)은 관리자 사고조사 Workflow 실행 테스트도 쓰도록 `components/common` 으로 올렸다 — 청약서 폼 설정·청구유형 조회와 공시실 동작은 센터가 props 로 넘기고 화면 동작은 그대로(2026-10-26 PR #1508, 실행 테스트 이관 선행). 1번 선택지는 관리자가 비활성화한 유형을 빼고, 고른 유형이 비활성화되면 선택에서 빼며 결정 20261028 12항 문구로 안내한다(2026-10-28 야간 RT02). 모달 모양을 토큰·간격으로 정리했다(결정 20261028-analysis-condition-modal-polish — 틀·섹션 카드·색 hex 전부 토큰·계약 정보 칸 폭·각주 안내 상자, 동작·문구 그대로). ③ 지식컬렉션은 문서 단위(파일명 칩·문서보관함 팝업, `AnalysisKnowledgeChips`)이고 요청에 `fileIds` 를 싣는다 — 첫 분석 조건은 그 건 위탁사 참조 기본값(GET …/knowledge-defaults), `조건부터` 는 직전 분석 요청 선택이 칩으로 선다(결정 20261030, PR #1750). ② 청구병원 및 대표 상병은 최신 정보추출 결과의 병원 후보(GET …/claim-hospital-candidates — 명칭 매핑으로 코드가 하나일 때만 병원코드)를 체크해 켜고 병원마다 `확인 진단` 또는 KCD `직접 검색`(GET /api/v1/diseases)으로 대표 상병 하나를 고른다(필수 아님). 열람 창은 저장된 스냅샷을 그린다. 프로토타입에 없는 참고자료·기타 요청 구역은 뺐다(결정 20261106-analysis-request-claim-hospitals) 백엔드청구유형 선택지·청약서 폼 판은 조사건이 인입될 때 고정한 것(GET …/settings/claim-types·/application-form, 결정 20261028-investigation-settings-snapshot-at-intake). 계약·청약서·컬렉션 조건 버전 저장·최신 조회. 청구유형 이름·목록 스냅샷·대표 청구유형 검증·계약별 증권번호(PR #1180). 조사자는 청구유형 목록을 조회만 한다(GET /api/v1/admin/claim-types 에 INVESTIGATION_AGENT). 요청 필드는 claimTypeCodes — 모든 코드를 살아 있는 청구유형 마스터와 대조하고 대표 청구유형은 서버 필수, 옛 노출 제외 설정(hidden-report-form-codes)은 없앴다. 옛 보고서 양식 11종 행은 Flyway 로 청구유형에 옮겼고 통계 청구유형 축(E05)은 대표 청구유형을 읽는다(결정 20261019-legacy-report-form-to-claim-type-migration). 지식컬렉션은 문서 단위로도 고른다 — 요청 fileIds(고른 컬렉션 안 문서만, analysis_request_files)와 그 건 위탁사 참조 기본값 조회 GET …/knowledge-defaults(첫 분석 조건의 기본 선택), 사고조사 챗봇 시작 범위가 그 문서까지 옮겨 받는다(결정 20261030, PR #1657 — 화면은 PR 2) 있는 클래스AnalysisRequestControllerAnalysisRequestServiceAnalysisRequestEntityAnalysisRequestContractEntityAnalysisRequestFormEntityAnalysisRequestCollectionEntityAnalysisKnowledgeChipsuseKnowledgeStartParentMenuLinkAnalysisConditionsButtonAnalysisConditionsViewClaimTypeControlleruseClaimTypeOptionspruneUnavailableClaimTypesInvestigationSettingsControllerInvestigationSettingsServiceuseDisclosureRoomAnalysisConditionModalClaimHospitalInputsdiseaseQueriesClaimHospitalCandidateServiceKcdDiseaseSearchServiceAnalysisRequestClaimHospitalEntityWorkspaceTransitionLockProvider 엔드포인트AnalysisRequestController 2/3 · ClaimTypeController 3/3 · InvestigationSettingsController 2/2 · InvestigationKnowledgeDefaultsController 1/1 · ClaimHospitalCandidateController 1/1 · KcdDiseaseController 1/1화면이 부르는 수 / 계약에 있는 수 메모분석 조건 필수 E2E 10개를 prepared/analysis-conditions-essential.spec.ts에 추가. 회차 DB에 추출 완료 원천 상태를 준비하고 실제 저장·조회·입력·권한·재시도를 검증. analysis-request 화면으로 수집하며 Studio 보고서 생성은 제외. 프론트는 저장(POST)과 최신 조회(GET /latest — 상단 `사전분석조건` 열람 창)를 호출한다. 버전 조회 API는 미사용. 열람 창은 저장된 조건을 되펼치지 않고 접힌 이름·값 그대로 읽는다(계약 항목은 저장 때 한 줄로 접힌다). 조회 전용에서는 요청 폼 전체를 잠근다(PR #571). 청약서 유형·질문은 GET /api/v1/application-forms, 청구유형은 GET /api/v1/admin/claim-types 조회(정적 상수 없음). 고른 청구유형 코드는 claimTypeCodes 로, 대표 청구유형은 늘 함께 보낸다(서버 필수 — 결정 20261019-legacy-report-form-to-claim-type-migration). 분석 조건 연결 1개 추가: 실제 승인 API로 개인 파일을 공용 전환한 뒤 다른 조사자의 참조 선택·저장 범위 대조. 현재 컬렉션 단위 저장 규약이며 Studio 생성은 제외. 실행기 총 11개. 관련 PR머지 286 · 마지막 머지 11/12
머지된 PR 은 최근 15건만 보여 줍니다 (전체 286건) |
| 요약 완료 · 요약 확인·수정·확정일부만 실행E2E 시나리오 11(계획 1) | 프론트부분백엔드부분AI·외부부분 | 프론트최신 요약 조회·조회 전용 잠금(PR #589)에 구역 도킹·항목 선택·인라인 수정·반영 체크·확정/확정 해제와 초안 편집까지 연결(PR #624 — use-summary-actions.ts 가 요약 5개 + 초안 3개 조치를 모두 호출한다). 조사자 판단(HUMAN) 항목은 AI 초안이 온 것과 빈 것을 뱃지로 가르고(「AI 초안」/조사자 작성) 항목이 전부 초안인 카드는 머리 태그도 「AI 초안」 이다(PR #806 — S-014 §5 · 20261007 결정 6항. 판정은 summary-stage.ts 의 isAiDraftItem·isAiDraftCard). 단계 안내 줄과 접힌 슬림 바에 `공시실` 버튼이 선다(PR #925 — 노출 판정은 disclosure-room.ts 한 곳이고 슬림 바는 `보고서 전송 완료` 에서 빠진다). 누르면 위탁사 공시실 링크를 받아(GET …/disclosure-link, PR #1205) 새 탭으로 열고, 링크가 없거나 노출이 꺼졌으면 「공시실 링크가 연결되어 있지 않습니다.」 안내만 보인다(PR #1207 — 결정 20261017 4항, 조회·열기는 use-disclosure-room.ts 한 곳). 상단을 접으면 단계 버튼(`AI 보고서 생성 완료`·`초기화`·`보고서 항목 선택 완료`·`AI 보고서 다시 보기`)이 슬림 바로 옮겨 선다(결정 20261019, slim-bar-stage-actions.tsx). 탭형(행 추가 탭) 구역도 검수 단계에서 칸마다 인라인 수정하고 탭별 byte 제한이면 행마다 센다(PR #1179 — summary-section-panel.tsx 의 RowTabsTable, 같은 항목 수정 API). 마지막 `요약` 탭은 요약 그룹 구획(GET …/summary-groups/latest, 진행 중이면 10초마다 다시 받음 — PR #1271, summary-groups-panel.tsx). 요약 결과를 그리는 컴포넌트(도킹 `SummarySectionDock`·구역 `SummarySectionPanel`·근거 `SummarySourceMenu`·`요약` 탭 `SummaryGroupsPanel`)와 순수 규칙(summary-groups·summary-sources·summary-card-order·summary-stage 의 구역·byte 규칙)은 관리자 사고조사 Workflow 실행 테스트도 쓰도록 `components/common/summary/` 로 올렸다 — 낱장 이미지는 접수번호 대신 `SummaryPageImageContext`(쿼리 키·로더)로 받고 route 는 상태 매핑만 남긴다(2026-10-26 PR #1509, 실행 테스트 이관 선행 B) 우측 사고조사 챗봇 독(AI 보고서 확인 단계부터 — 패널 열기 GET …/chat·질문 POST …/chat/messages, 근거 4줄 이름표, 사건 서류 근거는 원본 뷰어로·지식컬렉션 근거는 근거 쪽 뷰어로, 막힌 이유는 서버 판정 그대로 입력창 안내, 접힘 레일·폭 조절)을 붙였다(investigation-chat-dock.tsx, 결정 20261021·20261023). 범용 채팅과 함께 쓰는 답변 마크다운·근거 뷰어는 components/user/chat/, 줄 규칙은 lib/chat/messages.ts 로 올렸다. 독 첨부(파일 고르기·끌어 놓기 → 사전 검사 POST …/chat/attachments/inspect → 전송 때 POST …/chat/attachments 로 준비해 attachmentIds 를 질문에 싣는다, 참조 중인 첨부 줄·누적 안내·질문 아래 보낸 첨부)는 범용 에이전트와 같은 부품으로, 첨부 부품을 components/user/chat/ 로 올려 함께 쓴다(결정 20261021 6항·20261026). 독 답변 근거 아래 `🔄 AI 보고서 반영`(서버 `reflectable`)·확인 창·반영 API·요약 새 판 다시 받기(결정 20261021 7·10항, PR #1633). 반영 중 센터 덮개·바뀐 줄 하이라이트 바(`변경`·`추가`·`표시 끄기`)·`변경 전 보기` 창(`/user/investigations/report-before-change` — 반영 직전 판을 조회, 결정 20261008·20261020, PR #1636). 카드의 「자식 제목 · 라벨」 줄은 프로토타입 자식 카드처럼 묶음 제목(`구간 1 › 항목 1`) 아래 잎 라벨로 나눠 그리고 빈 줄은 「내용 없음」(summary-item-path.ts, 결정 20261020 5항) 백엔드항목 수정·반영 체크·확정·롤백, 편집은 요약 확정 이후로 게이트·AI 원문 보존 (PR #539). Studio 출력 골격은 조사자 판단(HUMAN) 항목도 실어 AI 초안을 받는다(PR #803 — 20261007 결정 6항 · S-014 §9 1항. 담당자 서술 섹션은 종전대로 제외). 적재도 그 초안을 그대로 둔다 — author 는 HUMAN, 기본 미반영(report_reflected=false), pendingHumanItemCount 는 빈 항목만 센다(PR #804 — S-014 §5). 같은 조사자 판단 항목이 탭 여럿에 반복돼 오면 마지막 탭 값 하나만 둔다(PR #805 — S-014 §9 1항. 두 적재 경로가 SummaryHumanDraftDedup 한 곳을 쓴다. 자리 판정은 카드의 기관까지 본다 — PR #807). 골격에 없는 카드 항목 가운데 다른 구역에 정의된 항목 키와 담당자 서술 구역에 온 것은 붙이지 않는다(PR #807 — 자리를 잘못 찾은 항목이다). 파이프라인 v2(PR #1271, 결정 20261021-investigation-pipeline-v2-composition): 「AI 보고서 생성」 = GENERATE_REPORT_TABS(LLM 탭1→2→3 → 요약 결과 탭 원형), 그룹 요약은 추출 제출 때 시작하는 곁가지(summary_group_batches·summary_group_runs, 성공 그룹 재사용)이고 `요약` 탭 구획은 GET …/summary-groups/latest. 탭 원형은 프로토타입 골격 타입 기반 표시와 같은 카드로 앉는다 — 최상위 키·객체 배열 원소 「키 n」 카드, 안쪽 묶음은 「자식 제목 · 라벨」 줄, 병원명·제목·빈 문자열까지 모든 문자열이 항목이라 스마트심사 전달 JSON BODY 탭은 문자열이 모두 {text, checked}(SummaryOutputProjector, 결정 20261020 5항) AI·외부Studio 요약(instruct) 실연동 배선(PR #599) — 추출이 LIVE 면 source_job_id 로 이어 실행, 분석 조건은 input_text 지시문. 기본(provider=none)은 스텁. 요약 그룹마다 1회(PR #1271): 분류 Job 검수 구조의 document_id 를 그룹별로 모아 review_selector + 그룹 프롬프트 input_text — AI_PLATFORM_STUDIO_PIPELINE_VERSION=2 하나로 켠다(보고서 LLM 어댑터도 함께) 빠진 것
있는 클래스ViewerLoadingSummaryStageSkeletonSummarySourceMenuuseExtractionPageRegionsSourceHighlightLayerKnowledgeSourceButtonSummarySectionDockSummarySectionPanelSummaryResultControllerInvestigationChatServiceInvestigationTurnInvestigationTurnPromptInvestigationChatContextPortImplChatPromptLookupPortImplSummaryResultServiceSummarySectionDraftBytesSummaryCardEntitySummaryItemEntitySummaryItemSourceEntityAnalysisStepWorkPortImplAiAnalysisJobServiceAnalysisSourceContextStudioAnalysisAdapterStudioAnalysisOutputParserSummaryHumanDraftDedupAnalysisInstructionBuilderParentMenuLinkDisclosureRoomButtonInvestigationDisclosureLinkServiceDisclosureLinkLookupPortImplReportSummaryGroupControllerReportSummaryGroupQueryServiceAiSummaryGroupJobServiceReportTabsStepWorkPortImplAiReportTabsJobServiceSummaryGroupBatchEntitySummaryGroupsPanelInvestigationChatDockChatAttachmentSourceViewerChatAttachmentListChatActiveAttachmentsChatSentAttachmentsuseAttachmentPickerSummaryGroupPlannerSummaryGroupRunEntityStudioGroupSummaryAdapterReportReferenceLineInvestigationSourceBlockInvestigationChatContextPortImplReportTabJsonReportReflectionServiceReportReflectionEntitySummaryItemEvidenceReportEvidenceSourcesuseAutoGrowTextareauseReflectionDraftWorkspaceTransitionLockProvider 엔드포인트SummaryResultController 2/7 · InvestigationDisclosureLinkController 1/1 · ReportSummaryGroupController 1/1 · InvestigationChatController 2/9화면이 부르는 수 / 계약에 있는 수 메모필수 E2E 10개를 summary prepared dev/prod에 등록: 조회 복구·HUMAN·문서 편집 게이트·항목 격리·실패/재시도·단위별 byte·초기화 취소·버전 격리·근거 원문. 실제 API/PostgreSQL, AI 스텁. ResultQueryGate 오류 재시도와 API ITEM byte 카운터 누락을 보완했다. 수정·확정·반영 체크 5개 API 는 화면에 연결돼 있다(PR #624 — analysis-summary-center.tsx 가 useSummaryActions 로 호출). 확정 초기화가 AI 원문 복원·체크 해제·초안 폐기까지 한다(PR #539). 프로토타입 SH202511040520 건은 신한 3탭 출력 골격의 타입만 따라 반복 블록·필드·목록을 표시하며 키 의미로 제목을 승격하지 않는다(20261016 결정). 요약 실서버 실측은 아직(추출까지만 실측). 관련 PR머지 342 · 마지막 머지 11/11
머지된 PR 은 최근 15건만 보여 줍니다 (전체 342건) |
| 보고서 초안 생성·편집일부만 실행E2E 시나리오 11 | 프론트부분백엔드구현AI·외부해당 없음 | 프론트요약·해석 센터 안의 구역별 초안 편집기(report-draft-editor) — 표가 비어 있던 자리를 실측값으로 채웠다. 보고서 검수의 반영 체크는 AI 초안이 온 조사자 판단 항목도 기본 미반영으로 받는다(PR #806). 초안 단계 안내 줄에 `AI 보고서 다시 보기` 뒤로 `공시실` 이 선다(PR #925 · 누르면 위탁사 공시실 링크를 연다 — PR #1207). `AI 보고서 다시 보기` 도 요약 화면처럼 마지막에 `요약` 탭(요약 그룹 구획)을 붙인다(PR #2124) 백엔드확정 요약 → 초안 생성·수정·버전 빠진 것
있는 클래스SummaryDockSkeletonReportSnapshotViewPopupWindowHeaderReportDraftNotDiscardableExceptionReportDraftNotEditableExceptionReportDraftControllerReportDraftServiceInstructTabByteLimitsReportDraftAiServiceReportDraftAiTabEntityStudioReportAdapterReportDraftLlmServiceReportDraftLlmTabEntityStudioReportLlmAdapterReportPromptTemplatesReportOutputSchemaReportDraftEntityReportTaskSequencerParentMenuLinkDisclosureRoomButtonInvestigationDisclosureLinkControllerReportGeneratingCenterWorkspaceTransitionLockProvider 엔드포인트ReportDraftController 1/8화면이 부르는 수 / 계약에 있는 수 메모초안 생성·편집 필수 E2E 10개 — 구역 조립·참조 제외·저장 유지·구역별 보존·요약 독립·byte 경고·저장/생성 실패 복구·권한·버전 이력. e2e/report-draft/run.py의 전용 API·DB 회차에서 실행하며 Studio 보고서 생성·전송은 제외. 관련 PR머지 293 · 마지막 머지 11/11
머지된 PR 은 최근 15건만 보여 줍니다 (전체 293건) |
| 보고서 전송 (메일·스마트심사)거의 안 지나감E2E 시나리오 15(계획 1) | 프론트구현백엔드구현AI·외부구현 | 프론트`보고서 항목 선택 완료`(초안 편집) 단계 버튼에 `메일 전송`(확인 창 → 담당 조사자 메일, 성공하면 `보고서 전송 완료`로 넘어가 읽기 전용) 또는 `스마트심사 전송`(확인 창 → 스마트심사 수신 API, 성공하면 `보고서 전송 완료`, 결정 20261103) 중 위탁사 전송 방식 하나만(아직 고르지 않은 위탁사는 버튼 없이 「전송 방식이 설정되지 않았습니다」, 결정 20260902 7항·PR #1272). 저장 전 문서 편집이 있으면 전송 버튼이 잠기고, 접힌 슬림 바에도 선다(결정 20261019-report-mail-send-completes-transfer, WBS 4.2.10.1·4.2.10.3) 백엔드메일 발송·이력. 발송 성공 = 전송 완료 — `POST …/report-mails` 가 발송 전 전송 게이트(분석완료·초안 준비 완료·추가 서류 감지 없음, 걸리면 409·미발송·미기록)를 보고 성공 뒤 같은 요청에서 `FinalTransferCompletionService` 로 `보고서 전송 완료` 전이(결정 20261019-report-mail-send-completes-transfer). 받는 사람은 담당 조사자(조직 메일). 위탁사 전송 방식이 메일이 아니면 409(`InvestigationDeliveryChannelService`, PR #1272). 스마트심사 전송 `POST …/smart-review-transfers` — 같은 게이트, 성공 = 전송 완료, 시도마다 `smart_review_transfers` 기록, 실패 회차는 같은 번호로 재전송(결정 20261103) AI·외부SMTP 발송 동작, 스마트심사 보고서 수신 API 호출(실제 적재는 수신측 준비 확인 후 검증) 있는 클래스SmartReviewTransferControllerSmartReviewTransferServiceSmartReviewTransferPayloadComposerSmartReviewTransferEntitySmartReviewReportTransferAdapterSmartReviewConfirmDialoguseSmartReviewTransferReportMailControllerReportMailServiceReportMailDispatchEntitySmtpMailDeliveryAdapterParentMenuLinkFinalTransferCompletionServiceReportMailConfirmDialoguseReportMailSendmailSendBlockedReasonInvestigationDeliveryChannelServiceWorkspaceTransitionLockProvider 엔드포인트SmartReviewTransferController 1/1 · ReportMailController 1/2 · InvestigationDeliveryChannelController 1/1화면이 부르는 수 / 계약에 있는 수 메모보고서 전송 필수 E2E 14개를 report-send prepared dev/prod에 등록(기존 10개+중첩 탭 전달·최신판 재전송·SMTP 실패 복구·보고서 간 분리 4개, dev/prod 각 14개 통과): 확인 창 이후 변경·중복 클릭·실제 수신 본문/주소·전달 JSON·실패/응답 유실·전송 후 완료 처리 실패. 실제 API·전용 DB·시험 SMTP/스마트심사 수신기, Studio·실업무 적재 제외. 전송 후 채널 갱신과 401 응답 본문 유실을 보완했다. 스마트심사 전송(WBS 4.2.10.2)은 report-receiver API v1.0 연동(결정 20261103). 수신 구현은 명세서 표 기준 한화생명·신한라이프만이다(실호출 미확인). 스마트심사 실제 적재는 미검증이며, 개발 서버 인증·필수값 거절(4002)까지 2026-11-04 확인했다(결정 20261103). 수신자 구성(20260902 4항)은 미정 — 메일은 담당 조사자에게 간다. 위탁사별 전송 방식은 위탁사 워크스페이스 3단계가 정한다(PR #1272). 관련 PR머지 278 · 마지막 머지 11/11
머지된 PR 은 최근 15건만 보여 줍니다 (전체 278건) |
User 콘솔
지식 컬렉션
화면 2개
| 지식 컬렉션 목록·등록오늘 · #2168거의 안 지나감E2E 시나리오 23 | 프론트구현백엔드구현AI·외부부분 | 프론트폴더 브라우저(공용 `KnowledgeFolderBrowser`) — 폴더 케밥 `이름 변경 / 설명 변경 / 삭제`·브라우저 안 상세의 컬렉션 케밥 없음·내 컬렉션 파일 케밥 3항목 고정(2026-10-13 결정, PR #902). 컬렉션 「코멘트」 문구는 「설명」으로 — 첫 파일 업로드 입력 라벨·`설명 변경` 모달 제목·라벨·완료 문구·안내(파일을 추가하면 이 설명을 바탕으로 다시 작성), API 필드는 그대로(결정 20261016-collection-description-generate-api, 2026-10-16). 검색 결과 표 공용 `CollectionSearchResults`(10/30/50/100): 폴더·파일명 통합 검색, 기본 접힘·일치 파일 펼침·행 클릭으로 폴더 이동(PR #938), 상태는 승인 상태 우선 + 처리 상태. 새 컬렉션은 생성 응답 뒤 모달을 닫고 파일 전송을 화면 전역 업로드 관리자로 넘겨 목록에서 진행·실패 사유를 표시(PR #956). 폴더 브라우저는 프로토타입 레이아웃(한 카드 좌우 분할·회색 트리 면)이고 트리는 기본 접힘 — 폴더를 고르면 그 폴더와 조상이 열리고 펼치기 단추는 열고 닫기만(선택된 폴더도 접힘, 결정 20261014-knowledge-collection-tree-and-row-lock, PR #967). 하위 폴더 표는 `DataTable` `simple` 형태(열 폭 조절 없음, 결정 20261014-frontend-layout-spec, PR #978). 사용자 URL 직접 접근은 소유 메뉴 권한으로 차단. 목록 필터를 공통 FilterBar(라벨 없는 한 줄·`초기화`)로 묶고 select 즉시·검색어 400ms 디바운스·시작일 있을 때 날짜 즉시 조회(PR #973, 결정 20261014-list-filter-auto-apply). 파일 추가 대화상자는 엑셀·PPT 를 고르는 순간 걸러 안내하고 받는 형식을 안내 문구·accept 에 싣는다(결정 20261013 §1-4, 2026-10-16). 파일이 적재된 폴더(= 컬렉션)에는 하위 폴더·컬렉션 개수를 적지 않고(요약 줄은 단계 이름 없이 하위 폴더·컬렉션 수만(컬렉션 폴더는 없음)·하위 폴더 표 `-`·삭제 문구는 파일 수만), 컬렉션 폴더 머리 버튼은 관리자 화면과 같은 `파일 추가`(파일 수 표기 없음)(결정 20261016-knowledge-collection-detail-unify). `조회`·Enter 는 같은 조건이어도 1쪽으로 가 목록을 다시 받는다(받는 동안 표 유지·`조회` 잠금, 결정 20261019-list-filter-apply-always-refetch, PR #1159). 적용된 검색 조건·검색 결과 쪽 번호·쪽 크기는 URL search param(`q`·`status`·`searchSpace`·`searchFolder`·`page`·`size`, 폴더 자리 `space`·`folder` 와 별개)이라 새로고침·링크·뒤로가기에서 그대로 살아나고, 결과 행 클릭은 검색 조건을 지우고 그 폴더를 여는 한 번의 이동이다(결정 20261019-list-filter-url-state, PR #1177). 빈 개인 폴더의 `파일 추가`는 안내 상자에만(머리 버튼 없음, 결정 20261109-knowledge-collection-empty-folder-buttons), 파일 추가 창 `관리자 안내` 머리 오른쪽에 `CollectionGuide.updatedAt` 갱신 시각(갱신자 이름은 API 에 없어 생략, 야간 KC01 PR #1692).. 파일 추가 대화상자 `관리자 안내` 머리에 `갱신자 · 시각`(이름 → 없으면 사번, 갱신자 기록 전 저장분은 시각만, 프로토타입 collection-guide-box, PR #1696) 백엔드폴더 체계(말단 폴더 = 컬렉션, 2026-10-07) — 폴더 트리·생성·이름 변경·삭제, 컬렉션 생성은 폴더로, 파일 등록·파일명 수정(개인), 파일 단위 공용 전환 요청·재요청·제거(2026-10-08). 파일 태그 대신 폴더 경로가 메타 정보. 적재 PDF 통일(2026-10-13) — 등록은 원본 저장+PENDING, 매일 22:00 배치가 PDF 변환·1,000쪽 겹침 분할(조각 원장) 뒤 색인, 개인 업로드 쪽 수 상한 422, 다운로드는 로컬 원본(discard 면 조각 병합) 목록 화면 개선(2026-10-19, 결정 20261019): 검색·`폴더 구조 검색`을 카드 하나로, 하위 폴더 표 정렬·고정 열 폭, 파일 표 열 폭·`보기`/`관리` 고정·가운데 정렬·폴더 구조 칩·쪽 이동 상시. 비동기 즉시 모드는 서버별 작업자가 공용 DB 대기 파일을 한 건씩 선점해 분산 처리하고, 복구 뒤 재기동 없이 이어받는다(결정 20261024-collection-immediate-db-workers). 공용 설명 생성은 작업 UUID·변경 번호로 중복 실행과 생성 중 파일 변경·사용자 편집을 보호하고 Studio 반영 실패를 재시도한다(결정 20261024-collection-description-generation-claim). 최초 Store 는 사용자·기준 폴더별 PostgreSQL 트랜잭션 잠금 뒤 최신 매핑을 읽어 생성·재사용한다(결정 20261024-collection-vector-store-creation-lock).. 등록 안내 `GET·PUT /api/v1/collection-guide` 응답에 갱신자 `updatedByEmployeeNo`·`updatedByName`(저장 시 사번을 `collection_guides.updated_by_employee_no` 에 기록, 이름은 조직 디렉터리, PR #1696) AI·외부Studio 벡터 스토어 실연동(PR #601) — 컬렉션 = standalone vector store, 업로드 → 색인 상태 폴러 → 검색·삭제, 실서버 E2E 통과. 스토어는 개인 컬렉션 생성·공용 컬렉션 승인 시점에 만들고 실패하면 생성·승인도 실패(2026-10-06). 공용 컬렉션은 2depth 기준 폴더당 Store 1개(2026-10-13). 개인 컬렉션은 사용자당 Store 1개를 함께 쓰고 collectionId 필터로 가른다(2026-10-12). 기본 provider=none 은 in-memory 빠진 것
있는 클래스CollectionUploadProgressBarCollectionUploadRejectionNoticescreenCollectionUploadFilesCollectionFilePreviewServiceCollectionFilePreviewMakerCollectionControllerCollectionServiceCollectionFileRegistrarCollectionSearchServiceCollectionApprovalControllerStudioVectorStoreAdapterCollectionIndexingPollerCollectionVectorGatewayCollectionFolderControllerCollectionFolderServiceCollectionFolderEntitySharedPlacementEvaluatorCollectionOwnerVectorStoreEntityCollectionFolderVectorStoreEntityCollectionFilePreparerCollectionFilePartEntityCollectionIndexingBatchServiceCollectionBatchWindowLocalDocumentConverterDocMateDocumentConverterCollectionSearchResultsmatchCollectionSearchRowsuseCollectionFileNameSearchCollectionUploadProviderS3OriginalStoreCollectionStoreDescriptionServiceCollectionStoreDescriptionEntityCollectionAdditionVisibilityCollectionDescriptionCollectionFileBulkActionsCollectionFileBatchResultuseCollectionFileBatchesCollectionVectorStoreCreationLockCollectionDocumentCleanupServiceCollectionDocumentCleanupSchedulerVectorDocumentCleanupPort 엔드포인트CollectionController 3/18 · CollectionApprovalController 5/11 · CollectionFolderController 3/6 · CollectionGuideController 2/2화면이 부르는 수 / 계약에 있는 수 판정 제외
메모백엔드 통합 검색 API 전까지 프론트가 검색 범위의 컬렉션 상세를 병렬 조회해 파일명을 찾는 임시 구현(PR #938). 검색 API가 생기면 `useCollectionFileNameSearch`를 교체한다. 벡터 스토어 단위(2 depth 폴더·개인 스토어 사용자당 1개)는 10/7·10/8 회의 노트의 결정 승격 전이라 컬렉션 1개 = 스토어 1개. 파일 표 일괄 삭제·재색인은 `POST /collections/{id}/files/delete`·`/reindex`(부분 성공, 한 요청 최대 100개 — 화면은 100개씩 나눠 보낸다, 결정 20261021-knowledge-collection-bulk-file-actions). 공용 전환 색인(PR #1531): 완료·실패 시 작업자 선점을 해제하고, 배포 전 완료 행이 재연결로 INDEXING 이 될 때도 옛 선점을 비운다. 실제 작업 중·미완료 조각의 선점 보호는 유지한다. 추가 E2E: `e2e/realdata/screens/knowledge-validation.spec.ts` 12개(전체 회귀) — 파일명·확장자 검증, 삭제·취소·선택·트리, 전환 재요청·대상 검증, 미승인 파일 공개 범위. `actions/knowledge-fixture.ts`가 실제 API로 테스트별 자료를 준비·정리한다. 전체 선택은 완료·전환 승인 대기 상태를 검증한다. 관련 PR머지 118 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 118건) |
| 지식컬렉션 뷰어오늘 · #2168거의 안 지나감E2E 시나리오 13 | 프론트구현백엔드구현AI·외부부분 | 프론트상세는 목록의 말단 폴더 안(embedded)에만 그린다 — 단독 상세 주소 `/user/collections/[id]` 는 진입 경로가 없어 없앴다(PR #2168). 폴더 브라우저 안에서는 컬렉션 케밥이 없고 단독 모드에서만 `설명 수정 / 삭제`(2026-10-13 결정, PR #902 — 「코멘트」 문구는 2026-10-16 「설명」으로). 처리 중 파일이 있으면 15초마다 자동 갱신. 모달을 닫은 뒤 전송 중·전송 실패 파일을 임시 행으로 유지하고 파일별 실패 사유·제거를 제공하며, 서버의 처리 실패 파일도 삭제 가능(PR #956). 공용 전환 체크박스 열은 내 컬렉션에서 늘 보이고 `완료`가 아닌 행(처리 대기·처리중·실패·업로드 중)만 잠근다 — 처리 중 파일이 있어도 컬렉션 전체를 막지 않는다(PR #967). 사용자 URL 직접 접근은 소유 메뉴 권한으로 차단. 상위 메뉴 링크는 공통 ParentMenuLink. 파일 표 `보기` 열의 `문서 보기` — 처리 완료 파일만 공통 문서 뷰어(`DocumentViewerDialog`)로 미리보기 PDF(앞 5쪽, `GET …/files/{fileId}/preview`)를 열고, 그 밖(처리 중·추가 승인 대기·반려)은 프로토타입 안내를 띄운다(2026-10-14, WBS 6.2.5). 공통 PDF 뷰어는 text layer 선택·복사, 너비/페이지 맞춤, 50~200% 확대·축소, 90도 좌우 회전과 9:11 세로형 모달을 제공한다(WBS 1.4.4). 상세는 관리자와 같은 공통 틀 `CollectionDetailPanel`(아이콘 카드 머리·배너 자리·파일 표·아래 안내, 머리 정보는 파일 수·총 용량·생성자만, 생성자는 `ownerName` 이름·없으면 사번 — PR #1356)로 그리고, 구분 뱃지·공용 전환 패널(파일 표 위)은 사용자에게만 남긴다. 공용 전환 반려 사유 창에는 `다시 승인요청`(PR #1356). 끌어다 놓기 영역은 없고 관리자 안내가 보이는 `파일 추가` 창으로만 넣는다 — 폴더 브라우저 안에서는 폴더 머리 `파일 추가`(파일 수 표기 없음)(결정 20261016-knowledge-collection-detail-unify, WBS 10.1.1·6.1.2). 백엔드파일 목록·상태·삭제·다운로드(플랫폼 원본 스트리밍, 2026-10-06)·파일명 수정(개인 컬렉션). 태그 수정은 폴더 체계로 없어졌다 비동기 즉시 모드는 서버별 작업자가 공용 DB 대기 파일을 한 건씩 선점해 분산 처리하고, 복구 뒤 재기동 없이 이어받는다(결정 20261024-collection-immediate-db-workers). 공용 설명 생성은 작업 UUID·변경 번호로 중복 실행과 생성 중 파일 변경·사용자 편집을 보호하고 Studio 반영 실패를 재시도한다(결정 20261024-collection-description-generation-claim). 최초 Store 는 사용자·기준 폴더별 PostgreSQL 트랜잭션 잠금 뒤 최신 매핑을 읽어 생성·재사용한다(결정 20261024-collection-vector-store-creation-lock). AI·외부색인 상태 매핑·폴러(30분 넘으면 FAILED, PR #601) 빠진 것
있는 클래스ViewerLoadinguseCollectionStatusRefreshFileRenameDialogsplitFileNameForRenameCollectionFileExtensionChangedExceptionCollectionFileNameEmptyExceptionCollectionUploadRejectionNoticescreenCollectionUploadFilesCollectionControllerStudioIndexingStatusMapperCollectionIndexingStatusServiceCollectionFileViewerDocumentViewerDialogCollectionDetailPanelAdditionRequestBannersfileStageTitleOffileStatusTitleOfadditionRequestedNoteOfCollectionVectorStoreCreationLockCollectionDocumentCleanupServiceCollectionDocumentCleanupSchedulerVectorDocumentCleanupPortStudioVectorStoreAdapterCollectionIndexingPoller 엔드포인트CollectionController 3/18화면이 부르는 수 / 계약에 있는 수 판정 제외
메모2026-11-03 dev dbcf5507d 재검증: TXT를 포함한 실제 업로드 6개 전체의 색인 완료를 기다리도록 준비 보완. 상세 전체 비교 단언 유지, 실제 Studio 개발/운영 각 10통과·Studio 교환 개발25/운영25·Store1/파일6 정리 오류0. 뷰어 필수 E2E 10개를 prepared/collection-viewer-essential.spec.ts에 추가. 실제 PDF 등록·미리보기·전체 다운로드와 회차 DB 예외 상태로 상세 진입·권한·상태·쪽수 경계·이동·배율·복사·오류·재열기를 검증. 기존 3개 유지·같은 collection-viewer 화면에 수집. 실행 환경의 Studio 설정과 실제 업로드 성공 기록을 필수로 검사하며 스텁 자동 전환은 없다. 설정/실패 처리 회귀 15개 통과. 최신 Studio 실연동은 앞의 2026-11-03 기록 기준. 분할 병합은 별도 범위. 관련 PR머지 78 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 78건) |
Admin 콘솔
대시보드
화면 1개
| 통계 대시보드3일 전 · #2094일부만 실행E2E 시나리오 297(계획 2) | 프론트구현백엔드구현AI·외부해당 없음 | 프론트`/admin`은 첫 허용 관리자 메뉴로 이동하는 콘솔 진입점이고, 통계 대시보드는 `/admin/dashboard`에서 `DASHBOARD` 권한을 별도로 검사한다(PR #655). 시스템 통계·업무 통계 두 탭을 기간·위탁사·부서 필터와 함께 그린다. 업무 통계 탭은 질병코드·병원·청구유형·증권번호·조직별 카드를 값으로 그리고, 시스템 통계 탭은 조회 API 로 값을 그린다. 문서별·필드별 추출 완료율 카드는 추출 완료율 조회로 상위 8·11 줄을 그리고 `더보기` 모달에서 축 키 전체를 검색한다(PR #869). 건당 처리시간 분포·문서 인입량 대비 처리시간 달성률·시간 목표률은 처리시간 통계 조회로, AI 분석 이용자·보고서 생성 건수(팀·단 > 센터 > 개인 `더보기`)는 이용 현황 조회로 그린다(PR #1168). 미매핑 큐 화면 + 생애주기 통계 화면(기간·위탁사·부서 필터, 합계 카드·일별 표, PR #603). 공통 LNB 사용자 카드는 세션의 이름·이메일 표시(PR #771). 관리자 URL 직접 접근은 소유 메뉴 권한으로 차단. 목록 필터를 공통 FilterBar(라벨 없는 한 줄·`초기화`)로 묶고 select 즉시·검색어 400ms 디바운스·시작일 있을 때 날짜 즉시 조회(PR #973, 결정 20261014-list-filter-auto-apply). 업무 데이터 카드 `더보기` 는 프로토타입처럼 차트/데이터 전환·검색·열 값 필터·헤더 정렬·페이지당 개수 모달(ChartDetailModal)로 상한 100건을 다시 읽는다 `조회`·Enter 는 같은 조건이어도 1쪽으로 가 목록을 다시 받는다(받는 동안 표 유지·`조회` 잠금, 결정 20261019-list-filter-apply-always-refetch, PR #1159). 종합현황 `분석 완료 건수` 보조설명 `완료율 X%`, 위탁사 카드 펼침의 `요청 N · 완료 N`(생애주기 조회에 위탁사 조건, PR #1360). 재분석 발생률 카드의 `검토율` 칸은 생애주기 조회의 `reviewedCount`·`reviewRate`(분류 정정·추출 수정·요약 수정 중 하나라도 있는 보고서 ÷ 요청, 결정 20261027-statistics-review-rate, PR #1552). 위탁사 카드는 청구유형 칩·누적 조각·청구유형별 진단명(`client-claim-types`·`claim-type-diseases`), 조직 카드는 팀·단 › 센터 트리(조직 행 `unitName`·`centerName`) — 결정 20261027-business-stats-client-claim-type, PR #1554. 검토율에 새 판을 만든 챗봇 보고서 반영 포함(결정 20261103-chat-reflection-review-audit, PR #1783). 탭 머리 항목 수(21·8), 추출 완료율 `더보기` 차트/데이터 전환, 위탁사 막대 조각 클릭 선택, 오류/장애 오류·장애 누적 막대(PR #1760). 문서 자동 분류율 막대는 자동·저신뢰 확정·수동 3구간(`lowConfidenceConfirmedPageCount`, 결정 20261103-classification-rate-breakdown, PR #1779). `더보기` 모달 아래 `닫기` 버튼·`더보기` 의 `aria-expanded` 펼침 상태(프로토타입 data-detail-modal, PR #2068). 오류/장애 `더보기` 차트 보기는 카드와 같은 서비스별 오류·장애 누적 막대(조건으로 걸러지면 남은 줄로 다시 셈) 아래 `일자별 발생 건수` 막대(PR #2072). 백엔드시스템·업무 통계·추출 완료율(문서종·항목 축)·처리시간(분포·매수 구간 달성률·시간 목표률)·이용 현황(이용자·보고서 생성)·미매핑 큐·재적재(업무·생애주기 — 생애주기는 지점별 실패 기록 `stat_lifecycle_load_failures` 의 재적재, 결정 20261027), 동시 요청 제한 설정 없음 · 챗봇 질의 건수·응답 속도(chat-core 롤업 2종)·오류/장애(실패 기록 원천 직접 집계)·서비스 상태(Prometheus 조회 시점 읽기) 있는 클래스ExtractionFieldMeasureReanalysisRestartedEventLifecycleStatisticsControllerExtractionQualityStatisticsControllerBusinessStatisticsControllerStatUnmappedQueueControllerStatisticsBackfillControllerLifecycleBackfillControllerAnalysisConcurrencyLimitControllerReportLifecycleFactLoaderStatDailyRollupServiceStatDailyExtractionQualityRollupServiceExtractionQualityStatisticsQueryServiceAnalysisConcurrencyLimitServiceChatStatisticsControllerChatStatisticsRollupServiceChatStatisticsQueryServiceErrorIncidentStatisticsControllerErrorIncidentQueryServiceChatQueriesCardChatResponseTimeCardErrorIncidentsCardServiceStatusCardServiceStatusQueryServiceHttpPrometheusQueryClientServiceStatusStatisticsControllerConcurrentUsageLimitControlChartDetailModalSegmentedControlProcessingTimeStatisticsControllerUsageStatisticsControllerStatDailyProcessingTimeRollupServiceStatDailyInvestigatorUsageRollupServiceProcessingTimeStatisticsQueryServiceUsageStatisticsQueryServiceProcessingTimeDistributionCardVolumeTargetAchievementCardTimeTargetRateKpiAnalysisUsersCardReportCountCard 엔드포인트LifecycleStatisticsController 1/1 · ExtractionQualityStatisticsController 1/1 · BusinessStatisticsController 1/1 · StatUnmappedQueueController 3/3 · StatisticsBackfillController 0/1 · LifecycleBackfillController 0/1 · AnalysisConcurrencyLimitController 2/2 · ProcessingTimeStatisticsController 1/1 · UsageStatisticsController 1/1 · ChatStatisticsController 1/1 · ErrorIncidentStatisticsController 1/1 · ServiceStatusStatisticsController 1/1화면이 부르는 수 / 계약에 있는 수 메모통계 필수 E2E 290개(S01~S21·B01~B08 각 10개)를 prepared/statistics-*.spec.ts로 등록. 전용 실행기 e2e/statistics/run.py: 실제 API·회차 DB·브라우저, 시험 원천의 실제 집계 서비스 호출과 일별 롤업 직접 준비 검증을 구분. 외부 조직·Prometheus는 시험 대역, Studio 전체 처리 제외. 업무 통계는 API 와 화면이 이어졌다(PR #655). 시스템 통계 탭에 자리 카드는 없다 — 서비스 상태는 Prometheus 조회로 이어졌다(2026-10-28, 개발 서버 exporter 반입은 hwss-ci-ops). 챗봇 질의 건수·응답 속도는 질문 시점 부서 스냅샷과 롤업 2종(V202610201000)·조회 API, 오류/장애는 실패 기록 원천 직접 집계 조회 API 로 이어졌다(PR #1219) — 질의 1건 정의·장애 기준은 현업 대기라 TODO(decision-needed), 두 카드에는 위탁사 조건이 걸리지 않는다. 처리시간 3종·이용 현황 2종은 롤업 두 개(V202610191500)와 조회 API 두 개로 이어졌다(PR #1168) — 매수 구간 기준(10·12·15·20분)과 계약 KPI 관계는 PM 협의 대기라 설정이고, 팀·단·센터 묶음은 결정 20261019. 문서별·필드별 추출 완료율은 조회 API(ExtractionQualityStatisticsController, PR #867)와 화면(PR #869)이 이어졌다. TopN 개수·전체 보기 UI 형태는 미확정이라 상위 8·11 은 프로토타입 값을 화면이 들고 있다. 프론트의 /admin/dashboard/unmapped·/lifecycle 은 프로토타입에 대응 화면이 없는 백엔드 주도 화면. 「처리 완료 건수」 기준 시점은 🔴 미확정이라 요약·전송 건수를 각각 보인다. 실제 전송 통계 연결 1개 추가: report-send 실행기에서 실제 전송 완료·재전송 이벤트의 집계를 대조해 같은 보고서의 중복 집계 방지 확인. 기존 290개 표본 검증은 유지. 채팅 누적 통계 보존은 채팅 연결 시나리오에서 검증. 관련 PR머지 66 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 66건) |
Admin 콘솔
지식컬렉션
화면 2개 · 점검 필요 1
| 지식컬렉션 관리6일 전 · #1939일부만 실행E2E 시나리오 16 | 프론트구현백엔드구현AI·외부부분 | 프론트공용 폴더 브라우저·빈 말단 폴더에 첫 파일로 공용컬렉션 생성·끌어다 놓기 직접 추가·완료·실패 파일 삭제·등록 안내 설정. 생성 응답 뒤 모달을 닫고 파일 전송을 이어 간다(PR #956) — 진행·업로드 실패는 파일 표 위 요약 한 줄(`CollectionUploadProgressBar`, 표에는 서버 행만, 목록 다시 받기는 3초마다 + 마지막 한 번 — 2026-10-30 #1660 결정 20261030-collection-upload-progress-summary). 폴더 케밥 `이름 변경 / 설명 변경 / 삭제`(설명 변경은 컬렉션 폴더만, 「코멘트」 문구는 2026-10-16 「설명」으로)·상세의 컬렉션 케밥 없음·삭제는 폴더 삭제로 통일(2026-10-13 결정, PR #902). 공통 `CollectionSearchResults`로 폴더·파일명 통합 검색·기본 접힘·일치 파일 펼침·행 클릭 폴더 이동(PR #938). 상세는 `문서 관리 / 위탁사별 참조 기본값` 탭 — 파일 표 `참조 기본값` 열(`활성 N/위탁사 수`)·완료 파일 케밥 `위탁사별 참조 기본값 설정`·위탁사 마스터 탭별 완료 문서 스위치·전체 활성화/해제·설정 복사·`변경사항 저장 (N)`(결정 20261017-admin-knowledge-reference-defaults-tab — 10/7 회의 노트의 「제거」 미채택, WBS 10.1.2). 폴더 브라우저 레이아웃·트리 기본 접힘·선택/펼침 규칙은 사용자 화면과 같은 공용 컴포넌트(PR #967) — 하위 폴더 표는 `simple` 형태(PR #978). 관리자 URL 직접 접근은 소유 메뉴 권한으로 차단 파일 표 `보기` 열의 `문서 보기`는 사용자 콘솔과 같은 공통 뷰어(`useCollectionFileViewer`)를 쓴다(WBS 10.1.3). 공통 PDF 뷰어는 text layer 선택·복사, 너비/페이지 맞춤, 50~200% 확대·축소, 90도 좌우 회전과 9:11 세로형 모달을 제공한다(WBS 1.4.4).. 목록 필터를 공통 FilterBar(라벨 없는 한 줄·`초기화`)로 묶고 select 즉시·검색어 400ms 디바운스·시작일 있을 때 날짜 즉시 조회(PR #973, 결정 20261014-list-filter-auto-apply) 끌어다 놓기·파일 추가에서 엑셀·PPT 를 걸러 안내하고 받는 형식을 안내 문구·accept 에 싣는다(결정 20261013 §1-4, 2026-10-16). 컬렉션 상세는 사용자 화면과 같은 공통 틀 `CollectionDetailPanel`(끌어다 놓기는 관리자만), 컬렉션 폴더에는 하위 폴더·컬렉션 개수를 적지 않는다(요약 줄은 단계 이름 없이 하위 폴더·컬렉션 수만(컬렉션 폴더는 없음)·하위 폴더 표 `-`·삭제 문구는 파일 수만, 결정 20261016-knowledge-collection-detail-unify). `조회`·Enter 는 같은 조건이어도 1쪽으로 가 목록을 다시 받는다(받는 동안 표 유지·`조회` 잠금, 결정 20261019-list-filter-apply-always-refetch, PR #1159). 적용된 검색 조건·검색 결과 쪽 번호·쪽 크기는 URL search param(`q`·`status`·`searchFolder`·`page`·`size`, 열린 폴더 `folder` 와 별개)이라 새로고침·링크·뒤로가기에서 그대로 살아난다(결정 20261019-list-filter-url-state, PR #1177). 백엔드지식컬렉션 관리 권한자가 공용 폴더·컬렉션을 승인 없이 직접 관리, 상태는 파생 processingStatus. 공용 파일은 매일 22:00 배치가 PDF 변환·1,000쪽 겹침 분할 뒤 색인(2026-10-13). 위탁사별 참조 기본값 `GET`/`PUT /api/v1/collections/{id}/reference-defaults`(켜진 칸만 저장, PR #1138) 목록·상세 개선(2026-10-19, 결정 20261019): 검색 카드 하나·14px 입력, 하위 폴더 표 정렬·고정 열 폭, 파일 표 열 폭·`관리` 가운데 정렬. 비동기 즉시 모드는 서버별 작업자가 공용 DB 대기 파일을 한 건씩 선점해 분산 처리하고, 복구 뒤 재기동 없이 이어받는다(결정 20261024-collection-immediate-db-workers). 공용 설명 생성은 작업 UUID·변경 번호로 중복 실행과 생성 중 파일 변경·사용자 편집을 보호하고 Studio 반영 실패를 재시도한다(결정 20261024-collection-description-generation-claim). 최초 Store 는 사용자·기준 폴더별 PostgreSQL 트랜잭션 잠금 뒤 최신 매핑을 읽어 생성·재사용한다(결정 20261024-collection-vector-store-creation-lock). AI·외부Studio 벡터 스토어 실연동(PR #601, 사용자 컬렉션과 같은 경로) 빠진 것
있는 클래스useCollectionStatusRefreshCollectionUploadProgressBarCollectionDescriptionNoFilesExceptionCollectionUploadRejectionNoticescreenCollectionUploadFilesCollectionFilePreviewServiceCollectionControllerCollectionServiceCollectionFolderControllerCollectionGuideControllerCollectionGuideServiceCollectionFilePreparerCollectionFilePartEntityCollectionIndexingBatchServiceCollectionBatchWindowLocalDocumentConverterDocMateDocumentConverterCollectionSearchResultsmatchCollectionSearchRowsuseCollectionFileNameSearchCollectionUploadProviderDocumentViewerDialogCollectionDetailPanelReferenceDefaultsPanelCollectionReferenceDefaultServiceCollectionFileReferenceDefaultEntityCollectionDescriptionCollectionStoreDescriptionServiceCollectionFileBulkActionsCollectionFileBatchResultuseCollectionFileBatchesCollectionVectorStoreCreationLockCollectionDocumentCleanupServiceCollectionDocumentCleanupSchedulerVectorDocumentCleanupPortStudioVectorStoreAdapter 엔드포인트CollectionController 3/18 · CollectionFolderController 3/6 · CollectionGuideController 2/2화면이 부르는 수 / 계약에 있는 수 판정 제외
메모백엔드 통합 검색 API 전까지 검색 범위의 컬렉션 상세를 병렬 조회해 파일명을 찾는다(PR #938). 파일 표 일괄 삭제·재색인은 `POST /collections/{id}/files/delete`·`/reindex`(부분 성공, 한 요청 최대 100개 — 화면은 100개씩 나눠 보낸다, 결정 20261021-knowledge-collection-bulk-file-actions). 관리 필수 E2E 10개를 admin-knowledge-essential.spec.ts에 추가: 권한·폴더 규칙/이름·실제 Studio 직접 등록·중복 파일·검색·폴더 삭제·일괄 부분 성공·재색인·위탁사 참조 기본값. 기존 구현 시나리오 유지, 실행 환경 Studio 필수·설정/연결 실패 시 스텁 전환 없음. 공용 전환 색인(PR #1531): 완료·실패 시 작업자 선점을 해제하고, 배포 전 완료 행이 재연결로 INDEXING 이 될 때도 옛 선점을 비운다. 실제 작업 중·미완료 조각의 선점 보호는 유지한다. 관련 PR머지 131 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 131건) |
| 지식컬렉션 승인 · 검토거의 안 지나감E2E 시나리오 14 | 프론트구현백엔드구현AI·외부해당 없음 | 프론트승인 목록(서버 페이징·대기 건수)·요청 팝업(처리 중 닫기·검토 링크 잠금)·검토 화면·원본 뷰어 — 팝업·검토·뷰어 UI 는 프로토타입과 동일. 검토 화면의 공용 대상은 팝업처럼 읽기 전용(요청자 지정 그대로 승인·반려, 무효면 승인 잠금, 2026-10-14). 두 팝업은 제목 옆 상태 뱃지·같은 형식의 결과 줄(1차 승인 이력·승인·반려)·파일별 `미리보기`·3건 높이 목록·`반려 취소`를 같게 두고, 승인 버튼 이름은 보는 사람 기준(서버 `decisionStage`, 결정 20261023). 엄격한 순차 — 최종 승인자는 1차 대기 건을 조회만 하고, 1차를 생략한 대기 건은 사유 한 줄(`firstApprovalSkip`, 2026-10-26 결정 20261026). `컬렉션 신규` 요청은 목록 `공용 대상` 열·팝업에 컬렉션이 놓인 공용 폴더 경로(`collectionFolderPath`)를 읽기 전용으로 보인다(2026-10-23). 뷰어는 공통 컴포넌트 `DocumentViewerDialog`(`components/common/document-viewer/`)로 저장된 미리보기(앞 5쪽, 지식컬렉션과 같은 파일)를 열고 다운로드는 원본 전체(2026-10-15, PR #1007). PDF text layer 선택·복사, 너비/페이지 맞춤, 50~200% 확대·축소, 90도 좌우 회전과 9:11 세로형 모달을 함께 제공한다(WBS 1.4.4). 관리자 URL 직접 접근은 소유 메뉴 권한으로 차단. 상위 메뉴 링크는 공통 ParentMenuLink. 백엔드대기함·목록 페이징·대기 건수·1차/최종 승인·반려·원본 열람·미리보기(`…/files/{fileId}/preview`, 승인 대기 파일도 S3 에 미리 만든 앞 5쪽) — 단계(approvalStage)·처리 가능 여부(canDecide)·호출자가 승인하면 처리되는 단계(decisionStage)·1차 생략 사유(firstApprovalSkip — 미지정·요청자 레벨·범위 안 1차 승인자 공석)는 권한 매트릭스·조직도 기준, 엄격한 순차(최종 승인자는 최종 단계만, 2026-10-26). 최종 승인자 외에는 본인·하위 부서원 요청만 보이고, 1차 레벨과 같거나 높은 요청자는 바로 최종 단계(2026-10-19). 최초 Store 는 사용자·기준 폴더별 PostgreSQL 트랜잭션 잠금 뒤 최신 매핑을 읽어 생성·재사용한다(결정 20261024-collection-vector-store-creation-lock). 승인 요청 행은 낙관적 잠금(`@Version`) — 겹친 승인·반려의 늦은 저장은 409 `COLLECTION_APPROVAL_CONFLICT`(2026-10-27, 결정 20261026 「관련 후속」). 있는 클래스CollectionApprovalControllerCollectionApprovalServiceCollectionApprovalRequestEntityCollectionApprovalPolicyPortDocumentViewerDialogCollectionFilePreviewServiceCollectionFilePreviewMakerCollectionVectorStoreCreationLockCollectionDocumentCleanupServiceCollectionDocumentCleanupSchedulerVectorDocumentCleanupPortFilterChipNotice 엔드포인트CollectionApprovalController 5/11화면이 부르는 수 / 계약에 있는 수 판정 제외
메모검토 파일 표의 `태그`·`버전` 열은 빠진 것이 아니라 없어진 것이다 — 폴더 체계 개편으로 파일 메타는 폴더 경로에서 오고 태그 수정은 없으며, 업로드 파일에는 버전 개념이 없어 `버전` 열을 두지 않는다(화면 기준선 「지식컬렉션 상세(뷰어)」·「지식컬렉션 승인 검토」). 승인 단계 E2E 5개: `screens/prepared/collection-approval.spec.ts` — 최종만(생략 3사유·동일/상위 레벨), 1차→최종 비공개 유지, 단계 우회 403, 단계별 반려, 공석 전환. 독립 DB에서 실제 API로 준비·복원하며 `approval-center` 유형·파일·줄을 정제 리포터로 기록한다. 전체 회귀의 `approval-stages` 프로젝트는 다른 선택된 프로젝트 종료 후 실행한다. 제품 승인 시간 제한 수정과 관련 단위 회귀 테스트는 별도 로컬 브랜치용 stash로 분리했다. 현재 브랜치는 기존 제품 코드를 검증하는 승인 시나리오만 포함한다. 2026-10-28 최종 dev b78058348 반영 후 실제 Studio 승인 5개 모두 통과(225.024초, 실패·건너뜀·재시도 0). 제품 소스는 dev와 동일하며 #1570 미포함, 응답 지연 주입 없음. 최초 918580d10 검증과 구분해 기록한다. 승인 연결 1개 추가: 실제 1차·최종 승인 감사 기록의 처리자·원본/공용 대상 대조. 승인 실행기 6개를 개발·운영에 등록. 관련 PR머지 82 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 82건) 점검 필요
|
Admin 콘솔
위탁사
화면 1개
| 위탁사 Workspace6일 전 · #1939실행 확인E2E 시나리오 17 | 프론트부분백엔드부분AI·외부해당 없음 | 프론트위탁사 탭(서버가 신규로 판정한 위탁사만 `신규` 뱃지)·설정 진행률(`완료 N / 4`, 전체 `미설정/진행중/완료`)·4단계 카드를 온보딩 상태 조회(GET /api/v1/admin/customer-onboarding) 하나로 그린다 — 화면이 다른 도메인 조회로 다시 판정하지 않는다(결정 20261017). 단계 상태 뱃지는 제목 옆, 4단계에 `선택` 표시, 2단계는 서버가 내리는 `연동 대기`이고 `메뉴로 이동` 으로 사고조사 Workflow(?company=)를 연다. 3단계는 카드 안 라디오(`메일 발송`/`Smart심사 API 전송`, 선택지마다 설명 툴팁)를 고르면 즉시 저장·완료, Smart심사면 연동 전 경고(결정 20260902, PR #1272). 4단계는 카드 안에서 공시실 링크를 조회(`활성화`/`비활성화`·URL·`수정`, 없으면 `등록`)(`수정` 이름 `공시실 링크 수정`)하고 팝업 `DisclosureLinkEditDialog` 가 URL 과 사용자 화면 노출을 `저장` 한 번에 보낸다(URL 이 비면 노출 스위치가 잠기고 까닭을 툴팁으로 알린다)(PUT /api/v1/admin/disclosure-links/{code}, 결정 20261023, PR #1503) — 저장은 링크 목록·온보딩 조회를 무효화한다. 관리자 LNB `위탁사 워크스페이스` 에 신규 위탁사 수 뱃지, 그 메뉴가 든 `사고조사 Workflow` 그룹 머리에 신규 위탁사 점·수(`workflowGroupIndicator`, 결정 20261022 10항). 관리자 URL 직접 접근은 소유 메뉴 권한으로 차단 백엔드위탁사 목록 조회(CustomerCompanyController)와 온보딩 상태 조회(CustomerOnboardingController — 신규 여부·4단계, 2단계는 UNAVAILABLE, 결정 20261017, 권한에 CLIENT_WORKSPACE 포함)와 전송 방식 저장(ReportDeliveryChannelController — 감사 로그, 결정 20260902), 4단계 공시실 링크 목록·저장(DisclosureLinkController — 권한 CLIENT_WORKSPACE, 결정 20261023) 빠진 것
남은 클래스CustomerWorkspaceController설정 마스터 (모듈 배치 미정) 있는 클래스CustomerCompanyControllerCustomerOnboardingControllerCustomerOnboardingServiceReportDeliveryChannelControllerReportDeliveryChannelServiceSegmentedControlDeliveryChannelPickerDisclosureLinkControllerDisclosureLinkEntityDisclosureLinkSummaryDisclosureLinkEditDialog 엔드포인트CustomerOnboardingController 1/1 · ReportDeliveryChannelController 1/1 · DisclosureLinkController 2/2화면이 부르는 수 / 계약에 있는 수 메모Workspace 필수 E2E 10개(client-workspace-essential.spec.ts): 권한·활성/빈 목록·신규·매핑 상태·필수/선택/연동 대기·최초 채널/감사·지연 저장 분리·실패 복구·공시실 최초 등록/원자적 저장. 기존 구현 시나리오 유지, 전용 DB 원천 조건과 실제 API로 검증. 4단계 공시실 링크는 카드 안 조회 + 팝업(URL + 사용자 화면 노출) 저장(결정 20261023 — 프로토타입 PR #1403, 프론트·백엔드 PR #1503). 공시실 링크 별도 행(`disclosure-links`)은 별도 화면이 없어 이 행으로 합쳤다(결정 20261023). 온보딩 4단계 완료 판정은 온보딩 상태 조회가 링크 행 유무로 한다. 복수 링크·링크명·노출 순서는 20260806 노트 미확정. 사용자 경로 `공시실` 버튼은 NL01 `GET /api/v1/investigation-reports/{reportNo}/disclosure-link` 가 노출 켠 링크만 내린다 관련 PR머지 41 · 마지막 머지 11/11
머지된 PR 은 최근 15건만 보여 줍니다 (전체 41건) |
Admin 콘솔
사고조사 Agent 체계 관리
화면 4개
| 분류체계 매핑3일 전 · #2094일부만 실행E2E 시나리오 15 | 프론트부분백엔드구현AI·외부구현 | 프론트변경 없음 배너의 `확정본과 동일 — 마지막 확정 vN (일시 · 확정자)` 과 `확정 이력 N건` 펼치기(PR #812), 미확정 배너의 `확정본 vN (일시 확정 · 확정자) 대비`·`폴더 삭제`/`매핑 변경`/`재확인` 칩, 미확정 중 이력 펼치기 — 이력은 확정이 있으면 꼬리표용으로 조회(PR #1354). Studio 분류 편집 목록 각 줄에 대분류(`majorCategory`) 표시. 관리자 URL 직접 접근은 소유 메뉴 권한으로 차단. 서버가 신규로 판정한 위탁사(온보딩 상태 조회)만 탭 `신규`·`신규 위탁사 · Studio 분류 배정 필요` 배너, 배너는 안내만 — 위탁사 전체 매칭 복사는 없애고 `Studio 분류 편집` 머리에 `수정 초기화`(적용 안 한 선택 → 현재 편집본)·`다른 위탁사 매핑 불러오기`(확정한 위탁사의 아무 폴더 저장본 → 편집 패널 선택, 결정 20261027-classification-mapping-load-other-client, PR #1561). 미확정 건수·배너 판정은 편집 변경 폴더 + 재확인 폴더 + 미배정 분류 합(겹침 1회)(PR #1351), `변경만 보기`·요약 줄 `수신 하이라이트` 는 없앴다(결정 20261113-classification-mapping-remove-changed-only). 폴더 행 저장본 대비 `매핑 +N −M` 칩·추가·제거 분류명 툴팁(PR #1352). 확정 확인 창에 다음 버전 `vN`·폴더별 `+분류`/`−분류` 목록·재확인만 남은 폴더 수·변경 없음 안내(PR #1353). 화면 플로우 개선 승격(결정 20261030-classification-mapping-flow-improvement) — 상태 상자는 신규 위탁사·미확정·확정본과 동일 중 하나만, `확정 이력 N건` 은 탭 줄 오른쪽 버튼 → `매핑 확정 이력` 모달(버전·확정 일시·확정자·변경 건수 표, 최고 버전 `현재`), 위탁사 탭 이름 오른쪽 위 작은 수량 뱃지(미배정 0 이고 확정만 남으면 점, 결정 20261113-lnb-and-tab-mapping-badges), 폴더 상태 뱃지 모양 통일, 확정 확인 창은 `폴더 · 종류 · 변경 내용` 한 줄 목록에서 행 전체를 눌러 추가·제거 분류를 펼침, 아래 `매핑 규칙 안내` 상자(문구는 결정 20261113-classification-mapping-notice-copy). 공통 문서종 0종 신규 위탁사는 확정 버튼 대신 `공통 문서종 관리`(스키마 정의 분류 탭) 안내(PR #2065). 스튜디오 배포 대기 알림(남은 위탁사·바뀐 문서종)과 위탁사별 `Studio 문서종 변경 확인`(배정 그대로도 확정, 결정 20261112-studio-deploy-master-mapping-sync) 백엔드위탁사별 매핑 조회·저장, 폴더 ↔ 문서종 N:M(V202609281500), 확정 이력(위탁사별 vN·확정자 사번·변경 건수, V202610091900), 위탁사 10사·폴더 166·매핑 5,110 시드(PR #598). 문서종은 온톨로지 v2.0 세부 146종 + 표지, 응답에 대분류(majorCategory)·정보추출 방식(extractionMethod) — 옛 코드 매핑은 새 코드로 이전(V202610161230) AI·외부이미지 마스터 동기화 API-06·07 빠진 것
있는 클래스StudioDeploymentPendingNoticeClassificationMappingControllerClassificationMappingServiceFolderClassificationMappingEntityFolderClassificationMappingConfirmationEntityClassificationMasterSyncServiceAgentDocumentTypeEntityDocumentExtractionMethodImageMasterSyncPortImplLoadClientMappingDialogMappingConfirmationChangesNoticeStudioDocumentTypeMasterPortImpl 엔드포인트ClassificationMappingController 3/3 · CustomerCompanyController 1/1 · CustomerOnboardingController 1/1화면이 부르는 수 / 계약에 있는 수 메모분류체계 매핑 필수 E2E 10개 추가: 권한·검색/필터·편집/적용/초기화·N:M·미배정 차단·확정/이력/멱등성·전체 되돌리기·다른 위탁사 불러오기·미확정 집계·실패 복구. 전용 회차의 실제 API·DB로 검증하며 Studio 처리·이미지시스템 API-07 전체 수신·자동 배포는 범위 밖. 관련 PR머지 69 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 69건) |
| 보고서 유형 설정4일 전 · #2035거의 안 지나감E2E 시나리오 17(계획 1) | 프론트구현백엔드구현AI·외부해당 없음 | 프론트관리자 화면 — 유형 추가 (2026-09-30 NT02) + `스키마 정의 필요` 표시 (2026-10-01 ND03) + 추가 직후 에이전트 스튜디오 안내 창 `나중에`/`에이전트 스튜디오로 이동` (2026-10-19). 관리자 URL 직접 접근은 소유 메뉴 권한으로 차단. 안내 창·배너의 목적지는 스키마 정의 3단계 탭 `/admin/agent-studio/schema?tab=report`(2026-10-23 LW02, 결정 20261022 8항). 삭제 → 전 유형 활성/비활성 토글(즉시 저장, 실패 시 되돌림)·`상태` 열(`활성화`/`비활성`/`스키마 정의 필요` — 마지막은 토글 꺼진 채 잠김)·추가 안내 문구 결정 11항 (2026-10-28 야간 RT02, 결정 20261028) · `작성 지침` 열 제거 — 지침 건수는 `상태` 판정에만 (2026-10-29 야간 RT03, 10항 개정) · 토큰·토스트·모달·공용 그리드(머리 정렬·쪽 이동)·추가 안내 문구 정리 (결정 20261102, 프로토타입·프론트 모두 반영) · `스키마 정의 필요` 판정 원천을 요약 골격 예외에서 최신 INSTRUCT 저장본의 모든 위탁사·모든 탭 본문으로 바로잡음 (결정 20261102 7항, 서버 `ClaimTypeExposure` 도 같은 기준) 백엔드청구유형 마스터 + 관리자 API (investigation-core, 2026-09-30 NT01) + 활성 여부 `PATCH …/claim-types/{id}/enabled`·조사자 선택지 `?enabledOnly=true`·인입 고정 활성만 (2026-10-28 야간 RT01, 결정 20261028) · 삭제 API(`DELETE …/claim-types/{id}`) 제거 (2026-10-28 야간 RT02) · 작성 지침 없는 추가 유형은 조사자 선택지·인입 고정에서 제외 `ClaimTypeExposure` (2026-10-29, 결정 20261028 「후속」 1항) 엔드포인트ClaimTypeController 3/3화면이 부르는 수 / 계약에 있는 수 메모보고서 유형 필수 E2E 10개(e2e/report-types/run.py): 실제 API·회차 DB로 추가·30자·공백 중복·요청 잠금·실패 원복·지침 상태/조회 실패·선택지·권한 검증. 유형·지침은 실제 API로 준비, 운영 배포 판정·Studio 보고서 생성은 제외. 분석 요청의 청구유형 전환(analysis_request_forms 대조·이름 스냅샷)은 남아 있다. `스키마 정의 필요` 판정의 원천은 활성 요약 골격의 청구유형 예외(GET /api/v1/admin/summary-skeletons)이며 이 화면은 읽기만 한다 — 골격 조회가 실패하면 뱃지를 띄우지 않는다. `에이전트 스튜디오로 이동` 의 목적지는 /admin/agent-studio/schema?tab=report 다(2026-10-23 LW02). 결정 20261028 반영: 삭제 → 전 유형 활성/비활성 토글·`상태` 열(RT01·RT02). 남은 것 — `배포 대기` 상태와 배포 기준 노출(새 유형은 배포 전까지 꺼진 채 잠김)은 운영(배포) INSTRUCT 버전(20261021 11항)이 선행이라, 지금은 새 유형이 서버에서 추가 즉시 활성이고 화면은 `스키마 정의 필요` 동안만 토글을 잠근다. `작성 지침` 열은 프로토타입(#1619)·프론트(야간 RT03) 모두 없앴다(2026-10-29 10항 개정, 결정 20261028-report-type-enable-and-application-form-confirm) 관련 PR머지 36 · 마지막 머지 11/09
머지된 PR 은 최근 15건만 보여 줍니다 (전체 36건) |
| 청약서 폼 설정한쪽만 실행E2E 시나리오 14 | 프론트구현백엔드구현AI·외부해당 없음 | 프론트프로토타입 기준 유형별 질문·공통 변수·편집/미리보기. 서버 현재 설정을 로컬 초안으로 편집하고 확정 버튼에서만 다음 버전을 생성하며, 수정 초기화는 확인 창 뒤 서버 호출 없이 마지막 조회 상태로 복원. 두 버튼은 확정본과 값이 다를 때만 활성(되돌린 수정은 수정 아님), 다른 유형·변수에 수정됨 뱃지(2026-10-28 야간 AF01 #1609). 공용 템플릿 모듈·질문 블록을 사용자 분석 조건 입력과 공유. 관리자 URL 직접 접근은 소유 메뉴 권한으로 차단. 저장(PUT) 중에는 버튼 줄·편집 영역을 공통 저장 중 덮개(components/ui/loading-overlay.tsx)로 막는다(2026-10-22 #1328). 편집 목록 변수 칩에 단위·기본값·선택지·미정의 표시, 전체 미리보기 입력 초기화·질문 없음 안내(2026-10-23 #1359). 변수 삭제는 확인 모달(쓰는 질문 수 유형별)로 묻고, 정의되지 않은 변수를 쓰는 질문이 남으면 확정 비활성+이유 문구(2026-10-29 야간 AV01 #1651). 화면 규칙 정리(결정 20261102-application-form-screen-flow) — 질문 모달 구역·라디오 카드, 변수 팔레트 칩 한 줄·수정 토글, 최근 저장·저장자, 전체 미리보기는 문항을 골라야 변수 입력 활성(프로토타입·프론트 같은 PR). 확정 결과 알림은 스튜디오 토스트, 질문 모달 응답 유형은 라디오 백엔드위탁사 공통 불변 버전 마스터 application_form_versions + 관리자 조회·저장·조사자 조회 API (investigation-core, 2026-10-07). 응답에 저장자 이름 `savedByName` 을 조직 디렉터리에서 찾아 붙인다(없으면 사번, 결정 20261102-application-form-screen-flow). 분석 요청이 applicationFormVersion 을 남긴다 있는 클래스ApplicationFormControllerApplicationFormQueryControllerApplicationFormVersionEntityApplicationFormSettingsServiceapplication-form-templatesapplication-form-variablesapplication-question-blockLoadingOverlayquestion-variable-chipapplication-form-draftModifiedBadgeConfirmDialogFieldFieldSetFieldOption 엔드포인트ApplicationFormController 2/2 · ApplicationFormQueryController 0/1화면이 부르는 수 / 계약에 있는 수 메모청약서 폼 필수 E2E 10개(prepared/application-forms-essential.spec.ts): 실제 API·회차 DB로 변수 일괄 확정·이름 변경/삭제·덮어쓰기·응답 방식·직접 구성·순서·변경 없음·동시 편집 충돌·실패 복구 검증. 전용 실행기 e2e/application-forms/run.py, 개발·운영 Webpack 각 9통과·1실패(명시적 multi 질문 그대로 저장 시 수정 판정). Studio 호출 없음. 결정 20261006. 위탁사별 기본값·유형 추가·버전 적용 기준(기존 건 영향)은 미확정 — 결정 문서 「미확정」. 버튼 `확정`·`수정 초기화`(수정 있을 때만 활성)·`수정됨` 뱃지·변수도 같은 초안 — 프로토타입 #1603·프론트 #1609 반영 (결정 20261028-report-type-enable-and-application-form-confirm). 화면 이탈 경고는 결정 6항으로 범위 밖. 변수 삭제 가드 — 결정 20261029-application-form-variable-delete-guard(프로토타입 #1646·프론트 #1651) 관련 PR머지 37 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 37건) |
| 병원 명칭 매핑3일 전 · #2082일부만 실행E2E 시나리오 15(계획 1) | 프론트구현백엔드구현AI·외부해당 없음 | 프론트관리자 화면 — 등재 목록·필터·이름 등재(공용 병원 찾기 창)·사용 스위치·병원 바꾸기·삭제(PR #1378). MENU_ROUTES 에 HOSPITAL_ALIAS 등록. 화면 규칙 정리 승격(결정 20261030-hospital-alias-screen-flow) — 표는 공용 `DataTable` 그리드형(네이비 머리·줄무늬·열 폭 조절·머리 정렬·20건 단위 쪽 이동)이고 열은 여섯(`지정 병원` 둘째 줄에 지역·병원코드, `자동 지정` 둘째 줄에 최근 적용일), 행 64px, 사용 중지 행은 이름만 흐림, `사용` 스위치는 즉시 반영하고, 사용 여부 변경·등재·병원 다시 연결·삭제 결과 알림은 위 가운데 스튜디오 토스트(`StudioToast`, 문장마다 줄 나눔), 삭제는 테두리 없는 아이콘, 모달은 공용 `ModalFrame`을 직접 쓴다(`이름 등재` 560px·`병원 찾기` 720px, 목록은 테두리 상자 안 스크롤·아래 왼쪽 `총 N곳`). 병원 바꾸기에서 지정할 수 없는 병원은 찾기 창 안 문구로 알림. `등재` 칸 등재자는 이름(`registeredByName`, 못 찾으면 사번). 이름 등재 창은 폼이라 Enter 로 등재(병원 미지정이면 보내지 않음)·설명 문구·지정 병원 칸 툴팁(`병원명 · 지역`)·삭제 확인 창 이름 굵게를 프로토타입에 맞춤(야간 20261104 HA01). 2026-11-10 서버 쪽 나눔 — 사용 여부·등재 경로·검색어·정렬·쪽은 주소 조건(`useFilterDraft`)으로 서버가 거르고, 요약 줄은 서버 집계, 검색에서 등재자 제외(결정 20261030 「개정」). `서류에 적힌 이름` 칸 말줄임·툴팁, `병원 찾기` 검색칸은 공용 `SearchInput`(검색어 지우기)로(야간 20261111 HA01) 백엔드등재 저장소는 통계 별칭 표 stat_dim_aliases(HOSPITAL) + 등재 컬럼(V202610231900). 병원 마스터 dim_hospitals 는 읽기만(시드 V202609281540 표본, 정본은 스마트심사 뷰 🔴) 있는 클래스HospitalMasterSyncServiceSmartReviewHospitalMasterAdapterStatDimensionAliasEntityHospitalDimensionEntityStatUnmappedResolveServiceHospitalAliasControllerHospitalAliasServiceHospitalNameNormalizerHospitalAliasPageViewHospitalAliasSortHospitalAliasStatus 엔드포인트HospitalAliasController 7/7화면이 부르는 수 / 계약에 있는 수 메모병원 명칭 매핑 필수 E2E 10개(e2e/hospital-aliases/run.py): 실제 API·전용 DB로 복합 검색·페이지·500자·정규화 중복·동명 병원·사라진 마스터·변경/삭제 실패 복구·쓰기 권한 확인. Studio·외부 마스터 동기화·자동 지정 누적은 제외. 병원 키 원천(요양기관기호 vs 정규화 명칭)·마스터 뷰 계약은 결정 20260910 🔴. 조사자 쪽 등재(병원 지정 단계)·자동 지정 횟수 갱신은 추출 스키마 마스터 매칭 설정과 함께 — 그때까지 횟수는 시드·표시만. 관련 PR머지 22 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 22건) |
Admin 콘솔
에이전트 스튜디오
화면 4개 · 점검 필요 1
| 에이전트 스튜디오 · 실행 테스트6일 전 · #1939일부만 실행E2E 시나리오 14(실행 기록 없음 2 · 계획 1) | 프론트부분백엔드구현AI·외부미구현 | 프론트관리자 화면 셸 — 제목은 LNB 메뉴명(MenuPageHeading AGENT_MANAGEMENT, 메뉴 뱃지 없음), 탭 스키마 정의·실행 테스트, /admin/agent-studio 는 스키마 정의로 보낸다(2026-10-19 #1165). 저장본은 브라우저 저장소(_lib/studio-store.ts)이고 배포본은 서버 배포 기록(_lib/deployment-api.ts, 2026-11-11 #2112 결정 20261111)이다(분류·추출·INSTRUCT·요약 그룹 저장은 서버 연동돼 `이 브라우저에만 저장됩니다` 임시 저장 안내 배너는 없앴다). 스키마 정의는 저장본만 바꾸고 배포 전이면 배포 안내·배포본으로 되돌리기(2026-10-20 #1228). 단계 버튼 `수정 초기화`(마지막 저장본으로), 2단계 상위 탭 `추출 스키마 설정`/`요약 설정` 탭별 저장, 1단계 저장은 분류체계 매칭에 바로 반영하지 않고 배포 때 반영된다고 안내(2026-10-21 #1267). 1단계 분류·2단계 추출 스키마 머리의 config 버전 버튼(`v4 · default`) → 선택 모달(저장일 기간 검색·최신순 10건·행 오른쪽 끝 `default` 뱃지만·목록 일시 `2026.10.14 (수) 17:22`·푸터 `동기화`, 저장 일시 `v4 (2026-10-14 17:22:15)` — 2026-10-28 #1577 결정 20261021 4항 개정)(불러온 값은 저장 전 → 저장하면 새 버전, 요약 그룹 문서종은 건너뛰고 건수 안내), `수정 초기화`는 최신 버전으로, 배포 → `default`, 배포본으로 되돌리기 → 새 버전 — _lib/config-versions.ts·_components/config-version-sync.tsx, 버전 기록은 브라우저 저장소(TODO(decision-needed)) (2026-10-23 #1344). 단계 저장의 검증 표시는 저장 버튼 모서리 경고 대신 머리 오른쪽 `⚠ 확인할 항목 N건` 칩(동작 없음, 올리면 문제 목록) — 2depth 추가 폼도 같은 칩. 머리의 개수 현황 칩·3단계 `저장 전` 칩은 없애고, `기존 위탁사 설정 복사` 는 `다른 위탁사에서 복사` 로 이름을 바꿔 `보고서 설정` 머리 오른쪽으로(복사하면 대상의 탭 구성이 원본과 같아진다 — 결정 20260918 4항 개정), 3단계 문제 칩은 위탁사 Select 앞(2026-10-24 #1447, 결정 20261019 1·2·6-1항 개정). 안내·검증 메시지 체계(결정 20261028-studio-message-system)로 승격 — 결과 알림은 위 가운데 토스트(성공 5초·실패 8초, 단계 번호 표식), 저장이 막히면 맨 위 띠 없이 첫 문제 칸으로 이동하고 `저장` 앞 칩·칸 문구가 알린다, 미배포 안내는 상태 배너(`StudioCallout`), 단계 머리 `● 저장 안 됨`, 배포본으로 되돌리기·탭 삭제는 확인 창, 3단계 위탁사 선택은 `보고서 설정` 패널 머리로(따로 띠 없음), 2단계 미리보기는 머리에 파일 교체·닫기, 입력 14px·삭제 버튼 평소 회색. 실행 테스트는 프로토타입 개선(결정 20261029 4건)을 승격 — 왼쪽 한 열이 첨부 관리(`AttachColumn`: 추가·삭제·`문서 모두 비우기`)와 낱장 목록을 맡고 분류 전에는 화면 아래까지 채운다, 첨부 제한은 사고조사 채팅 첨부와 같다(개수 제한 없음·파일당 50MB·누적 100쪽 미만·같은 파일 거절 — `_lib/attach-limits.ts`), 탭 줄 `초기화`와 위탁사 변경·첨부 변경·분류 다시 실행 확인 창, 분석 조건 두 줄 요약과 `AI 보고서 실행`, 보고서 단계는 머리 `추출값·분석 조건 수정`과 화면 아래 붙는 배포 바(배포 범위 표 확인 창). 3단계 `실행 프롬프트 원문`은 늘 펼친 입력 칸으로 탭별로 고치고 안내 배너 오른쪽 `AI 보고서 단위테스트`로 그 탭만 다시 돈다(모의, `rerunInstructTab` — 결과 카드 로딩 레이어·`단위테스트 · 시각` 칩, 전체 `AI 보고서 실행` 하면 고친 원문을 버림 — 결정 20261029-studio-test-instruct-prompt-edit, 2026-10-29 #1653) 백엔드배포 기록 API(2026-11-11 #2112, 결정 20261111-studio-server-deployment-management) — POST /api/v1/admin/agent-studio/deployments(통과한 실행 번호, 서버 검증·2depth 변경이면 배포 대기)·GET …/deployments/current·POST …/deployments/{id}/apply, 사고조사 인입은 아직 읽지 않는다. 서류는 Studio 대신 객체 저장소(IMAGE_STORAGE)에 두고 Studio 에는 분류 때 합본만 올린다(결정 20261109-studio-test-file-object-storage). 실행 테스트 1단계 분류·2단계 추출·3단계 보고서 실연동 API(2026-11-06·11-07·11-09, 결정 20261106-studio-test-classify-run·20261107-studio-test-extract-run·20261109-studio-test-report-run) — POST …/{runId}/report(고친 추출값 반영 뒤 탭 LLM·요약 그룹 Job, 뒤에서 돌고 조회로 진행)·POST …/{runId}/report/tabs/{tabKey}/run(탭 다시 실행·단위테스트), POST …/{runId}/extract(문서종을 바꾼 낱장을 분류 결과 Collection 에 반영한 뒤 가장 최근 추출 지시서로, 사고조사 추출과 같은 되짚기·보관 정책)·PUT …/{runId}/extract/fields(우리 기록만), POST /api/v1/admin/agent-studio/test-runs·GET·DELETE …/{runId}, POST …/{runId}/files(채팅 첨부와 같은 11종, 파일당 50MB·누적 1,000쪽 이하·같은 파일 거절)·DELETE …/files/{fileId}, PATCH …/{runId}(위탁사만 바꾸기 — 서류 유지, 분류 결과만 지움), POST …/{runId}/classify(가장 최근 분류 지시서, 버전 선택 없음), PUT …/{runId}/classify/pages(낱장 지정·확정, Studio 로 안 보냄). 미분류·저신뢰는 사고조사와 같은 기준(실행 테스트 쪽 사본 AgentStudioTestClassifyJudgement), 실행 기록 3표·보관 1일 정리(AgentStudioTestRunSweeper). 지시서(INSTRUCT)·문서종 스키마·요약 그룹 API 는 그 탭의 행(summary-layout·doc-type-schemas)에 적는다 AI·외부지시서(Config) 버전 목록·내용 조회(StudioAgentConfigVersions) + 실행 테스트 분류 — Studio 파일 업로드·정리(DocumentFilePort)·분류 작업 제출·상태 조회(DocumentClassificationPort), 가장 최근 분류 지시서를 AgentConfigRef 로 싣는다 빠진 것
있는 클래스StudioToastuseStudioToastConfirmDialogUnsavedMarkUnsavedDotNavigationTabTestViewStudioSelectAttachColumnNextStepBarReportPanelDeployBarscreenIncomingFilesNoticeFieldFieldSetFieldOptionFieldErrorRequiredMarkStageActionsSchemaStudioLoadSchemaDeployNoticeRevertDeploymentDialogPendingDeploymentNoticeApplyDeploymentDialogShapeAlignmentNoticeuseShapeAlignmentFailureuseSchemaStepuseSchemaStudioVersionsuseSchemaDeployment 엔드포인트AgentStudioTestRunController 0/14 · AgentStudioDeploymentController 3/3화면이 부르는 수 / 계약에 있는 수 메모AI문서분류-추출 체계·요약 및 해석 체계·보고서 양식 설정이 이 화면으로 통합됐다. 아래 세 행이 그 계약이며 화면은 같다. 스튜디오 구성은 아직 바뀔 수 있어 남은 클래스를 적지 않는다. 실행 테스트 필수 준비형 10개는 e2e/realdata/screens/prepared/studio-execution-essential.spec.ts에서 agent-studio로 수집한다. 실제 API·전용 DB와 서버 스텁으로(분류·추출·보고서 모두 서버 실연동 — 결정 20261106·20261107·20261109) 첨부 제한·위탁사 변경·분류/추출 검수·분석 조건·탭 실행·브라우저 배포를 검증하며 실제 Studio 처리·서버 배포는 제외한다. 관련 PR머지 46 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 46건) 점검 필요
|
| 에이전트 스튜디오 · 문서 분류·정보 추출 체계6일 전 · #1939거의 안 지나감E2E 시나리오 16 | 프론트부분백엔드부분AI·외부구현 | 프론트스키마 정의 1단계 CLASSIFY(1depth·2depth 편집, 편집기 자리 2depth 추가 폼 — 1단계 저장 때 반영)·2단계 `AI 추출·요약 설정`(왼쪽 2depth 목록·미리보기·추출 스키마 설정, 하위 탭 `요약 설정` 요약 그룹, 유형 String·Number·Integer·Boolean + 목록, 피보험자 이름 대조), 검증 표시·`수정됨`, 저장본/배포본과 배포 안내 (2026-10-19 #1165, 2026-10-20 #1228). 저장은 백엔드 연동 전이라 브라우저 저장소(_lib/studio-store.ts, TODO(decision-needed)). 2단계 `요약 설정`의 요약 그룹만 관리 API(GET·PUT /api/v1/admin/agent-studio/summary-groups)에 연결 — 화면 문서종 id 는 API 경계에서 2depth 이름(= 서버 문서종 코드)으로 바꾼다(PR #1271, _lib/summary-group-api.ts). 추출 스키마는 필수가 아니고 추출 항목·요약 그룹은 문서종 단위로 상호 배타, 두 프롬프트는 공용 편집기(_components/studio-prompt-editor.tsx) — 프론트 더미 추출 항목은 서버 기본 요약 그룹과 겹치지 않게 맞췄다(2026-10-22 #1318, 결정 20261021-studio-derived-document-processing-state). 단계 탭은 주소 `?tab=classify|extract|report` 로 열고 탭 전환이 주소를 맞춘다(lib/url/studio-schema-tab.ts, 2026-10-23 LW02 — 결정 20261022 7항). 1단계·2단계 추출 스키마의 config 버전 선택·`동기화`·`default`(2026-10-23 #1344, 결정 20261021-studio-config-version-sync 4~7항) — 2026-10-28 #1577 에서 select 를 버전 선택 모달(저장일 기간 검색)로, 표기를 저장 일시로 — 2026-10-29 #1625 에서 버전 목록을 그 단계 Studio 에이전트의 지시서(Config) 목록으로(_lib/studio-config-versions-api.ts, 버전 = external_id·저장 일시 = created_at·default = is_default), Studio 를 쓸 수 없으면 빈 목록과 안내(결정 20261029-studio-config-version-list-from-studio). `동기화`는 고른 버전 값을 편집 중인 값에 채운다(저장 전 상태, 결정 20261102-studio-config-sync-fill-screen). 1·2단계 `저장`은 원본을 복제해 새 Studio Config 를 만들고 처음 값은 가장 최근 버전이다(_lib/studio-config-save.ts, 결정 20261103-studio-config-save-new-config). 2단계 추출 목록은 분류와 묶지 않고 추출 Config 그대로, 분류에 없는 라벨은 행에 표시하고 `항목 옮기기`로 옮기며, `추출 스키마 추가`·항목 전부 삭제로 추출 Step 을 더하고 뺀다. 요약 그룹 문서종은 분류를 따른다(결정 20261104-studio-extract-doc-types-independent·20261104-studio-extract-step-add-delete). 1단계 패널 위 분류·추출 문서종 비교 안내 — default 분류 ↔ 불러온 분류를 불러온 추출 버전과 견준다(저장된 값끼리, _lib/extract-coverage.ts·_components/extract-coverage-notice.tsx, 결정 20261104 6~8항) 백엔드에이전트 문서종 엔티티, 요약 그룹 마스터·관리 API(PR #1271 — GET·PUT /api/v1/admin/agent-studio/summary-groups, 기본 4그룹 시드). 문서 분류·추출 스키마 저장본 API(2026-10-26, 결정 20261026-studio-document-type-schema-storage) — GET /api/v1/admin/agent-studio/document-type-schemas(분류 최신 + 추출 스키마 최신), PUT …/classify(변경분 + 1depth/2depth 구분)·PUT …/extract(바뀐 문서종의 항목 전체, 유형 STRING·NUMBER·INTEGER·BOOLEAN·TABLE + isList), 단계별 버전 목록·조회. 단계마다 다음 버전으로 쌓고 같으면 쌓지 않으며 편집 기준 버전이 다르면 409, 추출 저장에서 요약 그룹 상호 배타 400, 기동 시드 = 프론트 기본 설정(investigation-core, 운영 문서종 마스터와 따로) Studio 지시서 버전 목록(2026-10-29 #1625, 결정 20261029-studio-config-version-list-from-studio) — GET …/classify/studio-configs·…/extract/studio-configs 가 분류·추출 에이전트의 GET /agents/{agent_id}/configs?order=desc 를 끝까지 받아 {available, versions} 로, 못 쓰면 available=false·빈 목록 AI·외부Studio 스키마 반영 없음. 버전 목록·고른 버전의 화면 값만 Studio 에이전트 지시서(Config) 조회(StudioAgentConfigVersions, StudioAgentConfigContent) 빠진 것
있는 클래스reference-documentuse-reference-pageSummaryDocTypeDialogsummary-doc-type-rowsStudioAgentConfigContentAgentClassifyConfigDraftAgentStudioConfigExtrasEntityAgentStudioConfigConflictExceptionAgentStudioClassifyConfigSaveRequestAgentStudioExtractConfigSaveRequeststudio-config-saveAgentClassifyConfigAgentExtractConfigAgentStudioClassifyConfigViewAgentStudioExtractConfigViewAgentStudioConfigUnavailableExceptionAgentDocumentTypeEntitySummaryGroupControllerSummaryGroupServiceSummaryGroupEntitySummaryGroupDocumentTypeEntityConfigVersionSyncconfig-versionsDocumentTypeSchemaControllerDocumentTypeSchemaServiceExtractionSchemaFieldEntityDocumentTypeSchemaVersionEntityStudioDocumentCategoryEntityStudioDocumentTypeEntityDocumentTypeSchemaSeederAgentStudioConfigVersionControllerAgentStudioConfigVersionServiceStudioAgentConfigVersionsstudio-config-versions-apiExtractDocTypePickerDialogExtractCoverageNoticeextract-coverage 엔드포인트SummaryGroupController 2/2 · DocumentTypeSchemaController 0/7 · AgentStudioConfigVersionController 0/8화면이 부르는 수 / 계약에 있는 수 메모필수 E2E 10개를 studio-schema prepared dev/prod에 등록: 조회/동기화 복구·관리자 충돌·Import 준비·Config 부가정보/상속·Step/분기/Export 추가·공유 Step 삭제·마지막 스키마 거절·TABLE 왕복. 실제 Spring API·전용 PostgreSQL·Studio 계약 서버, 엔진 stub이며 실제 Studio 변경·모델 실행·default 이동은 제외. 구 화면 /admin/classification-extraction-schemas 는 개발 도구로 내려갔다. 문서 분류·추출 스키마 저장은 investigation-core 에 둔다(2026-10-26 — 요약 그룹·INSTRUCT 와 같은 모듈, 상호 배타 검사가 요약 그룹 표를 읽는다). 관련 PR머지 25 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 25건) |
| 에이전트 스튜디오 · 보고서 설정6일 전 · #1939거의 안 지나감E2E 시나리오 15 | 프론트구현백엔드부분AI·외부해당 없음 | 프론트스키마 정의 3단계 INSTRUCT — 위탁사(위탁사 마스터) 보고서 탭·보고서 유형(청구유형 마스터)·보고서 베이스 프롬프트/출력 JSON 골격·유형별 본문, 기존 위탁사 설정 복사 (2026-10-19 #1165). 탭·본문은 서버 INSTRUCT API 로 읽고 저장한다(_lib/instruct-api.ts, 2026-10-21 #1268) — 탭 없는 위탁사는 빈 화면, 저장은 브라우저 10초 제한 없이 기다리고 실제 409 뒤에는 최신본으로 초기화하기 전 재저장을 막는다. 1·2단계는 아직 브라우저 저장소. 보고서 유형별 본문은 청구유형 전체 필수 — 모든 위탁사·모든 탭의 빈 본문은 저장 차단(입력란 문구·유형 카드 `확인 필요`·탭당 한 건·다른 위탁사 탭은 이름 접두, 서버와 같은 범위), `다른 탭에서 복사` 는 본문도 기본 체크(2026-10-24 #1442, 결정 20261024-studio-instruct-body-required) 백엔드INSTRUCT 설정 버전 저장(전 위탁사 한 벌 버전 → 위탁사별 탭 → 탭 × 보고서 유형 본문) — GET/PUT /api/v1/admin/agent-studio/instruct·버전 목록·버전 조회, 저장 응답 유실 뒤 오래된 baseVersion 으로 온 동일 내용은 최신본 200·다른 내용만 409, 서버 검증(변수·골격 깊이 8·보고서 유형·위탁사·보고서 유형별 본문 필수 — 2026-10-24 #1442), 기동 시드(신한·롯데 원문) (2026-10-21 #1268, 결정 20261021-studio-instruct-db-storage) 빠진 것
있는 클래스AgentStudioInstructControllerAgentStudioInstructServiceAgentStudioInstructValidatorAgentStudioInstructSeederAgentStudioInstructVersionEntityAgentStudioInstructTabEntityAgentStudioInstructTabBodyEntity 엔드포인트AgentStudioInstructController 2/4화면이 부르는 수 / 계약에 있는 수 메모보고서 설정 필수 E2E 10개를 report-settings prepared 개발/운영에 등록(2026-11-04). 실제 INSTRUCT API·전용 PostgreSQL 저장·재조회, 분류·추출 초기 조회만 Studio 계약 대역 사용. 위탁사 보존·탭 키/참조·선택 복사·byte 제한·골격 오류/경고·누락 본문·전체 탭 삭제 검증. 실제 Studio·LLM 보고서 생성·배포·위탁사 전송 양식 복사 제외. INSTRUCT 저장은 investigation-core 에 둔다(2026-10-21). 구 화면 /admin/analysis-layout 은 개발 도구로 내려갔고, 프론트의 /admin/summary-baseline 은 에이전트 스튜디오로 대체돼 지웠다(2026-10-19, 결정 20261019-admin-summary-baseline-retire). Linux JVM 저장 응답/재조회 시각 차이는 버전 행 flush 후 DB refresh로 수정(PR #1850), 기존 E2E 단언 유지·실제 PostgreSQL API 재생 추가. 관련 PR머지 14 · 마지막 머지 11/09
|
| 에이전트 스튜디오 · 보고서 양식거의 안 지나감E2E 시나리오 11(계획 1) | 프론트미구현백엔드구현AI·외부해당 없음 | 백엔드양식 등록·수정·버전·활성·복제, 양식 11종 + 프롬프트 양식 3건 시드(V202609281550). 활성화·삭제 경로가 비로그인 통과하던 것을 보호 목록에 올림(PR #604) 엔드포인트ReportTemplateController 0/8화면이 부르는 수 / 계약에 있는 수 메모보고서 양식 API 필수 통합 시나리오 10개를 report-templates prepared 개발/운영에 등록(2026-11-04). Next 프록시·실제 API·전용 PostgreSQL로 원문/변수 보존·길이 경계·이전 버전/복제 격리·버전 번호·코드 경계·403·감사 검증. 양식/변수 성공 결과 주입 없음, Studio/LLM/화면 클릭 제외. API 준비 완료, 프론트 화면만 남음. 단 화면은 고정 11종 프롬프트 편집 시안이라 계약 차이 확인 필요. 구 화면 /admin/report-templates 는 LNB 에서 빠졌다. |
Admin 콘솔
로그
화면 4개 · 점검 필요 2
| 메일 발송 로그 · 계정오늘 · #2181일부만 실행E2E 시나리오 16(계획 2) | 프론트구현백엔드구현AI·외부구현 | 프론트좌: 계정 설정·캐시 상태·변경 주기(변경 이력 변경자는 이름 → 없으면 사번, 야간 MA02 PR #1690) / 우: 발송 로그(검색·전체·실패만 토글, 서버 페이징, CSV — 서버 내보내기 API 로 조건 전체, 429·400 안내 토스트, 야간 NL01 PR #1095). 관리자 URL 직접 접근은 소유 메뉴 권한으로 차단. 목록 필터 조회 시점을 select 즉시·검색어 400ms 디바운스로(배치는 유지, PR #973, 결정 20261014-list-filter-auto-apply). 발송 로그 카드 아래 운영 안내(535 재설정·보고서 초안 전송 로그 메뉴, 야간 MA02 — 문구는 프로토타입 「캐시된 계정 정보」 그대로, PR #1696). 발송 로그 `보고서 명` 은 제목 전문(PR #1760). 저장 알림 두 갈래(비밀번호 동반 시 재설정 문구)·변경 예정일·이력 날짜만·반영 시각 24시간·D-day 14일 이하 danger·`적용됨` 성공색(야간 MA01, PR #2177) 백엔드계정 조회·비밀번호 재설정(변경 이력에 변경자 이름 `changedByName` — 조직 디렉터리, 야간 MA01 PR #1689) + 발송 로그 목록(상태·검색어·기간 필터, 서버 페이징, 요약 2종). 발송 로그 CSV 내보내기 `GET /api/v1/admin/report-mail-dispatches/export`(목록과 같은 조건 전체·같은 레벨 검사, 공통 CsvExporter — 시스템 전체 동시 3건, HSA-AD-006). 프론트 CSV 버튼이 이 API 를 부른다(야간 NL01, PR #1095) AI·외부사내 Postfix SMTP 있는 클래스MailAccountControllerMailAccountServiceMailAccountPasswordStoreMailAccountViewNotAllowedExceptionMailAccountSettingsRequestMailAccountSettingsFormSmtpMailDeliveryAdapterReportMailDispatchLogControllerReportMailDispatchLogServiceReportMailDispatchEntityReportMailDispatchRecorderReportMailDispatchLogCsvColumnsCsvExporterCsvExportGateFilterChipFieldFieldLabelFieldDescriptionFieldErrorFormActions 엔드포인트MailAccountController 2/3 · ReportMailDispatchLogController 1/2화면이 부르는 수 / 계약에 있는 수 메모발송 로그 가칭(MailDeliveryLog*)은 investigation-core 의 ReportMailDispatch* 로 구현됐다. 메일 계정 필수 E2E 10개 — 암호문/주기 보존·길이 경계·저장 복구·발신자·이력/이름·검색/정렬·영역별 장애·전체 CSV·실제 시험 SMTP 535 후 무재기동 복구. e2e/mail-account/run.py의 실제 API·전용 DB·가상 디렉터리 뷰·인증 SMTP 회차. 운영 SMTP·Smart심사/Oracle·Studio 제외. 관련 PR머지 54 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 54건) 점검 필요
|
| 보고서 초안 전송 로그6일 전 · #1939일부만 실행E2E 시나리오 12(계획 1) | 프론트구현백엔드부분AI·외부미구현 | 프론트메일 전송 이력 — 서버 페이징·`전체`/`실패만`·검색(접수 ID·위탁사·피보험자·채널)·CSV `report-draft-send-logs.csv`·우측 전송 본문 뷰어(정식 포맷 전까지 전송 기록)+복사·본문에 보이는 행 강조(`DataTable` `selectedRowId`), 메일 HTTP 는 `-` (결정 20261026-report-send-logs-mail-history) 백엔드`GET /api/v1/admin/report-deliveries`(+`/export`) — `report_mail_dispatches`·`smart_review_transfers` 를 접수 건·채널 축으로 합쳐 읽는 전사 조회(위탁사·피보험자, 머리말 집계는 상태 필터 제외), 메뉴 `REPORT_SEND_LOG`. 보고서별 메일 이력은 `ReportMailController` AI·외부스마트심사 전송 없음 빠진 것
있는 클래스ReportMailDispatchEntityReportMailDispatchRecorderReportDeliveryLogControllerReportDeliveryLogQueryServiceFilterChip 엔드포인트ReportDeliveryLogController 1/2 · ReportMailController 1/2화면이 부르는 수 / 계약에 있는 수 메모보고서 초안 전송 로그 필수 E2E 10개 — 검색 대상·페이지 경계·재전송 구분·선택/본문 초기화·실제 복사·과거 미기록 값·조회 복구·기간 API·전체 CSV·메일 로그 정합성. e2e/report-send-logs/run.py의 실제 API·전용 DB 회차, 가상 전송 기록 73건 사용. 실제 Studio·SMTP/Smart심사 전송·운영 DB 제외. 실제 전송 연결 1개 추가: report-send 실행기에서 SMTP/Smart심사 시험 수신 성공 후 관리자 목록·CSV와 실제 이력 대조. 기존 로그 가상 경계 10개는 유지. 관련 PR머지 25 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 25건) 점검 필요
|
| 보고서 파기 로그3일 전 · #2094거의 안 지나감E2E 시나리오 11(계획 1) | 프론트구현백엔드구현AI·외부해당 없음 | 프론트보고서번호 검색·서버 페이징(쪽 크기 20/50/100)·CSV 내보내기, 검색어·쪽·쪽 크기는 주소 상태. 확정된 3개 필드(보고서번호·인입일자·파기일자)만 표시하고 일자는 날짜(`YYYY.MM.DD`)로 보인다(결정 20260917, PR #1687). 백엔드파기 DB 트랜잭션에서 investigation_reports.created_at을 로그에 선적재한 뒤 원본을 삭제한다. GET /api/v1/admin/report-disposal-logs(+/export), 메뉴 REPORT_DISPOSAL_LOG. 있는 클래스ReportPurgeServiceReportPurgeWorkerReportPurgeCandidateFinderReportDisposalRecorderReportDisposalLogEntityReportDisposalLogServiceReportDisposalLogControllerReportDisposalLogCsvColumnsReportDisposalLogView 엔드포인트ReportDisposalLogController 1/2화면이 부르는 수 / 계약에 있는 수 메모파기 로그 필수 E2E 10개를 report-disposal-logs prepared 개발/운영에 등록(2026-11-05). 실제 API·전용 PostgreSQL·Next 화면/CSV: 동시각 페이징·주소·미적용 검색·날짜·기간·전체 반출·상한·403·실제 파기 후 최초 인입 보존. 조회용 과거 이력은 준비하며 실제 파기 성공 로그는 제품 Worker가 생성(통계 게이트 유지). #1842 빈 상태 문구만 변경 확인·해당 문구에 비의존, 제품 변경·Studio/운영 외부 파일 파기 제외. 파기 범위 기본값·통계 backfill 연결은 결정 20260909 경계 🔴. 로그 저장·조회·CSV·화면은 WBS 27.4로 구현. 관련 PR머지 16 · 마지막 머지 11/10
머지된 PR 은 최근 15건만 보여 줍니다 (전체 16건) |
| 감사 로그3일 전 · #2094일부만 실행E2E 시나리오 17 | 프론트구현백엔드구현AI·외부해당 없음 | 프론트관리자 URL 직접 접근은 소유 메뉴 권한으로 차단. 목록 필터를 공통 FilterBar(라벨 없는 한 줄·`초기화`)로 묶고 select 즉시·검색어 400ms 디바운스·시작일 있을 때 날짜 즉시 조회(PR #973, 결정 20261014-list-filter-auto-apply). 검색 필터 위 `CSV 다운로드` — 조건·정렬 그대로 서버 내보내기, `audit-logs-YYYY-MM-DD.csv`(PR #1096, 결정 20261016-admin-log-csv-export) `조회`·Enter 는 같은 조건이어도 1쪽으로 가 목록을 다시 받는다(받는 동안 표 유지·`조회` 잠금, 결정 20261019-list-filter-apply-always-refetch, PR #1159). 열·조건은 프로토타입의 작업 항목 × 이벤트 타입 틀, Transaction ID 는 요청 ID, 작업 내용은 기록된 값으로 만든 문장(결정 20261103-audit-log-screen, PR #1774). 백엔드기간·유형 조회, 발송 계정 설정 변경 단일 이벤트·대상 필터, 비밀번호 변경 포함. 로그인 성공·실패·로그아웃 기록(LOGIN·LOGOUT, AuthAuditRecorder — SSO 비밀번호 오류는 사이트마인더 단계라 미기록). CSV 내보내기 `GET /api/v1/audit-logs/export`(목록과 같은 조건 전체, 공통 CsvExporter — 시스템 전체 동시 3건·10만 행 상한, HSA-AD-006). 반출·보안·관리자 설정·삭제 20종 기록(LOG_EXPORTED·FILE_DOWNLOADED·SESSION_ENDED·마스터 변경·컬렉션 삭제 등, 공통 AuditedActions — 결정 20261018-audit-event-scope-expansion). 사고조사 업무 행위 11종 기록(분석 요청·다시 분석·낱장 편집·추출값 수정·요약 수정/초기화·초안 생성/수정) + 화면 표시 설정 `hwss.audit.view.hidden-event-types`·`GET /api/v1/audit-logs/event-types`(결정 20261023). 연동 교환 기록 `integration_exchanges`·`GET /api/v1/admin/integration-exchanges`(이미지·Studio 요청/응답 본문, 결정 20261023-integration-exchange-log) 있는 클래스AuditEventClassificationAuditLogControllerCollectionFileIndexingFailureAuditorIntegrationExchangeControllerIntegrationExchangeServiceInboundExchangeLoggingFilterOutboundExchangeLoggingIntegrationExchangeViewIntegrationExchangeDetailDialogAuditTrailServiceAuditViewPropertiesAuditLogEntityAuditTrailPortAdapterAuthAuditRecorderAuditLogCsvColumnsCsvExporterCsvExportGate 엔드포인트AuditLogController 2/3 · IntegrationExchangeController 2/2화면이 부르는 수 / 계약에 있는 수 메모감사 로그 필수 E2E 10개 — 복합 검색·기간 경계·이메일 변경 감사·숨김 우회 방지·조회 복구·실제 CSV 전체/서식/상한/동시 제한/반출 기록. e2e/audit-logs/run.py의 실제 API·전용 DB 회차. CSV 40건 경계·단일 JVM 동시 3건 검증, 실제 Studio·SSO·메일 전송·10만 행 성능 제외. 관련 PR머지 66 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 66건) |
Admin 콘솔
조직·권한
화면 2개
| 조직도3일 전 · #2094일부만 실행E2E 시나리오 17 | 프론트구현백엔드구현AI·외부부분 | 프론트ProtoType 기준 조직 트리·직원 표·상세 팝업 UI 및 좁은 화면 대응. 관리자 URL 직접 접근은 소유 메뉴 권한으로 차단. 조직 출처 안내는 organization-source-notice.. 목록 필터 조회 시점을 select 즉시·검색어 400ms 디바운스로(배치는 유지, PR #973, 결정 20261014-list-filter-auto-apply) `조회`·Enter 는 같은 조건이어도 1쪽으로 가 목록을 다시 받는다(받는 동안 표 유지·`조회` 잠금, 결정 20261019-list-filter-apply-always-refetch, PR #1159). 백엔드부서 트리·직원·레벨 교체·이메일 수정·조회 범위 포트(PR #540). 소속 = 부서장 지정 → 근무소속센터 → 근무소속기관, 겸임 부서장 범위 합산, 비활성(CONN_PSYN=N) 조직도 기본 제외·로그인 거절(결정 20261012-user-org-affiliation-basis). 조직 변경 사원: 사원별 확인 기록·기준 시각으로 대상자 판정, 일괄 확인 완료(결정 20260827) AI·외부스마트심사 오라클 조회 어댑터(기본 비활성) — 조직 목록·사용자 전체·사용자이력정보(VW_AI_UVORG002_HIS) 5분 캐시 빠진 것
있는 클래스DepartmentControllerUserControllerOrganizationServiceUserRoleAssignmentServiceUserProfileUpdateServiceSmartReviewUserDirectoryAdapterOrganizationScopeAdapterOrganizationAffiliationCachingOrganizationDirectoryOrganizationDirectoryPropertiesOrganizationChangeServiceOrganizationChangeControllerSmartReviewOrganizationChangeHistoryAdapterNoticeFieldFieldSetFieldOptionSmartReviewOrganizationDirectoryAdapter 엔드포인트DepartmentController 1/1 · UserController 5/6 · RoleController 1/1 · OrganizationChangeController 2/2화면이 부르는 수 / 계약에 있는 수 메모OrganizationScopePort(base 선언 → organization-core 구현)가 레벨별 조회 범위를 부서 트리로 푼다 — 출발 조직은 소속 + 본인이 부서장인 조직 전부, 기준은 현재 소속(결정 20261013-org-move-scope-current-department). 라이브 트리 최상위는 회사(한화손해사정 00114) 하나 — 상위 없는 조직을 어댑터가 회사 아래로 묶는다(결정 20261012 S6). 화면은 부서 유형을 표시하지 않는다. 스마트심사 조직 데이터 보정(상위 코드 누락 등) 요청은 남아 있다. 조직도 필수 E2E 10개 — 복합 조회·정렬/페이지·입력 검사·저장 원자성/복구·레벨 인가·마지막 관리자·새 인사 변경 보존/재등장. e2e/organization/run.py의 실제 API·전용 DB 회차, 실제 HR·SSO·Studio 제외. 관련 PR머지 78 · 마지막 머지 11/13
머지된 PR 은 최근 15건만 보여 줍니다 (전체 78건) |
| 권한 관리6일 전 · #1939거의 안 지나감E2E 시나리오 17(계획 1) | 프론트구현백엔드구현AI·외부해당 없음 | 프론트ProtoType 기준 권한 매트릭스·지식컬렉션 승인 행(사용 안 함/조회만/조회+1차 승인)·승인 흐름 카드·마지막 저장 시각·`기본값`(편집본만 서버 기본값으로 되돌림, 계약 없으면 비활성). 관리자 URL 직접 접근은 소유 메뉴 권한으로 차단. 화면 구성은 approval-flow-card·permission-matrix-table·permission-console-section·permission-cells. 백엔드레벨 × 메뉴 매트릭스·1차 승인 지정(approval)·기본값(defaultAllowedByRole·defaultFirstApprovalRoleCode, 읽기 전용)·내 권한. 이 매트릭스가 모든 API 의 서버 인가 기준이다 — MenuAuthorizationInterceptor 가 핸들러 접근 표시와 대조해 403 MENU_ACCESS_FORBIDDEN(결정 20261012-api-menu-authorization) 있는 클래스MenuPermissionControllerMenuPermissionServiceRoleMenuPermissionEntityRoleControllerOrganizationCollectionApprovalPolicyAdapterMenuAuthorizationInterceptorOrganizationMenuPermissionLookupAdapterApiAccessRulePermissionAuditRecorderBoundMenuPermissionAssignmentExceptiontoDisplayRowsbreadcrumbOf 엔드포인트MenuPermissionController 3/4화면이 부르는 수 / 계약에 있는 수 메모레벨 이름은 서버 값 Lv5~Lv1(결정 20261014 §2, 2026-10-21 — 프로토타입은 직책 단계 이름 그대로). 메뉴 권한과 별개로 사고조사 조회 범위(Lv5·Lv4=전사, Lv3·Lv2=레벨에 맞는 상위 조직과 하위, Lv1=본인)는 OrganizationScopeAdapter 가 적용한다(PR #540·#1227). 권한 관리 필수 E2E 10개 — 여러 칸 저장·1차 승인 해제·실패 복구·저장 중 잠금·멀티 레벨·권한 갱신. e2e/permissions/run.py 전용 실제 API·DB 회차, Studio·SSO·조직 실연동 제외. 확인 창의 빠른 두 번 클릭은 동기 잠금으로 저장 요청 1건만 전송한다(PR #1736). 기존 권한 관리 E2E 개발·운영 각각 10개 통과(2026-11-03). 권한 연결 1개 추가: 메뉴 권한 회수 후 기존·신규 로그인 세션의 CSV 반출 403과 재부여 후 복구. 권한 실행기 총 11개. 관련 PR머지 56 · 마지막 머지 11/10
머지된 PR 은 최근 15건만 보여 줍니다 (전체 56건) |
화면 ↔ 라우트 ↔ 클래스의 대응과 코드로는 알 수 없는 빠진 것(gaps)은 docs-site/data/coverage.json 에 사람이 적습니다. 상태는 dev 에 머지될 때마다 라우트·클래스·어댑터의 존재, 남은 클래스, 스텁 표시로 다시 계산하고, 열린 PR 의 변경 파일로 진행 중 표시를 붙입니다. 빠진 것을 채웠다면 그 행의 gaps 에서 지워 주세요. 담당은 표가 아니라 이 페이지에서 지정하고(로그인 필요), 관련 PR 이력은 그 화면의 라우트·클래스 파일을 바꾼 PR 로 빌드가 붙입니다.