hwss-investigation-agent-backend

HWSS 백엔드 가이드

폴더(모듈 → 패키지) 단위로 무엇이 있는지와 파일마다 맡은 역할을 정리했습니다. 역할 문장은 각 클래스의 Javadoc 첫 문장을 옮겼고, 주석이 없는 파일은 이름 규칙으로 보충했습니다. 파일 이름을 누르면 GitHub 소스로 가고, 최근 변경된 파일은 강조됩니다. 컨트롤러 행에는 그 API 를 부르는 프론트 화면이 연결됩니다. 코드에 쓰인 W·N·ST·DP 번호는 주말·야간 작업 플랜의 항목 번호, S-00x 는 docs/specs 스펙 번호입니다. 섹션 제목 옆 말풍선으로 댓글을, 이슈 버튼으로 GitHub 이슈를 남길 수 있습니다.

1666Java 소스
711테스트
230Flyway 마이그레이션
20Gradle 모듈

dev 기준 #2181 머지 11/13 17:36 · 커밋 b8b358b4 · 계기 Merge pull request #2181 from fdxchatgpt/feat/proto-front-parity-20261112 프로토·프론트 화면 차이 9건 동일화 (야간 20261112 아침 확인) 완료 · 2026-11-13 17:48 KST 빌드 · 빌드 런

모듈 계층과 의존 방향

  1. base공통 응답·예외·인증 골격·포트 인터페이스
  2. <domain>-sharedDTO·enum 계약 (base 에만 의존)
  3. <domain>-core엔티티·저장소·서비스·컨트롤러·마이그레이션 (base + 자기 shared)
  4. apps/hwss-api전부 조합해 실행

도메인 core 끼리는 직접 의존할 수 없어서, 서로 부를 때는 base 의 *Port 인터페이스를 거치고 구현체는 각 모듈의 integration/·port/ 패키지에 둡니다. 빌드의 verifyModuleDependencies 가 이 방향을 강제합니다.

패키지 이름이 뜻하는 것

web/
REST 컨트롤러
service/
비즈니스 로직·트랜잭션
entity/
JPA 엔티티(테이블)
repository/
Spring Data 저장소
exception/
도메인 예외·에러 코드
config/
hwss.* 설정 바인딩
integration/
base 포트 구현체
dto/ · status/
shared 계약·enum

시작하기

로컬 실행 · Swagger

JDK 17 이상 · Docker 필요 · 모든 명령은 hwss-investigation-agent-backend/ 에서 실행

접속 주소

Swagger UI 는 /swagger-ui/index.html 로 이동해 열립니다. Swagger 와 api-docs 경로는 세션 없이 열리고, 문서의 서버 주소는 같은 오리진(/)으로 고정돼 있어 “Try it out” 이 지금 연 호스트로 요청을 보냅니다.

Swagger 에서 로그인이 필요한 API 부르기

조사자·관리자 API 는 세션 쿠키가 없으면 401 입니다. Swagger 에서 먼저 로그인하면 브라우저가 httpOnly 쿠키를 저장해 이후 요청에 자동으로 붙입니다.

# auth-controller → POST /api/v1/auth/login
{
  "employeeNo": "H2016-0071",
  "password": "devpass"
}

H2016-0071 은 마이그레이션이 넣어 두는 시드 시스템 관리자이고, 비밀번호는 AUTH_LOCAL_PASSWORD 값(셸·.env, 없으면 Infisical)입니다. 이 로그인은 local 프로필에서만 동작합니다.

로그인 전 경로(auth/login·auth/refresh·auth/logout·auth/sso/**)와 이미지시스템 수신 API 를 빼면 모든 API 가 세션을 요구합니다. 컨트롤러의 접근 표시(@MenuPermission·@LoginRequired)를 인가 인터셉터가 보고 세션이 없으면 401, 메뉴 권한이 없으면 403 을 냅니다.

1PostgreSQL 띄우기

docker compose up -d   # postgres:16 · DB/계정/비밀번호 모두 hwss · 5432

5432 를 다른 PostgreSQL 이 쓰고 있으면(role "hwss" does not exist) 컨테이너를 5433 으로 띄우고 기동 명령에 DB_URL=jdbc:postgresql://localhost:5433/hwss 를 더합니다. 테이블은 앱이 기동하면서 Flyway 로 만듭니다.

2 서버 기동 — bootRun

DB_PASSWORD=hwss \
AUTH_JWT_SECRET=local-dev-only-secret-key-32bytes-min \
AUTH_LOCAL_PASSWORD=devpass \
SPRING_PROFILES_ACTIVE=local \
./gradlew :hwss-api:bootRun

로그에 Successfully applied … migrations 와 Started HwssApiApplication 이 보이면 성공입니다. bootRun 은 먼저 개발 시크릿 저장소(Infisical)의 팀 공용 값을 넣습니다 — 우선순위는 셸 환경변수 > apps/hwss-api/.env > Infisical > application*.yml 기본값이고, CLI 가 없거나 로그인·터널이 안 돼 있으면 경고만 내고 .env 만으로 뜹니다(끄기 -PnoSecrets, 안내 docs/guides/dev-secrets-infisical.md). 위 명령은 셸 값이 앞서 개인 DB 로 뜨고, 셸·.env 를 비운 채 띄우면 Infisical 값(local,dev-shared)으로 공용 DB 에 붙습니다. DB_PASSWORD·AUTH_JWT_SECRET 은 기본값이 일부러 없어서 어느 경로로도 값이 없으면 기동이 실패합니다. 프로필은 --args='--spring.profiles.active=local' 로 줘도 같습니다.

환경변수

DB_PASSWORD필수DB 비밀번호. 로컬 compose 는 hwss.
AUTH_JWT_SECRET필수세션 JWT 서명 키 — 32바이트 이상 아무 문자열(로컬 전용 값).
SPRING_PROFILES_ACTIVE=local기본값도 local — 개발용 로그인 스텁(LocalDevIdentityProvider)을 켠다. local 을 뺀 프로필이면 이 로그인이 없다. 공용 DB 는 local,dev-shared.
AUTH_LOCAL_PASSWORDlocal 프로필 공용 로그인 비밀번호. 비우면 로그인 자체가 막힌다.
DB_URL · DB_USERNAME기본 jdbc:postgresql://localhost:5432/hwss · hwss.
IMAGE_INCOMING_ROOT이미지시스템과 공유하는 ZIP 수신 폴더(기본 runtime/incoming). 이미지시스템 데모와 같은 절대 경로여야 API-02 가 동작. IMAGE_STORAGE=s3 면 파일 원본은 S3 로 간다.
IMAGE_PROCESSING_ROOTZIP 압축 해제·낱장 파일 처리 폴더(기본 runtime/image-processing).
COLLECTION_STORAGE_ROOT지식컬렉션 업로드 파일 저장 폴더(기본 runtime/collections). COLLECTION_ORIGINAL_STORAGE=s3 면 원본은 S3 로 간다.
AI_PLATFORM_PROVIDERnone(기본, in-memory) 또는 studio(업스테이지 Studio 접속 설정 필요).
MAIL_ENABLEDSMTP 발송 켜기(기본 false). 켜면 MAIL_HOST·MAIL_USERNAME·MAIL_PASSWORD·MAIL_FROM 등이 필요.
SMARTREVIEW_ENABLED스마트심사 오라클 사용자·조직 라이브 조회(기본 false).
AUTH_SSO_ENABLEDSSO 콜백 로그인 켜기(기본 false). 앞단 WebAgent 가 있어야 동작.

자주 쓰는 Gradle 명령

./gradlew :hwss-api:bootRun서버 기동 (위 환경변수와 함께).
./gradlew build전체 빌드 — 테스트 · spotlessCheck · verifyModuleDependencies · JaCoCo 리포트까지 한 번에.
./gradlew test전체 테스트. DB·Docker 없이 H2(PostgreSQL 호환 모드)로 돈다.
./gradlew :investigation-core:test --tests '*SummaryResultServiceTest'모듈 하나·테스트 클래스 하나만 실행.
./gradlew spotlessApply포맷 자동 수정. 검사만은 spotlessCheck (위반 시 빌드 실패).
./gradlew verifyModuleDependenciescore 끼리 직접 의존 같은 모듈 경계 위반 검사.
./gradlew coverageSummary모듈별 커버리지 표 — build/reports/jacoco/coverage-summary.md. 빌드를 실패시키지 않는 보고 전용.
./gradlew :hwss-api:exportOpenApiSpecopenapi/openapi.json 스냅샷 갱신(서버·DB 불필요). 이어서 프론트에서 pnpm openapi:gen 을 같은 PR 에 커밋.
./gradlew :hwss-api:bootJar실행 jar 생성 — Dockerfile 이 쓰는 것과 같은 산출물.
./gradlew --no-daemon --continue spotlessCheck test verifyModuleDependencies verifyProductionClasspath coverageSummaryCI(Backend Harness)가 돌리는 명령. PR 에서는 jacocoAggregatedReport 가 더해진다.

Windows 는 ./gradlew 대신 .\gradlew.bat. 더 자세한 절차(프론트·이미지시스템 데모 함께 띄우기)는 docs/guides/local-dev-run-guide.md, .http 시나리오 실행은 docs/guides/api-http-testing-guide.md.

시작하기

관측 스택 — Prometheus · Grafana · Loki

선택 — 지연·에러율·힙을 눈으로 볼 때만 띄웁니다 · 명령은 저장소 최상위에서 실행

백엔드가 내보내는 지표와 컨테이너 로그를 한 화면에서 보는 운영자용 스택입니다. 감사 로그·업무 통계의 데이터 원천이 아닙니다 — 그건 PostgreSQL 입니다. 다만 통계의 서비스 상태 카드는 STATISTICS_SERVICE_STATUS_PROMETHEUS_URL 을 주면 Prometheus 를 읽고, 비어 있으면 연결 전으로 표시됩니다. 앱 배포와 생명주기가 달라 별도 compose 로 둡니다.

1스택 띄우기

docker compose -f infra/observability/docker-compose.yml up -d

내릴 때는 같은 명령의 down, 쌓인 데이터까지 지우려면 down -v. 백엔드(bootRun)가 떠 있으면 Prometheus 가 15초마다 /actuator/prometheus 를 당겨가고, 1분 안에 Grafana → HWSS → “HWSS API Overview” 에 HTTP 처리율 · p95 지연 · 5xx 비율 · JVM 힙 · Hikari 풀 · 외부 연동 실패율/지연이 그려집니다.

접속 주소

Grafanahttp://localhost:3200 Prometheushttp://localhost:9090 스크레이프 상태http://localhost:9090/targets
Loki컨테이너 내부 http://loki:3100 — Grafana 를 통해서만 봅니다(자체 UI 없음)

Grafana 초기 계정은 admin / admin 으로, 로컬 전용입니다. 데이터소스(Prometheus·Loki)와 대시보드는 프로비저닝돼 있어 따로 추가할 필요가 없습니다. 포트 3200·3101 은 다른 로컬 서비스와 겹치지 않게 잡은 값입니다.

구성 요소

Prometheus수치 시계열을 모읍니다. 백엔드 /actuator/prometheus 를 당겨가는(pull) 쪽이라 앱은 Prometheus 의 존재를 모릅니다.
Loki로그 줄 저장소 — Prometheus 의 로그 버전. 본문 전문 인덱스를 만들지 않고 라벨(container=…)로 범위를 좁힌 뒤 그 덩어리만 훑습니다. 그래서 가볍고, 대신 “아무 단어나 전체 검색”에는 약합니다.
Alloy수집기. 컨테이너 로그(도커 소켓)와 파일 로그(runtime/logs/*.log) 두 갈래를 Loki 로 밀어 넣습니다(push). 둘 다 같은 container 라벨을 붙입니다.
Grafana위 둘을 같은 시간축에 놓고 보는 화면. “5xx 가 튄 시각”에서 그 시각 로그로 넘어가는 것이 이 조합의 목적입니다.

2Loki 로 로그 보기

Grafana → Explore → 왼쪽 위 데이터소스 드롭다운을 Loki 로 바꾸고, Label browser 에서 container 라벨을 고르면 됩니다. 질의는 LogQL 입니다.

# 컨테이너 하나의 로그
{container="hwss-loki"}

# 문자열 필터 — 라벨로 범위를 좁힌 뒤 그 안에서 찾는다
{container="hwss-api"} |= "ERROR"

# JSON 로그일 때, 한 요청이 남긴 줄만
{container="hwss-api"} | json | mdc_requestId="응답 헤더 X-Request-Id 값"

주의 bootRun 으로 띄운 백엔드의 로그는 그냥은 Loki 에 들어오지 않습니다. Alloy 의 도커 수집은 컨테이너 로그만 보는데 bootRun 은 호스트 JVM 프로세스이기 때문입니다. 그래서 파일 수집 갈래를 하나 더 두었습니다 — compose 가 hwss-investigation-agent-backend/runtime/logs 를 컨테이너의 /var/log/hwss 로 마운트하고, Alloy 가 그 폴더의 *.log 를 따라 읽어 같은 container="hwss-api" 라벨로 보냅니다. 아래처럼 출력을 그 폴더로 흘리기만 하면 됩니다.

# 최초 1회
mkdir -p hwss-investigation-agent-backend/runtime/logs

# 기동 — hwss-investigation-agent-backend/ 에서
LOG_FORMAT=json DB_PASSWORD=hwss AUTH_JWT_SECRET=local-dev-only-secret-key-32bytes-min AUTH_LOCAL_PASSWORD=devpass SPRING_PROFILES_ACTIVE=local ./gradlew -q :hwss-api:bootRun | tee runtime/logs/app.log

LOG_FORMAT=json 이라야 | json 필드 질의가 됩니다. -q 는 Gradle 자신의 진행 줄을 빼서 파일이 JSON 줄로만 차게 합니다. 수집까지 10초쯤 걸리고, {container="hwss-api"} 가 잡히면 된 것입니다. 다른 경로에 남기려면 HWSS_LOG_DIR 에 절대 경로를 주고 스택을 다시 올립니다. 라벨 이름을 서버(컨테이너 수집) 쪽과 같게 맞춰 두었으므로 hwss-api 질의는 로컬과 개발 서버가 동일합니다.

기본 로그는 사람이 읽는 콘솔 형식이라 | json 필드 질의가 되지 않습니다. LOG_FORMAT=json(또는 json 프로필)을 주면 한 줄 JSON 이 되고, 요청마다 붙는 X-Request-Id(응답 헤더로도 돌아옵니다)가 mdc.requestId 로 나갑니다. 사번 등 개인정보는 로그에 싣지 않습니다 — 누가 무엇을 했는지는 감사 원장(audit_logs)의 몫입니다.

막힐 때

error getting credentials … docker-credential-desktop … not found in $PATHDocker Desktop 을 지웠는데 ~/.docker/config.json 의 credsStore 가 desktop 으로 남아 있어서 이미지 pull 이 막힌 것입니다(런타임이 OrbStack·Colima 인 경우 흔합니다). macOS 는 sed -i '' 's/"desktop"/"osxkeychain"/' ~/.docker/config.json, 또는 그 줄을 지우면 됩니다 — 공개 이미지를 받는 데 로그인은 필요 없습니다. 관측 스택만의 문제가 아니라 docker compose 전반에 걸립니다.
대시보드가 No dataPrometheus → Targets 에서 hwss-api 가 UP 인지 봅니다. DOWN 이면 백엔드가 안 떠 있거나 8080 이 아닌 포트입니다. 로컬 타깃은 host.docker.internal:8080 으로 잡혀 있습니다.
외부 연동 패널만 비어 있음정상입니다. ai-platform(기본 provider=none)·smart-review(기본 꺼짐)는 켜야 시계열이 생깁니다.
Loki 에 hwss-api 라벨이 없음bootRun 출력을 runtime/logs/ 로 흘리고 있는지 봅니다(위 tee). 파일이 생긴 뒤 수집까지 10초쯤 걸립니다. docker logs hwss-alloy 에 loki.source.file.hwss_files 가 보이면 파이프라인은 살아 있는 것입니다.

구성 파일과 개발 서버 반입 방식은 infra/observability/README.md, 스택을 이렇게 나눈 근거는 docs/decisions/20260828-observability-stack.md, 프론트·이미지시스템 데모까지 함께 띄우는 절차는 docs/guides/local-dev-run-guide.md 에 있습니다.

변경 추적

최근 변경

최근 14일 · PR 146건 (최근 20건 표시)

dev 에 머지된 PR 중 이 가이드 범위의 파일을 바꾼 것입니다. 파일을 누르면 아래 해당 행으로 이동하고, 7일 이내에 바뀐 파일 행은 주황색으로 강조됩니다.

#218111/13 · 오늘제목은 로그인 후 표시
#218811/13 · 오늘제목은 로그인 후 표시
#218011/13 · 오늘제목은 로그인 후 표시
#218411/13 · 오늘제목은 로그인 후 표시
#218511/13 · 오늘제목은 로그인 후 표시
#214911/13 · 오늘제목은 로그인 후 표시
#216111/13 · 오늘제목은 로그인 후 표시
#214611/12 · 어제제목은 로그인 후 표시
#215111/11 · 어제제목은 로그인 후 표시
#214411/11 · 어제제목은 로그인 후 표시
#214011/11 · 어제제목은 로그인 후 표시
#213211/11 · 어제제목은 로그인 후 표시
#212011/11 · 어제제목은 로그인 후 표시
apps/hwss-api/src/test/java/ai/clush/hwss/api/workflow/scenario/WorkflowScenarioRunner.javamodules/investigation-core/src/main/java/ai/clush/hwss/investigation/core/service/ClassificationResultService.javascenarios/workflow/README.mdscenarios/workflow/edge/edit/atomic-rollback.jsonscenarios/workflow/edge/edit/classify-change-after-extraction.jsonscenarios/workflow/edge/edit/delete-all-rejected.jsonscenarios/workflow/edge/edit/duplicate-order-rejected.jsonscenarios/workflow/edge/edit/unknown-page-rejected.json+34
#213711/11 · 어제제목은 로그인 후 표시
#213011/11 · 2일 전제목은 로그인 후 표시
#211211/11 · 2일 전제목은 로그인 후 표시
#212811/11 · 2일 전제목은 로그인 후 표시
#212311/11 · 2일 전제목은 로그인 후 표시
#211311/11 · 2일 전제목은 로그인 후 표시
#210911/11 · 2일 전제목은 로그인 후 표시

루트

hwss-investigation-agent-backend/GitHub

빌드·배포·로컬 실행에 필요한 루트 파일

build.gradle이력6일 전 · #1946빌드루트 빌드 — 전 서브프로젝트에 Java 17·Spotless·JaCoCo 적용, 모듈 의존 방향 검증 태스크 verifyModuleDependencies, 커버리지 요약 태스크 coverageSummary.
settings.gradle이력빌드모듈 등록과 projectDir 매핑 — base / <domain>-shared / <domain>-core / apps 계층과 의존 방향 규칙을 주석으로 설명한다.
gradlew · gradlew.bat빌드Gradle Wrapper 실행 스크립트.
gradle/wrapper/빌드Wrapper jar 와 배포판 버전 지정 properties.
Dockerfile이력4일 전 · #2054배포2단 빌드 — JDK 에서 :hwss-api:bootJar 생성 → JRE 이미지에 certs/*.crt 를 JVM 신뢰 저장소로 등록하고 8080 으로 실행.
.dockerignore이력배포이미지 빌드 컨텍스트에서 build 산출물·IDE 파일·문서를 뺀다.
docker-compose.yml이력로컬로컬 개발용 PostgreSQL 16 (hwss/hwss) — 운영 구성이 아니다.
gradle.properties이력6일 전 · #1946빌드Gradle JVM·워커 수 상한 (CI 장비 메모리 보호).
libs/빌드공개 저장소에 없는 업체 제공 jar 를 두는 저장소 안 Maven 폴더.
osv-ignore.txt이력검증의존성 취약점 검사의 예외 목록 — 권고 id 와 사유.
scenarios/검증워크플로 시나리오 — API 로 상태 전이를 돌려 단계마다 기대 결과를 판정한다(WorkflowScenarioTest).
scripts/검증HTTP 시나리오 실행, JaCoCo 변환·수동 커버리지 누적 등 CI 보조 스크립트.
README.md이력문서모듈 구성·실행·검증 안내.
CLAUDE.md이력문서Claude Code 작업 컨텍스트 — 모듈 구조, 빌드·테스트·로컬 실행 방법, 금지 사항.
AGENTS.md이력문서Codex 작업 지침 — 공통 패턴 우선 사용과 모듈 경계 규칙 요약.

apps/

apps/hwss-api/GitHub

실행 앱

실행 앱 — 부팅 엔트리포인트. 필요한 core/shared 모듈을 전부 조합하고, 앱 설정·로컬 시드·통합(API) 테스트를 가진다.

3 소스215 테스트
의존 모듈 base investigation-shared investigation-core workflow-shared workflow-core classification-shared classification-core smartreview-core mail-core organization-shared organization-core aiplatform-core collection-shared collection-core chat-shared chat-core audit-shared audit-core
주요 라이브러리 spring-boot-starter-web spring-boot-starter-actuator micrometer-registry-prometheus springdoc-openapi-starter-webmvc-ui spring-boot-starter-data-jpa flyway-core flyway-database-postgresql postgresql spring-boot-devtools

api/1GitHub

앱 루트

HwssApiApplication.java이력33.3%클래스Spring Boot 부팅 진입점 — 모든 core 모듈의 빈·엔티티·Flyway 경로를 한 앱으로 조합한다.

api/config/1GitHub

앱 수준 설정 (OpenAPI 메타데이터).

OpenApiConfig.java이력100.0%설정springdoc 이 생성하는 /v3/api-docs 문서의 메타데이터.

api/config/realtime/1GitHub

PostgresReportEventFanout.java이력91.0%클래스SSE 변경 신호를 PostgreSQL LISTEN/NOTIFY 로 모든 인스턴스에 나눠 준다 (결정 20261014-realtime-updates-sse 「보완 2026-10-23」 — 운영 AP 2대 이중화, 결정 20261023-production-k0s-cluster).

빌드·리소스6GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base, investigation-shared, investigation-core, workflow-shared, workflow-core, classification-shared, classification-core, smartreview-core, mail-core, organization-shared, organization-core, aiplatform-core, collection-shared, collection-core, chat-shared, chat-core, audit-shared, audit-core 모듈 참조.
application-dev-shared.yml이력리소스설명 주석 없음
application-local.yml.example이력리소스설명 주석 없음
application.yml이력오늘 · #2185리소스앱 전체 설정 — datasource·Flyway·백그라운드 풀·springdoc, 그리고 도메인별 hwss.* 주요 블록(image-integration, image-system, collection, investigation, classification, extraction, statistics, ai-platform, smartreview, mail, organization, auth, chat 등)과 actuator/prometheus 노출.
db/local/R__local_seed_data.sql이력리소스로컬 전용 반복 실행 시드 — 개인 PC의 이미지 시스템 연동 테스트에 필요한 최소 위탁사 데이터 (PostgreSQL·H2 공용 문법).
logback-spring.xml이력리소스로그 포맷 — 콘솔 패턴과 요청 상관관계 ID(MDC)를 담는 JSON 로그 설정.

src/test/215GitHub

테스트 파일 — 펼쳐서 보기
api/acceptance/AcceptanceHooks.java이력클래스시나리오 사이의 공용 상태 정리.
api/acceptance/AcceptanceScenariosPostgresTest.java이력테스트수용 시나리오(Gherkin)를 실제 PostgreSQL 16 에서 다시 돈다 — AcceptanceScenariosTest 의 짝.
api/acceptance/AcceptanceScenariosTest.java이력테스트수용 시나리오(Gherkin) 실행 진입점 — src/test/resources/features/**/*.feature 를 Cucumber 로 돌린다.
api/acceptance/AcceptanceWorld.java이력클래스시나리오 하나의 상태 — 누가 로그인해 있는지, 마지막 응답이 무엇이었는지.
api/acceptance/AdminSteps.java이력클래스관리자 기능 — 사용자 레벨·메뉴 권한(S-010), 요약 골격(S-014), 메일 발송 계정(S-011).
api/acceptance/AnalysisClaimTypeSteps.java이력클래스분석 조건의 청구유형·대표 청구유형·증권번호(결정 20261019-analysis-request-claim-type-policy-no).
api/acceptance/AuditSteps.java이력클래스감사 원장(S-009).
api/acceptance/AuthSteps.java이력클래스로그인·세션(S-008) — 개발용 로그인과 사이트마인더 SSO 콜백.
api/acceptance/AuthorizationSteps.java이력클래스API 메뉴 권한 인가(docs/decisions/20261012-api-menu-authorization.md) — 메뉴마다 대표 조회 API 하나를 불러 인터셉터의 판정을 본다.
api/acceptance/ChatAttachmentSteps.java이력클래스챗봇 첨부 제한의 HTTP 경계 시나리오.
api/acceptance/ChatCitationRegionSteps.java이력클래스챗봇 근거의 쪽 안 위치 수용 단계(기획 7/24·8/07 근거 하이라이트, Studio SaaS 실측 2026-11-04).
api/acceptance/ChatConversationDeleteSteps.java이력클래스대화 전체 삭제·마지막 질문 삭제 수용 단계(docs/decisions/20261030-chat-conversation-delete.md).
api/acceptance/ChatHistoryRetentionSteps.java이력클래스범용 채팅 90일 보관 정책의 DB·외부 자원 경계 수용 단계.
api/acceptance/ChatKnowledgeSteps.java이력클래스에이전트 채팅 진행 중 대화의 지식컬렉션 참조 변경(docs/decisions/20261019-agent-knowledge-picker-file-unit.md 「개정 2026-10-28」).
api/acceptance/ChatStatisticsSteps.java이력클래스챗봇 이용 통계(화면 dashboard — 챗봇 질의 건수·질의 답변 응답 속도) 단계.
api/acceptance/ChatTitleGenerationSteps.java이력클래스범용 대화 제목 생성 수용 단계(통합 설계 v0.4 범용 7번, 업스테이지 공유 2026-11-03).
api/acceptance/ChatUsageSteps.java이력클래스사용 내역(화면 conversations) 단계 — 대화는 실제 API 로 만들고, 「N일 전에 썼다」는 저장된 시각을 옮겨 만든다.
api/acceptance/ClassificationReviewSteps.java이력클래스분류 검수(W07) — 미분류·저신뢰 낱장의 수동 지정과 AI 분류 일괄 확정(S-005 §4-4).
api/acceptance/CollectionApprovalSteps.java이력클래스지식컬렉션 승인 단계 — 1차 승인자 범위와 요청자 레벨(S-010 §4-4, 화면 approval-center).
api/acceptance/CollectionFileBulkSteps.java이력클래스지식컬렉션 파일 일괄 삭제·재색인(docs/decisions/20261021-knowledge-collection-bulk-file-actions.md).
api/acceptance/CollectionIndexingClaimSteps.java이력클래스실제 엔티티의 파일 단위 선점 수명.
api/acceptance/CommonSteps.java이력클래스여러 기능이 함께 쓰는 단계 — 로그인, 그리고 마지막 응답이 성공·거절인지.
api/acceptance/ConcurrencyLimitSteps.java이력클래스1인 동시 AI 분석 요청 제한(WBS 29.12.3) — 착수 버튼과 관리자 한도 설정.
api/acceptance/CucumberSpringConfiguration.java이력클래스수용 시나리오가 띄우는 Spring 컨텍스트 — 기존 API 시나리오 테스트(ReanalysisApiTest 등)와 같은 방식이다.
api/acceptance/DisclosureLinkSteps.java이력클래스공시실 링크(위탁사 Workspace 4단계 `공시실 링크 설정`) — 위탁사당 주소 한 건과 사용자 노출을 `저장` 한 번에.
api/acceptance/ErrorIncidentSteps.java이력클래스오류/장애 현황(화면 dashboard) 단계 — 실패 기록 원천 셋(AI 분석 작업 원장·이미지 전송·보고서 메일 발송)에 행을 직접 남긴다.
api/acceptance/ExtractionCorrectionSteps.java이력클래스추출 검수 — 추출값 수정(S-012 §2 `추출 완료`, POST …/extraction-results/latest/field-corrections).
api/acceptance/FakeChatRetentionExternalStore.java이력클래스채팅 보관 수용 시나리오에서 외부 Studio 대화·파일 파기 결과를 제어하는 대역.
api/acceptance/ImageIntegrationSteps.java이력클래스이미지 시스템 연동(S-003 API-01·02·03·05·06·07) — 이미지 시스템이 보내는 통지를 계약 형식 그대로 흉내 낸다.
api/acceptance/InvestigationSteps.java이력2일 전 · #2113클래스사고조사 건의 진행(S-004)·조회 범위(S-010 NB04)·분석 조건·다시 분석(S-012)·요약 확정과 검수(S-014).
api/acceptance/KnowledgeDefaultsSteps.java이력클래스사고조사 건 위탁사의 참조 지식컬렉션 기본값 조회(docs/decisions/20261030-reference-defaults-to-analysis-and-chat.md 3항).
api/acceptance/LogCsvExportSteps.java이력클래스관리자 로그 CSV 내보내기(HSA-AD-006) — 감사 로그·메일 발송 로그.
api/acceptance/MenuPermissionSteps.java이력클래스메뉴 권한 매트릭스(S-010, 화면 permissions, WBS 19.2) — 매트릭스·기본값·저장 검증·1차 승인 지정·내 권한·레벨별 권한.
api/acceptance/MyProfileSteps.java이력클래스내 정보 조회·본인 이메일 수정(S-008, 화면 profile) — 로그인한 본인의 계정·소속·이메일·보유 레벨.
api/acceptance/OrganizationChangeSteps.java이력클래스조직 변경 사원 단계 — 스마트심사 변경 이력은 로컬 표본(user_change_histories)에 넣는다(라이브 뷰 대신 쓰는 폴백).
api/acceptance/OrganizationDirectorySteps.java이력클래스조직도 직원 목록(S-010, 화면 organization) — 비활성(퇴직·휴직) 직원의 표시 (docs/decisions/20261012-user-org-affiliation-basis.md 🟢 결정 8).
api/acceptance/PageEditClassificationSteps.java이력클래스추출 이후 분류값 변경 — 편집 저장에 함께 싣는다(결정 20261101 §4).
api/acceptance/ReclassificationReservationSteps.java이력클래스분류·추출 진행 중 재확정 예약(결정 20260910-confirm-reservation-and-reanalysis-scope 1항, S-012 §3-1).
api/acceptance/ReportDeliveryChannelSteps.java이력클래스위탁사별 보고서 초안 전송 방식(화면 /admin/client-workspace 3단계, 결정 20260902 1·5~10항).
api/acceptance/ReportDisposalLogSteps.java이력클래스설명 주석 없음
api/acceptance/ReportSendLogSteps.java이력클래스관리자 보고서 초안 전송 로그(화면 /admin/report-send-logs).
api/architecture/ArchitectureTest.java이력테스트백엔드 전체(ai.clush.hwss 의 운영 코드)가 지키고 있는 구조 규칙을 테스트로 고정한다.
api/audit/AdminAuditTrailApiTest.java이력테스트관리자 설정·마스터 데이터·반출·지식컬렉션 작업의 감사 원장 적재를 실제 조합(인가 인터셉터·서비스 트랜잭션·audit-core)으로 확인한다 (docs/decisions/20261018-audit-event-scope-expansion.md).
api/audit/BusinessActionAuditTrailApiTest.java이력테스트사고조사 업무 행위의 감사 원장 적재와 화면 표시 설정을 실제 조합으로 확인한다 (docs/decisions/20261023-business-action-audit-events.md).
api/audit/IntegrationExchangeApiTest.java이력테스트연동 교환 기록을 실제 조합(수신 필터 → 컨트롤러 → audit-core 저장 → 관리자 조회 API)으로 확인한다 (docs/decisions/20261023-integration-exchange-log.md).
api/chat/AgentChatApiScenarioTest.java이력테스트http/agent-chat.http 를 그대로 재생해 에이전트 채팅 API(NX01)를 검증한다.
api/chat/ChatAnswerStreamApiTest.java이력테스트답변 스트림 응답 계약(docs/decisions/20261102-agent-chat-answer-streaming.md) — 스텁 어댑터로 이벤트 순서·저장·헤더 없는 요청을 본다.
api/chat/ChatExchangePersistenceTest.java이력테스트질문 전송(ChatService.ask)이 돌려주는 두 줄의 id 와 첨부 연결을 실제 영속성 계층에서 본다.
api/chat/ChatResponseTimePersistenceTest.java이력테스트질문 전송이 답변 행에 응답 소요시간(chat_messages.response_millis)을 남기는지 실제 영속성 계층에서 본다 — 마이그레이션이 컬럼을 만들고 엔티티 매핑이 그 컬럼에 쓰는지는 유닛 테스트로 잡히지 않는다(docs/rules/testing.md).
api/chat/ChatSessionListPersistenceTest.java이력테스트GET /api/v1/chat-sessions가 의존하는 세션 목록 집계 쿼리를 실제 영속성 계층에서 검증한다.
api/chat/InvestigationChatApiScenarioTest.java이력테스트http/investigation-chat.http 를 그대로 재생한다 — 실제 맥락 포트(조사 모듈)가 붙은 앱에서 경로·인가·없는 보고서 응답을 본다.
api/chat/InvestigationChatApiTest.java이력테스트사고조사 챗봇 패널 API — 시나리오 C1~C8 을 실제 HTTP·스키마에서 본다 (docs/decisions/20261023-investigation-chat-session-structure.md 4항).
api/chat/InvestigationChatAskApiTest.java이력테스트사고조사 챗봇 질문 API — 시나리오 Q1~Q15 를 실제 HTTP·스키마·저장·통계로 본다 (docs/decisions/20261023-investigation-chat-session-structure.md 4·7항, 20261023 지시문 DB 7항).
api/chat/InvestigationChatAttachmentApiTest.java이력테스트사고조사 챗봇 첨부 API — 시나리오 T2~T9 를 실제 HTTP·스키마에서 본다 (docs/decisions/20261023-investigation-chat-session-structure.md 8항, 20261026 첨부 묶음 2항).
api/chat/InvestigationChatKnowledgeApiTest.java이력4일 전 · #2040테스트사고조사 챗봇 검색 범위 변경 API — 시나리오 K1·K2·K7~K10 을 실제 HTTP·스키마에서 본다 (docs/decisions/20261023-investigation-chat-session-structure.md 6항).
api/chat/InvestigationChatPurgeTest.java이력테스트보고서 삭제 연동 — 시나리오 P1~P3·P5·P7 을 실제 스키마(CASCADE)에서 본다 (docs/decisions/20261023-investigation-chat-session-structure.md 8항).
api/chat/InvestigationChatReflectApiTest.java이력테스트사고조사 챗봇 AI 보고서 반영 API — 시나리오 R1·R4~R7·R9·R10 을 실제 HTTP·스키마에서 본다 (docs/decisions/20261021-investigation-chat-references-and-reflection.md 5~7·9~11항).
api/chat/InvestigationChatStorageTest.java이력테스트사고조사 챗봇 대화 저장 구조 — 마이그레이션이 실제로 적용된 스키마에서 S1~S9 를 본다 (docs/decisions/20261023-investigation-chat-session-structure.md 1·3·8항).
api/chat/InvestigationChatUsageApiTest.java이력테스트사용 내역의 사고조사 건 — 시나리오 U1·U2·U4·U5·U7·U9·U10 을 실제 HTTP·스키마에서 본다 (docs/decisions/20261023-investigation-chat-session-structure.md 5항, 20261010-investigation-chat-usage-…
api/classification/ClassificationMappingApiScenarioTest.java이력테스트http/classification-mapping.http 를 그대로 재생해 분류체계 매핑 API(N02·NW01)를 검증한다.
api/classification/ClassificationMappingApiTest.java이력테스트분류체계 매핑 API(`GET/PUT …/classification-mappings`, `GET …/confirmations`)의 거절 응답을 실제 SQL·인증 필터와 함께 본다(WBS 22.1.2, 22.1.3).
api/classification/ClassificationMappingConfirmationPersistenceTest.java이력테스트분류체계 매핑 확정 이력(folder_classification_mapping_confirmations, 2026-10-09 야간 NW01)이 의지하는 DB 제약이 실제 스키마에 있는지 확인한다.
api/classification/ClassificationMasterPersistenceTest.java이력테스트API-06·API-07 이 실제 스키마(Flyway) 와 JPA 매핑 위에서 마스터를 영속화하는지 확인한다 — 유닛 테스트로는 잡히지 않는 영역이다 (docs/rules/testing.md): 엔티티 스캔, 컬럼/타입 매핑, document_types → customer_companies FK…
api/classification/CustomerCompanyApiTest.java이력테스트위탁사 마스터 조회 API(N03)를 실제 HTTP 경계에서 확인한다 — 유닛 테스트로는 잡히지 않는 부분이다 (docs/rules/testing.md): 파생 쿼리(findByActiveTrueOrderBy…)가 실제 SQL 로 평가된 결과, 컨트롤러가 classification-core 에서…
api/classification/CustomerOnboardingApiScenarioTest.java이력6일 전 · #1935테스트http/admin-customer-onboarding.http 를 그대로 재생해 위탁사 온보딩 상태 API 를 검증한다.
api/classification/DisclosureLinkApiScenarioTest.java이력6일 전 · #1935테스트http/admin-disclosure-link.http 를 그대로 재생해 공시실 링크 API(ND01 → 결정 20261023 개정)를 검증한다.
api/collection/CollectionApiScenarioTest.java이력테스트http/collections.http 를 그대로 재생해 지식컬렉션 세로조각(N03~N06)을 검증한다.
api/collection/CollectionApprovalFilePreviewApiTest.java이력테스트승인센터 파일 미리보기(GET /api/v1/collection-approvals/{id}/files/{fileId}/preview)를 실제 HTTP 경계에서 본다 — 지식컬렉션 미리보기와 같은 저장소의 미리보기 파일을 내준다(docs/decisions/20261014-collection-fil…
api/collection/CollectionApprovalOptimisticLockTest.java이력테스트같은 승인 요청을 두 사람이 겹쳐 처리할 때 늦은 저장이 앞 저장을 덮지 않고 409 로 거절되는지 실제 DB(H2 PostgreSQL 모드 — H2TestDatasource)에서 본다.
api/collection/CollectionAsyncIndexingApiTest.java이력테스트즉시 모드의 백그라운드 색인(기본 작업자 2) — 등록 요청은 PENDING 으로 바로 응답하고, 커밋 뒤 작업자가 색인해 상세가 READY 로 바뀐다(docs/decisions/20261013-file-ingestion-pdf-unification.md §4).
api/collection/CollectionBatchWindowPostgresTest.java이력테스트두 서버를 대신하는 독립 작업 실행기가 실제 선점·결과 저장·만료 복구 트랜잭션을 사용한다.
api/collection/CollectionDescriptionClaimPostgresTest.java이력테스트두 독립 서비스가 실제 PostgreSQL 의 같은 설명 행을 선점한다.
api/collection/CollectionDocumentCleanupPostgresTest.java이력테스트독립 AP 서비스·별도 연결·실제 PostgreSQL 잠금으로 삭제 의도와 사용 중 문서 보호를 검증한다.
api/collection/CollectionFileDownloadApiTest.java이력테스트지식컬렉션 파일 내려받기(GET /api/v1/collections/{id}/files/{fileId}/download)를 실제 HTTP 경계에서 본다.
api/collection/CollectionFileNameMatchApiTest.java이력테스트지식컬렉션 파일명 검색(GET /api/v1/collections/file-name-matches)의 보이는 범위를 실제 질의로 본다 (docs/decisions/20261013-knowledge-collection-folder-file-search.md).
api/collection/CollectionFilePreviewApiTest.java이력테스트지식컬렉션 파일 미리보기(GET /api/v1/collections/{id}/files/{fileId}/preview)를 실제 HTTP 경계에서 본다.
api/collection/CollectionIndexingBatchApiTest.java이력테스트지식컬렉션 배치 색인·1,000쪽 겹침 분할·개인 쪽 수 상한·원본 discard 병합 다운로드를 실제 HTTP 경계와 스키마에서 본다 (docs/decisions/20261013-file-ingestion-pdf-unification.md §2·§4·§5).
api/collection/CollectionRecoveryClaimIntegrationTest.java이력테스트복구 판단 후 활동 갱신·완료·다른 서버의 복구가 끼어드는 상황을 서로 다른 DB 트랜잭션으로 검증한다.
api/collection/CollectionRecoveryClaimPostgresTest.java이력테스트동일한 복구 경합 시나리오를 실제 PostgreSQL 에서 검증한다.
api/collection/CollectionVectorStoreCreationPostgresTest.java이력테스트두 독립 Gateway 와 별도 DB 트랜잭션으로 실제 PostgreSQL advisory lock 과 매핑·롤백 정리를 검증한다.
api/collection/CollectionWorkDistributionPostgresTest.java이력테스트두 서버를 대신하는 독립 작업 실행기가 실제 선점·결과 저장·만료 복구 트랜잭션을 사용한다.
api/collection/LongFileNameUploadTest.java이력테스트윈도우가 만들 수 있는 가장 긴 파일명(255자)도 업로드 단계에서 거절되지 않는다 — server.tomcat.max-part-header-size.
api/config/collection/CollectionCleanupConfigurationTest.java이력테스트실제 application.yml 과 서비스·스케줄러를 연결하되 DB·Studio·개인 .env 는 사용하지 않는다.
api/config/realtime/PostgresReportEventFanoutBeanTest.java이력테스트운영 기본값(hwss.realtime.fanout=postgres)에서 이 빈을 Spring 이 실제로 만들 수 있는지 본다.
api/config/realtime/PostgresReportEventFanoutPostgresTest.java이력테스트SSE 변경 신호의 인스턴스 간 전파를 실제 PostgreSQL 16 의 LISTEN/NOTIFY 로 본다 (결정 20261014-realtime-updates-sse 「보완 2026-10-23」).
api/config/realtime/PostgresReportEventFanoutTest.java이력테스트전파 구현의 단위 동작 — 드라이버 연결은 가짜다.
api/db/FlywayMigrationTest.java이력6일 전 · #1935테스트classpath 전체(db/migration)의 Flyway 마이그레이션이 실제로 순서대로 적용되고, S-007 §3 의 스키마가 만들어지는지 검증한다.
api/db/FlywaySchemaPostgresTest.java이력테스트빈 PostgreSQL 16 에 전 모듈의 Flyway 마이그레이션을 처음부터 적용하고, Hibernate ddl-auto=validate 가 통과하는지(엔티티 매핑 = 실제 스키마) 본다.
api/db/FlywayVersionUpgradePostgresTest.java이력6일 전 · #1953테스트이미 적용된 이미지시스템 매핑의 이력을 유지한 채 다음 버전의 통계 스키마로 올린다.
api/db/PostgresDialectBehaviorPostgresTest.java이력테스트H2(PostgreSQL 호환 모드)와 실제 PostgreSQL 이 다르게 동작할 수 있는 자리를 실제 PostgreSQL 16 에서 확인한다.
api/db/SchemaCommentTest.java이력테스트스키마의 모든 테이블과 컬럼이 DB 설명(COMMENT)을 갖는지 검증한다.
api/guard/ApiAccessRuleGuardTest.java이력테스트지정 누락 검사 — 우리 핸들러는 모두 접근 표시 4종 중 정확히 하나를 가져야 하고, @MenuPermission 의 메뉴 코드는 실제 매트릭스 (시드 마이그레이션이 만든 role_menu_permissions)에 있어야 한다 (docs/decisions/20261012-api-menu-aut…
api/guard/DtoSchemaNameGuardTest.java이력테스트API 표면에 오르는 타입의 simple name 이 리포 전체에서 유일한지 지킨다.
api/guard/ImageIntegrationHttpBodyGuardTest.java이력테스트http/*.http 의 이미지시스템 연동 요청 본문이 계약 정본과 같은 필드명을 쓰는지 지킨다.
api/guard/SourceTextGuardTest.java이력테스트소스 파일이 텍스트로 남아 있는지 지킨다.
api/http/HttpScenarioFile.java이력클래스http/*.http 시나리오 파일을 읽어 MockMvc 로 재생할 수 있는 형태로 옮긴다.
api/http/HttpScenarioFileTest.java이력테스트.http 시나리오 파서 자체의 회귀 테스트 (야간 플랜 20260821 Q1).
api/investigation/AgentStudioInstructApiPostgresTest.java이력테스트실제 PostgreSQL에서 INSTRUCT 저장·재조회 전체 응답과 DB 저장 시각 정밀도를 검증한다.
api/investigation/AgentStudioInstructApiScenarioTest.java이력테스트http/admin-agent-studio-instruct.http 를 그대로 재생해 에이전트 스튜디오 INSTRUCT 설정 API 를 검증한다 (docs/decisions/20261021-studio-instruct-db-storage.md).
api/investigation/AgentStudioTestRunApiScenarioTest.java이력2일 전 · #2112테스트http/admin-agent-studio-test-runs.http 를 그대로 재생해 실행 테스트 분류·추출 API 를 검증한다 (docs/decisions/20261106-studio-test-classify-run.md, 20261107-studio-test-extract-run.md).
api/investigation/AgentStudioTestRunDiscardRaceTest.java이력2일 전 · #2123테스트실행 테스트 단계 지우기를 실제 SQL 로 본다 — 화면이 서류를 3개씩 동시에 올리면(결정 20261110-studio-test-upload-speed) 요청마다 이전 분류·추출·보고서 단계를 지우는데, 같은 단계를 먼저 지운 요청이 있으면 늦은 요청이 500 으로 끝났다(2026-11-11).
api/investigation/AiPipelineJobLeaseQueryTest.java이력테스트AI 작업 원장의 임대 쿼리를 실제 SQL 로 본다 — 여러 서버가 같은 작업을 동시에 진행시키지 않게 하는 장치라, 서비스 단위 테스트의 목으로는 조건부 UPDATE 의 WHERE 절이 맞는지 알 수 없다.
api/investigation/AnalysisAiE2eTest.java이력테스트요약 실연동 경로를 실제 엔진·시드·H2 SQL 위에서 본다 (2026-09-29).
api/investigation/AnalysisRequestApiTest.java이력6일 전 · #1941테스트W09 분석 요청의 저장·조회 왕복과 상태 전이를 실제 SQL 로 본다.
api/investigation/ApplicationFormApiScenarioPostgresTest.java이력테스트ApplicationFormApiScenarioTest 의 시나리오를 실제 PostgreSQL 16 에서 그대로 다시 돈다 — 청약서 폼 설정 API.
api/investigation/ApplicationFormApiScenarioTest.java이력테스트http/admin-application-form.http 를 그대로 재생해 청약서 폼 설정 API 를 검증한다.
api/investigation/ChatPromptApiScenarioTest.java이력테스트http/admin-chat-prompts.http 를 그대로 재생해 지시문 관리자 API 를 검증한다 (docs/decisions/20261023-chat-prompt-db-versioning.md).
api/investigation/ClaimTypeApiScenarioTest.java이력테스트http/admin-claim-type.http 를 그대로 재생해 청구유형 마스터 API(NT01)를 검증한다.
api/investigation/ClassificationActionApiTest.java이력테스트W07 분류 조치의 권한·상태 규칙이 실제 스택(세션 필터 → 컨트롤러 → 서비스 → SQL)에서도 그대로 걸리는지 본다.
api/investigation/ClassificationAiE2eTest.java이력테스트분류 실연동 경로를 실제 엔진·시드·H2 SQL 위에서 본다 (2026-09-22, docs/decisions/20260922-ai-classification-async-integration.md).
api/investigation/ClassificationResultApiTest.java이력테스트W06 문서분류 결과 도메인의 세로조각 — 전송 접수(API-01·02)로 문서함이 채워진 뒤 분류 스텁 실행 → 결과 조회까지가 실제 SQL 로 도는지 본다.
api/investigation/ClassificationStubE2eTest.java이력테스트http/classification-stub-e2e.http 를 재생해 사용자 확정(`AI 분류 시작`) → 스텁 분류 → `미분류검출` → W07 조치 → `정보 추출 시작` → `추출완료` 경로를 검증한다 (2026-09-03 야간 N02, 2026-09-18 야간 NB05).
api/investigation/ClassificationTransientRetryAiE2eTest.java이력테스트ClassificationTransientRetryAiE2e 대상 테스트.
api/investigation/CorrectionRejectionAiE2eTest.java이력테스트검수 보정이 플랫폼에서 거절돼 추출이 실패한 건이 화면에 실패로 닿는지를 실제 엔진·원장·H2 SQL 위에서 본다 (S-004 §8-6).
api/investigation/CorrectionRoundtripAiE2eTest.java이력테스트검수 보정의 이어 실행 반영(결과 왕복)을 실제 엔진·시드·H2 SQL 위에서 본다 (docs/decisions/20260929-pipeline-correction-roundtrip.md P1).
api/investigation/DocumentBoxClassifiedFolderApiTest.java이력5일 전 · #1981테스트미분류 폴더로 수신한 건의 문서함이 분류 결과의 폴더로 묶이는지를 실제 빈·SQL·HTTP 로 본다 (결정 20261104-document-box-classified-folder).
api/investigation/DocumentTypeSchemaApiScenarioTest.java이력어제 · #2132테스트http/document-type-schemas.http 를 그대로 재생해 에이전트 스튜디오 문서 분류·추출 스키마 관리자 API 를 본다.
api/investigation/ExtractionAiE2eTest.java이력테스트추출 실연동 경로를 실제 엔진·시드·H2 SQL 위에서 본다 (2026-09-25 야간 NX02).
api/investigation/ExtractionCorrectionRoundtripAiE2eTest.java이력테스트추출값 수정의 이어 실행 반영(결과 왕복 P2)을 실제 엔진·시드·H2 SQL 위에서 본다 (docs/decisions/20260929-pipeline-correction-roundtrip.md §8 P2).
api/investigation/ExtractionResultApiTest.java이력4일 전 · #2046테스트W08 정보추출 결과의 저장·조회 왕복을 실제 SQL 로 본다 (항목의 완료 조건).
api/investigation/HospitalAliasApiScenarioTest.java이력3일 전 · #2081테스트http/admin-hospital-alias.http 를 그대로 재생해 병원 명칭 매핑 API 를 검증한다.
api/investigation/HospitalFolderPlacementApiTest.java이력테스트번호 폴더 묶음 배정이 실제 스택(API-01 문서분류 동기화 → 관리자 매핑 → 스텁 분류 → 결과)에서 걸리는지 본다 (결정 20261101-hospital-folder-bundle-overflow 1~3항).
api/investigation/HospitalHiddenAsDeletedIntegrationTest.java이력어제 · #2144테스트스마트심사 병원 뷰에서 빠져 숨긴 병원은 지운 것과 같다(결정 20260910 병원 마스터 「반영 상태」 2026-11-11 보완) — 실제 쿼리로 확인한다.
api/investigation/HospitalHiddenAsDeletedPostgresTest.java이력어제 · #2144테스트HospitalHiddenAsDeletedIntegrationTest 를 실제 PostgreSQL 16 에서 다시 돈다 — 숨김 조건(@SQLRestriction)과 네이티브 전체 조회가 방언에 기대는 자리다.
api/investigation/HospitalNameSpacingIntegrationTest.java이력3일 전 · #2082테스트병원 목록과 서류·검색어의 띄어쓰기가 달라도 같은 병원을 찾는지 실제 쿼리로 확인한다(결정 20260910 §3).
api/investigation/HospitalNameSpacingPostgresTest.java이력4일 전 · #2036테스트HospitalNameSpacingIntegrationTest 를 실제 PostgreSQL 16 에서 다시 돈다 — JPQL replace·lower 조합이 방언에 기대는 자리다.
api/investigation/ImageIntegrationApiSmokeTest.java이력테스트http/image-integration.http 를 그대로 재생해 API-01~07 의 실제 HTTP 응답을 검증한다.
api/investigation/ImageReceptionE2eTest.java이력테스트http/image-reception-e2e.http 를 재생해 이미지 접수 세로조각의 상태 전이를 검증한다 (P1-3).
api/investigation/ImageReceptionZipFixture.java이력클래스API-02(전송 완료 통지)가 존재와 SHA-256 을 검사할 ZIP 을 수신 폴더에 만든다.
api/investigation/ImageTransferBackgroundJobQueueQueryTest.java이력테스트보고서별 선두 작업과 서로 다른 보고서 병렬 선택 조건을 실제 SQL로 검증한다.
api/investigation/ImageTransferPersistenceTest.java이력테스트전송 접수가 실제 스키마(Flyway)와 JPA 매핑 위에서 동작하는지 확인한다 — 유닛 테스트로는 잡히지 않는 영역이다 (docs/rules/testing.md): 엔티티 스캔, 컬럼/타입 매핑, FK·CHECK 제약, 여러 모듈의 마이그레이션 순서, 그리고 investigation-core…
api/investigation/ImageZipSmokeFixtureContractTest.java이력테스트사람이 실행하는 TIFF ZIP 생성기와 .http 예시가 수신 계약과 같은지 고정한다.
api/investigation/InvestigationDisclosureLinkApiTest.java이력테스트http/investigation-disclosure-link.http 를 그대로 재생해 워크스페이스 `공시실` 링크 조회(2026-10-19 야간 NL01)를 본다.
api/investigation/InvestigationReportListApiPostgresTest.java이력테스트InvestigationReportListApiTest 의 시나리오를 실제 PostgreSQL 16 에서 그대로 다시 돈다 — 사고조사 목록 API.
api/investigation/InvestigationReportListApiTest.java이력테스트사고조사 목록 API(P1-1)를 실제 HTTP 경계에서 확인한다 — 유닛 테스트로 잡히지 않는 부분이다 (docs/rules/testing.md): 쿼리 파라미터 바인딩(enum 변환 포함), Specification 필터가 실제 SQL 로 평가된 결과, 정렬·페이지 경계, 세션 필터가 이 경…
api/investigation/InvestigationScopeApiTest.java이력테스트사고조사 조회 범위를 실제 SQL·세션 경계에서 본다 (2026-09-18 NB04, docs/decisions/20260918-permission-levels-and-org-scope.md).
api/investigation/InvestigationWorkflowStatusFilterApiTest.java이력테스트목록의 화면 글로벌 상태 다중 필터(workflowStatus)와 파생 필드를 실제 SQL 경계에서 본다 (2026-09-18 NB01).
api/investigation/InvestigationWorkspaceApiTest.java이력테스트P1-2 세로조각을 끝에서 끝까지 한 번에 확인한다 — 이미지시스템 전송 수신(API-01·02) → 조사자 목록 → 워크스페이스 상세.
api/investigation/MultiInstanceReceptionPostgresTest.java이력테스트운영 AP 2대(결정 20261023-production-k0s-cluster A)에서 두 인스턴스가 같은 보고서를 동시에 다룰 때를 실제 PostgreSQL 16 으로 본다.
api/investigation/PdfSheetReceptionApiTest.java이력테스트단일 페이지 PDF 의 접수 시점 이미지 변환(결정 20261002-pdf-page-split-at-reception) — 실제 ZIP·실제 스키마(Flyway) 위에서 PDF 한 건이 낱장 행 하나로 변환되고, 다중 페이지 PDF는 거절되는지 본다.
api/investigation/PipelineSeedE2eTest.java이력테스트http/pipeline-seed.http 를 재생해 전 단계 보고서 세트 시드가 실제로 각 상태의 보고서를 만드는지 검증한다 (2026-09-03 야간 N03).
api/investigation/ReanalysisApiPostgresTest.java이력테스트ReanalysisApiTest 의 시나리오를 실제 PostgreSQL 16 에서 그대로 다시 돈다 — 다시 분석 범위 조회·실행 API(S-012 §4-0).
api/investigation/ReanalysisApiTest.java이력2일 전 · #2113테스트`다시 분석` 가능 범위 조회와 세 범위 실행을 실제 SQL·실제 HTTP 상태 코드로 본다 (S-012 §4, 야간 20261002 NR01·NR02 — `http/investigation-reanalysis.http` 와 같은 순서).
api/investigation/ReclassificationReservationAiE2eTest.java이력테스트분류 진행 중 재확정 예약을 실제 엔진·비동기 분류 경로 위에서 끝까지 본다 (결정 20260910-confirm-reservation-and-reanalysis-scope 🟢 1항, S-012 §3-1, HSA-IF-002).
api/investigation/ReportDeliveryLogQueryTest.java이력테스트관리자 보고서 초안 전송 로그 조회의 필터가 실제 SQL 에서 어떻게 걸리는지 본다.
api/investigation/ReportDraftApiTest.java이력3일 전 · #2055테스트W12 보고서 초안의 버전 증가·최신본 조회를 실제 SQL 로 본다 (항목의 완료 조건).
api/investigation/ReportEventStreamApiTest.java이력테스트실시간 갱신 SSE 구독 — 인증·권한을 지나 연결이 열리고, 변경 이벤트가 신호로 나간다 (결정 20261014-realtime-updates-sse).
api/investigation/ReportMailApiTest.java이력테스트보고서 메일 발송 API(`POST/GET …/report-mails`)를 실제 SQL·인증 필터와 함께 본다 (WBS 20.8.2).
api/investigation/ReportMailDispatchLogQueryTest.java이력테스트관리자 메일 발송 로그 조회의 필터가 실제 SQL 에서 어떻게 걸리는지 본다 (야간 플랜 20261005 NM01).
api/investigation/ReportMailDispatchTransactionTest.java이력테스트발송 기록이 바깥 트랜잭션과 함께 롤백되지 않는지 본다 (야간 20260825 Q1 ②).
api/investigation/ReportPageEditApiPostgresTest.java이력테스트ReportPageEditApiTest 의 시나리오를 실제 PostgreSQL 16 에서 그대로 다시 돈다 — 스캔 문서함 편집 저장 API(NP01·NP02).
api/investigation/ReportPageEditApiTest.java이력테스트스캔 문서함 낱장 편집 저장을 실제 SQL·실제 HTTP 상태 코드로 본다 (야간 20261006 NP01 — http/investigation-page-edits.http 와 같은 순서).
api/investigation/ReportPageImageApiTest.java이력테스트페이지 이미지 서빙(2026-09-03 야간 N04) — 시드와 같은 1×1 PNG 를 API-01·02 로 접수한 뒤 GET /api/v1/investigation-reports/{reportNo}/pages/{sourcePageId}/image 가 그 바이트를 그대로 돌려주는지, 그리고 유닛…
api/investigation/ReportPurgeTablesCoverageTest.java이력테스트보고서 파기의 삭제 목록이 실제 스키마와 맞는지 붙잡는다 (결정 20260909-purge-statistics-boundary §2 「누락은 테스트가 막는다」).
api/investigation/ReportReflectionIntegrationTest.java이력테스트AI 보고서 반영 — 시나리오 C1(새 판·이어받기·참조 떼기)·D1(원장)·저장 직전 판 충돌을 실제 SQL 로 본다(H2 PostgreSQL 호환 모드).
api/investigation/ReportTaskLockConnectionPoolPostgresTest.java이력테스트보고서 작업 잠금이 업무 풀과 연결을 다투지 않는지 실제 PostgreSQL 로 본다(결정 20261103-report-lock-dedicated-connection).
api/investigation/ReportTaskSequencerPostgresTest.java이력테스트보고서별 작업 직렬 실행기의 인스턴스 간 상호배제를 실제 PostgreSQL 16 의 advisory lock 으로 본다 (결정 20261023-production-k0s-cluster A — 운영 AP 2대).
api/investigation/SummaryGroupApiScenarioTest.java이력테스트http/summary-groups.http 를 그대로 재생해 요약 그룹 관리자 API 와 보고서 `요약` 탭 구획 조회(파이프라인 v2)를 본다.
api/investigation/SummaryGroupReopenAfterCommitTest.java이력4일 전 · #2003테스트분석 요청의 커밋 직후 경로를 실제 트랜잭션으로 검증한다 — 트랜잭션을 흉내 내는 단위 테스트로는 드러나지 않는다.
api/investigation/SummaryResultApiTest.java이력3일 전 · #2055테스트W10 요약 결과의 항목별 출처 복수 연결 왕복을 실제 SQL 로 본다 (항목의 완료 조건).
api/investigation/SummarySkeletonApiTest.java이력테스트요약 섹션 골격 관리자 API (S-014 §3) — 시드(공통·한화생명)가 실제 SQL 로 읽히고, 저장이 새 버전·활성 전환으로 돌아오는지.
api/investigation/SynchronousExtractionConfig.java이력설정ZIP 압축 해제를 동기로 돌린다.
api/investigation/WorkflowProgressApiPostgresTest.java이력테스트WorkflowProgressApiTest 의 시나리오를 실제 PostgreSQL 16 에서 그대로 다시 돈다 — 워크플로우 진행률 API.
api/investigation/WorkflowProgressApiTest.java이력테스트W14 워크플로우 진행 상태 조회의 응답 스냅샷을 본다 (항목의 완료 조건).
api/mail/MailAccountApiScenarioTest.java이력테스트http/admin-mail-account.http 를 그대로 재생해 관리자 메일 발송 계정 API(N02)를 검증한다.
api/mail/MailAccountConcurrentResetTest.java이력테스트동시 재설정 회귀 테스트 — 늦은 쪽이 조용히 이기지 않는다.
api/mail/MailAccountPasswordPersistenceTest.java이력테스트SMTP 대표 계정 비밀번호 저장소가 실제 스키마(Flyway) 와 JPA 매핑 위에서 동작하는지 확인한다 — 유닛 테스트로는 잡히지 않는 영역이다(docs/rules/testing.md): 엔티티 스캔, 단일 행 CHECK 제약, 컬럼 매핑, 그리고 mail-core 가 이 앱에 조립됐을 때…
api/mail/MailAccountSettingsApiTest.java이력테스트MailAccountSettingsApi 대상 테스트.
api/openapi/DemoContractsSyncTest.java이력테스트이미지시스템 데모 목서버의 계약 화면 명세(image-system-demo/backend/.../contracts.json)가 계약 정본(docs/specs/contracts/image-system-api.yaml)과 같은 엔드포인트 집합을 다루는지 검증한다.
api/openapi/ImageSystemContractTest.java이력테스트이미지시스템 연동 API(API-01~07)가 협의된 계약 정본과 일치하는지 검증한다.
api/openapi/OpenApiSnapshotTest.java이력테스트OpenAPI 계약 스냅샷(openapi/openapi.json)이 현재 컨트롤러·DTO 와 일치하는지 검증한다.
api/ops/ActuatorPrometheusExposureTest.java이력테스트시스템 관측 노출 회귀 (20260828 관측 스택 결정) — 프로메테우스 스크레이프 엔드포인트가 실제로 열려 있고 JVM 지표가 실려 나오는지 본다.
api/ops/LogbackJsonFormatTest.java이력테스트로그 출력 형식 회귀 (20260828 관측 스택 결정 §2 — Loki).
api/ops/RequestCorrelationApiTest.java이력테스트상관관계 ID 필터가 실제 서블릿 체인에 어떤 순서로 걸렸는지 보는 회귀 (20260828 관측 스택 결정 §2).
api/organization/AdminMenuWorkflowMigrationTest.java이력테스트V202610232300 관리자 LNB 재구성 마이그레이션 — 메뉴 이름·순서·그룹·소제목만 바꾸고 권한 칸은 그대로 두는지 확인한다 (docs/decisions/20261022-admin-lnb-workspace-workflow.md 1·2·3·9·11항).
api/organization/BoundMenuPermissionMigrationTest.java이력테스트V202610240900 묶음 메뉴 마이그레이션 — 공시실 링크 설정을 위탁사 Workspace 에 묶고 권한 값을 맞추는지 확인한다 (docs/decisions/20261022-admin-lnb-workspace-workflow.md 14항).
api/organization/OrganizationPersistenceTest.java이력테스트조직 스키마·시드가 실제 마이그레이션과 JPA 매핑 위에서 동작하는지 확인한다 — 유닛 테스트로는 잡히지 않는 영역이다 (docs/rules/testing.md): 엔티티 스캔, 컬럼/타입 매핑, FK·CHECK 제약, 여러 모듈의 마이그레이션 순서, 그리고 시드가 실제로 적재되는지.
api/organization/RetireDisclosureLinkMenuMigrationTest.java이력테스트V202610261200 공시실 링크 설정 메뉴 퇴역 마이그레이션 — DISCLOSURE_LINK 행을 지우고 나머지 행의 권한 칸과 순서(빈자리 없이)를 그대로 두는지 확인한다(docs/decisions/20261023-client-workspace-disclosure-inline.md 5항).
api/organization/UserRoleApiScenarioTest.java이력테스트http/user-roles.http 를 그대로 재생해 사용자 레벨 부여·회수 API(N01)를 검증한다.
api/security/AuthApiTest.java이력테스트인증 골격이 실제 애플리케이션 조립 위에서 동작하는지 확인한다 — 유닛 테스트로는 잡히지 않는 영역이다 (docs/rules/testing.md): 필터가 서블릿 체인에 실제로 등록됐는지, local 프로필의 개발용 로그인 스텁이 organization 모듈의 UserAccountLookupPo…
api/security/LazyMultipartAuthorizationTest.java이력테스트업로드 본문은 인가를 통과한 뒤에 읽는다 — spring.servlet.multipart.resolve-lazily (docs/decisions/20261012-api-menu-authorization.md §3, 경로 열거 401 정리).
api/security/ProtectedPathPatternApiTest.java이력테스트개인정보·관리자 데이터를 내려보내는 업무 API 가 세션 없이는 401 인지 확인한다 — 서블릿 체인·인가 인터셉터·전역 예외 처리가 맞물린 결과라 유닛 테스트로는 잡히지 않는다.
api/statistics/BusinessStatisticsApiPostgresTest.java이력테스트BusinessStatisticsApiTest 의 시나리오를 실제 PostgreSQL 16 에서 그대로 다시 돈다 — 업무 통계 조회 API(ST03-B).
api/statistics/BusinessStatisticsApiTest.java이력테스트업무 통계 조회 API(ST03-B — S-007 §3-4 「조회 API」)를 실제 HTTP 경계 + H2 스키마 위에서 확인한다.
api/statistics/ChatReflectedMigrationSeedTest.java이력테스트마이그레이션 V202611031900 의 채움 SQL 을 고정한다 — 새 판을 만든 반영만 검토로 세고, 요약 전 행은 비워 두고, 롤업의 검토 건수는 다른 원천까지 포함해 자바 규칙(ReportLifecycleFactEntity#isReviewed())과 같게 다시 센다.
api/statistics/ClaimTypeDiseaseMigrationSeedTest.java이력테스트마이그레이션 V202610271801 의 첫 적재 SQL(이미 쌓인 업무 통계 사실 행으로 stat_daily_claim_type_diseases 를 채우는 INSERT … SELECT)이 증분 적재의 자바 규칙(StatDailyRollupContributions)과 같은 칸을 만드는지 고정한다…
api/statistics/ConfirmedPagesMigrationSeedTest.java이력테스트마이그레이션 V202611031800 의 채움 SQL 이 증분 적재와 같은 값을 만드는지 고정한다 — 최신 분류 결과에서 그대로 확정한 낱장만 세고, 직접 지정도 있으면 빼고, 요약 전 행은 비워 둔다.
api/statistics/ExtractionQualityStatisticsApiTest.java이력테스트추출 완료율 조회 API(NE02 — S-007 §3-4 「추출 완료율 조회 API」)를 실제 HTTP 경계 + H2 스키마 위에서 확인한다.
api/statistics/LifecycleBackfillApiTest.java이력테스트생애주기 통계 사실 재적재 명령(결정 20261027)을 실제 HTTP 경계 + H2 스키마(Flyway V202610271500) 위에서 고정한다.
api/statistics/LifecycleStatisticsApiTest.java이력테스트시스템 통계 조회 API(DP06 — S-007 §3-4 「생애주기 조회 API」)를 실제 HTTP 경계 + H2 스키마 위에서 확인한다.
api/statistics/ProcessingTimeStatisticsApiTest.java이력테스트처리시간 통계 조회 API(2026-10-19 — S-007 §3-4 「처리시간 통계 조회 API」)를 실제 HTTP 경계 + H2 스키마(마이그레이션 V202610191500 포함) 위에서 확인한다 — 파라미터 바인딩, 롤업 SQL 의 칸 합산, 설정 기본 경계로 다시 묶은 분포·매수 구간·시…
api/statistics/ReportLifecycleFactLoadIntegrationTest.java이력테스트생애주기 사실 적재(DP04)의 3지점을 실제 컨텍스트(커밋 후 이벤트·공용 풀·시퀀서·H2 스키마) 위에서 고정한다.
api/statistics/ReportLifecycleFactPersistenceTest.java이력테스트생애주기 사실 테이블(DP03)의 엔티티·리포지토리가 실제 스키마(Flyway V202609110002) 위에서 영속화되는지 확인한다 — 유닛 테스트로는 잡히지 않는 영역이다(docs/rules/testing.md): 엔티티 스캔, 컬럼/타입/enum/boolean 매핑, report_no 유니…
api/statistics/ReportStatFactLoadIntegrationTest.java이력테스트전송 완료 → 통계 사실 적재(ST02)의 세 완료 조건을 실제 컨텍스트(커밋 후 이벤트·공용 풀·H2 스키마) 위에서 고정한다.
api/statistics/ReportStatFactPersistenceTest.java이력6일 전 · #1949테스트통계 사실 테이블(ST01)의 엔티티·리포지토리가 실제 스키마(Flyway V202609030005) 위에서 영속화되는지 확인한다 — 유닛 테스트로는 잡히지 않는 영역이다(docs/rules/testing.md): 엔티티 스캔, 컬럼/타입/enum 매핑, 부모 경유 cascade, report_…
api/statistics/ReviewCountMigrationSeedTest.java이력테스트마이그레이션 V202610271700 의 롤업 채움 SQL(이미 쌓인 사실 행으로 stat_daily_lifecycle.reviewed_count 를 채우는 UPDATE)이 증분 적재의 자바 규칙(ReportLifecycleFactEntity#isReviewed())과 같은 값을 만드는지 고정한…
api/statistics/ServiceStatusApiTest.java이력테스트서비스 상태 조회 API(S-007 §3-4 「서비스 상태 조회 API」)를 실제 HTTP 경계 + 가짜 Prometheus HTTP 서버 위에서 확인한다 — application.yml 의 개발 서버 기본 PromQL 이 그대로(값 인코딩) 나가는지, 판정·연결 실패 처리.
api/statistics/SliceRollupMigrationSeedTest.java이력테스트마이그레이션 V202610191500 의 첫 적재 SQL(이미 쌓인 사실 행으로 두 롤업을 채우는 INSERT … SELECT)이 증분 적재의 자바 규칙과 같은 칸을 만드는지 고정한다 — 올림·상한 칸(StatDailyProcessingTimeRollupService#pageBucketOf· S…
api/statistics/StatDailyRollupIntegrationTest.java이력테스트적재 직후 일별 롤업 증분 갱신(ST03-A)의 완료 조건 다섯을 실제 컨텍스트(커밋 후 이벤트·공용 풀·H2 스키마) 위에서 고정한다.
api/statistics/StatDailyRollupPostgresTest.java이력테스트StatDailyRollupIntegrationTest 의 시나리오를 실제 PostgreSQL 16 에서 그대로 다시 돈다 — 일별 롤업 증분 갱신(ST03-A).
api/statistics/StatUnmappedQueueApiTest.java이력테스트미매핑 큐·차원 마스터 관리자 API(ST05-A — S-007 §3-4 「미매핑 큐 API」)의 완료 조건을 실제 HTTP 경계 + H2 스키마 위에서 고정한다.
api/statistics/StatisticsBackfillApiPostgresTest.java이력테스트StatisticsBackfillApiTest 의 시나리오를 실제 PostgreSQL 16 에서 그대로 다시 돈다 — 통계 재적재 명령(ST04).
api/statistics/StatisticsBackfillApiTest.java이력테스트재적재 명령 API(ST04 — S-007 §3-4 「재적재 명령」)의 완료 조건을 실제 HTTP 경계 + H2 스키마 위에서 고정한다.
api/statistics/UsageStatisticsApiTest.java이력테스트이용 현황 조회 API(2026-10-19 — S-007 §3-4 「이용 현황 조회 API」)를 실제 HTTP 경계 + H2 스키마 위에서 확인한다 — 롤업 SQL 의 사람 × 부서 합산·정렬, 서로 다른 이용자 수, 그리고 이름·팀·단을 로컬 표본 조직도(organization-core 시드…
api/support/H2AdvisoryTransactionLock.java이력클래스H2 전용 SQL 별칭의 테스트 모형.
api/support/H2TestDatasource.java이력클래스컨텍스트를 띄우는 테스트가 쓰는 H2 PostgreSQL 호환 모드 데이터소스 설정.
api/support/PostgresTestDatabase.java이력클래스PostgreSQL 통합 테스트(*PostgresTest, @Tag("postgres"))가 쓰는 실제 PostgreSQL 16 데이터소스.
api/support/RepoRoot.java이력클래스테스트가 리포 안의 파일을 가리킬 때 쓰는 단일 기준점.
api/support/RepoRootTest.java이력테스트RepoRoot 자체의 동작을 지킨다.
api/workflow/WorkflowDefinitionOrderingTest.java이력테스트워크플로우 정의를 단계까지 함께 읽을 때 순서가 seq_no 오름차순인지 본다.
api/workflow/scenario/ScenarioCoverage.java이력클래스시나리오별 실행 커버리지 — JaCoCo 에이전트(jacoco 플러그인이 test 태스크에 붙인다)의 실행 데이터를 시나리오 앞에서 비우고 뒤에서 꺼내 이 시나리오가 지나간 클래스·줄을 센다.
api/workflow/scenario/ScenarioExpectations.java이력클래스워크플로 시나리오의 기대값 판정 — ".": 한 줄을 실제 값과 견준다.
api/workflow/scenario/WorkflowScenarioReport.java이력클래스시나리오 판정 기록 — 시나리오마다 .json(단계·판정 줄 전부)과 모음 summary.json·summary.md.
api/workflow/scenario/WorkflowScenarioRunner.java이력어제 · #2120클래스워크플로 시나리오 한 편을 실제 스택(MockMvc → 컨트롤러 → 엔진 → H2)에서 단계별로 돌리고 단계마다 기대값을 판정한다.
api/workflow/scenario/WorkflowScenarioTest.java이력테스트워크플로 시나리오(scenarios/workflow/)를 스텁 엔진·H2 위의 실제 스택으로 돌린다 — 시나리오 한 편이 테스트 하나다.

modules/ · 공통

modules/base/GitHub

공통 기반

공통 기반 — 모든 모듈의 최하위 계층. 표준 응답·전역 예외·인증(JWT 쿠키) 골격, 그리고 도메인끼리 Gradle 의존 없이 서로 부르게 하는 포트 인터페이스를 둔다. 다른 모듈에 의존하지 않는다.

225 소스57 테스트
의존 모듈 없음
주요 라이브러리 spring-boot-starter-web spring-boot-starter-validation rtim-common-crypt micrometer-core bom s jjwt-api jjwt-impl jjwt-jackson

ai/31GitHub

외부 AI 플랫폼(벡터 컬렉션·인덱싱·검색, 채팅, 문서 처리·변환) 포트와 값 객체.

VectorCollectionCreateCommand.java이력0.0%DTOVectorCollectionPort#create 입력.
VectorDescriptionGenerateCommand.java이력0.0%DTO컬렉션(벡터스토어) 설명 생성 요청 — 플랫폼이 스토어의 기존 설명과 색인을 마친 문서 앞부분을 읽어 설명을 새로 만든다 (docs/decisions/20261016-collection-store-description-generate.md §3).
VectorDocumentIndexCommand.java이력100.0%DTOVectorDocumentPort#requestIndexing 입력.
VectorSearchHit.java이력0.0%DTO검색 결과 한 건.
VectorIndexingStatus.java이력0.0%enum문서 인덱싱 진행 상태.
ChatAnswer.java이력0.0%record채팅 답변 한 건.
ChatCitation.java이력100.0%record플랫폼 응답이 준 출처 하나 — 플랫폼 식별자다 (결정 20261021 6항).
ChatPrompt.java이력72.7%7일 전 · #1914record채팅 한 번의 입력.
ChatRouting.java이력0.0%record① 의도 게이트 + ② 컬렉션 라우팅의 결과 (결정 20261021 10항).
ChatRoutingCandidate.java이력0.0%record② 컬렉션 라우팅(POST /vector_stores/route)에 실을 공용 컬렉션 후보 하나 (결정 20261021 3·10항).
ChatRoutingPrompt.java이력0.0%record① 의도 게이트 + ② 컬렉션 라우팅 한 번의 입력 (결정 20261021 10항).
ChatSearchStore.java이력0.0%record본 답변(②)의 file_search 가 볼 Store 하나 (결정 20261021 3·4항).
KnowledgeDefaults.java이력0.0%record위탁사별 참조 기본값 — 그 위탁사에 켜 둔 문서와 그 문서들의 컬렉션(docs/decisions/20261030-reference-defaults-to-analysis-and-chat.md 3항).
KnowledgeFileRef.java이력0.0%record플랫폼 파일 식별자를 우리 지식컬렉션 파일로 되돌린 값 — 답변 근거 행의 재료.
KnowledgeSearchScope.java이력0.0%record대화가 라우팅과 무관하게 항상 볼 검색 범위 (결정 20261021 3·4항).
VectorCollectionRef.java이력0.0%record플랫폼에 만들어진 컬렉션 한 개에 대한 참조.
VectorDocumentRef.java이력0.0%record플랫폼에 인덱싱 요청된 문서 한 건에 대한 참조.
VectorSearchQuery.java이력100.0%recordVectorSearchPort#search 입력.
ChatModelException.java이력0.0%예외채팅 답변 생성 실패.
VectorDescriptionGenerationException.java이력0.0%예외컬렉션 설명 생성 실패 — 호출자가 다시 시도할 때를 정하도록 이유를 나눈다 (docs/decisions/20261016-collection-store-description-generate.md §3, 2026-10-16 실측).
VectorIndexingDeferredException.java이력0.0%예외요청 마감(VectorDocumentIndexCommand#requestDeadline())이 지나 새 요청을 보내지 않았다.
VectorStoreException.java이력0.0%예외AI 플랫폼 벡터 저장소 연동 실패.
ChatConversationPort.java이력포트외부 AI 플랫폼의 채팅 대화를 파기하는 포트.
ChatModelPort.java이력0.0%포트채팅 답변 생성 포트 — 업체 중립 표면.
ChatPromptLookupPort.java이력100.0%포트Studio 호출에 싣는 지시문의 지금 판을 읽는다 — 지시문 판은 조사 모듈이 저장하고(관리자 API), 채팅 모듈이 이 포트로 읽는다 (docs/decisions/20261023-chat-prompt-db-versioning.md).
ChatTitlePort.java이력포트외부 AI 플랫폼에 대화 제목을 만들어 달라고 하는 포트 — 업체 중립 표면.
KnowledgeScopePort.java이력0.0%포트채팅이 지식컬렉션에서 읽는 것 — 검색 범위·라우팅 후보·출처 되돌리기 (결정 20261021).
VectorCollectionPort.java이력0.0%포트외부 AI 플랫폼의 벡터 컬렉션(지식컬렉션 1개에 대응하는 저장 단위) 수명주기 포트.
VectorDocumentCleanupPort.java이력포트File ID 를 얻은 지식컬렉션 업로드의 영속 정리 경계.
VectorDocumentPort.java이력포트컬렉션에 담긴 문서의 인덱싱(벡터화) 요청·상태 조회·제거 포트.
VectorSearchPort.java이력포트선택된 컬렉션 집합을 대상으로 하는 검색 포트.

ai/conversion/5GitHub

DocumentInfo.java이력85.7%record파일 정보 — 지금은 쪽 수만 쓴다.
PdfConversion.java이력100.0%recordPDF 변환 결과.
DocumentConversionException.java이력100.0%예외파일 정보를 읽거나 PDF 로 바꾸지 못했을 때.
DocumentConversionPort.java이력포트파일 정보 읽기와 PDF 변환 포트 — 문서 AI 플랫폼에 올리기 전 단계다 (docs/decisions/20261013-file-ingestion-pdf-unification.md §1).
DocumentPageInspectionPort.java이력포트외부 문서 분석기가 보고한 쪽 수를 읽는 포트.

ai/document/49GitHub

AnalysisJobRequest.java이력0.0%DTO요약 작업 요청 — 추출 작업에 이어서 돌리는 것이 전제다.
AnalyzedItem.java이력0.0%DTO요약 항목 한 개 — 카드 안의 한 절(내원경위·진단병명 …)이다.
ClassificationJobRequest.java이력0.0%DTO분류 작업 요청.
ExtractionJobRequest.java이력0.0%2일 전 · #2113DTO추출 작업 요청 — 분류 작업에 이어서 돌리는 것이 전제다.
GroupSummaryJobRequest.java이력0.0%DTO요약 그룹 하나의 요청 (DocumentGroupSummaryPort#submit).
AgentRole.java이력0.0%enum문서 AI 플랫폼 에이전트의 용도 — 조사건 설정 스냅샷이 용도마다 에이전트·지시서를 고정한다(DocumentAgentConfigPort).
AiJobState.java이력0.0%enum플랫폼에 맡긴 작업의 상태 — 플랫폼별 상태 이름을 이 셋으로 모은다.
ExternalFileState.java이력0.0%enum플랫폼에 맡긴 파일의 준비 상태.
AgentClassifyConfigDraft.java이력0.0%record관리자 화면에서 고친 분류 체계 — 원본 지시서를 복제해 새 지시서를 만들 때 바꿀 값이다 (docs/decisions/20261103-studio-config-save-new-config.md).
AgentConfigRef.java이력0.0%record문서 AI 플랫폼의 에이전트·지시서 한 쌍 — 작업 요청에 실으면 어댑터가 설정값 대신 이것으로 호출한다.
AgentConfigVersion.java이력0.0%record문서 AI 플랫폼 에이전트의 지시서(Config) 하나 — 버전 목록의 한 줄(docs/decisions/20261029-studio-config-version-list-from-studio.md).
AnalysisJobStatus.java이력0.0%record요약 작업의 현재 상태와 결과 — ExtractionJobStatus 와 같은 모양이다.
AnalyzedCard.java이력0.0%record요약 결과의 카드 한 장 — 요약 표 섹션에서는 플랫폼이 기관(병원) 하나로 묶어 쓴 요약, 행 추가 탭 섹션에서는 행(탭) 하나다(S-014 §6·§9).
AnalyzedSection.java이력0.0%record플랫폼이 준 요약 결과의 구역(섹션) 하나 — 골격(S-014 §9)에 맞춰 답한 경우.
AnalyzedSource.java이력0.0%record요약 항목의 근거 하나 — 입력 문서의 어느 쪽에서 무엇을 보고 썼는가.
AnalyzedTabOutput.java이력0.0%record플랫폼이 준 요약 결과의 탭 하나 원형 — 보고서 에이전트의 Instruct 노드 하나가 낸 출력 JSON 을 모양을 바꾸지 않고 그대로 담는다 (S-014 §9-1, 20261007 결정 1·3항).
ClassificationJobStatus.java이력0.0%record분류 작업의 현재 상태와 결과.
ClassifiedDocument.java이력0.0%6일 전 · #1952record분류 결과 한 건 — 플랫폼이 문서 하나로 묶어 판정한 결과다.
DocumentUpload.java이력0.0%record플랫폼에 올릴 파일 하나.
ExternalDocumentFile.java이력0.0%record플랫폼이 보관 중인 파일 참조.
ExtractOccurrence.java이력0.0%6일 전 · #1962record추출 작업 안 Extract 결과 하나의 자리 — 보고서 탭 출력의 요약근거({job_id, occurrence_id})를 낱장으로 되짚는 데 쓴다 (docs/decisions/20261029-shinhan-summary-evidence-occurrence.md).
ExtractedDocument.java이력0.0%record추출 결과 한 건 — 플랫폼이 문서 하나로 묶어 항목을 뽑은 결과다.
ExtractedField.java이력0.0%5일 전 · #1992record추출 항목 한 개 — 플랫폼이 문서에서 뽑은 키·값 한 쌍이다.
ExtractionJobStatus.java이력0.0%record추출 작업의 현재 상태와 결과 — ClassificationJobStatus 와 같은 모양이다.
FieldLocation.java이력100.0%record추출 항목이 원문 낱장 어디에 있는지 — 낱장 폭·높이에 대한 비율(0~1) 로 적은 축 정렬 사각형이다.
GroupSummaryJobStatus.java이력0.0%record요약 그룹 작업의 현재 상태와 결과 (DocumentGroupSummaryPort#poll).
PurgedDocumentFile.java이력0.0%record파기로 플랫폼에서 지운 파일 하나의 결과.
ReviewedDocumentStructure.java이력100.0%record분류 작업의 현재 검수 구조 — 그룹 요약이 문서를 고르는 기준이다(DocumentGroupSummaryPort#readStructure).
SubmittedJobLookup.java이력0.0%record응답을 받지 못한 작업 요청(접수불명)이 플랫폼에 실제로 접수됐는지 찾는 조회 — 멱등 키가 없는 작업 생성 호출의 중복 요청을 막는 데 쓴다.
AgentClassifyConfig.java이력0.0%설정분류 에이전트 지시서(Config) 하나의 분류 체계 — 관리자 스키마 화면에 채울 값만 뽑은 것이다 (docs/decisions/20261102-studio-config-sync-fill-screen.md).
AgentExtractConfig.java이력0.0%설정추출 에이전트 지시서(Config) 하나의 문서종별 추출 항목 — 관리자 스키마 화면에 채울 값만 뽑은 것이다 (docs/decisions/20261102-studio-config-sync-fill-screen.md).
AgentConfigSourceNotReadyException.java이력0.0%예외플랫폼이 지시서의 원본 Collection 을 아직 검사 중이라 새 지시서를 만들 수 없다.
DocumentAiException.java이력0.0%예외문서 AI 플랫폼 호출 실패 — DocumentFilePort·DocumentClassificationPort 공통 계약이다.
UnsupportedAgentConfigChangeException.java이력0.0%예외원본 지시서를 복제하면서 값만 바꿔서는 할 수 없는 변경 — 처리 단계나 갈래 구조가 바뀌어야 한다 (docs/decisions/20261103-studio-config-save-new-config.md 6항).
PdfDocumentAssembler.java이력93.4%클래스낱장 이미지를 입력 순서대로 여러 쪽 PDF 로 묶는다.
SourceJobSelectors.java이력95.8%2일 전 · #2113클래스분류 Job 여럿을 한 문자열로 주고받는 표기 — 다시 분석 `증분` 으로 합친 분류 결과는 분류 Job 이 여럿이다(결정 20261111-incremental-reanalysis-execution-unit).
AgentConfigCompatibilityPort.java이력0.0%5일 전 · #1988포트앞 단계 지시서(Config)의 결과를 뒤 단계 지시서가 이어받을 수 있는지 — 건에 고정한 지시서 짝의 사전 감지 (docs/decisions/20261108-studio-config-pair-repin.md).
AgentImportShapePort.java이력0.0%어제 · #2132포트뒤 단계 지시서(추출·요약 그룹)의 Import 형태 맞춤 — 분류 지시서가 바뀌면 그 지시서가 만들 형태를 고른 새 지시서를 만든다 (docs/decisions/20261111-studio-import-shape-regeneration.md).
CaseDocumentStorePort.java이력100.0%포트사건 서류가 색인되는 플랫폼 Store — 사고조사 챗봇 답변의 file_search 범위를 만들 때 쓴다.
DocumentAgentConfigPort.java이력0.0%5일 전 · #1994포트지금 설정된 문서 AI 플랫폼 에이전트·지시서 — 조사건이 인입될 때 이 값을 건에 고정하고, 이후 작업 요청에 AgentConfigRef 로 실어 보낸다(docs/decisions/20261028-investigation-settings-snapshot-at-intake.md 2항).
DocumentAgentConfigVersionPort.java이력포트용도별 에이전트의 지시서(Config) 목록 — 관리자 에이전트 스튜디오의 버전 선택 목록이 플랫폼과 같은 버전을 보이게 한다 (docs/decisions/20261029-studio-config-version-list-from-studio.md).
DocumentAnalysisPort.java이력포트추출된 문서 묶음을 근거로 보고서 요약(해석)을 쓰는 일을 문서 AI 플랫폼에 맡기고 결과를 받는 포트.
DocumentClassificationPort.java이력0.0%포트문서 분류를 문서 AI 플랫폼에 맡기고 결과를 받는 포트.
DocumentExtractionPort.java이력0.0%포트문서에서 항목을 뽑는 일을 문서 AI 플랫폼에 맡기고 결과를 받는 포트.
DocumentFilePort.java이력0.0%포트문서 AI 플랫폼에 원본 파일을 맡기는 포트 — 분류·추출 같은 문서 작업의 입력 준비 단계다.
DocumentGroupSummaryPort.java이력포트요약 그룹 하나(2depth 문서종 N개 → 프롬프트 1개)를 문서 AI 플랫폼에 맡기고 결과를 받는 포트 — 그룹마다 1회 부른다 (docs/decisions/20261019-studio-summary-tab-doc-groups.md 「추가 2026-10-21」).
DocumentReportLlmPort.java이력50.0%포트보고서 초안의 탭 하나를 LLM 직접 호출로 만든다 (docs/decisions/20261020-report-generation-llm-input-job.md 「결정」 1~7항).
DocumentReportPort.java이력0.0%포트보고서 초안의 탭(구역) 글을 문서 AI 플랫폼에 맡긴다 (docs/decisions/20261015-studio-saas-v2-agents-adoption.md D4).
DocumentResultCorrectionPort.java이력0.0%5일 전 · #1992포트사람이 고친 결과(분류 라벨·추출 값)를 문서 AI 플랫폼의 저장 결과에 되돌려 놓는 포트 — 결과 왕복 (docs/decisions/20260929-pipeline-correction-roundtrip.md).

audit/7GitHub

감사 원장 적재 포트와 값 객체.

AuditEventCommand.java이력81.8%DTO원장에 남길 행위 한 건.
AuditEventType.java이력100.0%2일 전 · #2112enum감사 원장에 남는 행위의 갈래 (야간 플랜 20260824 N04).
AuditOutcome.java이력100.0%enum기록된 행위의 처리 결과.
AuditTargetType.java이력100.0%enum행위가 가리키는 대상(작업 항목)의 갈래.
AuditActor.java이력71.4%record행위자 — "누가 했는가".
AuditedActions.java이력100.0%5일 전 · #1970클래스컨트롤러가 업무 행위 하나를 감사 원장과 함께 실행하는 부품 — docs/specs/audit-event-catalog.md 「기록 중」 (docs/decisions/20261018-audit-event-scope-expansion.md).
AuditTrailPort.java이력포트감사 원장 적재 포트 (야간 플랜 20260824 N04).

classification/8GitHub

위탁사·분류 마스터 포트.

ModelMappingStatus.java이력0.0%enum이미지시스템 폴더 분류와 AI Agent 낱장 분류 사이의 매핑 진행 상태다 (S-003 API-07).
ReportDeliveryChannel.java이력0.0%enum위탁사별 보고서 초안 전송 방식 (결정 20260902-report-delivery-channel-selection 1항 — 위탁사별 택1).
CustomerCompanyLookupPort.java이력0.0%포트영속 위탁사 마스터의 사용 여부를 읽는 포트다.
DisclosureLinkLookupPort.java이력포트위탁사의 사용자에게 열린 공시실 링크를 읽는 포트다 (결정 20261017-customer-onboarding-status-api 4항).
FolderPlacementLookupPort.java이력0.0%포트위탁사의 「분류 라벨 → 이미지시스템 폴더」 배정 조회 — 분류 결과의 회신 폴더를 정할 때 쓴다(구현은 classification-core).
ImageMasterSyncPort.java이력0.0%포트이미지시스템이 보내는 위탁사·문서분류 마스터 전체 목록을 영속 마스터에 반영하는 포트다.
ReportDeliveryChannelLookupPort.java이력포트위탁사의 보고서 초안 전송 방식을 읽는 포트 (결정 20260902-report-delivery-channel-selection 7항).
StudioDocumentTypeMasterPort.java이력0.0%오늘 · #2161포트에이전트 스튜디오 배포가 운영 문서종 마스터(agent_document_types)와 위탁사 분류체계 매핑 (folder_classification_mappings)을 맞추는 포트다(docs/decisions/20261112-studio-deploy-master-mapping-sync.md).

exception/2GitHub

BusinessException 하위 도메인 예외 — 에러 코드와 HTTP 상태를 정한다.

BusinessException.java이력100.0%예외도메인 모듈에서 발생하는 처리 가능한 예외의 공통 상위 타입.
GlobalExceptionHandler.java이력76.9%핸들러ResponseEntityExceptionHandler 를 상속해 Spring MVC 가 던지는 4xx 예외 (검증 실패, 잘못된 요청 본문, 지원하지 않는 메서드 등)는 원래 상태 코드를 그대로 유지한다.

file/9GitHub

ZIP·PDF(쪽 낱장 분할)·문서 변환·파일 해시 유틸.

PdfPageTooLargeException.java이력100.0%2일 전 · #2093예외PDF 의 한 쪽만으로 Studio 문서 파싱 구간 한도 이상이라 쪽을 나눠서는 맞출 수 없을 때 (docs/decisions/20261110-collection-studio-group-size.md).
PdfRasterizationException.java이력100.0%예외PDF 를 낱장 이미지로 풀지 못했을 때.
ZipProcessingException.java이력100.0%예외ZIP 무결성 계산 또는 안전한 압축 해제에 실패했음을 나타낸다.
FileDigests.java이력50.0%클래스파일 내용의 다이제스트.
LocalDocumentConverter.java이력95.0%클래스DocMate 규격을 받기 전의 로컬 변환 구현 (docs/decisions/20261013-file-ingestion-pdf-unification.md §1-2).
PdfDocuments.java이력88.2%2일 전 · #2093클래스PDF 쪽 수 읽기·이미지 → PDF·쪽 범위 분할·조각 병합 (docs/decisions/20261013-file-ingestion-pdf-unification.md).
PdfPageRasterizer.java이력95.9%클래스PDF 를 쪽마다 한 장의 JPEG 로 렌더링한다 (결정 20261002-pdf-page-split-at-reception).
ZipArchiveProcessor.java이력74.2%클래스ZIP SHA-256 계산과 경로 탈출을 막는 안전한 압축 해제 유틸.
ZipEntryNames.java이력95.7%클래스ZIP 항목명 문자셋 판정.

hospital/1GitHub

HospitalMasterSourcePort.java이력0.0%4일 전 · #2006포트병원 마스터 원천 조회 포트 (결정 20260910 병원 마스터 §1).

integration/10GitHub

base 포트 구현체 — 다른 도메인·워크플로우 엔진이 이 모듈을 부르는 입구.

ExchangeDirection.java이력100.0%enum연동 교환의 방향 — 외부 시스템이 우리를 부른 것(INBOUND)인가, 우리가 외부를 부른 것(OUTBOUND)인가.
ExchangeOutcome.java이력100.0%enum교환의 성패 — HTTP 상태(4xx·5xx)·전송 오류·응답 봉투의 success=false 를 실패로 본다.
ExchangeSystem.java이력100.0%enum연동 교환의 상대 시스템 (docs/decisions/20261023-integration-exchange-log.md).
IntegrationExchange.java이력25.0%record연동 교환 한 건 — 외부 시스템과 오간 요청·응답의 기록 계약 (docs/decisions/20261023-integration-exchange-log.md).
IntegrationLogConfig.java이력0.0%설정연동 교환 기록 구성 — 설정·수신 필터·발신 인터셉터의 기록 포트 결속 (docs/decisions/20261023-integration-exchange-log.md).
IntegrationLogProperties.java이력50.0%설정연동 교환 기록 설정 (docs/decisions/20261023-integration-exchange-log.md).
IntegrationExchangeRecorder.java이력인터페이스연동 교환 기록 포트 — 구현은 저장 모듈(audit-core)이 갖는다.
ExchangeBodies.java이력93.1%클래스교환 본문을 기록용으로 다듬는 순수 함수 모음 — 필터(수신)와 인터셉터(발신)가 같은 규칙을 쓴다.
OutboundExchangeLogging.java이력86.4%클래스발신 교환 기록 — org.springframework.web.client.RestClient 인터셉터 (docs/decisions/20261023-integration-exchange-log.md).
InboundExchangeLoggingFilter.java이력85.7%필터수신 교환 기록 — 외부 시스템(이미지시스템)이 우리를 부른 요청·응답을 남기는 서블릿 필터 (docs/decisions/20261023-integration-exchange-log.md).

investigation/6GitHub

InvestigationBusinessMetadataLookupPort.java이력0.0%포트보고서번호로 외부 업무 원천의 조사·계약 메타데이터를 조회하는 포트다.
InvestigationChatContextPort.java이력92.5%포트사고조사 챗봇이 쓰는 보고서 쪽 맥락 — 보고서 건을 소유한 investigation-core 가 구현하고, 대화를 소유한 chat-core 가 이 타입으로만 받는다(docs/decisions/20261021-investigation-chat-references-and-reflection.md).
InvestigationChatPurgePort.java이력0.0%포트보고서가 지워질 때 그 보고서의 사고조사 챗봇 대화를 첨부까지 지운다(docs/decisions/20261023-investigation-chat-session-structure.md 8항).
InvestigationReportReflectionPort.java이력100.0%포트사고조사 챗봇 「AI 보고서 반영」 — 대화에서 확인한 내용으로 보고서를 고쳐 요약 결과 새 판으로 남긴다 (docs/decisions/20261021-investigation-chat-references-and-reflection.md 5~7항, 통합 설계 v0.3 사고조사 4번·템플릿 5번).
ReportDisposalSchedulePort.java이력0.0%포트스마트심사가 알려 주는 보고서 파기 일정 — 파기 뷰 두 개를 보고서번호로 읽는다 (docs/decisions/20260909-report-disposal-policy.md 🟢, 뷰 정의 smartreview/views.json).
SmartReviewReportTransferPort.java이력0.0%포트스마트심사 보고서 수신 API 를 호출하는 포트 (docs/decisions/20261103-smart-review-report-receiver-api.md).

mail/3GitHub

아웃바운드 메일 포트.

OutboundMail.java이력0.0%record발송할 메일 한 건.
MailDeliveryException.java이력0.0%예외메일 발송 실패 (접속·TLS·인증·전송).
MailDeliveryPort.java이력포트아웃바운드 메일 발송 포트.

observability/5GitHub

요청 상관관계 ID·MDC 전파·외부 호출 계측.

ExternalCallMetrics.java이력100.0%DTO외부 시스템으로 나가는 호출 하나의 성패·지연을 남기는 공통 계측 헬퍼 (docs/decisions/20260828-observability-stack.md §2 가 관측의 이유로 든 "외부 연동 장애 분석").
ObservabilityConfig.java이력0.0%설정시스템 관측 빈 구성 (docs/decisions/20260828-observability-stack.md).
MdcPropagation.java이력100.0%클래스MDC(로그 컨텍스트)를 다른 스레드로 넘기는 도우미.
RequestCorrelation.java이력100.0%클래스요청 상관관계 ID(correlation id)의 이름과 값 규칙을 한곳에 모은 상수/헬퍼.
RequestCorrelationFilter.java이력100.0%필터요청마다 상관관계 ID 를 MDC 에 심고 응답 헤더로 돌려주는 필터.

organization/6GitHub

조직·사용자 디렉터리 라이브 조회 포트.

OrganizationScope.java이력0.0%record조회자 한 명이 볼 수 있는 담당 조사자 사번의 집합 — 사고조사 조회 범위의 판정 결과다 (docs/decisions/20260918-permission-levels-and-org-scope.md §2).
CollectionApprovalPolicyPort.java이력0.0%포트지식컬렉션 승인 정책 — 권한 관리 매트릭스가 정하는 "누가 승인센터를 열고, 누가 1차 승인을 맡는가".
MenuPermissionLookupPort.java이력포트메뉴 권한 매트릭스의 읽기 전용 창 — "보유 레벨 중 하나라도 이 메뉴들 중 하나를 쓸 수 있는가".
OrganizationChangeHistoryPort.java이력포트사원별 최종 인사 변경일시 라이브 조회 포트 — 조직도의 「변경 대상자」(레벨 재검토가 필요한 사원) 판정 원천이다 (docs/decisions/20260827-orgchart-change-tracking.md).
OrganizationDirectoryPort.java이력0.0%포트조직·사용자 디렉터리 라이브 조회 포트 — 조직도 화면(/api/v1/departments·/api/v1/users)의 데이터 원천을 로컬 표본에서 라이브 뷰로 바꾸기 위한 자리다.
OrganizationScopePort.java이력0.0%포트사고조사 조회 범위 포트 — 조회자(세션 사용자)가 어느 담당 조사자의 건을 볼 수 있는지를 조직 트리로 판정하고, 목록·워크스페이스가 담당 조사자를 이름·소속으로 표시·검색할 수 있게 한다 (docs/decisions/20260918-permission-levels-and-org-scope.m…

persistence/3GitHub

엔티티 공용 매핑 조각.

AfterCommit.java이력100.0%5일 전 · #1971클래스비가역 작업을 커밋된 뒤로 미루는 도우미.
AfterRollback.java이력100.0%클래스트랜잭션 안에서 먼저 만든 외부 자원(디스크 사본 등)을 롤백됐을 때만 거두는 도우미 — AfterCommit 의 짝.
AuditTimestamps.java이력100.0%클래스모든 도메인 엔티티가 공유하는 감사 시각(생성/수정) 두 컬럼.

response/2GitHub

표준 응답 래퍼(success/data/error).

ApiResponse.java이력100.0%DTOdocs/rules/api.md 의 표준 응답 구조(success/data/error)를 따르는 공통 응답 래퍼.
ApiError.java이력100.0%recordApiResponse#error에 담기는 실패 상세.

retention/2GitHub

DataRetentionConfig.java이력0.0%설정공통 보관 일수 설정 등록 — DataRetentionProperties.
DataRetentionProperties.java이력100.0%설정데이터 보관·파기 공통 일수 — 파기 성격의 정리는 전부 이 값 하나를 본다 (docs/decisions/20261023-shared-data-retention-setting.md).

security/22GitHub

base 의 사용자 조회 포트 어댑터.

ActiveSession.java이력100.0%record판정을 통과한 세션 — 필터가 요청 속성에 담고, 세션 상태 조회(GET /api/v1/auth/session)가 읽는다.
AuthenticatedUser.java이력100.0%record시스템 세션이 표현하는 "지금 요청을 보낸 사람".
IdentityCredentials.java이력100.0%record신원 확인 요청 — 개발용 로그인(IdentityProviderPort)의 사번+비밀번호.
IssuedSession.java이력100.0%record수립된 시스템 세션.
AuthSessionService.java이력98.9%5일 전 · #1970서비스로그인·재발급의 흐름만 담당한다: 신원 확인(IdentityProviderPort) → 토큰 발급 (AuthTokenService).
AuthTokenService.java이력97.6%서비스시스템 세션 토큰(JWT) 발급·검증.
SessionLifetimeService.java이력92.3%서비스세션 유휴 판정 — 유휴 만료를 서버가 지킨다(20261008 결정 2항).
AuthProperties.java이력73.6%설정인증 설정.
SecurityConfig.java이력0.0%설정인증 골격 빈 구성 (P0-5).
AuthenticationFailedException.java이력100.0%예외신원 확인 실패 / 세션 없음.
UnregisteredUserException.java이력100.0%예외외부에서 확인된 신원(SSO 사번)이 사용자 디렉터리(스마트심사 뷰)에 없거나 비활성인 경우.
AuthAuditRecorder.java이력100.0%오늘 · #2188클래스로그인·로그아웃의 감사 원장 적재 — docs/specs/audit-event-catalog.md 「기록 중」.
AuthCookieFactory.java이력100.0%클래스세션 쿠키 생성·판독.
RoleCodeAuthorization.java이력100.0%클래스설정값 레벨 목록과 보유 레벨 집합을 대조하는 판정 한 곳.
AuthSessionStorePort.java이력100.0%포트세션 기록 포트 — 유휴 만료와 로그아웃을 서버가 판정하기 위한 상태다(20261008 결정 2항).
IdentityProviderPort.java이력포트신원 확인(로그인) 포트 — "이 사람이 누구인지"를 판정하는 자리다.
RefreshTokenStorePort.java이력100.0%포트refresh 토큰 원장 포트 — 회전(재발급마다 새 토큰)·무효화(로그아웃·재사용 감지)의 서버 측 상태다 (20260826 로테이션 결정).
UserAccountLookupPort.java이력포트사번으로 사용자 부가 정보(이름·레벨·부서)를 읽는 포트.
UserEmailLookupPort.java이력포트사번으로 사용자 메일 주소를 읽는 포트.
UserSupplementLookupPort.java이력75.0%포트사용자 부수정보(우리 DB 소유) 조회 포트.
UserSupplementStorePort.java이력오늘 · #2181포트사용자 부수정보 저장 포트 — 최초 로그인 온보딩이 기본 레벨·이메일을 기록할 때 쓴다.
JwtCookieAuthenticationFilter.java이력100.0%필터access 쿠키(JWT)를 읽어 요청에 세션 사용자를 붙이는 필터.

security/authorization/9GitHub

API 접근 표시와 인가 인터셉터.

AuthorizationConfig.java이력0.0%설정인가 인터셉터 등록.
MenuAccessForbiddenException.java이력100.0%예외세션은 있지만 이 API 가 속한 메뉴를 쓸 권한이 없다 — 403.
ApiAccessRule.java이력100.0%인터페이스핸들러 메서드 하나의 접근 규칙 — 붙은 접근 표시 4종(MenuPermission·LoginRequired·SystemApi· PublicApi) 중 무엇인지.
LoginRequired.java이력클래스로그인만 필요한 API — 메뉴 권한을 보지 않는다.
MenuAuthorizationInterceptor.java이력100.0%클래스API 인가 — 핸들러의 접근 표시(ApiAccessRule)와 세션의 보유 레벨, 메뉴 권한 매트릭스를 대조한다 (docs/decisions/20261012-api-menu-authorization.md).
MenuCodes.java이력클래스MenuPermission 에 적는 메뉴 코드 — role_menu_permissions.menu_code 의 값.
MenuPermission.java이력클래스이 API 가 속한 메뉴 — 호출자의 보유 레벨 중 하나라도 나열한 메뉴 중 하나를 허용하면 통과한다.
PublicApi.java이력클래스공개 API — 로그인 전에 부르는 경로(로그인·재발급·로그아웃·SSO).
SystemApi.java이력클래스시스템 간 API — 사람 세션을 보지 않고 통과시킨다(이미지시스템 수신 API-01~07).

security/local/1GitHub

local 프로필 전용 개발 로그인 스텁.

LocalDevIdentityProvider.java이력94.7%클래스개발용 로그인 스텁 — local 프로필에서만 등록된다.

security/onboarding/2GitHub

최초 로그인 온보딩 API.

AuthOnboardingController.java이력화면 미연결Swagger85.7%오늘 · #2181API최초 로그인 온보딩 API — 세션은 있으나 부수정보(레벨)가 없는 사용자가 이메일을 설정하고 기본 레벨(일반사용자)을 받는다.
AuthOnboardingService.java이력100.0%서비스최초 로그인 온보딩 — 부수정보(레벨·이메일)가 없는 사용자가 이메일을 설정하면 기본 레벨(일반사용자)을 부여한다 (2026-08-26 PM 지시).

security/sso/8GitHub

SSO 콜백 로그인과 WebAgent 연동.

SsoCallbackController.java이력98.3%APISSO 콜백 — WebAgent 가 넣어 준 사번 헤더로 시스템 세션을 만들고 원래 화면으로 돌려보낸다 (S-008 2-2).
SsoLoginController.java이력95.5%API로그인 폼 → login.fcc 전달 (S-008 4-1~4-4, 가이드 Action.jsp 의 역할).
SiteMinderPasswordEncoder.java이력인터페이스login.fcc 로 보낼 비밀번호 변환 — SiteMinder 가 요구하는 값과 같아야 한다(S-008 4-4).
RathonSiteMinderPasswordEncoder.java이력62.5%클래스라톤테크 RathonCrypt#encodeSHA256 을 그대로 호출한다 — 가이드 Action.jsp 와 같은 값이다.
SsoConfiguration.java이력80.0%클래스SSO 가 켜졌을 때만 조립된다.
SsoHeaderValue.java이력100.0%클래스WebAgent 가 넣어 준 헤더 값 읽기 — RFC 2047 encoded-word 를 푼다(S-008 4-5).
SsoLogoutCookie.java이력100.0%클래스로그아웃 때 SSO(SiteMinder) 세션도 끝내는 쿠키.
SsoReturnPath.java이력100.0%클래스로그인 뒤 돌아갈 경로 검증 — 오픈 리다이렉트 차단.

security/web/3GitHub

세션 API (login·logout·me·refresh).

AuthController.java이력화면 미연결Swagger42.4%API세션 API.
LoginRequest.java이력0.0%DTO개발용 로그인 요청.
SessionStatusResponse.java이력0.0%DTO세션 상태 — 화면의 세션 타이머·만료 경고가 쓴다(20261008 결정 4·5항).

storage/4GitHub

업로드 파일 저장 — 로컬 디스크, 설정 시 S3.

ObjectStorageException.java이력0.0%예외로컬 또는 S3 호환 객체 저장소 접근 실패.
ObjectStore.java이력인터페이스도메인에 무관한 키-객체 저장소.
LocalObjectStore.java이력70.0%클래스개발·로컬 실행에서 같은 객체 키 계약을 디렉터리로 구현한다.
S3ObjectStore.java이력0.0%클래스지식컬렉션과 이미지 접수가 함께 쓰는 S3 호환 객체 저장소 구현.

text/1GitHub

Texts.java이력100.0%5일 전 · #1970클래스모듈마다 private 으로 복사돼 있던 문자열 helper 를 한곳에 모은다.

validation/2GitHub

커스텀 Bean Validation 제약.

NullOrNotBlank.java이력클래스PATCH(부분 수정) DTO의 String 필드용.
NullOrNotBlankValidator.java이력0.0%클래스NullOrNotBlank의 실제 검증 로직 — null은 통과(=필드 생략), 공백 문자열만 거부한다.

web/3GitHub

REST 컨트롤러 — HTTP 요청을 서비스로 넘기고 ApiResponse 로 감싼다.

ListSortDirection.java이력0.0%enum목록 API가 공통으로 사용하는 정렬 방향.
ListPageCondition.java이력100.0%인터페이스쪽 단위 목록 조회 조건이 공통으로 갖는 쪽 번호·행 수 정규화.
ListPeriodCondition.java이력100.0%인터페이스기간 필터를 양끝 포함으로 받는 목록 조회 조건의 거꾸로 판정.

web/csv/9GitHub

CsvColumn.java이력100.0%recordCSV 한 열 — 목록 응답 DTO 의 필드 하나와 1:1 이다.
CsvExportConfig.java이력0.0%설정CSV 내보내기 설정 등록 — CsvExportProperties.
CsvExportProperties.java이력100.0%설정관리자 로그 CSV 내보내기 설정 (HSA-AD-006).
CsvExportBusyException.java이력100.0%예외시스템 전체 동시 내보내기 상한에 걸렸다 — 429 CSV_EXPORT_BUSY.
CsvExportTooManyRowsException.java이력100.0%예외조건에 맞는 행이 한 번에 내보낼 수 있는 최대 행 수(hwss.export.csv.max-rows)보다 많다 — 400 CSV_EXPORT_TOO_MANY_ROWS.
CsvPageFetcher.java이력100.0%인터페이스화면이 이미 쓰는 목록 조회 함수를 한 쪽 단위로 부르는 어댑터.
CsvCells.java이력100.0%클래스CSV 셀 한 칸의 문자열 규칙 — 수식 주입(CSV injection) 막기와 RFC 4180 따옴표 처리.
CsvExportGate.java이력100.0%클래스인스턴스당 동시 CSV 내보내기 상한 — 모든 로그 화면의 내보내기가 한 세마포어를 나눠 쓴다(HSA-AD-006).
CsvExporter.java이력90.0%클래스관리자 로그 화면 공통 CSV 내보내기 (HSA-AD-006).

workflow/12GitHub

업무 도메인 ↔ 워크플로우 엔진 사이의 포트와 진행 뷰.

WorkflowLaunchCommand.java이력0.0%DTOWorkflowLauncherPort 로 워크플로우 실행을 시작할 때 넘기는 값이다.
WorkflowProgressDetail.java이력0.0%DTO화면 스테퍼가 한 번에 필요로 하는 것 전부 — 현재 단계 + 단계 이력 + 게이트 차단 사유.
WorkflowProgressView.java이력0.0%DTO업무 화면이 "지금 어느 단계인가"를 표시하기 위해 읽는 워크플로우 실행 스냅샷.
WorkflowStepProgressView.java이력0.0%DTO단계 하나의 진행 상태 — 화면 스테퍼의 칸 하나에 해당한다.
AwaitingStepCompletion.java이력0.0%record외부 작업을 기다리던 단계(WorkflowStepWorkPort.StepWorkResult#awaitingExternal())의 결과를 엔진에 돌려줄 때 넘기는 값.
WorkflowStepFailure.java이력0.0%record엔진이 WorkflowStepCompletionPort 로 알리는 "단계 최종 실패" 사실.
WorkflowStepSuccess.java이력0.0%record엔진이 WorkflowStepCompletionPort 로 알리는 "단계 성공" 사실.
StepPreconditionPort.java이력0.0%포트워크플로우 단계의 업무 선행 조건을 판정하는 포트.
WorkflowLauncherPort.java이력포트업무 도메인이 워크플로우 실행을 시작·진행시킬 때 쓰는 포트(인터페이스).
WorkflowProgressPort.java이력포트업무 도메인이 워크플로우 진행 상황을 읽기만 할 때 쓰는 포트.
WorkflowStepCompletionPort.java이력0.0%포트워크플로우 단계가 성공해 처리 상태가 넘어갈 때 그 사실을 업무 도메인에 되돌려 주는 포트.
WorkflowStepWorkPort.java이력0.0%포트워크플로우 단계가 실제로 하는 업무(분류·추출·분석 …)를 업무 도메인이 제공하는 포트.

빌드·리소스1GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — 다른 모듈 의존 없음.

src/test/57GitHub

테스트 파일 — 펼쳐서 보기
ApiResponseTest.java이력테스트ApiResponse 대상 테스트.
ai/ChatCitationRegionTest.java이력테스트플랫폼 꼭짓점 → 쪽 비율 상자(2026-11-04 SaaS 실측 모양 [{x, y}] × 4).
ai/ChatPromptLookupPortTest.java이력테스트지시문 판 조회 포트의 기본 동작.
ai/ChatPromptTest.java이력테스트채팅 입력 값 — 턴 지시문·Job 자리의 기본값과 검사(사고조사 엔진 입력 확장).
ai/VectorSearchQueryTest.java이력테스트VectorSearchQuery 대상 테스트.
ai/document/CaseDocumentStorePortTest.java이력테스트사건 서류 Store 값 — provider 와 Store id 는 둘 다 있어야 한다(provider 가 같을 때만 사건 파일로 좁히므로).
ai/document/FieldLocationTest.java이력테스트FieldLocation 대상 테스트.
ai/document/PdfDocumentAssemblerTest.java이력테스트PdfDocumentAssembler 대상 테스트.
ai/document/SourceJobSelectorsTest.java이력2일 전 · #2113테스트분류 Job 여럿의 표기 — 다시 분석 `증분` 으로 합친 분류 결과의 요약 그룹 선택(결정 20261111-incremental-reanalysis-execution-unit).
audit/AuditedActionsTest.java이력테스트AuditedActions 대상 테스트.
exception/GlobalExceptionHandlerTest.java이력테스트GlobalExceptionHandler 대상 테스트.
file/FileDigestsTest.java이력테스트FileDigests 대상 테스트.
file/LocalDocumentConverterTest.java이력테스트LocalDocumentConverter 대상 테스트.
file/PdfDocumentsSizePlanTest.java이력2일 전 · #2093테스트PdfDocuments#planPartsBySize — Studio 가 파싱 전에 나누는 쪽 구간이 크기 한도 미만이 되도록 조각을 끊는지 (docs/decisions/20261110-collection-studio-group-size.md).
file/PdfDocumentsTest.java이력테스트PdfDocuments 대상 테스트.
file/PdfDocumentsXmpTest.java이력테스트PdfDocuments#stripXmpMetadata — docs/decisions/20261028-studio-upload-strip-pdf-xmp.md.
file/PdfPageRasterizerTest.java이력테스트PdfPageRasterizer 대상 테스트.
file/ZipArchiveProcessorPropertyTest.java이력테스트ZIP 항목명 문자셋 폴백(ZipArchiveProcessor#extract)의 속성 기반 테스트.
file/ZipArchiveProcessorTest.java이력테스트ZipArchiveProcessor 대상 테스트.
integration/ExchangeBodiesTest.java이력테스트ExchangeBodies 대상 테스트.
integration/InboundExchangeLoggingFilterTest.java이력테스트수신 필터 — 이미지시스템 수신 경로의 요청·응답 본문이 기록 포트에 남고 응답은 그대로 나가는지 본다.
integration/OutboundExchangeLoggingTest.java이력테스트발신 인터셉터 — 운영과 같은 RestClient 구성 위에서 요청·응답이 기록 포트에 어떻게 남는지 본다.
investigation/InvestigationChatContextPortTest.java이력테스트사고조사 챗봇 맥락 포트의 값 — 판정 연쇄·제목 조합·입력 Job 순서.
investigation/InvestigationReportReflectionPortTest.java이력테스트AI 보고서 반영 포트의 값 — 빈 값 정리·복사, 거절 결과, 보고서 LLM 요청의 첨부 자리(E1).
observability/ExternalCallMetricsTest.java이력테스트ExternalCallMetrics 대상 테스트.
observability/MdcPropagationTest.java이력테스트MdcPropagation 대상 테스트.
observability/RequestCorrelationFilterTest.java이력테스트RequestCorrelationFilter 대상 테스트.
persistence/AfterCommitTest.java이력테스트AfterCommit 의 계약 — 커밋 뒤에만 돌고, 롤백되면 돌지 않고, 트랜잭션이 없으면 즉시 돈다.
persistence/AfterRollbackTest.java이력테스트AfterRollback 의 계약 — 롤백 뒤에만 돌고, 커밋되거나 트랜잭션이 없으면 돌지 않는다.
persistence/AuditTimestampsTest.java이력테스트AuditTimestamps 콜백 규약을 컨텍스트 없이 리플렉션으로 검증한다.
retention/DataRetentionPropertiesTest.java이력테스트DataRetentionProperties 대상 테스트.
security/AuthAuditRecorderTest.java이력오늘 · #2188테스트AuthAuditRecorder 대상 테스트.
security/AuthCookieFactoryTest.java이력테스트쿠키 계약(20260810-frontend-auth-and-api-client.md §1 표)이 그대로 나가는지 확인한다.
security/AuthSessionServiceTest.java이력오늘 · #2188테스트AuthSessionService 대상 테스트.
security/AuthTokenServiceTest.java이력테스트AuthTokenService 대상 테스트.
security/JwtCookieAuthenticationFilterTest.java이력테스트JwtCookieAuthenticationFilter 대상 테스트.
security/RoleCodeAuthorizationTest.java이력테스트네 도메인(mail·collection·organization·classification)이 복제하고 있던 설정값 레벨 대조 판정을 한 곳으로 모은 뒤, 그 판정이 종전과 같은 답을 내는지 고정하는 테스트.
security/SessionLifetimeServiceTest.java이력테스트SessionLifetimeService 대상 테스트.
security/authorization/ApiAccessRuleTest.java이력테스트ApiAccessRule 대상 테스트.
security/authorization/MenuAuthorizationInterceptorTest.java이력테스트MenuAuthorizationInterceptor 대상 테스트.
security/local/LocalDevIdentityProviderTest.java이력테스트LocalDevIdentityProvider 대상 테스트.
security/onboarding/AuthOnboardingControllerTest.java이력테스트온보딩 완료의 감사 기록(ONBOARDING_COMPLETED) — 이메일 값은 상세에 남지 않는다.
security/onboarding/AuthOnboardingServiceTest.java이력테스트AuthOnboardingService 대상 테스트.
security/sso/RathonSiteMinderPasswordEncoderTest.java이력테스트업체 jar 결과가 "표준 SHA-256 소문자 hex" 라는 가정(S-008 4-4, 2026-09-10 바이트코드 확인)을 고정한다.
security/sso/SsoCallbackControllerTest.java이력테스트SSO 콜백의 계약 — 무엇을 신뢰하고 어디로 보내는지.
security/sso/SsoConfigurationTest.java이력테스트환경마다 다른 값은 기본값이 없다 — 켰는데 비어 있으면 기동이 실패해야 한다.
security/sso/SsoHeaderValueTest.java이력테스트SsoHeaderValue 대상 테스트.
security/sso/SsoLoginControllerTest.java이력테스트로그인 폼 → login.fcc 자동 제출 HTML.
security/sso/SsoLogoutCookieTest.java이력테스트SsoLogoutCookie 대상 테스트.
security/sso/SsoReturnPathTest.java이력테스트SsoReturnPath 대상 테스트.
security/web/AuthControllerLogoutTest.java이력테스트로그아웃이 SSO 세션까지 끝내는지 — SSO 켜짐/꺼짐에 따라 SMSESSION 덮어쓰기가 갈린다(S-008 4-6).
storage/LocalObjectStoreTest.java이력테스트LocalObjectStore 대상 테스트.
text/TextsTest.java이력5일 전 · #1970테스트Texts 대상 테스트.
web/ListConditionNormalizationTest.java이력테스트목록 조회 조건의 공통 정규화 — 2026-10-05 야간 Q2 로 두 관리자 로그 조회에서 올린 규칙.
web/csv/CsvCellsTest.java이력테스트CsvCells 대상 테스트.
web/csv/CsvExportGateTest.java이력테스트CsvExportGate 대상 테스트.
web/csv/CsvExporterTest.java이력테스트CsvExporter 대상 테스트.

modules/ · 도메인

modules/investigation-shared/GitHub

사고조사 · 공유 DTO

사고조사 · 공유 DTO — 사고조사 도메인의 요청·응답 DTO, 상태 enum, 통계 API 계약.

225 소스1 테스트
의존 모듈 base
주요 라이브러리 spring-boot-starter-validation jackson-annotations

dto/148GitHub

모듈 경계를 넘는 요청·응답 DTO (record).

AgentStudioClassifyConfigSaveRequest.java이력0.0%오늘 · #2161DTO1단계 분류 저장 — 원본 지시서를 복제해 화면 값으로 새 Studio 지시서를 만든다 (docs/decisions/20261103-studio-config-save-new-config.md).
AgentStudioClassifyConfigView.java이력0.0%오늘 · #2161DTO1단계 분류 `동기화` 응답 — 고른 Studio 지시서의 분류 체계 중 화면에 채울 값 (docs/decisions/20261102-studio-config-sync-fill-screen.md).
AgentStudioClassifySaveRequest.java이력0.0%DTO문서 분류(1단계 CLASSIFY) 저장 — 바뀐 1depth·2depth 문서종만 1depth/2depth 구분을 붙여 보낸다 (docs/decisions/20261020-studio-run-result-field-types.md, 프론트 _lib/stage-save.ts ClassifySav…
AgentStudioClassifyView.java이력0.0%DTO에이전트 스튜디오 문서 분류(1단계 CLASSIFY) 설정 한 버전.
AgentStudioConfigVersionRow.java이력0.0%어제 · #2132DTO에이전트 스튜디오 버전 선택 목록의 한 줄 — Studio 에이전트의 지시서(Config) 하나 (docs/decisions/20261029-studio-config-version-list-from-studio.md).
AgentStudioConfigVersionsView.java이력0.0%DTO에이전트 스튜디오 버전 선택 목록 — 그 단계 에이전트의 Studio 지시서 전부, 최신이 먼저 (docs/decisions/20261029-studio-config-version-list-from-studio.md 3·4항).
AgentStudioDeploymentRequest.java이력0.0%2일 전 · #2112DTO배포 — 통과한 실행 테스트 번호(docs/decisions/20261111-studio-server-deployment-management.md 3항).
AgentStudioDeploymentView.java이력0.0%오늘 · #2161DTO배포 한 건.
AgentStudioDeploymentsView.java이력0.0%2일 전 · #2112DTO지금 배포 상태.
AgentStudioExtractConfigSaveRequest.java이력0.0%DTO2단계 추출 스키마 저장 — 원본 지시서를 복제해 바뀐 문서종의 항목만 고친 새 Studio 지시서를 만든다 (docs/decisions/20261103-studio-config-save-new-config.md).
AgentStudioExtractConfigView.java이력0.0%DTO2단계 추출 스키마 `동기화` 응답 — 고른 Studio 지시서의 문서종별 추출 항목 중 화면에 채울 값 (docs/decisions/20261102-studio-config-sync-fill-screen.md).
AgentStudioExtractSaveRequest.java이력0.0%DTO추출 스키마(2단계 `추출 스키마 설정`) 저장 — 추출 항목이 바뀐 문서종만, 문서종마다 항목 전체를 보낸다 (docs/decisions/20261021-studio-config-version-sync.md 3항: 추출 스키마와 요약 설정은 따로 저장).
AgentStudioExtractView.java이력0.0%DTO에이전트 스튜디오 추출 스키마(2단계 `추출 스키마 설정`) 한 버전 — 2depth 문서종 키 → 추출 항목 묶음이다 (docs/decisions/20261021-studio-config-version-sync.md 「짝 맞추기」).
AgentStudioInstructSaveRequest.java이력0.0%DTO에이전트 스튜디오 INSTRUCT 저장 요청 — 전 위탁사 설정 전체를 보내 다음 버전으로 만든다(전량 치환).
AgentStudioInstructVersionSummary.java이력0.0%DTO에이전트 스튜디오 INSTRUCT 버전 목록의 한 줄.
AgentStudioInstructView.java이력0.0%DTO에이전트 스튜디오 INSTRUCT 설정 한 버전.
AgentStudioSchemaVersionSummary.java이력0.0%DTO에이전트 스튜디오 분류·추출 스키마 버전 목록의 한 줄 — config 버전 select 의 옵션.
AgentStudioSchemaView.java이력0.0%DTO에이전트 스튜디오 문서 분류·정보 추출 체계의 최신 저장본 — 분류 최신 버전과 추출 스키마 최신 버전을 함께 내려준다.
AgentStudioShapeAlignmentView.java이력0.0%어제 · #2132DTO분류 지시서 저장에 이어 한 Import 형태 맞춤 결과(docs/decisions/20261111-studio-import-shape-regeneration.md).
AgentStudioSummaryConfigView.java이력0.0%어제 · #2132DTO요약 그룹 지시서 한 벌의 버전(docs/decisions/20261111-studio-import-shape-regeneration.md 5항).
AgentStudioTestRunCreateRequest.java이력0.0%6일 전 · #1915DTO실행 테스트 만들기.
AgentStudioTestRunFieldConfirmRequest.java이력0.0%4일 전 · #1963DTO2단계 추출 결과의 저신뢰 항목 확인 — 지금 값이 맞다고 남겨 검수를 푼다(docs/decisions/20261107-studio-test-extract-run.md 13항).
AgentStudioTestRunFieldEditRequest.java이력0.0%4일 전 · #1963DTO2단계 추출 결과의 항목 값 수정(docs/decisions/20261107-studio-test-extract-run.md 11항).
AgentStudioTestRunPageEditRequest.java이력0.0%6일 전 · #1915DTO1단계 분류 결과의 낱장 문서종 지정·확정(docs/decisions/20261106-studio-test-classify-run.md 4항).
AgentStudioTestRunReportTabRunRequest.java이력0.0%3일 전 · #2032DTO보고서 탭 하나 다시 실행.
AgentStudioTestRunUpdateRequest.java이력0.0%6일 전 · #1915DTO실행 테스트의 테스트 위탁사 바꾸기 — 올린 서류는 그대로 두고 분류 결과만 지운다.
AgentStudioTestRunView.java이력0.0%3일 전 · #2032DTO에이전트 스튜디오 실행 테스트 한 번 — 올린 서류와 1단계 분류·2단계 추출 결과(docs/decisions/20261106-studio-test-classify-run.md, 20261107-studio-test-extract-run.md).
AiAgentLogicalChangeRequest.java이력0.0%DTOHWSS에서 확정된 이동·삭제 결과를 이미지 시스템에 보내는 API-10 요청이다.
AnalysisConcurrencyLimitUpdateRequest.java이력0.0%DTO1인 동시 AI 분석 요청 한도 변경.
AnalysisConcurrencyLimitView.java이력0.0%DTO1인 동시 AI 분석 요청 한도 (관리자 통계 대시보드의 「동시 요청 제한」).
AnalysisRequestCommand.java이력0.0%6일 전 · #1941DTO분석 요청(분석 조건) 입력.
AnalysisRequestView.java이력0.0%6일 전 · #1941DTO저장된 분석 요청 한 버전.
ApplicationFormQuestionItemGroup.java이력0.0%DTO복수 선택 질문의 하위 체크 항목 그룹 (예: 「의료행위」·「해당 질병」).
ApplicationFormSettingsSaveRequest.java이력0.0%DTO청약서 폼 설정 저장 요청 — 설정 전체를 보내 다음 버전으로 만든다(전량 치환).
ApplicationFormSettingsView.java이력0.0%DTO현재 적용 중인 청약서 폼 설정 — 관리자 화면과 조사자 분석 조건 입력이 같은 뷰를 읽는다.
ChatPromptSaveRequest.java이력0.0%DTO지시문 저장 — 문구를 새 판으로 쌓는다.
ChatPromptView.java이력0.0%DTO지시문의 지금 문구 (docs/decisions/20261023-chat-prompt-db-versioning.md).
ClaimHospitalCandidatesView.java이력0.0%6일 전 · #1941DTO분석 조건 2번 「청구병원 및 대표 상병」의 병원 후보 (결정 20261106-analysis-request-claim-hospitals 2·3항).
ClaimTypeCreateRequest.java이력0.0%DTO청구유형 추가 요청.
ClaimTypeEnabledRequest.java이력0.0%DTO청구유형 활성/비활성 변경 요청 (관리자 보고서 유형 설정 의 `관리` 열 토글).
ClaimTypeView.java이력0.0%DTO청구유형 하나 (분석 조건 1번, 관리자 화면 /admin/report-types).
ClassificationCorrectionView.java이력0.0%DTO분류 보정 한 건 — "이 낱장을 무엇에서 무엇으로 바꿨는가".
ClassificationManualAssignRequest.java이력0.0%DTO미분류·저신뢰 낱장의 수동 분류 확정 요청 (W07).
ClassificationResultGroup.java이력0.0%DTO분류 결과의 문서종별 묶음 = 문서 분류 폴더 하나.
ClassificationResultPageView.java이력0.0%2일 전 · #2113DTO분류 결과의 낱장 한 장.
ClassificationResultSummary.java이력0.0%DTO분류 결과 한 버전의 집계.
ClassificationResultView.java이력0.0%DTO보고서 한 건의 분류 결과 한 버전 (S-007 §3-2 classification_results).
CustomerCompaniesSyncRequest.java이력0.0%DTO이미지 시스템의 위탁사 마스터 전체 목록을 한 번에 동기화하는 요청이다 (S-003 API-06).
CustomerCompaniesSyncResponse.java이력0.0%DTOAPI-06 전체 동기화 결과다.
DocumentTypeStructureItem.java이력0.0%DTO위탁사 문서분류 계약(documentTypeContractId) 시점의 문서분류 한 건이다.
DocumentTypeSyncRequest.java이력0.0%DTO위탁사별 문서분류 전체 목록을 계약 ID 단위로 동기화하는 요청이다 (S-003 API-07).
DocumentTypeSyncResponse.java이력0.0%DTOAPI-07 전체 동기화 결과다.
ExtractionDocumentGroup.java이력0.0%DTO문서종별 추출 항목 묶음.
ExtractionFieldCorrectionRequest.java이력0.0%DTO최신 정보추출 결과의 항목 값 수정 요청 (S-012 §2 `추출 완료` — "추출값 확인·수정").
ExtractionFieldView.java이력0.0%4일 전 · #1998DTO추출 항목 한 개.
ExtractionResultView.java이력0.0%DTO보고서 한 건의 추출 결과 한 버전.
HospitalMatchItem.java이력0.0%2일 전 · #2102DTO서류 병원명 하나의 지정 상태.
HospitalMatchSelectionRequest.java이력0.0%2일 전 · #2102DTO조사자가 고른 병원들.
HospitalMatchesView.java이력0.0%4일 전 · #2007DTO이 건의 병원 지정 상태.
ImageDocumentClassificationApplyRequest.java이력0.0%DTOAI Agent에서 확정한 문서분류 결과를 이미지 시스템에 반영하는 API-09 요청이다.
ImageLogicalTransferRequest.java이력0.0%DTO파일 추가 없이 분류·순서·삭제만 반영된 최신 활성 페이지 전체 스냅샷이다 (S-003 API-03).
ImageLogicalTransferResponse.java이력0.0%DTO논리 변경 스냅샷을 접수한 결과다.
ImageReportConfirmRequest.java이력0.0%DTO최신 정상 적재분의 분류·추출 시작을 확정하는 요청이다.
ImageReportConfirmResponse.java이력0.0%DTO확정 요청 접수 후 적용된 최신 스냅샷과 처리 상태다.
ImageReportStatusResponse.java이력0.0%DTO이미지 연동 보고서의 현재 처리 상태와 최근 전송 이력이다.
ImageSystemResponse.java이력0.0%DTO이미지 시스템 API-09·10이 반환하는 v1.2 공통 응답이다.
ImageTransferCompleteRequest.java이력0.0%DTOAPI-01로 시작한 ZIP 업로드의 성공 또는 최종 실패 결과를 접수하는 요청이다 (S-003 API-02).
ImageTransferCompleteResponse.java이력0.0%DTO이미지 전송 완료 통지를 접수한 뒤 반환하는 검증 대기 상태다.
ImageTransferStartRequest.java이력0.0%DTO이미지 시스템이 ZIP 업로드 전에 보내는 전송 시작 스냅샷이다.
ImageTransferStartResponse.java이력0.0%DTO이미지 전송 시작 통지를 접수한 직후 반환하는 상태다.
InvestigationDeliveryChannelView.java이력0.0%DTO사고조사 화면의 보고서 전송 버튼을 정하는 위탁사 전송 방식 (결정 20260902-report-delivery-channel-selection 7항).
InvestigationDisclosureLinkView.java이력0.0%DTO워크스페이스 `공시실` 버튼이 여는 링크 (결정 20261017-customer-onboarding-status-api 4항).
InvestigationDocumentGroup.java이력0.0%DTO워크스페이스 문서함의 묶음 하나 = 문서 분류 폴더 하나.
InvestigationDocumentPage.java이력0.0%DTO문서함의 페이지 한 장 (S-007 report_pages 의 현재 스냅샷).
InvestigationKnowledgeDefaultsView.java이력0.0%DTO사고조사 건 위탁사의 참조 기본값 — 사전분석 조건의 첫 선택(docs/decisions/20261030-reference-defaults-to-analysis-and-chat.md 3항).
InvestigationReportDetail.java이력0.0%DTO워크스페이스 화면(P1-2) 한 건.
InvestigationReportPage.java이력0.0%DTO목록 한 페이지.
InvestigationReportSummary.java이력0.0%DTO조사자 목록 화면 한 행 (S-004 §5 목록 표시 상태 + §8-4 변경감지 보조 상태).
InvestigationStartView.java이력0.0%DTO사용자 착수 API(`AI 분류 시작`·`정보 추출 시작`)의 응답 (2026-09-18 야간 NB05, S-012 §1-2).
InvestigationTransferHistoryItem.java이력0.0%DTO워크스페이스의 전송 이력 한 줄 (S-007 image_transfers).
InvestigationWorkflowProgressDetail.java이력0.0%DTO워크스페이스 스테퍼가 한 번에 필요로 하는 것 전부 (W14).
KcdDiseaseView.java이력0.0%6일 전 · #1941DTO조사자용 상병(KCD) 검색 결과 한 건 — 분석 조건 「직접 검색」(결정 20261106-analysis-request-claim-hospitals 4항).
ProcessingRetryView.java이력0.0%DTO처리 실패 `다시 시도` 의 응답 (S-004 §8-6, 결정 20261104-processing-failed-retry).
ReanalysisCommand.java이력0.0%DTO`다시 분석` 실행 요청 (S-012 §4, 야간 20261002 NR01·NR02).
ReanalysisScopeOptionView.java이력0.0%DTO범위 하나의 노출 정보 (S-012 §4, 야간 20261002 NR01).
ReanalysisScopesView.java이력0.0%DTO`다시 분석` 가능 범위 조회의 응답 (S-012 §4, 야간 20261002 NR01).
ReanalysisView.java이력0.0%5일 전 · #1981DTO`다시 분석` 실행의 응답 (S-012 §4, 야간 20261002 NR01·NR02).
ReportDeliveryLogPageView.java이력0.0%DTO관리자 보고서 초안 전송 로그 한 쪽.
ReportDeliveryLogView.java이력0.0%DTO관리자 보고서 초안 전송 로그의 한 행 — 채널과 무관한 공통 열에 채널별 기록 열을 덧붙인다.
ReportDisposalLogPageView.java이력0.0%DTO설명 주석 없음
ReportDisposalLogView.java이력0.0%DTO설명 주석 없음
ReportDraftSectionUpdateRequest.java이력0.0%DTO초안 구역 텍스트 수정 요청 (S-014 §7 — 구역별 자유 텍스트 편집).
ReportDraftSectionView.java이력0.0%DTO보고서 초안의 구역 하나 (S-014 §7) — 요약 BODY 섹션마다 텍스트 한 장.
ReportDraftUpdateRequest.java이력0.0%DTO초안 본문 수정 요청.
ReportDraftView.java이력0.0%DTO보고서 초안 한 버전 (S-014 §7).
ReportMailDispatchLogPageView.java이력0.0%DTO관리자 메일 발송 로그 한 쪽 + 요약 (야간 플랜 20261005 NM01).
ReportMailDispatchLogView.java이력0.0%DTO관리자 메일 발송 로그 한 행 (야간 플랜 20261005 NM01).
ReportMailDispatchView.java이력0.0%DTO보고서 메일 발송 기록 한 건.
ReportMailSendRequest.java이력0.0%DTO보고서 메일 보내기 요청.
ReportPageEditSaveRequest.java이력0.0%DTO스캔 문서함 낱장 편집 저장 요청 — `편집 저장` ([20260921] 🟢 0항, 야간 20261006 NP01).
ReportPageEditsView.java이력0.0%DTO낱장 편집 저장의 응답 (야간 20261006 NP01).
ReportSummaryGroupsView.java이력0.0%4일 전 · #2052DTO보고서 `요약` 탭 — 요약 그룹 구획들(docs/decisions/20261019-studio-summary-tab-doc-groups.md 6항).
ReportTemplateSaveRequest.java이력0.0%DTO보고서 양식 등록·수정 요청.
ReportTemplateView.java이력0.0%DTO보고서 양식 한 버전.
SmartReviewTransferView.java이력0.0%DTO스마트심사 전송 한 건의 결과.
SummaryByteLimitView.java이력0.0%DTO섹션의 byte 제한 (S-014 §4).
SummaryCardView.java이력0.0%DTO요약 섹션 안의 카드 — 요약 표 섹션에서는 병원(기관), 행 추가 탭 섹션에서는 행(탭) 하나 (S-014 §6).
SummaryGroupSaveRequest.java이력0.0%DTO요약 그룹 변경 저장 — 에이전트 스튜디오 2단계 `요약 설정`의 저장 요청 중 summaryGroups 부분 (docs/decisions/20261019-studio-summary-tab-doc-groups.md 5항, 프론트 _lib/stage-save.ts SummaryGroupChange).
SummaryGroupView.java이력0.0%DTO요약 그룹 하나 — 보고서 `요약` 탭의 구획이자 요약 호출 1회(docs/decisions/20261019-studio-summary-tab-doc-groups.md).
SummaryItemSourceView.java이력0.0%DTO요약 항목의 출처 하나.
SummaryItemUpdateRequest.java이력0.0%DTO요약 항목 본문 수정 요청.
SummaryItemView.java이력0.0%DTO요약 카드 안의 항목 하나 (내원경위·검사내용·진단병명·치료내용·기타사항 등).
SummaryReflectionBatchRequest.java이력0.0%3일 전 · #2055DTO보고서 반영 체크 묶음 저장 요청 — `전체 선택`·연속 체크를 한 트랜잭션·한 응답으로 처리한다.
SummaryReflectionRequest.java이력0.0%DTO항목별 보고서 반영 체크 요청 (8/18 확정 — 요약 확정 후 켜고 끌 수 있는 유일한 값).
SummaryResultView.java이력0.0%DTO보고서 한 건의 요약 결과 한 버전 (S-014 §6).
SummarySectionView.java이력0.0%2일 전 · #2130DTO요약 결과의 구역(섹션) 하나 (S-014 §4·§6).
SummarySkeletonSaveRequest.java이력0.0%DTO골격 저장 요청 — 새 버전을 만든다(제자리 수정 없음: 이미 그 골격으로 만든 요약이 기준을 잃지 않아야 한다).
SummarySkeletonView.java이력0.0%DTO요약 섹션 골격 한 버전 (관리자 에이전트 스튜디오 `3 Instruct` 설정의 저장 형태, S-014 §3).
AgentStudioExtractionFieldType.java이력0.0%enum에이전트 스튜디오 추출 항목의 값 유형 — Studio 추출 스키마 유형과 같다(docs/decisions/20261020-studio-run-result-field-types.md 4항).
ChatPromptKey.java이력0.0%7일 전 · #1914enum관리자 API 로 고칠 수 있는 지시문 — 코드가 정한 목록이다(docs/decisions/20261023-chat-prompt-db-versioning.md 1·6항).
InvestigationReportSort.java이력0.0%enum사고조사 목록에서 서버 정렬을 허용하는 열.
ReportMailDispatchLogSort.java이력0.0%enum관리자 메일 발송 로그 목록에서 서버 정렬을 허용하는 열 (야간 플랜 20261005 NM01).
AgentStudioDeploymentAgent.java이력0.0%2일 전 · #2112record배포 때 쓰인 Studio 에이전트·지시서 한 쌍.
AgentStudioDocumentCategory.java이력0.0%record에이전트 스튜디오 1depth 문서종(분류군).
AgentStudioDocumentType.java이력0.0%record에이전트 스튜디오 2depth 문서종의 분류 값(1단계 CLASSIFY 몫).
AgentStudioDocumentTypeRename.java이력0.0%오늘 · #2161record배포 대기의 이름이 바뀐 2depth 문서종 — 문서종 키로 판정한다(docs/decisions/20261112-studio-deploy-master-mapping-sync.md 1항).
AgentStudioExtractionField.java이력0.0%record에이전트 스튜디오 추출 항목 하나 — 저장 요청과 조회 응답이 같은 모양이다.
AgentStudioInstructInsurer.java이력0.0%record에이전트 스튜디오 INSTRUCT 위탁사 하나의 탭 목록.
AgentStudioInstructTab.java이력0.0%record에이전트 스튜디오 INSTRUCT 위탁사 탭 하나 — 보고서 에이전트 Instruct 노드 하나다 (docs/decisions/20261021-studio-instruct-db-storage.md 2항).
AgentStudioInstructTabBody.java이력0.0%record에이전트 스튜디오 INSTRUCT 탭 × 보고서 유형 본문 하나 — 보고서를 만들 때 고른 보고서 유형의 본문이 탭 프롬프트 뒤 {{조건별작성지침}} 자리에 이어 붙는다 (docs/decisions/20261021-studio-instruct-db-storage.md 2항).
ApplicationFormQuestion.java이력0.0%record청약서 유형 안의 질문 하나 — 관리자 `청약서 폼 설정` 의 질문 편집 창이 다루는 단위이자, 조사자 분석 조건 입력의 질문 블록이 그대로 그리는 모델이다.
ApplicationFormSettingsDocument.java이력0.0%record청약서 폼 설정 한 벌 — 유형별 질문과 공통 변수.
ApplicationFormTemplate.java이력0.0%record청약서 유형 하나 (일반·간편/초간편·치매간병·치아 + 조사자 직접 구성 블록).
ApplicationFormVariable.java이력0.0%record조사자 직접입력 변수 하나 — 질문 본문의 {{변수명}} 자리에 조사자가 채우는 값의 정의.
Customer.java이력0.0%recordAPI-06 전체 동기화 목록의 위탁사 한 건이다.
ExtractionFieldLocation.java이력0.0%record추출 항목의 원문 위치 — 근거 낱장 폭·높이에 대한 비율(0~1) 사각형.
ImageDownloadedFile.java이력0.0%recordAPI-08을 통해 이미지 시스템에서 내려받아 무결성 검증을 마친 단건 이미지다.
ImageSystemRedistributionResult.java이력0.0%recordAPI-09·10 성공 응답의 result에 선택적으로 담기는 이미지시스템 최종 재배분 상태다.
InvestigationBusinessMetadata.java이력0.0%recordAPI-01 접수 시 HWSS DB에 저장한 보고서·Smart심사 계약 메타데이터다.
InvestigationListFilterOptions.java이력0.0%record사고조사 목록 필터의 선택지 — 조회자가 볼 수 있는 건(조회 범위)에 실제로 있는 값만 담는다.
InvestigationSavedPageDeletion.java이력0.0%record저장된 `삭제 예정` 낱장 하나 — 문서함 목록에서는 빠졌지만 화면이 제자리에 되돌릴 수 있도록 함께 내려주는 값 (야간 20261007 NR01, [20261007 저장 계약] 1항 「따라오는 제약」, 기준선 「스캔 문서함」 line 310).
InvestigationWorkflowProgress.java이력0.0%record워크스페이스 상단 스테퍼가 쓰는 현재 단계 정보.
InvestigationWorkflowStep.java이력0.0%record워크스페이스 스테퍼의 칸 하나.
LifeManualInput.java이력0.0%record스마트심사 DB View가 조사자·피보험자 정보를 제공하지 않는 건의 수기 입력 정보다 (S-003 API-01 manualInput).
ReportDeliveryLogSearchCondition.java이력0.0%record관리자 보고서 초안 전송 로그 조회 조건 (GET /api/v1/admin/report-deliveries).
ReportDisposalLogSearchCondition.java이력0.0%record설명 주석 없음
ReportMailDispatchSearchCondition.java이력0.0%record관리자 메일 발송 로그 조회 필터 — 상태 · 검색어 · 기간 (야간 플랜 20261005 NM01).
SummaryReflectionChange.java이력0.0%3일 전 · #2055record보고서 반영 체크 묶음 저장의 한 줄.

statistics/44GitHub

통계 API 요청·응답 DTO와 enum.

BackfillRequest.java이력0.0%DTO통계 사실 재적재(backfill) 명령 본문 (ST04, S-007 §3-4 「재적재 명령」).
BackfillResultView.java이력0.0%DTO통계 사실 재적재(backfill) 결과 (ST04, S-007 §3-4 「재적재 명령」).
BusinessStatisticsRow.java이력0.0%DTO업무 통계 조회 결과의 한 행 — 차원 키 조합 하나의 순위·건수·비율.
BusinessStatisticsView.java이력0.0%DTO업무 통계 조회 응답 — 한 차원의 기간 Top N (ST03-B, S-007 §3-4 「조회 API」).
DimensionMasterSearchView.java이력0.0%DTO차원 마스터 검색 결과 (ST05-A — 병합 대상 고르기).
DimensionMasterView.java이력0.0%DTO차원 마스터(dim_hospitals·dim_doctors·dim_diseases) 한 건 (ST05-A).
ErrorIncidentsView.java이력0.0%DTO오류/장애 현황 조회 응답 — 시스템 통계 「오류/장애 현황」(2026-09-14 정의 시트 33행) (S-007 §3-4 「오류/장애 현황 조회 API」).
ExtractionQualityStatisticsRow.java이력0.0%DTO추출 완료율 조회 응답의 한 줄 — 축 키 하나의 기간 합계 (2026-10-12 야간 NE02, S-007 §3-4 「추출 완료율 조회 API」).
ExtractionQualityStatisticsView.java이력0.0%DTO추출 완료율 조회 응답 — 한 축의 기간 합계 목록 (2026-10-12 야간 NE02, S-007 §3-4 「추출 완료율 조회 API」).
HospitalAliasActiveRequest.java이력0.0%DTO등재 사용 토글 요청 — 보낸 값으로 맞추는 멱등 조작이다(뒤집기가 아니다).
HospitalAliasCreateRequest.java이력0.0%DTO관리자 `이름 등재` 요청 (화면 /admin/hospital-aliases 의 「병원 이름 등재」 창).
HospitalAliasHospitalRequest.java이력0.0%DTO`병원 바꾸기` 요청 — 등재된 이름은 그대로 두고 지정 병원만 바꾼다.
HospitalAliasPageView.java이력0.0%3일 전 · #2081DTO관리자 `병원 명칭 매핑` 목록 한 쪽 + 요약 (화면 /admin/hospital-aliases).
HospitalAliasView.java이력0.0%DTO관리자 `병원 명칭 매핑` 표의 한 줄 (화면 /admin/hospital-aliases) — 서류에 적힌 이름 하나를 병원 마스터의 병원 하나에 이어 둔 등재.
HospitalMasterPageView.java이력0.0%3일 전 · #2082DTO`병원 찾기` 창의 병원 마스터 검색 한 쪽 — 마스터가 8만 건대라 쪽 단위로 보고, 창은 전체 건수(totalElements)를 `총 N곳` 으로 보인다(docs/decisions/20261110-hospital-search-dialog-paging.md).
HospitalMasterView.java이력0.0%DTO병원 마스터(dim_hospitals) 한 건 — `병원 찾기` 창의 목록 행.
HospitalRegionView.java이력0.0%DTO`병원 찾기` 창의 지역 필터 선택지 — 병원 마스터에 실제로 있는 시/도와 그 아래 시/군/구.
LifecycleBackfillRequest.java이력0.0%DTO생애주기 통계 사실 재적재 명령 본문 (결정 20261027).
LifecycleBackfillResultView.java이력0.0%DTO생애주기 통계 사실 재적재 결과 (결정 20261027).
LifecycleStatisticsDay.java이력0.0%DTO시스템 통계 조회 응답의 일별 행 — 추이 차트(#10 처리 건수·#11 평균 처리시간·#13 자동 분류율 추이)의 원천.
LifecycleStatisticsMetrics.java이력0.0%DTO시스템 통계(9/1 엑셀 5~31행 중 생애주기 지표) 한 묶음 — 기간 합계에도, 일별 행에도 같은 형상으로 실린다 (2026-09-11 야간 DP06, S-007 §3-4 「생애주기 조회 API」).
LifecycleStatisticsView.java이력0.0%DTO시스템 통계 조회 응답 — 기간 합계 한 묶음 + 일별 행 (2026-09-11 야간 DP06, S-007 §3-4 「생애주기 조회 API」).
ProcessingTimeStatisticsView.java이력0.0%DTO처리시간 통계 조회 응답 — 시스템 통계 #16 건당 처리시간 분포 · #17 문서 인입량 대비 처리시간 달성률 · #23 시간 목표률 (2026-10-19, S-007 §3-4 「처리시간 통계 조회 API」).
ServiceStatusView.java이력0.0%DTO시스템 통계 #30 서비스 상태(정의 시트 32행) — Prometheus 에서 읽은 지금 상태 (S-007 §3-4 「서비스 상태 조회 API」).
UnmappedQueueItemView.java이력0.0%DTO미매핑 큐 목록의 한 행 (ST05-A — S-007 §3-4 「미매핑 큐 API」).
UnmappedQueuePageView.java이력0.0%DTO미매핑 큐 목록 한 쪽 (ST05-A).
UnmappedResolveRequest.java이력0.0%DTO미매핑 큐 처리 본문 (ST05-A — S-007 §3-4 「미매핑 큐 API」).
UnmappedResolveResultView.java이력0.0%DTO미매핑 큐 처리 결과 (ST05-A).
UsageStatisticsView.java이력0.0%DTO이용 현황 조회 응답 — 시스템 통계 #26 AI 분석 이용자 · #27 보고서 생성 건수 (2026-10-19, S-007 §3-4 「이용 현황 조회 API」).
BusinessStatisticsDimension.java이력0.0%enum업무 통계 조회 API(ST03-B — S-007 §3-4 「조회 API」)의 차원 8종.
ErrorIncidentSeverity.java이력0.0%enum오류/장애 구분.
ExtractionQualityAxis.java이력0.0%enum추출 완료율(#18·#19)을 쪼개는 축 — 일별 롤업(stat_daily_extraction_quality.axis)의 축 값이고, 조회 API 의 요청 파라미터도 같은 값이다.
HospitalAliasSort.java이력0.0%3일 전 · #2081enum관리자 `병원 명칭 매핑` 목록에서 서버 정렬을 허용하는 열 — 화면 표의 정렬 머리(서류 이름·지정 병원·등재·자동 지정)와 1:1 이다.
HospitalAliasSource.java이력0.0%enum별칭(병원 다른 이름)의 등재 경로 — stat_dim_aliases.source.
HospitalAliasStatus.java이력0.0%3일 전 · #2081enum관리자 `병원 명칭 매핑` 목록의 사용 여부 필터.
ServiceStatusTone.java이력0.0%enum서비스 상태 항목의 판정 — 정상 / 주의 / 장애 / 알 수 없음(조회 실패·값 없음).
StatDimension.java이력0.0%enum통계 차원 — 별칭 표(stat_dim_aliases.dimension)와 미매핑 큐(stat_unmapped_queue.dimension)가 어느 마스터를 가리키는지.
StatUnmappedStatus.java이력0.0%enum미매핑 큐 행의 처리 상태 (stat_unmapped_queue.status).
UnmappedQueueSort.java이력0.0%enum미매핑 큐 묶음 목록에서 서버 정렬을 허용하는 열.
UnmappedResolveAction.java이력0.0%enum미매핑 큐 처리 동작 (ST05-A — S-007 §3-4 「미매핑 큐 API」).
ProcessingTimeBand.java이력0.0%record문서 인입량 대비 처리시간 달성률(#17)의 한 매수 구간 — lowerPages < 활성 페이지 수 ≤ upperPages.
ProcessingTimeBucket.java이력0.0%record처리시간 분포(#16)의 한 구간 — lowerMinutes < 처리시간(분, 올림) ≤ upperMinutes.
UsageStatisticsPerson.java이력0.0%record이용 현황의 한 줄 — 조사자 한 명의 한 부서 스냅샷에서의 기간 합계.
ErrorIncidentService.java이력0.0%서비스오류/장애 현황의 서비스 구분 — 우리 시스템이 실패를 기록하는 원천 셋(S-007 §3-4 「오류/장애 현황 조회 API」).

status/30GitHub

상태·구분 enum.

AnalysisContractItemCategory.java이력0.0%enum계약별 입력 항목의 갈래 (2026-08-19 확정 구조의 '청약서 질문'과 '고지사항').
ApplicationQuestionAnswerType.java이력0.0%enum청약서 질문의 응답 방식 — 「분석 사전조건 항목_20818」 v0.2 시트의 `비고` 컬럼.
ClaimDiagnosisSource.java이력0.0%6일 전 · #1941enum청구병원의 대표 상병을 어디서 골랐는지 (결정 20261106-analysis-request-claim-hospitals 1항 — 화면의 `확인 진단`/`직접 검색`).
ClassificationCorrectionType.java이력0.0%enum분류 보정의 갈래 (W07).
ClassificationPageStatus.java이력0.0%enum낱장 한 장의 분류 상태 (S-007 §3-2 classification_result_pages.classification_status).
ClassificationResultSource.java이력0.0%enum분류 결과 한 행이 어디서 나왔는지 (S-007 §3-2 classification_result_pages.result_source).
CorrectionSyncStatus.java이력0.0%enum보정을 외부 파이프라인(Studio)에 되돌려 반영한 상태.
ExtractionValuePolicy.java이력0.0%enum추출 항목 값의 저장 정책 (2026-08-20 주간회의 결정 7·8·9).
HospitalCoverRelation.java이력0.0%2일 전 · #2102enum표지 병원과 다른 병원명이 나온 서류 병원명을 조사자가 표지 병원과 어떤 관계로 확인했는가 (결정 20261110-hospital-match-cover-order-similar-names 「추가 (2026-11-10)」).
HospitalMatchStatus.java이력0.0%4일 전 · #2007enum서류 병원명을 병원 목록에 맞춘 결과.
InvestigationListStatus.java이력0.0%enum조사자 목록 화면에 노출하는 사용자 중심 상태 (S-004 §4-1).
InvestigationProcessingStatus.java이력0.0%enum워크플로우 엔진과 연동 API 의 기준이 되는 내부 처리 상태 (S-004 §4-2).
InvestigationWorkflowStatus.java이력0.0%enum화면이 쓰는 사고조사 글로벌 상태 11종 (화면 기준선 「상태 및 예외 › AI 사고조사 글로벌 상태」, S-006 v0.4).
MailDispatchStatus.java이력0.0%enum보고서 메일 발송 결과.
ReanalysisScope.java이력0.0%2일 전 · #2113enum`다시 분석` 범위 (S-012 §4).
ReanalysisUnavailableReason.java이력0.0%2일 전 · #2113enum범위가 내려왔는데 지금은 고를 수 없는 이유 (S-012 §4 · [20260921] 🟢).
ReportDeliveryStatus.java이력0.0%enum보고서 초안 전송 한 건의 결과 — 관리자 「보고서 초안 전송 로그」(/admin/report-send-logs)의 상태 열.
ReportDraftBodyFormat.java이력0.0%enum초안 본문의 형식.
ReportDraftStatus.java이력0.0%enum보고서 초안 진행 상태 (S-007 investigation_reports.report_draft_status).
ResultProvenance.java이력0.0%enum처리 결과(분류·추출·요약 …)를 무엇이 만들었는가 — 스텁 표본인지 실연동 산출물인지.
RiskSubStatus.java이력0.0%4일 전 · #2007enum위험 서브 상태 6종 (화면 기준선 「상태 및 예외 › 위험 서브 상태」, S-006 v0.4).
SmartReviewTransferStatus.java이력0.0%enum스마트심사 전송 한 번의 결과.
SnapshotBaselineStatus.java이력0.0%enum처리 기준 스냅샷(전송)의 상태 (S-004 §4-3).
SummaryByteLimitUnit.java이력0.0%enumbyte 제한이 걸리는 단위 3층 (S-014 §4).
SummaryItemAuthor.java이력100.0%enum요약 항목의 작성 주체 (S-014 §5, 20260819 결정 2026-09-29 확정 3번).
SummaryLayoutMode.java이력100.0%enum요약 섹션의 배치 (S-014 §4).
SummaryReportInclusion.java이력100.0%enum섹션이 보고서 초안·전달에 어떻게 실리는가 (S-014 §4, 20260819 결정 2026-09-29 확정 2번).
SummarySectionKind.java이력100.0%enum요약 섹션(구역)의 종류 (S-014 §4).
SummarySourceType.java이력0.0%enum요약 항목이 근거로 삼은 출처의 갈래.
InvestigationWorkflowEvent.java이력0.0%2일 전 · #2113이벤트처리 상태를 전이시키는 이벤트 (S-004 §6-1).

summary/3GitHub

SummarySkeleton.java이력33.3%record요약 섹션 골격 — 위탁사 기본 구성 + 청구유형 예외 (S-014 §3·§4·§5).
SummaryHumanDraftRules.java이력100.0%클래스「이 항목은 조사자 판단 항목인가 · AI 초안을 받는가」 를 답하는 한 자리 (S-014 §5·§9 1항 · 20261007 결정 6항 🟢 2026-10-07).
SummarySkeletonMerger.java이력0.0%클래스청구유형 예외를 골격에 반영한다 — 중복 선택 머지 규칙 (S-014 §3-1, 20260819 결정 2026-09-29 확정 4번).

빌드·리소스1GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base 모듈 참조.

src/test/1GitHub

테스트 파일 — 펼쳐서 보기
summary/SummaryHumanDraftRulesTest.java이력테스트「이 항목은 조사자 판단 항목인가 · AI 초안을 받는가」 판정의 단언 — 적재·골격 두 경로가 이 한 자리를 같이 쓴다 (2026-10-08 야간 Q2 공통화).

modules/ · 도메인

modules/investigation-core/GitHub

사고조사 · 비즈니스 로직

사고조사 · 비즈니스 로직 — 이미지시스템 수신 → 분류 → 추출 → 분석 조건 → 요약 → 초안 → 메일까지의 사고조사 파이프라인과 통계 적재·조회. 백엔드 코드의 절반가량이 여기 있다.

649 소스238 테스트131 마이그레이션
의존 모듈 base investigation-shared
주요 라이브러리 spring-boot-starter-web spring-boot-starter-validation spring-boot-starter-data-jpa bom s springdoc-openapi-starter-webmvc-ui pdfbox micrometer-core jqwik

access/3GitHub

ActionOverrideRoles.java이력인터페이스담당 조사자가 아닌 사용자의 조치를 레벨로 열어 줄지 — AssigneeActionRule 이 받는 입력 하나.
AssigneeActionRule.java이력100.0%클래스사고조사 쓰기(조치·실행) 권한의 담당 조사자 판정 한 곳 (2026-10-02 야간 Q2).
InvestigationAccessGuard.java이력89.5%클래스사고조사 조회 권한 판정 한 곳 (2026-09-18 야간 NB04) — 목록의 범위 필터와 상세·하위 GET 의 진입 검사가 모두 여기를 거친다.

chat/1GitHub

ReportTabJson.java이력93.8%5일 전 · #1970클래스사고조사 챗봇 instructions 에 싣는 탭 JSON (결정 20261021 2항 「보고서 전문」) — 순수 계산만 둔다.

config/40GitHub

@ConfigurationProperties 설정 바인딩과 빈 구성 (application.yml hwss.* 블록).

AgentStudioTestRunConfig.java이력100.0%3일 전 · #2058설정에이전트 스튜디오 실행 테스트 설정 바인딩.
AgentStudioTestRunProperties.java이력94.4%3일 전 · #2058설정에이전트 스튜디오 실행 테스트 설정(docs/decisions/20261106-studio-test-classify-run.md 2·7·10항).
AiPipelineConfig.java이력0.0%설정문서 AI 플랫폼 작업 폴러 구성.
AiPipelineProperties.java이력100.0%설정문서 AI 플랫폼 작업 폴러 설정 (hwss.ai-pipeline.*).
AnalysisConfig.java이력0.0%설정분석 요청 도메인의 설정 바인딩.
AnalysisProperties.java이력100.0%설정분석 요청(분석 조건) 설정.
ClassificationConfig.java이력0.0%어제 · #2151설정문서분류 결과 도메인의 설정 바인딩.
ClassificationPauseProperties.java이력91.7%어제 · #2151설정분류 뒤 멈춤 — 미분류·저신뢰 낱장이 하나도 없어도 분류가 끝난 건을 `미분류검출`(분류 검토 화면)에 세워 두는 시연용 임시 설정.
ClassificationProperties.java이력95.8%4일 전 · #2046설정문서분류 결과 판정·조치 설정.
ExtractionConfig.java이력0.0%설정정보추출 결과 도메인의 설정 바인딩.
ExtractionProperties.java이력97.0%4일 전 · #2046설정정보추출 결과의 저장 정책·판정 설정.
ImageIntegrationConfig.java이력0.0%설정이미지 시스템 수신·송신 설정 바인딩.
ImageIntegrationProperties.java이력100.0%설정이미지 시스템이 HWSS로 전송한 파일의 수신·검증 설정(hwss.image-integration.*).
ImageSystemProperties.java이력100.0%설정HWSS가 이미지 시스템 API-08·09·10을 호출할 때 사용하는 연결 설정 (hwss.image-system.*).
ImageTransferStorageProperties.java이력100.0%설정이미지 시스템 수신 ZIP과 압축 해제 결과의 공유 저장소 설정.
ImageTransferTaskQueueProperties.java이력33.3%설정보고서번호별 이미지 전송 백그라운드 작업 큐의 폴링·임대·재시도 설정.
InvestigationListConfig.java이력0.0%설정사고조사 목록 조회(P1-1)의 설정 바인딩.
InvestigationListProperties.java이력100.0%설정사고조사 목록 조회(P1-1)의 설정 (hwss.investigation.list.*).
PdfSheetProperties.java이력100.0%설정접수한 PDF 를 쪽별 낱장 이미지로 푸는 조건(hwss.image-integration.pdf-sheet.*, 결정 20261002-pdf-page-split-at-reception).
ReportDraftLlmProperties.java이력85.7%설정보고서 초안 LLM 직접 호출의 업무 쪽 설정 (hwss.report-draft-llm.*) — docs/decisions/20261020-report-generation-llm-input-job.md 「결정」 5·6항.
ReportMailDispatchLogConfig.java이력0.0%설정관리자 메일 발송 로그 설정 바인딩.
ReportMailDispatchLogProperties.java이력66.7%설정관리자 메일 발송 로그 조회 설정 (야간 플랜 20261005 NM01).
ReportPurgeConfig.java이력0.0%설정보고서 파기 배치 설정 바인딩.
ReportPurgeProperties.java이력100.0%설정보고서 파기 배치 설정 (hwss.report-purge.*) — docs/decisions/20261027-report-purge-configurable-basis.md.
ReportReflectionProperties.java이력100.0%설정사고조사 챗봇 「AI 보고서 반영」 설정 (hwss.report-reflection.*) — 결정 20261021 5~7항, 통합 설계 v0.3 프롬프트 템플릿 5번.
ReportReviewConfig.java이력0.0%설정요약 확정·보고서 검수·초안 쓰기 설정 바인딩.
ReportReviewProperties.java이력100.0%설정요약 확정·보고서 검수·초안 쓰기의 담당자 판정 설정 (2026-09-18 NB02).
ScanPdfUploadProperties.java이력100.0%7일 전 · #1922설정이미지 접수 직후 Studio 에 선업로드할 사건 묶음 PDF 설정(결정 20261021-case-documents-job-100-files).
StatisticsBackfillProperties.java이력100.0%설정통계 사실 재적재 명령(ST04 — S-007 §3-4 「재적재 명령」)의 설정 (hwss.statistics.backfill.*).
StatisticsErrorIncidentProperties.java이력100.0%설정오류/장애 현황 조회(S-007 §3-4 「오류/장애 현황 조회 API」)의 설정 (hwss.statistics.error-incidents.*).
StatisticsExtractionQualityProperties.java이력100.0%설정추출 완료율 조회 API(NE02 — S-007 §3-4 「추출 완료율 조회 API」)의 설정 (hwss.statistics.extraction-quality.*).
StatisticsLifecycleProperties.java이력100.0%설정생애주기 사실 적재(DP04, 2026-09-11 야간)의 처리시간 판정 설정 (hwss.statistics.lifecycle.*).
StatisticsLoadConfig.java이력0.0%설정통계 사실 적재(ST02)·일별 롤업(ST03-A)·조회 API(ST03-B)·재적재 명령(ST04)·미매핑 큐 API(ST05-A)·생애주기 적재(DP04)의 설정 바인딩.
StatisticsLoadProperties.java이력100.0%설정통계 사실 적재(ST02)의 원천 항목 키·판정 규칙 설정 (hwss.statistics.load.*).
StatisticsProcessingTimeProperties.java이력100.0%설정처리시간 통계 조회(시스템 통계 #16·#17·#23, 2026-10-19 — S-007 §3-4 「처리시간 통계 조회 API」)의 구간 기준 (hwss.statistics.processing-time.*).
StatisticsQueryProperties.java이력100.0%설정업무 통계 조회 API(ST03-B — S-007 §3-4 「조회 API」)의 설정 (hwss.statistics.query.*).
StatisticsRollupProperties.java이력100.0%설정일별 롤업(ST03-A)의 설정 (hwss.statistics.rollup.*).
StatisticsServiceStatusProperties.java이력97.6%설정서비스 상태 조회(S-007 §3-4 「서비스 상태 조회 API」)의 설정 (hwss.statistics.service-status.*).
StatisticsUnmappedProperties.java이력100.0%설정미매핑 큐·차원 마스터 관리자 API(ST05-A — S-007 §3-4 「미매핑 큐 API」)의 설정 (hwss.statistics.unmapped.*).
InvestigationPipelineVersion.java이력100.0%클래스이 환경이 새 실행에 쓰는 사고조사 파이프라인 버전 — hwss.workflow.definition-versions[INVESTIGATION_MAIN] (AI_PLATFORM_STUDIO_PIPELINE_VERSION, docs/decisions/20261002-pipeline-version-c…

entity/80GitHub

JPA 엔티티 — 테이블 한 행을 매핑한다.

AgentStudioTestRunCorrectionPhase.java이력100.0%4일 전 · #1963enum실행 테스트 결과 왕복의 걸음 — agent_studio_test_run_corrections.phase.
AgentStudioTestRunFileStatus.java이력100.0%6일 전 · #1915enum실행 테스트 서류의 플랫폼 파일 상태 — agent_studio_test_run_files.status.
AgentStudioTestRunStage.java이력100.0%3일 전 · #2032enum실행 테스트 단계 — agent_studio_test_run_steps.stage.
AgentStudioTestRunStepStatus.java이력100.0%6일 전 · #1915enum실행 테스트 단계 작업 상태 — agent_studio_test_run_steps.status.
AiPipelineFileStatus.java이력100.0%enumai_pipeline_files.status — 마이그레이션 CHECK 와 값이 같아야 한다.
AiPipelineJobStatus.java이력100.0%enumai_pipeline_jobs.status — 마이그레이션 CHECK 와 값이 같아야 한다.
AiPipelineResultSyncPhase.java이력100.0%enum결과 왕복(ai_pipeline_result_syncs)의 진행 위치 — 플랫폼 왕복 여섯 걸음 사이의 상태다.
DocumentTypeSchemaStage.java이력100.0%enum에이전트 스튜디오 문서 분류·정보 추출 체계의 저장 단계 — 단계마다 버전을 따로 쌓는다 (docs/decisions/20261021-studio-config-version-sync.md 3~5항).
SummaryGroupBatchStatus.java이력100.0%enum요약 그룹 묶음의 상태 (summary_group_batches.status).
SummaryGroupRunStatus.java이력100.0%enum요약 그룹 호출 한 건의 상태 (summary_group_runs.status).
AgentStudioConfigExtrasEntity.java이력84.6%오늘 · #2161엔티티이 화면에서 저장한 Studio 지시서의 짝 — 지시서에 담을 자리가 없는 값을 지시서 하나에 한 행으로 둔다 (docs/decisions/20261103-studio-config-save-new-config.md 4항).
AgentStudioDeploymentEntity.java이력94.6%오늘 · #2161엔티티에이전트 스튜디오 배포 한 건 — 실행 테스트를 통과한 한 벌(docs/decisions/20261111-studio-server-deployment-management.md 2항).
AgentStudioInstructTabBodyEntity.java이력72.7%엔티티에이전트 스튜디오 INSTRUCT 탭 × 보고서 유형 본문 (docs/decisions/20261021-studio-instruct-db-storage.md 2항).
AgentStudioInstructTabEntity.java이력92.0%엔티티에이전트 스튜디오 INSTRUCT 위탁사 탭 — 버전 × 위탁사 × 탭 한 행.
AgentStudioInstructVersionEntity.java이력77.8%엔티티에이전트 스튜디오 INSTRUCT 설정의 한 버전 (docs/decisions/20261021-studio-instruct-db-storage.md 4항).
AgentStudioSummaryConfigVersionEntity.java이력84.2%어제 · #2132엔티티요약 그룹 지시서 한 벌의 버전 — 분류 지시서마다 Import 형태를 맞춘 기본 지시서와 그룹별 지시서 (docs/decisions/20261111-studio-import-shape-regeneration.md 5항).
AgentStudioSummaryPairEntity.java이력84.6%엔티티추출 지시서의 요약 그룹 짝 — 지시서 하나에 한 행이다(docs/decisions/20261105-studio-server-deployment-summary-pair.md 1단계).
AgentStudioTestRunCorrectionEntity.java이력93.7%3일 전 · #2032엔티티실행 테스트 추출 전 분류 검수 반영(결과 왕복) 한 번 — 추출 단계마다 한 행이다 (docs/decisions/20261107-studio-test-extract-run.md 1·5항).
AgentStudioTestRunEntity.java이력86.7%6일 전 · #1915엔티티에이전트 스튜디오 실행 테스트 한 번 — 관리자 한 명이 올린 서류와 단계별 실행을 묶는다 (docs/decisions/20261106-studio-test-classify-run.md 5항).
AgentStudioTestRunFileEntity.java이력93.5%3일 전 · #2058엔티티실행 테스트에 올린 서류 한 건 — 원본은 보관하지 않고 플랫폼에 올린 PDF 의 식별자만 둔다.
AgentStudioTestRunReportItemEntity.java이력96.2%3일 전 · #2032엔티티실행 테스트 보고서의 탭·요약 그룹 결과 한 건(docs/decisions/20261109-studio-test-report-run.md 8항).
AgentStudioTestRunStepEntity.java이력94.0%어제 · #2132엔티티실행 테스트의 단계 실행 — 실행·단계마다 한 행이다.
AiPipelineDocumentEntity.java이력96.3%엔티티활성 낱장 하나를 한 쪽 PDF로 변환해 문서 AI 플랫폼에 올린 원장.
AiPipelineDocumentPageEntity.java이력91.7%엔티티한 쪽 PDF를 이미지시스템 sourcePageId로 되짚는 대응표.
AiPipelineFileEntity.java이력81.8%엔티티문서 AI 플랫폼에 올린 낱장 파일 한 장 (ai_pipeline_files).
AiPipelineJobEntity.java이력92.0%5일 전 · #1970엔티티문서 AI 플랫폼에 맡긴 작업 한 건 (ai_pipeline_jobs).
AiPipelineJobInputEntity.java이력88.2%엔티티문서 AI 분류 요청 당시의 파일 순서와 식별자를 고정해 두는 원장.
AiPipelineResultSyncEntity.java이력89.0%엔티티결과 왕복 한 회 (ai_pipeline_result_syncs) — 검수 보정을 플랫폼 저장 결과에 되돌려 놓고 갱신 Job 을 찾기까지의 진행과 그 이력(docs/decisions/20260929-pipeline-correction-roundtrip.md §4·§4-1).
AnalysisConcurrencySettingEntity.java이력100.0%엔티티1인 동시 AI 분석 요청 한도 — 한 행(#SINGLETON_ID)짜리 운영 설정 (WBS 29.12.3).
AnalysisRequestClaimHospitalEntity.java이력85.7%6일 전 · #1941엔티티분석 요청의 청구병원 한 곳과 그 대표 상병(결정 20261106-analysis-request-claim-hospitals 1항 — 병원마다 대표 상병 1건).
AnalysisRequestCollectionEntity.java이력54.5%엔티티분석 요청이 참조할 지식컬렉션 하나.
AnalysisRequestContractEntity.java이력85.7%엔티티분석 요청의 계약 한 건 (계약 정보 — 계약일자·상품명·청약서 유형·약관 매칭).
AnalysisRequestContractItemEntity.java이력76.5%엔티티계약별 청약서 질문 / 고지사항 항목 하나.
AnalysisRequestEntity.java이력91.7%엔티티분석 요청(분석 조건) 한 버전 (W09, 2026-08-19 확정 구조).
AnalysisRequestFileEntity.java이력76.9%엔티티분석 요청이 고른 컬렉션 안에서 좁혀 볼 문서 하나(docs/decisions/20261030-reference-defaults-to-analysis-and-chat.md 1항).
AnalysisRequestFormEntity.java이력70.6%엔티티분석 요청이 선택한 보고서 양식 하나.
ApplicationFormVersionEntity.java이력76.9%엔티티청약서 폼 설정의 한 버전 (관리자 화면 /admin/application-forms `청약서 폼 설정`).
ChatPromptVersionEntity.java이력76.9%엔티티지시문 한 판 (docs/decisions/20261023-chat-prompt-db-versioning.md 1항).
ClaimTypeEntity.java이력93.9%엔티티청구유형 하나 (분석 조건 1번의 목록, 관리자 보고서 유형 설정).
ClassificationCorrectionEntity.java이력95.9%2일 전 · #2113엔티티분류 보정 한 건 — "이 낱장을 무엇에서 무엇으로 바꿨는가" (W07).
ClassificationResultEntity.java이력88.6%2일 전 · #2113엔티티분류 결과 한 버전 (S-007 §3-2 classification_results).
ClassificationResultPageEntity.java이력93.6%2일 전 · #2113엔티티분류 결과의 낱장 한 장 (S-007 §3-2 classification_result_pages).
DocumentTypeSchemaVersionEntity.java이력81.8%엔티티에이전트 스튜디오 문서 분류(CLASSIFY)·추출 스키마(EXTRACT) 설정의 한 버전 (docs/decisions/20261021-studio-config-version-sync.md 5항).
ExtractionFieldCorrectionEntity.java이력84.8%엔티티추출값 수정 한 건 — "이 항목을 무엇에서 무엇으로 바꿨는가" (야간 플랜 20260911 DP02, ClassificationCorrectionEntity 와 동형).
ExtractionResultEntity.java이력88.2%엔티티정보추출 결과 한 벌 (W08).
ExtractionResultFieldEntity.java이력95.1%엔티티추출 항목 한 개 (W08).
ExtractionSchemaFieldEntity.java이력94.6%엔티티에이전트 스튜디오 추출 항목 — 추출 스키마 버전 × 2depth 문서종 × 항목 한 행.
ImageSystemOutboundRequestEntity.java이력89.7%엔티티이미지시스템 API-09·10 발신 시도와 최종 결과를 남기는 원장이다.
ImageTransferBackgroundJobEntity.java이력94.7%5일 전 · #1970엔티티보고서번호 단위로 직렬 실행하는 이미지 전송 백그라운드 작업 한 건.
ImageTransferEntity.java이력91.5%엔티티이미지 시스템 전송 묶음 한 건 (S-007 §3-2 image_transfers).
InvestigationReportEntity.java이력97.4%2일 전 · #2113엔티티사고조사 보고서 한 건 (S-007 §3-2 investigation_reports).
InvestigationSettingsSnapshotEntity.java이력90.0%5일 전 · #1988엔티티조사건이 끝까지 쓰는 사고조사 Workflow 설정의 판 (docs/decisions/20261028-investigation-settings-snapshot-at-intake.md).
ReportBusinessContractEntity.java이력86.7%엔티티API-01 접수 시 Smart심사 조사정보 View에서 조회해 저장한 보고서별 계약 스냅샷이다.
ReportDisposalLogEntity.java이력91.7%엔티티설명 주석 없음
ReportDraftAiTabEntity.java이력97.9%엔티티보고서 초안 구역 하나의 AI 탭 작업 (docs/decisions/20261015-studio-saas-v2-agents-adoption.md D4).
ReportDraftEntity.java이력92.0%엔티티보고서 초안 한 버전 (W12 골격).
ReportDraftLlmTabEntity.java이력94.8%엔티티보고서 초안 탭 하나의 LLM 직접 호출 (docs/decisions/20261020-report-generation-llm-input-job.md 「결정」 1·2·6·7항).
ReportDraftSectionEntity.java이력92.5%엔티티보고서 초안의 구역 하나 (S-014 §7, 20260909 결정) — 요약 BODY 섹션마다 텍스트 한 장.
ReportHospitalSelectionEntity.java이력89.5%2일 전 · #2102엔티티접수 건에서 조사자가 서류 병원명에 지정한 병원.
ReportMailDispatchEntity.java이력90.0%5일 전 · #1970엔티티보고서 메일 발송 기록 한 건 (W13).
ReportPageEditEntity.java이력84.0%엔티티스캔 문서함 낱장 편집(삭제·표시 순서)의 저장분 — report_pages 에 겹쳐 보는 오버레이 ([20260921] 🟢 0항, S-012 §4-0, 야간 20261006 NP01).
ReportPageEntity.java이력64.0%엔티티보고서의 현재 활성 페이지 (S-007 §3-2 report_pages).
ReportReflectionEntity.java이력88.6%엔티티사고조사 챗봇 「AI 보고서 반영」 한 번 — Studio 를 부른 반영만 남는다 (결정 20261021 5~7항, V202610221600).
ReportTemplateEntity.java이력89.7%엔티티보고서 양식 한 버전 (W15).
ReportTemplateVariableEntity.java이력76.9%엔티티보고서 양식 본문에 삽입할 수 있는 변수 하나.
SmartReviewTransferEntity.java이력100.0%엔티티스마트심사 전송 시도 한 번 (docs/decisions/20261103-smart-review-report-receiver-api.md).
StudioDocumentCategoryEntity.java이력80.0%엔티티에이전트 스튜디오 1depth 문서종(분류군) — 분류 버전 × 1depth 한 행.
StudioDocumentTypeEntity.java이력87.0%엔티티에이전트 스튜디오 2depth 문서종의 분류 값 — 분류 버전 × 2depth 한 행.
SummaryCardEntity.java이력78.9%엔티티요약 섹션 안의 카드 — 요약 표 섹션에서는 병원(기관), 행 추가 탭 섹션에서는 행(탭) 하나 (S-014 §6).
SummaryGroupBatchEntity.java이력93.9%4일 전 · #2003엔티티요약 그룹 묶음 (summary_group_batches) — 분류 Job 하나에 대한 그룹 요약 한 번.
SummaryGroupDocumentTypeEntity.java이력66.7%엔티티요약 그룹에 묶은 2depth 문서종 한 줄 (summary_group_document_types).
SummaryGroupEntity.java이력90.9%엔티티요약 그룹 — 2depth 문서종 묶음 + 프롬프트 (summary_groups, docs/decisions/20261019-studio-summary-tab-doc-groups.md).
SummaryGroupRunEntity.java이력88.5%5일 전 · #1970엔티티요약 그룹 호출 한 건 (summary_group_runs) — 묶음(SummaryGroupBatchEntity) 아래 그룹마다 한 행.
SummaryGroupVersionEntity.java이력80.0%엔티티요약 그룹 한 판 (docs/decisions/20261028-investigation-settings-snapshot-at-intake.md).
SummaryItemEntity.java이력93.9%엔티티요약 카드 안의 항목 하나.
SummaryItemSourceEntity.java이력0.0%엔티티요약 항목의 출처 하나.
SummaryResultEntity.java이력92.9%엔티티요약 결과 한 벌 (W10).
SummarySectionEntity.java이력84.8%엔티티요약 결과의 구역(섹션) 하나 (S-014 §4, 2026-09-29).
SummarySkeletonEntity.java이력83.3%엔티티요약 섹션 골격 한 버전 (S-014 §3, 2026-09-29).
TransferPageEntity.java이력89.5%엔티티전송별 페이지 스냅샷 (S-007 §3-2 transfer_pages).

event/14GitHub

트랜잭션 커밋 후 발행되는 도메인 이벤트.

AnalysisRequestedEvent.java이력100.0%이벤트분석 조건을 저장하고 분석을 요청했다(트랜잭션 커밋 뒤).
ClassificationQueueDueEvent.java이력100.0%이벤트분류 대기열을 다시 보라는 신호 — 조사자의 AI 작업 자리가 났거나(분류·추출·분석 단계 종료) 한도가 바뀌었다 (결정 20261022-image-confirm-classification-queue).
ClassificationStartedEvent.java이력100.0%5일 전 · #1971이벤트보고서 한 건의 분류가 시작됐다(CONFIRM_REQUESTED → `분류중`, S-004 §8-2) — 확정 트랜잭션이 커밋된 뒤 후속 단계가 받는 도메인 이벤트 (2026-09-11 야간 DP04).
ExtractionSubmittedEvent.java이력100.0%이벤트추출 작업을 문서 AI 플랫폼에 제출했다 — 분류 검수 보정이 플랫폼 분류 작업에 반영된 뒤다.
FinalTransferCompletedEvent.java이력100.0%이벤트보고서 한 건의 최종 전송이 끝났다(FINAL_TRANSFER_COMPLETED, S-004 §7) — 전송 트랜잭션이 커밋된 뒤 후속 단계가 받는 도메인 이벤트 (2026-09-03 야간 ST02).
ImageSystemClassificationFinalizedEvent.java이력100.0%이벤트분류 결과 한 벌이 확정돼 API-09 전체 스냅샷을 보낼 수 있음을 알린다.
ImageSystemPageEditsSavedEvent.java이력100.0%이벤트문서함 이동·삭제 스냅샷이 저장돼 API-10을 보낼 수 있음을 알린다.
ImageTransferAcceptedEvent.java이력100.0%이벤트API-02 물리 전송 검증과 현재 페이지 반영이 모두 끝난 뒤 발생한다.
ImageTransferTaskQueuedEvent.java이력100.0%이벤트영속 작업이 커밋된 직후 폴러를 깨우는 내부 신호.
InvestigationReportCreatedEvent.java이력100.0%이벤트조사건이 처음 생겼다 — 이미지 시스템 API-01 이 새 접수번호로 보고서 행을 만들었다.
ReanalysisRestartedEvent.java이력100.0%이벤트AI 를 다시 돌리는 재실행이 시작됐다 — 사용자 `다시 분석`(추출부터·분류부터)과 예약 재분류.
ReclassificationReservationDueEvent.java이력100.0%이벤트재분류 예약을 지금 소비할 수 있을지 다시 볼 때가 됐다는 신호 — 분류·추출 단계가 끝났거나(성공·최종 실패), 예약이 기다리던 물리 전송의 검증이 끝났다(결정 20260910-confirm-reservation-and-reanalysis-scope 1항, S-012 §3-1).
ReportChangedEvent.java이력100.0%이벤트보고서 한 건의 문서함·상태가 바뀌었다 — 화면 실시간 갱신 신호의 원천 (결정 20261014-realtime-updates-sse §2).
SummaryCompletedEvent.java이력100.0%이벤트보고서 한 건의 요약 생성이 끝났다(ANALYSIS_FINISHED → `분석완료`, S-004 §7) — 엔진 단계 트랜잭션이 커밋된 뒤 후속 단계가 받는 도메인 이벤트 (2026-09-11 야간 DP04).

exception/120GitHub

BusinessException 하위 도메인 예외 — 에러 코드와 HTTP 상태를 정한다.

AgentStudioConfigChangeUnsupportedException.java이력100.0%예외지금 저장으로는 할 수 없는 변경 — 처리 단계나 갈래 구조가 바뀌어야 한다(docs/decisions/20261103-studio-config-save-new-config.md 6항).
AgentStudioConfigConflictException.java이력100.0%예외화면을 연 뒤 다른 관리자가 먼저 Studio 지시서를 저장했을 때.
AgentStudioConfigSourceNotReadyException.java이력100.0%예외Studio 가 추출 지시서의 원본 Collection 을 아직 검사 중일 때.
AgentStudioConfigUnavailableException.java이력100.0%예외Studio 버전 내용을 조회할 수 없을 때 — 플랫폼이 붙지 않았거나 그 단계 에이전트가 설정되지 않았다.
AgentStudioDeploymentNotFoundException.java이력100.0%2일 전 · #2112예외없는 배포.
AgentStudioDeploymentRejectedException.java이력100.0%2일 전 · #2112예외배포할 수 없다 — 실행 테스트를 통과하지 못했거나 그 뒤 저장본이 바뀌었다.
AgentStudioInstructVersionConflictException.java이력100.0%예외화면이 편집을 시작한 INSTRUCT 버전(baseVersion)이 서버의 최신 버전과 다를 때.
AgentStudioInstructVersionNotFoundException.java이력100.0%예외요청한 INSTRUCT 버전이 없을 때.
AgentStudioTestFileRejectedException.java이력100.0%6일 전 · #1915예외실행 테스트에 올릴 수 없는 서류 — 형식·크기·쪽 수·같은 파일.
AgentStudioTestRunNotFoundException.java이력100.0%6일 전 · #1915예외실행 테스트가 없거나 다른 관리자의 실행이다.
AgentStudioTestRunNotReadyException.java이력100.0%6일 전 · #1915예외지금은 실행할 수 없다 — 서류 없음·준비 중·실패한 서류·실행 중·결과 없음.
AgentStudioTestRunPlatformException.java이력100.0%6일 전 · #1915예외실행 테스트 중 문서 AI 플랫폼 호출이 실패했다.
AgentStudioTestRunUnavailableException.java이력100.0%6일 전 · #1915예외문서 AI 플랫폼이 붙지 않았거나 분류 에이전트가 설정되지 않았다.
AnalysisRequestNotFoundException.java이력100.0%예외보고서는 있으나 아직 분석 요청이 없을 때.
AnalysisSourceJobUnavailableException.java이력100.0%예외요약을 이어 실행할 앞 추출 작업을 찾을 수 없을 때.
ApplicationFormVersionConflictException.java이력100.0%예외화면이 편집을 시작한 버전(baseVersion)이 서버의 현재 버전과 다를 때.
ChatPromptKeyNotFoundException.java이력100.0%예외코드가 정한 지시문 목록에 없는 이름 — 관리 화면에서 새 이름을 만들지 않는다(docs/decisions/20261023-chat-prompt-db-versioning.md 1항).
ClaimTypeNotFoundException.java이력100.0%예외없는(또는 이미 지워진) 청구유형을 지목했을 때.
ClassificationActionForbiddenException.java이력100.0%예외분류 조치를 할 권한이 없을 때.
ClassificationEditWhileAiRunningException.java이력100.0%예외AI 가 도는 중에 분류값 변경을 저장하려 할 때.
ClassificationPageNotInResultException.java이력100.0%예외최신 분류 결과에 없는 낱장을 확정하려 할 때.
ClassificationResultFinalizedException.java이력100.0%예외이미 확정(외부 반영)된 분류 결과를 고치려 할 때.
ClassificationResultNotFoundException.java이력100.0%예외보고서는 있으나 아직 분류 결과가 한 벌도 없을 때.
ClassificationReviewPendingException.java이력100.0%예외미분류·저신뢰 낱장이 남아 있어 `정보 추출 시작` 을 받을 수 없을 때.
ClassificationSnapshotEmptyException.java이력100.0%예외분류 결과를 만들려는데 기준이 될 전송 스냅샷이 없을 때.
ConcurrentAiJobLimitExceededException.java이력100.0%예외조사자의 진행 중 AI 작업이 한도에 닿아 새 착수를 받을 수 없을 때.
CorrectionSyncFailedException.java이력100.0%예외검수 보정을 플랫폼 결과에 되돌려 놓지 못했을 때 — 정책이 REQUIRED 면 다음 단계 작업을 이 사유로 실패시킨다 (docs/decisions/20260929-pipeline-correction-roundtrip.md 결정 6).
DocumentTypeSchemaVersionConflictException.java이력100.0%예외화면이 편집을 시작한 분류·추출 스키마 버전(baseVersion)이 서버의 최신 버전과 다를 때.
DocumentTypeSchemaVersionNotFoundException.java이력100.0%예외요청한 분류·추출 스키마 버전이 없을 때.
DuplicateClaimTypeException.java이력100.0%예외살아 있는 목록에 같은 이름의 청구유형이 이미 있을 때.
DuplicateClassificationAssignmentException.java이력100.0%예외한 요청에 같은 낱장이 두 번 들어 있을 때.
DuplicateExtractionFieldException.java이력100.0%예외한 번의 적재에 같은 항목(문서종 + 낱장 + 키)이 두 번 들어 있을 때.
DuplicateReportPageOrderException.java이력100.0%예외낱장 편집 저장 요청의 orderedSourcePageIds 에 같은 낱장이 두 번 들어올 때.
DuplicateReportTemplateException.java이력100.0%예외이미 있는 양식 코드로 새로 등록하려 할 때.
DuplicateSummaryItemException.java이력0.0%예외한 카드 안에 같은 항목 키가 두 번 들어 있을 때.
ExtractionActionForbiddenException.java이력100.0%예외추출값을 고칠 권한이 없을 때.
ExtractionFieldNotInResultException.java이력100.0%예외최신 추출 결과에 없는 항목을 고치려 할 때.
ExtractionFieldValueNotStorableException.java이력100.0%예외값을 저장하지 않는 항목(개인 식별 정보, NOT_STORED)에 값을 넣으려 할 때.
ExtractionResultNotEditableException.java이력100.0%예외추출값을 고칠 수 없는 단계에서 수정을 시도할 때.
ExtractionResultNotFoundException.java이력100.0%예외보고서는 있으나 아직 추출 결과가 한 벌도 없을 때.
ExtractionSourceJobUnavailableException.java이력100.0%예외추출을 이어 실행할 앞 분류 작업을 찾을 수 없을 때.
HospitalAliasNotFoundException.java이력100.0%예외사용 토글·병원 바꾸기·삭제 대상 등재(병원 다른 이름)가 없을 때.
HospitalAliasRegistrationBlockedException.java이력93.3%예외병원 다른 이름을 등재(또는 다른 병원으로 바꾸기)할 수 없을 때 — docs/decisions/20260910-hospital-master-matching.md §6 「다음은 등재하지 않는다」.
IdempotencyKeyReusedException.java이력100.0%예외완료된 전송 식별자를 다른 요청 본문으로 다시 사용했을 때 발생한다.
ImageReportNotFoundException.java이력100.0%예외이미지 연동으로 접수된 보고서가 메모리 상태 저장소에 없을 때 발생한다.
ImageSystemIntegrationException.java이력100.0%예외이미지 시스템 API 호출 또는 응답 검증에 실패했을 때 발생한다.
ImageTransferStorageException.java이력100.0%예외이미지 전송 공유 저장소의 업로드·다운로드·삭제가 실패했다.
InactiveCustomerCompanyException.java이력100.0%예외비활성 위탁사에 대한 신규 이미지 전송을 거절할 때 발생한다 (S-003 API-01·API-06).
InvalidAgentStudioInstructException.java이력100.0%예외INSTRUCT 설정의 규칙 위반 — 탭 표시명·프롬프트·출력 JSON 골격·보고서 유형 본문 (화면 기준선 「스키마 정의 3단계」, docs/decisions/20261021-studio-instruct-db-storage.md 7항).
InvalidAnalysisRequestException.java이력100.0%예외분석 조건이 성립하지 않을 때.
InvalidApplicationFormSettingsException.java이력100.0%예외청약서 폼 설정의 항목 간 규칙 위반 — 유형 집합 불일치, 질문·변수 식별자 중복, 정의되지 않은 변수 토큰 등.
InvalidChatPromptException.java이력100.0%예외지시문 문구 규칙 위반 — 비었거나 너무 길다(docs/decisions/20261023-chat-prompt-db-versioning.md 8항).
InvalidDocumentTypeSchemaException.java이력100.0%예외에이전트 스튜디오 문서 분류·추출 스키마 저장 내용이 성립하지 않을 때.
InvalidImageSnapshotException.java이력100.0%예외페이지 수·식별자·순서가 최신 전체 스냅샷 규칙과 맞지 않을 때 발생한다.
InvalidPageRequestException.java이력100.0%예외목록 조회의 page/size 가 허용 범위를 벗어났을 때.
InvalidReportTemplateException.java이력100.0%예외보고서 양식 내용이 성립하지 않을 때.
InvalidStatusTransitionException.java이력100.0%예외S-004 §7 상태 전이표에 없는 (현재 상태, 이벤트) 조합이 요청됐을 때 발생한다.
InvalidSummaryGroupException.java이력100.0%예외요약 그룹 저장 내용이 성립하지 않을 때.
InvalidTransferPathException.java이력100.0%예외보고서 번호나 ZIP 파일명이 허용된 수신 루트 밖의 경로를 가리킬 때 발생한다.
InvestigationListDateRangeException.java이력100.0%예외사고조사 목록 조회의 접수일자 범위 시작이 끝보다 늦을 때.
InvestigationReportNotFoundException.java이력100.0%예외요청한 접수번호의 사고조사 보고서가 없을 때.
InvestigationScopeForbiddenException.java이력100.0%예외조회자의 조회 범위(조직 트리 산하) 밖의 사고조사를 열려 할 때.
InvestigationStartForbiddenException.java이력100.0%예외사용자 착수(`AI 분류 시작`·`정보 추출 시작`)를 할 권한이 없을 때.
InvestigationViewStageNotOpenException.java이력100.0%예외조회 범위 안이지만 담당 조사자가 아닌 사고조사를 AI 보고서 확인(요약 완료) 전 단계에 열려 할 때.
MailDeliveryUnavailableException.java이력100.0%예외메일 발송 수단이 꺼져 있을 때.
MailRecipientNotResolvedException.java이력100.0%예외수신 메일 주소를 조직 정보에서 찾지 못했을 때.
ReportAlreadyTransferredException.java이력75.0%4일 전 · #2044예외이미 `보고서 전송 완료` 인 건에 메일·스마트심사 전송 요청이 또 들어와 거절했다.
ReportDeliveryChannelNotMailException.java이력100.0%예외보고서 위탁사의 전송 방식이 메일이 아니라 메일로 보낼 수 없을 때.
ReportDeliveryChannelNotSetException.java이력100.0%예외보고서 위탁사의 전송 방식을 아직 고르지 않아 보낼 수 없을 때.
ReportDeliveryChannelNotSmartReviewException.java이력100.0%예외위탁사 전송 방식이 스마트심사가 아닌 건을 스마트심사로 보내려 할 때.
ReportDeliveryLogSearchPeriodException.java이력100.0%예외관리자 보고서 초안 전송 로그 조회에서 기간 시작이 끝보다 늦을 때 (400).
ReportDisposalLogSearchPeriodException.java이력0.0%예외설명 주석 없음
ReportDocumentChangeDetectedException.java이력100.0%예외확정 후 추가 서류가 감지된(changed_after_confirm) 상태에서 다음 단계로 가려 했다.
ReportDraftActionForbiddenException.java이력100.0%예외보고서 초안 쓰기(생성·본문 수정) 권한이 없을 때.
ReportDraftEmptyException.java이력66.7%4일 전 · #2044예외보고서 초안이 준비 완료(READY)여도 보낼 글이 하나도 없어 전송을 거절했다.
ReportDraftNotDiscardableException.java이력100.0%예외지금 상태에서는 초안을 폐기하고 항목 선택으로 돌아갈 수 없다 — 이미 전송했거나 초안이 준비 완료가 아니다.
ReportDraftNotEditableException.java이력100.0%7일 전 · #1921예외지금 상태에서는 초안을 고칠 수 없다 — 이미 전송했거나 초안을 폐기했다.
ReportDraftNotFoundException.java이력100.0%예외보고서는 있으나 아직 초안이 없을 때.
ReportDraftNotReadyException.java이력100.0%예외보고서 초안이 준비 완료(READY — 화면의 `보고서 항목 선택 완료`)가 아닌데 최종 전송 완료를 처리하려 했다.
ReportDraftSectionNotFoundException.java이력100.0%예외고치거나 되돌리려는 구역이 최신 초안에 없을 때.
ReportMailDispatchLogNotAllowedException.java이력100.0%예외허용 레벨이 아닌 사용자가 관리자 메일 발송 로그를 조회하려 할 때.
ReportMailDispatchSearchPeriodException.java이력100.0%예외관리자 메일 발송 로그 조회에서 기간 필터의 시작이 끝보다 늦을 때 (야간 플랜 20261005 NM01).
ReportMailSendFailedException.java이력100.0%예외SMTP 발송이 실패했을 때.
ReportMailSendForbiddenException.java이력100.0%예외보고서 메일 전송 권한이 없을 때.
ReportMailSentTransferIncompleteException.java이력100.0%예외메일은 나갔는데 건을 `보고서 전송 완료` 로 옮기지 못했을 때.
ReportPageEditTargetNotFoundException.java이력100.0%예외낱장 편집 저장 요청이 이 보고서 문서함에 없는 sourcePageId 를 가리킬 때.
ReportPageEditsEmptyBoxException.java이력100.0%예외낱장 편집 저장 요청이 문서함의 낱장을 전부 지울 때.
ReportPageEditsLockedException.java이력100.0%예외보고서 전송이 끝난 건(COMPLETED)의 낱장 편집을 저장하려 할 때.
ReportPageFileNotFoundException.java이력100.0%예외문서함에는 페이지가 있는데 압축 해제 저장소에 그 낱장 파일이 없을 때.
ReportPageImageUnrenderableException.java이력100.0%예외저장소의 TIFF 낱장을 화면 표시용 PNG 로 바꾸지 못했을 때.
ReportPageNotFoundException.java이력100.0%예외요청한 보고서의 문서함에 그 sourcePageId 의 활성 페이지가 없을 때.
ReportTemplateNotFoundException.java이력100.0%예외보고서 양식을 찾을 수 없을 때.
SmartReviewPartnerCodeNotSetException.java이력100.0%예외위탁사에 스마트심사 대외사 코드가 정해지지 않았을 때.
SmartReviewSentTransferIncompleteException.java이력100.0%예외스마트심사는 받았는데 건을 `보고서 전송 완료` 로 옮기지 못했을 때.
SmartReviewTransferFailedException.java이력100.0%예외스마트심사가 전송을 거부했거나 연결하지 못했을 때.
SmartReviewTransferForbiddenException.java이력100.0%예외담당 조사자가 아닌 사람이 스마트심사로 보내려 할 때.
SmartReviewTransferUnavailableException.java이력100.0%예외이 환경에 전송 주소나 그 대외사의 인증 키가 설정되지 않았을 때.
StatDimensionKeyExistsException.java이력100.0%예외신규 등록(REGISTER)하려는 키가 차원 마스터에 이미 있을 때 (ST05-A) — 그때는 병합(MERGE)이다.
StatDimensionKeyNotFoundException.java이력100.0%예외병합(MERGE) 대상 키가 차원 마스터(dim_*)에 없을 때 (ST05-A).
StatDimensionNotFoundException.java이력100.0%예외업무 통계 조회 경로의 차원 값이 8종(BusinessStatisticsDimension) 밖일 때.
StatUnmappedAlreadyResolvedException.java이력100.0%예외처리하려는 (차원, 원문값)의 큐 행이 있지만 대기 중(PENDING)인 것이 하나도 없을 때 (ST05-A) — 이미 매핑·무시됐다.
StatUnmappedNotFoundException.java이력100.0%예외처리하려는 (차원, 원문값)이 미매핑 큐에 아예 없을 때 (ST05-A).
StatUnmappedRequestException.java이력100.0%예외미매핑 큐 처리 본문이 잘못됐을 때 (ST05-A) — 필수 누락(차원·원문값·동작, MERGE 의 mappedKey)·키 형식 위반· 길이 초과·목록 파라미터 오류.
StatisticsBackfillRequestException.java이력100.0%예외통계 재적재 명령의 본문이 대상을 정할 수 없을 때 — 기간을 한쪽만 줬거나 거꾸로이거나, 롤업 재집계를 기간 없이 요청했거나, 세 원천(기간·보고서번호·대기 실패) 중 어느 것도 지정하지 않았을 때.
StatisticsBackfillTooManyException.java이력100.0%예외통계 재적재 대상이 한 번의 명령 상한(hwss.statistics.backfill.max-reports)을 넘을 때.
StatisticsQueryAxisException.java이력100.0%예외추출 완료율 조회(NE02)의 axis 파라미터가 축 값이 아닐 때.
StatisticsQueryFilterException.java이력0.0%예외업무 통계 조회의 조건 파라미터가 그 차원에 쓸 수 없을 때.
StatisticsQueryPeriodException.java이력100.0%예외업무 통계 조회 기간의 시작이 끝보다 늦을 때.
SummaryActionForbiddenException.java이력100.0%예외요약 쓰기(항목 수정·확정·초기화·반영 체크) 권한이 없을 때.
SummaryItemNotFoundException.java이력100.0%예외수정하려는 요약 항목이 그 카드에 없을 때.
SummaryItemNotReflectableException.java이력100.0%예외보고서 본문에 들어가지 않는 섹션(참조 전용·제외)의 항목에 보고서 반영 체크를 켜려 할 때.
SummaryNotConfirmedException.java이력100.0%예외확정되지 않은 요약에 보고서 반영 체크를 하려 할 때.
SummaryNotEditableException.java이력100.0%예외요약 확정 전에 항목 본문을 고치려 할 때.
SummaryResultNotFoundException.java이력100.0%예외보고서는 있으나 아직 요약 결과가 없을 때.
SummarySkeletonInvalidException.java이력100.0%예외저장하려는 골격 정의가 성립하지 않을 때(섹션 없음·키 중복 등).
SummarySkeletonNotFoundException.java이력100.0%예외그 범위(위탁사 코드 또는 COMMON)에 골격이 없을 때.
TransferNotStartedException.java이력100.0%예외API-01 접수 이력이 없는 전송 묶음에 API-02가 호출될 때 발생한다.
ZipFileNotFoundException.java이력100.0%예외API-02 시점에 공통 수신 폴더에서 예정된 ZIP을 찾지 못했을 때 발생한다.
ZipHashMismatchException.java이력100.0%예외공통 수신 폴더의 ZIP SHA-256이 API-01 메타와 다를 때 발생한다.
ZipSyncPendingException.java이력100.0%예외SFTP 수신 ZIP이 아직 공용 저장소에서 확인되지 않아 API-02를 재시도해야 할 때 발생한다.

integration/18GitHub

base 포트 구현체 — 다른 도메인·워크플로우 엔진이 이 모듈을 부르는 입구.

ClassificationQueueListener.java이력0.0%리스너단계 종료·한도 변경 커밋 뒤에 분류 대기열을 소비한다(결정 20261022-image-confirm-classification-queue).
InvestigationSettingsSnapshotListener.java이력0.0%리스너조사건이 생긴 트랜잭션 안에서 설정 판을 고정한다 — 건이 커밋되면 스냅샷도 함께 커밋되고, 접수가 실패해 되돌려지면 함께 사라진다.
ReclassificationReservationListener.java이력0.0%리스너단계 종료·전송 검증 종료 커밋 뒤에 재분류 예약 소비를 시도한다(결정 20260910 1항, S-012 §3-1).
AgentStudioInstructSeeder.java이력96.7%6일 전 · #1958클래스에이전트 스튜디오 INSTRUCT 첫 버전을 기동 때 넣는다 (docs/decisions/20261021-studio-instruct-db-storage.md 8항).
AgentStudioTestRunSweeper.java이력0.0%6일 전 · #1915클래스실행 테스트 보관 기간 정리 — 마지막 활동 뒤 보관 기간(기본 1일)이 지난 실행을 Studio 파일·작업과 함께 지운다 (docs/decisions/20261106-studio-test-classify-run.md 7항).
AiPipelineJobPoller.java이력68.4%클래스문서 AI 플랫폼에 맡긴 작업을 주기적으로 진행시키는 폴러 — 런타임 시작점이다(docs/rules/backend.md).
ClassificationQueueSweeper.java이력0.0%클래스분류 대기열 점검 — 자리가 난 신호(ClassificationQueueListener)가 빠졌을 때(서버 재기동·소비 중 예외, 단계 종료가 아닌 경로로 자리가 난 경우) 대기열이 영구 대기로 남지 않게 주기적으로 다시 본다.
DocumentTypeSchemaSeeder.java이력88.9%클래스에이전트 스튜디오 문서 분류·추출 스키마 첫 버전을 기동 때 넣는다.
ImageTransferExtractionResumeSweeper.java이력92.3%클래스압축 해제 재개 점검 — API-02 접수 뒤 메모리 대기열에만 있던 압축 해제가 재기동(롤링 배포)으로 사라져 VALIDATING 으로 남은 전송을 다시 맡긴다(결정 20261023-production-k0s-cluster A).
ReclassificationReservationSweeper.java이력0.0%클래스재분류 예약 점검 — 단계 종료 직후 소비(ReclassificationReservationListener)가 빠졌을 때(서버 재기동·소비 중 예외) 예약이 영구 대기로 남지 않게 주기적으로 다시 본다.
AnalysisStepWorkPortImpl.java이력100.0%포트 구현ANALYZE 단계의 업무 — 문서 AI 플랫폼 실연동, 없으면 스텁 요약 결과 산출.
ChatPromptLookupPortImpl.java이력71.4%포트 구현지시문 판 조회 포트 — 관리자 API 와 같은 ChatPromptService#current 를 읽는다(판이 없으면 기본 문구, 판 0).
ClassificationStepWorkPortImpl.java이력100.0%포트 구현CLASSIFY 단계의 업무 — 문서 AI 플랫폼 실연동, 없으면 스텁 분류 결과 산출.
ExtractionPreconditionPortImpl.java이력100.0%어제 · #2151포트 구현추출(EXTRACT) 진입 게이트 — 미분류·저신뢰 낱장이 남아 있으면 막는다 (W05 가 세운 골격의 구현체, S-004 §7 `미분류검출`, 8/14 확정 "전건 확정 전에는 추출 시작 비활성").
ExtractionStepWorkPortImpl.java이력98.1%포트 구현EXTRACT 단계의 업무 — 문서 AI 플랫폼 실연동, 없으면 스텁 추출 결과 산출.
InvestigationChatContextPortImpl.java이력100.0%2일 전 · #2113포트 구현사고조사 챗봇 맥락 포트의 구현 — 이 모듈이 가진 보고서·요약·분류·추출·분석 요청 값을 모은다 (결정 20261021 사고조사 챗봇 2·4·5·8항, 20260918 §4, 20260909 6항, 20261010).
ReportTabsStepWorkPortImpl.java이력0.0%포트 구현GENERATE_REPORT_TABS 단계의 업무 — 파이프라인 v2 의 「AI 보고서 생성」, v1 ANALYZE 자리(V202610220938, docs/decisions/20261021-investigation-pipeline-v2-composition.md).
WorkflowStepCompletionPortImpl.java이력100.0%어제 · #2151포트 구현엔진 단계 성공·최종 실패를 보고서 처리 상태로 옮기는 구현체 (S-004 §7 자동 전이, 2026-09-03 야간 N01).

purge/12GitHub

ReportPurgeBasis.java이력100.0%enum보고서 파기의 기준일 — 이 날짜에 보관 일수를 더한 날이 지나면 파기한다 (hwss.report-purge.basis).
ReportPurgeScope.java이력100.0%enum파기 범위 (hwss.report-purge.scope) — 결정 20260909-purge-statistics-boundary 「미확정 1」 이 닫히기 전이라 둘 다 연다.
ReportPurgeCandidate.java이력100.0%record파기 후보 한 건.
ReportPurgeOutcome.java이력100.0%record보고서 한 건의 파기 결과.
ReportPurgeRunResult.java이력100.0%record파기 배치 한 번의 결과.
ReportPurgeService.java이력94.5%서비스보고서 파기 배치 — 설정(ReportPurgeProperties)대로 후보를 골라 한 건씩 처리한다 (docs/decisions/20261027-report-purge-configurable-basis.md).
ReportDisposalRecorder.java이력100.0%인터페이스파기 결과를 남기는 자리 — 결정 20260909-purge-statistics-boundary §5 의 파기 로그(report_disposal_logs).
JpaReportDisposalRecorder.java이력100.0%클래스파기 배치가 넘긴 결과를 보고서 원본과 FK 없이 보존한다.
ReportPurgeCandidateFinder.java이력100.0%클래스파기 후보를 고른다 — 보고서번호 순으로 한 쪽씩 읽는다(키셋).
ReportPurgeScheduler.java이력100.0%클래스설정된 시각에 보고서 파기 배치를 실행한다.
ReportPurgeTables.java이력100.0%4일 전 · #2007클래스보고서 계보의 삭제 순서와 남기는 표 — 결정 20260909-purge-statistics-boundary §1·§2.
ReportPurgeWorker.java이력94.4%클래스파기 후보 한 건을 처리한다 — 결정 20260909-purge-statistics-boundary §2·§2-1·§3, 20261023-investigation-chat-session-structure 8항.

realtime/4GitHub

ReportEventStreamListener.java이력100.0%리스너변경 이벤트를 커밋 뒤에 SSE 연결로 넘긴다 — 화면이 신호를 받고 다시 조회했을 때 바뀐 값이 보여야 하기 때문이다 (결정 20261014-realtime-updates-sse §2).
ReportEventStreamService.java이력0.0%서비스실시간 갱신 구독 — 상세 조회와 같은 권한 검사를 지난 화면만 연결을 연다 (결정 20261014-realtime-updates-sse §3).
ReportEventFanout.java이력인터페이스변경 신호를 모든 인스턴스의 SSE 연결로 나눠 주는 길 (결정 20261014-realtime-updates-sse 「보완 2026-10-23」).
ReportEventStreamRegistry.java이력100.0%5일 전 · #1976클래스접수번호별 SSE 연결 목록 (결정 20261014-realtime-updates-sse §3·§4).

repository/72GitHub

Spring Data JPA 저장소 인터페이스.

AgentStudioConfigExtrasRepository.java이력저장소AgentStudioConfigExtrasEntity 저장소 (Spring Data JPA 인터페이스).
AgentStudioDeploymentRepository.java이력2일 전 · #2112저장소AgentStudioDeploymentEntity 저장소 (Spring Data JPA 인터페이스).
AgentStudioInstructTabBodyRepository.java이력저장소AgentStudioInstructTabBodyEntity 저장소 (Spring Data JPA 인터페이스).
AgentStudioInstructTabRepository.java이력저장소AgentStudioInstructTabEntity 저장소 (Spring Data JPA 인터페이스).
AgentStudioInstructVersionRepository.java이력저장소AgentStudioInstructVersionEntity 저장소 (Spring Data JPA 인터페이스).
AgentStudioSummaryConfigVersionRepository.java이력어제 · #2132저장소AgentStudioSummaryConfigVersionEntity 저장소 (Spring Data JPA 인터페이스).
AgentStudioSummaryPairRepository.java이력저장소AgentStudioSummaryPairEntity 저장소 (Spring Data JPA 인터페이스).
AgentStudioTestRunCorrectionRepository.java이력2일 전 · #2123저장소AgentStudioTestRunCorrectionEntity 저장소 (Spring Data JPA 인터페이스).
AgentStudioTestRunFileRepository.java이력3일 전 · #2091저장소AgentStudioTestRunFileEntity 저장소 (Spring Data JPA 인터페이스).
AgentStudioTestRunReportItemRepository.java이력2일 전 · #2123저장소AgentStudioTestRunReportItemEntity 저장소 (Spring Data JPA 인터페이스).
AgentStudioTestRunRepository.java이력6일 전 · #1915저장소AgentStudioTestRunEntity 저장소 (Spring Data JPA 인터페이스).
AgentStudioTestRunStepRepository.java이력2일 전 · #2123저장소AgentStudioTestRunStepEntity 저장소 (Spring Data JPA 인터페이스).
AiPipelineDocumentPageRepository.java이력저장소AiPipelineDocumentPageEntity 저장소 (Spring Data JPA 인터페이스).
AiPipelineDocumentRepository.java이력저장소AiPipelineDocumentEntity 저장소 (Spring Data JPA 인터페이스).
AiPipelineFileRepository.java이력저장소AiPipelineFileEntity 저장소 (Spring Data JPA 인터페이스).
AiPipelineJobInputRepository.java이력저장소AiPipelineJobInputEntity 저장소 (Spring Data JPA 인터페이스).
AiPipelineJobRepository.java이력2일 전 · #2128저장소AiPipelineJobEntity 저장소 (Spring Data JPA 인터페이스).
AiPipelineResultSyncRepository.java이력2일 전 · #2113저장소AiPipelineResultSyncEntity 저장소 (Spring Data JPA 인터페이스).
AnalysisConcurrencySettingRepository.java이력저장소1인 동시 AI 분석 요청 한도 설정(한 행).
AnalysisRequestClaimHospitalRepository.java이력6일 전 · #1941저장소분석 요청의 청구병원·대표 상병 — 결정 20261106-analysis-request-claim-hospitals.
AnalysisRequestCollectionRepository.java이력저장소AnalysisRequestCollectionEntity 저장소 (Spring Data JPA 인터페이스).
AnalysisRequestContractItemRepository.java이력저장소AnalysisRequestContractItemEntity 저장소 (Spring Data JPA 인터페이스).
AnalysisRequestContractRepository.java이력저장소AnalysisRequestContractEntity 저장소 (Spring Data JPA 인터페이스).
AnalysisRequestFileRepository.java이력저장소분석 요청이 좁혀 볼 문서 — 결정 20261030-reference-defaults-to-analysis-and-chat 1항.
AnalysisRequestFormRepository.java이력저장소AnalysisRequestFormEntity 저장소 (Spring Data JPA 인터페이스).
AnalysisRequestRepository.java이력저장소AnalysisRequestEntity 저장소 (Spring Data JPA 인터페이스).
ApplicationFormVersionRepository.java이력5일 전 · #1969저장소ApplicationFormVersionEntity 저장소 (Spring Data JPA 인터페이스).
ChatPromptVersionRepository.java이력저장소ChatPromptVersionEntity 저장소 (Spring Data JPA 인터페이스).
ClaimTypeRepository.java이력저장소ClaimTypeEntity 저장소 (Spring Data JPA 인터페이스).
ClassificationCorrectionRepository.java이력저장소ClassificationCorrectionEntity 저장소 (Spring Data JPA 인터페이스).
ClassificationResultPageRepository.java이력저장소ClassificationResultPageEntity 저장소 (Spring Data JPA 인터페이스).
ClassificationResultRepository.java이력저장소ClassificationResultEntity 저장소 (Spring Data JPA 인터페이스).
DocumentTypeSchemaVersionRepository.java이력저장소DocumentTypeSchemaVersionEntity 저장소 (Spring Data JPA 인터페이스).
ExtractionFieldCorrectionRepository.java이력저장소ExtractionFieldCorrectionEntity 저장소 (Spring Data JPA 인터페이스).
ExtractionResultFieldRepository.java이력저장소ExtractionResultFieldEntity 저장소 (Spring Data JPA 인터페이스).
ExtractionResultRepository.java이력저장소ExtractionResultEntity 저장소 (Spring Data JPA 인터페이스).
ExtractionSchemaFieldRepository.java이력저장소ExtractionSchemaFieldEntity 저장소 (Spring Data JPA 인터페이스).
ImageIntegrationIdempotencyRepository.java이력0.0%저장소이미지 연동 쓰기 API의 멱등성 키와 요청 본문 해시를 저장한다.
ImageSystemOutboundRequestRepository.java이력저장소ImageSystemOutboundRequestEntity 저장소 (Spring Data JPA 인터페이스).
ImageTransferBackgroundJobRepository.java이력저장소ImageTransferBackgroundJobEntity 저장소 (Spring Data JPA 인터페이스).
ImageTransferRepository.java이력저장소ImageTransferEntity 저장소 (Spring Data JPA 인터페이스).
InvestigationReportRepository.java이력저장소보고서는 업무 번호(reportNo)로만 조회한다 — 이미지 시스템과 주고받는 모든 API 가 그 값을 키로 쓰기 때문이다.
InvestigationSettingsSnapshotRepository.java이력저장소InvestigationSettingsSnapshotEntity 저장소 (Spring Data JPA 인터페이스).
ReportBusinessContractRepository.java이력저장소ReportBusinessContractEntity 저장소 (Spring Data JPA 인터페이스).
ReportDisposalLogRepository.java이력저장소ReportDisposalLogEntity 저장소 (Spring Data JPA 인터페이스).
ReportDraftAiTabRepository.java이력저장소ReportDraftAiTabEntity 저장소 (Spring Data JPA 인터페이스).
ReportDraftLlmTabRepository.java이력5일 전 · #1969저장소ReportDraftLlmTabEntity 저장소 (Spring Data JPA 인터페이스).
ReportDraftRepository.java이력저장소ReportDraftEntity 저장소 (Spring Data JPA 인터페이스).
ReportDraftSectionRepository.java이력저장소ReportDraftSectionEntity 저장소 (Spring Data JPA 인터페이스).
ReportHospitalSelectionRepository.java이력4일 전 · #2007저장소ReportHospitalSelectionEntity 저장소 (Spring Data JPA 인터페이스).
ReportMailDispatchRepository.java이력저장소ReportMailDispatchEntity 저장소 (Spring Data JPA 인터페이스).
ReportPageEditRepository.java이력저장소스캔 문서함 낱장 편집 저장분 (야간 20261006 NP01).
ReportPageRepository.java이력저장소ReportPageEntity 저장소 (Spring Data JPA 인터페이스).
ReportReflectionRepository.java이력저장소ReportReflectionEntity 저장소 (Spring Data JPA 인터페이스).
ReportTemplateRepository.java이력저장소ReportTemplateEntity 저장소 (Spring Data JPA 인터페이스).
ReportTemplateVariableRepository.java이력저장소ReportTemplateVariableEntity 저장소 (Spring Data JPA 인터페이스).
SmartReviewTransferRepository.java이력저장소스마트심사 전송 기록.
StudioDocumentCategoryRepository.java이력저장소StudioDocumentCategoryEntity 저장소 (Spring Data JPA 인터페이스).
StudioDocumentTypeRepository.java이력저장소StudioDocumentTypeEntity 저장소 (Spring Data JPA 인터페이스).
SummaryCardRepository.java이력저장소SummaryCardEntity 저장소 (Spring Data JPA 인터페이스).
SummaryGroupBatchRepository.java이력저장소SummaryGroupBatchEntity 저장소 (Spring Data JPA 인터페이스).
SummaryGroupDocumentTypeRepository.java이력저장소SummaryGroupDocumentTypeEntity 저장소 (Spring Data JPA 인터페이스).
SummaryGroupRepository.java이력5일 전 · #1969저장소SummaryGroupEntity 저장소 (Spring Data JPA 인터페이스).
SummaryGroupRunRepository.java이력2일 전 · #2128저장소SummaryGroupRunEntity 저장소 (Spring Data JPA 인터페이스).
SummaryGroupVersionRepository.java이력저장소SummaryGroupVersionEntity 저장소 (Spring Data JPA 인터페이스).
SummaryItemRepository.java이력저장소SummaryItemEntity 저장소 (Spring Data JPA 인터페이스).
SummaryItemSourceRepository.java이력저장소SummaryItemSourceEntity 저장소 (Spring Data JPA 인터페이스).
SummaryResultRepository.java이력저장소SummaryResultEntity 저장소 (Spring Data JPA 인터페이스).
SummarySectionRepository.java이력저장소SummarySectionEntity 저장소 (Spring Data JPA 인터페이스).
SummarySkeletonRepository.java이력저장소SummarySkeletonEntity 저장소 (Spring Data JPA 인터페이스).
TransferPageRepository.java이력저장소TransferPageEntity 저장소 (Spring Data JPA 인터페이스).
InvestigationReports.java이력100.0%클래스접수번호로 보고서를 꺼내되 없으면 InvestigationReportNotFoundException(404) — 같은 세 줄 (findByReportNo(…).orElseThrow(…))이 서비스·통계·연동 20여 곳에 있었다(2026-10-20 Q2).

service/126GitHub

비즈니스 로직과 트랜잭션 경계.

InputPages.java이력96.6%record문서 AI 작업 입력 파일들을 요청 순서대로 이어 붙인 쪽과 낱장의 대응.
InvestigationReceivedDateRange.java이력100.0%record사고조사 목록의 접수일자 범위 조건(야간 플랜 20260904 N08) — 달력 날짜 두 개를 절대 시각의 반열린 구간으로 환산한다.
InvestigationSettings.java이력100.0%5일 전 · #1994record조사건 하나가 끝까지 쓰는 사고조사 Workflow 설정의 판 (docs/decisions/20261028-investigation-settings-snapshot-at-intake.md).
ImageSystemOutboundEventListener.java이력100.0%리스너내부 DB 커밋 후에만 이미지시스템 운영 API를 호출한다.
ScanPdfPreparationListener.java이력100.0%리스너이미지 접수 작업 대기열 안에서 정상 스냅샷을 Studio 입력 PDF로 준비한다.
AgentStudioConfigVersionService.java이력93.5%오늘 · #2161서비스에이전트 스튜디오 1단계 분류·2단계 추출 스키마의 버전 선택 목록 — 그 단계 에이전트의 Studio 지시서(Config) 목록이다 (docs/decisions/20261029-studio-config-version-list-from-studio.md).
AgentStudioDeploymentService.java이력93.9%오늘 · #2161서비스에이전트 스튜디오 서버 배포 — 실행 테스트를 통과한 한 벌을 기록한다(docs/decisions/20261111-studio-server-deployment-management.md).
AgentStudioInstructService.java이력100.0%서비스에이전트 스튜디오 3단계 INSTRUCT(AI 보고서) 설정 (관리자 화면 /admin/agent-studio/schema 3단계, docs/decisions/20261021-studio-instruct-db-storage.md).
AgentStudioShapeAlignmentService.java이력98.8%어제 · #2132서비스분류 지시서가 바뀌면 추출·요약 지시서의 Import 형태를 새로 고른 새 버전을 만든다 (docs/decisions/20261111-studio-import-shape-regeneration.md 1~4항).
AgentStudioSummaryConfigService.java이력91.5%어제 · #2132서비스요약 그룹 지시서 버전 — 관리자 에이전트 스튜디오의 실행 테스트·배포가 쓰는 요약 지시서 한 벌 (docs/decisions/20261111-studio-import-shape-regeneration.md 5항).
AgentStudioTestExtractService.java이력91.6%2일 전 · #2123서비스에이전트 스튜디오 실행 테스트 2단계 — 추출을 실제 문서 AI 플랫폼으로 돌린다(docs/decisions/20261107-studio-test-extract-run.md).
AgentStudioTestReportService.java이력91.4%오늘 · #2184서비스에이전트 스튜디오 실행 테스트 3단계 — AI 보고서를 실제로 만든다(docs/decisions/20261109-studio-test-report-run.md).
AgentStudioTestRunService.java이력93.0%오늘 · #2149서비스에이전트 스튜디오 실행 테스트 — 1단계 분류를 실제 문서 AI 플랫폼으로 돌린다(docs/decisions/20261106-studio-test-classify-run.md).
AiAnalysisJobService.java이력97.0%2일 전 · #2128서비스보고서 요약을 문서 AI 플랫폼에 맡기고 끝까지 이어 가는 서비스 — ANALYZE 단계의 실연동 경로 (2026-09-29, docs/decisions/20260922-ai-classification-async-integration.md 3~6항의 세 번째 단계).
AiClassificationJobService.java이력86.5%2일 전 · #2128서비스문서 분류를 문서 AI 플랫폼에 맡기고 끝까지 이어 가는 서비스 — CLASSIFY 단계의 실연동 경로 (docs/decisions/20260922-ai-classification-async-integration.md).
AiExtractionJobService.java이력92.5%2일 전 · #2128서비스정보추출을 문서 AI 플랫폼에 맡기고 끝까지 이어 가는 서비스 — EXTRACT 단계의 실연동 경로 (2026-09-25 야간 NX02, docs/decisions/20260922-ai-classification-async-integration.md 3~6항).
AiPipelineResultSyncService.java이력90.3%2일 전 · #2113서비스검수 보정을 다음 단계 이어 실행에 반영하는 준비 단계 — 결과 왕복 원장(ai_pipeline_result_syncs)을 한 걸음씩 진행시켜 갱신 Job 을 얻는다 (docs/decisions/20260929-pipeline-correction-roundtrip.md).
AiReportTabsJobService.java이력91.1%서비스파이프라인 v2 의 「AI 보고서 생성」 단계(GENERATE_REPORT_TABS) — 보고서 LLM 탭1→2→3 을 돌려 그 결과를 `AI 보고서 확인` 화면이 읽는 요약 결과로 넣는다(docs/decisions/20261021-investigation-pipeline-v2-compositi…
AiSummaryGroupJobService.java이력88.5%2일 전 · #2128서비스요약을 요약 그룹마다 1회 플랫폼에 맡기고 끝까지 이어 가는 서비스 — 파이프라인 v2 의 곁가지 (docs/decisions/20261021-investigation-pipeline-v2-composition.md, 20261019-studio-summary-tab-doc-groups.md 「…
AnalysisConcurrencyLimitService.java이력97.8%서비스1인 동시 AI 분석 요청 제한 (WBS 29.12.3) — 한도 설정과 착수 게이트.
AnalysisRequestService.java이력97.4%4일 전 · #2007서비스분석 요청(분석 조건)의 저장과 조회 (W09, 2026-08-19 확정 구조).
ApplicationFormSettingsService.java이력96.2%5일 전 · #1970서비스청약서 폼 설정 마스터 (관리자 화면 /admin/application-forms `청약서 폼 설정`).
ChatPromptService.java이력100.0%서비스지시문 판 — 지금 문구 보기와 바꾸기(docs/decisions/20261023-chat-prompt-db-versioning.md).
ClaimHospitalCandidateService.java이력97.8%2일 전 · #2113서비스분석 조건 2번 「청구병원 및 대표 상병」의 병원 후보(결정 20261106-analysis-request-claim-hospitals 2·3항).
ClaimTypeService.java이력100.0%서비스청구유형 마스터 (분석 조건 1번, 관리자 화면 /admin/report-types).
ClassificationQueueService.java이력92.3%5일 전 · #1971서비스조사자별 분류 대기열의 소비 — 담당 조사자의 AI 작업 자리가 나면 대기열 앞에서부터 자리만큼 분류를 시작한다 (결정 20261022-image-confirm-classification-queue, S-012 §5).
ClassificationResultService.java이력92.5%어제 · #2120서비스문서분류 결과의 산출(스텁)·조회·조치 (S-007 §3-2, W06·W07).
DocumentTypeSchemaService.java이력98.4%서비스에이전트 스튜디오 문서 분류·정보 추출 체계 — 관리자 화면 /admin/agent-studio/schema 1단계(CLASSIFY)·2단계 `추출 스키마 설정`의 저장본.
ExtractionResultService.java이력99.5%4일 전 · #2007서비스정보추출 결과의 적재·조회·사용자 수정 (W08, S-012 §2 `추출 완료`).
FinalTransferCompletionService.java이력100.0%서비스최종 전송 완료(FINAL_TRANSFER_COMPLETED)를 보고서에 적용하고 커밋 후 이벤트를 내는 유일한 지점 (2026-09-03 야간 ST02).
HospitalMatchService.java이력100.0%어제 · #2144서비스분석 요청 전 병원 지정 (결정 20260910 병원 마스터 §3·§4·§6).
ImageIntegrationIdempotencyService.java이력66.7%서비스이미지 연동 쓰기 API의 동일 키·동일 본문 재호출만 허용한다.
ImageMasterSyncService.java이력100.0%서비스API-06·API-07 요청을 영속 마스터(classification-core)에 넘기고 계약 응답으로 되돌린다.
ImageSystemOutboundService.java이력95.7%4일 전 · #2048서비스DB에 확정된 현재 스냅샷을 이미지시스템 API-09·10 계약으로 변환한다.
ImageTransferFileCleanupService.java이력82.9%서비스DB에 처리 결과를 남긴 뒤 더 이상 사용할 필요가 없는 처리 저장소의 임시 파일을 정리한다.
ImageTransferIncomingSyncService.java이력89.4%서비스이행 환경의 로컬 SFTP 수신 ZIP을 API-02 성공 통지 시 공용 S3에 복제한다.
ImageTransferReceptionService.java이력96.9%5일 전 · #1981서비스이미지 연동 API-01~05 의 전송 접수와 보고서 상태를 DB에 영속화한다 (S-003 · S-007 §3-2).
ImageTransferTaskQueueService.java이력95.2%서비스보고서번호별 이미지 전송 작업의 등록·임대·완료 상태 전이를 한 트랜잭션 경계로 제공한다.
InvestigationBusinessMetadataService.java이력100.0%서비스API-01 접수 때 HWSS DB에 저장한 보고서·Smart심사 계약 메타데이터를 조회한다.
InvestigationDeliveryChannelService.java이력77.3%서비스보고서 위탁사의 전송 방식 — 사고조사 화면의 전송 버튼과 메일 발송 검사 (결정 20260902-report-delivery-channel-selection 1·7항).
InvestigationDisclosureLinkService.java이력100.0%서비스워크스페이스 `공시실` 버튼의 링크 조회 (결정 20261017-customer-onboarding-status-api 4항, 2026-10-19 야간 NL01).
InvestigationReportQueryService.java이력78.4%5일 전 · #1981서비스조사자 목록 화면(P1-1)과 워크스페이스 화면(P1-2)이 쓰는 사고조사 보고서 조회.
InvestigationSettingsQueryService.java이력100.0%서비스조사자 화면이 그리는 설정 — 그 조사건에 고정한 판이다(docs/decisions/20261028-investigation-settings-snapshot-at-intake.md 4항).
InvestigationSettingsService.java이력93.8%2일 전 · #2130서비스조사건 설정 스냅샷 — 사고조사 Workflow 설정(병원 명칭 매핑 제외)을 건이 인입될 때의 판으로 고정하고, 처리하는 동안 그 판을 돌려준다 (docs/decisions/20261028-investigation-settings-snapshot-at-intake.md).
InvestigationStartService.java이력100.0%5일 전 · #1981서비스조사자 화면의 사용자 착수 두 지점 — `AI 분류 시작`·`정보 추출 시작` (2026-09-18 야간 NB05, S-012 §1-2).
ReanalysisService.java이력99.0%2일 전 · #2113서비스`다시 분석` — 가능 범위 산출과 세 범위의 실행 (S-012 §4·§4-2·§5, 야간 20261002 NR01·NR02).
ReclassificationReservationService.java이력100.0%서비스분류·추출 진행 중 재확정 예약의 소비 — 진행 중 단계가 끝나면 최신 서류 목록으로 분류부터 다시 시작한다 (결정 20260910-confirm-reservation-and-reanalysis-scope 🟢 1항, S-012 §3-1, 요구사항 HSA-IF-002).
ReportDeliveryLogQueryService.java이력100.0%서비스관리자 「보고서 초안 전송 로그」(/admin/report-send-logs) 전사 조회.
ReportDisposalLogService.java이력0.0%서비스설명 주석 없음
ReportDraftAiService.java이력95.4%서비스보고서 초안 구역을 Studio 보고서 생성 에이전트로 채운다 (docs/decisions/20261015-studio-saas-v2-agents-adoption.md D4 A안).
ReportDraftLlmService.java이력89.6%6일 전 · #1958서비스보고서 초안 탭을 LLM 직접 호출로 채운다 (docs/decisions/20261020-report-generation-llm-input-job.md 「결정」 1~7항, 통합 설계 v0.3 「보고서 생성」).
ReportDraftService.java이력95.9%4일 전 · #2029서비스보고서 초안의 생성·조회·수정 (W12 → S-014 §7, 2026-09-29).
ReportMailDispatchLogService.java이력91.0%서비스관리자 메일 발송 로그 조회 (야간 플랜 20261005 NM01, 화면 /admin/mail-account 우측 섹션).
ReportMailService.java이력99.1%4일 전 · #2044서비스보고서 메일 보내기 (W13).
ReportPageEditService.java이력99.3%서비스스캔 문서함 낱장 편집(`삭제 예정`·표시 순서·추출 이후 분류값 변경)의 저장 — `편집 저장` ([20260921] 🟢 0항, S-012 §4-0, 기준선 「스캔 문서함」, 야간 20261006 NP01).
ReportPageImageService.java이력89.1%서비스워크스페이스 문서 뷰어(N05)가 페이지 원본 이미지를 여는 경로(2026-09-03 야간 N04).
ReportReflectionService.java이력95.8%5일 전 · #1970서비스사고조사 챗봇 「AI 보고서 반영」 엔진 (결정 20261021 5~7항, 통합 설계 v0.3 사고조사 4번·템플릿 5번).
ReportSummaryGroupQueryService.java이력92.6%4일 전 · #2052서비스보고서 `요약` 탭의 요약 그룹 구획 조회 (docs/decisions/20261019-studio-summary-tab-doc-groups.md 6항).
ReportTemplateService.java이력95.0%5일 전 · #1970서비스보고서 양식(프롬프트 형식) 설정 (W15, 관리자 화면 /admin/report-templates).
ReportTextFormatService.java이력93.0%4일 전 · #2029서비스보고서 초안 구역 글을 위탁사·탭 양식으로 찍는다 (결정 20261106-report-text-format-by-insurer).
ScanPdfPreparationService.java이력90.4%2일 전 · #2113서비스API-02 정상 접수 스냅샷의 활성 낱장을 문서함 순서대로 사건 단위 여러 쪽 PDF 로 묶어 문서 AI 플랫폼에 미리 올린다.
SmartReviewTransferService.java이력97.0%4일 전 · #2044서비스보고서 스마트심사 전송 (docs/decisions/20261103-smart-review-report-receiver-api.md).
SummaryGroupService.java이력93.8%6일 전 · #1954서비스요약 그룹 마스터 (docs/decisions/20261019-studio-summary-tab-doc-groups.md) — 관리자 에이전트 스튜디오 2단계 `요약 설정`이 읽고 쓰고, 요약 그룹 곁가지(AiSummaryGroupJobService)가 정의를 읽는다.
SummaryResultService.java이력87.1%2일 전 · #2130서비스요약 결과의 적재·조회·수정 (W10 → S-014 섹션 모델, 2026-09-29).
SummarySkeletonService.java이력84.1%서비스요약 섹션 골격 저장소 (S-014 §3, 관리자 에이전트 스튜디오 `3 Instruct` 설정의 백엔드 자리).
ReportTaskLock.java이력100.0%인터페이스보고서 단위 작업 잠금 — ReportTaskSequencer 가 작업 하나를 돌리는 동안 다른 인스턴스가 같은 보고서의 작업을 돌리지 못하게 한다 (결정 20261023-production-k0s-cluster 「우리 쪽 검토 항목」 A — 운영 AP 2대 이중화).
AcceptedSnapshotComparison.java이력100.0%클래스검증을 마친 전송 스냅샷이 현재 정상 페이지와 같은지 비교한다.
AgentConfigPairGuard.java이력100.0%5일 전 · #1994클래스건에 고정한 지시서 짝의 사전 감지 — 분류·추출·요약 그룹을 플랫폼에 보내기 직전에 부른다 (docs/decisions/20261108-studio-config-pair-repin.md 1항).
AgentStudioDocumentTypeSync.java이력100.0%오늘 · #2161클래스스튜디오 배포와 운영 문서종 마스터·분류체계 매핑 사이 — 문서종 키로 바뀐 문서종을 견주고, 대기·적용 때 마스터 포트를 부른다 (docs/decisions/20261112-studio-deploy-master-mapping-sync.md).
AgentStudioInstructValidator.java이력100.0%5일 전 · #1970클래스INSTRUCT 설정의 규칙 — 화면(프론트 instruct-prompt.ts)이 입력하는 대로 보이는 검사를 서버가 저장 전에 한 번 더 본다.
AgentStudioTestClassifyJudgement.java이력100.0%6일 전 · #1915클래스실행 테스트 분류 결과 낱장 판정 (docs/decisions/20261106-studio-test-classify-run.md 4항).
AgentStudioTestClassifyPages.java이력100.0%6일 전 · #1915클래스실행 테스트 분류 결과 → 낱장별 결과(docs/decisions/20261106-studio-test-classify-run.md 2·4항).
AgentStudioTestCorrectionRunner.java이력89.3%3일 전 · #2032클래스실행 테스트 결과 왕복 — 관리자가 고친 값(분류 라벨·추출 값)을 Studio 결과 저장소에 되돌려 놓고 이어 실행할 Job 을 찾는다.
AgentStudioTestExtractFields.java이력100.0%3일 전 · #2032클래스실행 테스트 추출 결과 → 항목별 결과(docs/decisions/20261107-studio-test-extract-run.md 3·9항).
AiCacheBypass.java이력100.0%2일 전 · #2128클래스재실행 요청이 플랫폼 결과 캐시를 건너뛰게 하는 표식.
AiPipelineJobLedger.java이력92.3%클래스문서 AI 작업 원장(ai_pipeline_jobs)을 다루는 단계 공통 부분 (2026-09-25 야간 NX02).
AnalysisInstructionBuilder.java이력98.5%6일 전 · #1941클래스분석 요청(분석 조건)을 요약 에이전트에 보낼 지시문으로 펼친다 — 순수 계산만 둔다.
AnalysisSourceContext.java이력100.0%클래스요약이 분류 Job 을 이어받는 구성(hwss.analysis.source-step=CLASSIFY)에서 쓰는 앞 작업·검수 수정값 (docs/decisions/20261015-studio-saas-v2-agents-adoption.md D3).
ApplicationFormDefaults.java이력70.0%클래스서버에 내장된 청약서 폼 기본 설정 — 관리자가 아직 아무것도 저장하지 않은 환경의 「현재 설정」이자 저장된 버전이 없을 때 관리자·조사자 화면에 제공하는 기본 내용.
ApplicationFormSettingsValidator.java이력98.3%클래스청약서 폼 설정의 항목 간 규칙 — 형식(길이·필수)은 @Valid 가 경계에서 걸렀고, 여기서는 그것으로 표현할 수 없는 것만 본다.
ClaimTypeExposure.java이력100.0%클래스조사자에게 보이는 청구유형 — 분석 조건 1번 선택지와 인입 때 고정하는 선택지가 같은 기준을 쓴다.
DocumentBoxFolderResolver.java이력100.0%5일 전 · #1981클래스스캔 문서함에서 낱장을 어느 폴더 아래 보여 줄지 정한다(결정 20261104-document-box-classified-folder).
DocumentEditReflection.java이력100.0%7일 전 · #1929클래스저장된 문서 편집([20260921] 🟢 0항 — 낱장 이동·삭제, 추출 이후 분류값 변경)이 있는가·마지막 분류 실행에 반영됐는가를 판정한다.
DocumentTypeStructures.java이력99.0%5일 전 · #1971클래스이미지 전송에 쓰는 문서 분류체계(계약 구조)를 보관·조회하고, 그 구조로 보고서 전체 페이지 순서와 분류 표시명을 계산한다 (ImageTransferReceptionService 에서 분리).
HospitalFolderAllocator.java이력100.0%2일 전 · #2113클래스AI 분류 라벨 → 이미지시스템 회신 폴더 배정(결정 20261101-hospital-folder-bundle-overflow).
ImageSnapshotValidator.java이력100.0%5일 전 · #1971클래스이미지 연동 접수 요청(API-01·02·03)의 입력 규칙을 검증한다 — 위탁사 사용 여부, 파일 확장자, 스냅샷 페이지 수·식별자 중복, 신규 페이지 해시, 최종 실패 통지의 재시도 횟수 (ImageTransferReceptionService 에서 분리).
ImageSystemIntegrationClient.java이력90.7%클래스AI Agent에서 이미지 시스템이 제공하는 API-08·09·10을 호출하는 외부 연동 클라이언트다.
ImageSystemRedistributionSynchronizer.java이력100.0%클래스이미지시스템 API-09·10 재배분 응답을 검증하고 전용 최종 상태에 반영한다.
ImageTransferFileStore.java이력88.0%5일 전 · #1971클래스이미지 전송 ZIP 과 압축 해제본이 놓이는 파일 위치를 다룬다 — 수신 루트·처리 루트 경로 계산, S3 수신 객체 확인·내려받기, 처리 파일의 공유 저장소 업로드·정리, 성공·실패 뒤 작업 파일 정리 (ImageTransferReceptionService 에서 분리).
ImageTransferTaskQueueWorker.java이력91.8%클래스영속 이미지 전송 작업을 임대해 공용 작업 풀에서 실행한다.
ImageZipExtractionProcessor.java이력94.8%5일 전 · #1971클래스API-02 뒤의 ZIP 처리 파이프라인 — 압축 해제 작업을 대기열(영속 큐 또는 보고서별 순차 실행기)에 맡기고, ZIP 을 풀어 페이지 파일을 검증·PDF 낱장 분할한 뒤 보고서 행 잠금 트랜잭션 안에서 반영하거나 실패로 종결한다 (ImageTransferReceptionService 에서 분리).
IncrementalClassificationScope.java이력93.6%2일 전 · #2113클래스다시 분석 `증분` 의 대상 — 직전 분류 결과에 없는 낱장(이미지시스템 추가 인입분)을 고른다 (결정 20261111-incremental-reanalysis-execution-unit).
InstructTabByteLimits.java이력95.5%2일 전 · #2130클래스조사건 보고서 탭의 byte 제한 — 그 건이 인입될 때 고정한 INSTRUCT 판의 값이다(docs/decisions/20261102-report-tab-byte-limit-guide.md 5항).
InsuredNameMatcher.java이력100.0%4일 전 · #1998클래스서류에서 뽑은 이름과 피보험자 이름의 대조 (결정 20260910 「기준값 대조」 — 대조 방식 `표기 차이 허용`).
InvestigatorStartLock.java이력100.0%클래스조사자 단위 착수 잠금 — 같은 사람이 두 건을 거의 동시에 착수해 1인 동시 AI 분석 요청 한도를 넘기지 않게 한다(WBS 29.12.3).
KcdCode.java이력100.0%6일 전 · #1941클래스청구병원 대표 상병의 KCD 코드 정규화 — 소수점 첫째 자리까지로 맞춘다(결정 20261106-analysis-request-claim-hospitals 3항).
LegacyStudioLabels.java이력100.0%클래스Studio 분류 결과의 옛 라벨을 우리 문서종 코드로 바꾸는 전환 대응표.
PostgresReportTaskLock.java이력83.0%클래스PostgreSQL 세션 범위 advisory lock(pg_advisory_lock)으로 보고서 단위 작업을 인스턴스 사이에서 직렬화한다.
PreviousTabVariables.java이력100.0%6일 전 · #1958클래스보고서 프롬프트의 앞 탭 결과 변수 (docs/decisions/20261102-report-prompt-previous-tab-variables.md).
ReportDeliveryLogSpecifications.java이력4.0%클래스보고서 초안 전송 로그 조회 조건 → 메일 발송 기록(report_mail_dispatches)에 거는 JPA Criteria 조건.
ReportEvidenceSources.java이력97.6%6일 전 · #1962클래스보고서 탭 출력의 항목별 요약근거({job_id, occurrence_id}) → 요약 항목 출처(낱장) (docs/decisions/20261029-shinhan-summary-evidence-occurrence.md 3항).
ReportMailDispatchRecorder.java이력100.0%클래스발송 기록 적재만 담당한다 — ReportMailService 에서 떼어 낸 이유가 전파 속성이다.
ReportMailDispatchSpecifications.java이력4.8%클래스조회 조건 → JPA Criteria 조건 (야간 플랜 20261005 NM01).
ReportOutputSchema.java이력96.0%6일 전 · #1958클래스보고서 탭 출력 골격 → JSON Schema, 그리고 받은 JSON 의 검증·키 매칭 보정 (docs/decisions/20261020-report-generation-llm-input-job.md 「결정」 4·5·6항, 「실측 2」 2절).
ReportOutputText.java이력100.0%클래스탭 출력 JSON → 초안 구역 글.
ReportPageEditOverlay.java이력98.2%클래스저장된 낱장 편집을 문서함 목록에 겹쳐 본 결과 — 삭제된 낱장을 빼고 저장된 표시 순서를 되살린다 (야간 20261006 NP02, S-012 §4-0, [20260921] 🟢 0항).
ReportPageImageRenderer.java이력96.7%클래스페이지 원본을 브라우저가 그릴 수 있는 본문으로 만든다 (결정 20261001-page-image-tiff-png-conversion).
ReportPageWriter.java이력81.5%5일 전 · #1971클래스전송 이력 페이지(transfer_pages)와 보고서 현재 페이지(report_pages)를 기록·반영한다 — API-01·03 스냅샷 이력 저장, 논리 변경 비교, ZIP·논리 변경 결과의 현재 페이지 반영, PDF 낱장 행 동기화 (ImageTransferReceptionService 에서 분리).
ReportPromptTemplates.java이력88.6%클래스위탁사·탭별 보고서 프롬프트 템플릿을 고르고 조립한다 (docs/decisions/20261020-report-generation-llm-input-job.md 「결정」 7항, 통합 설계 v0.3 「프롬프트 템플릿」 2·3번).
ReportPromptVariables.java이력96.9%6일 전 · #1958클래스보고서 생성 프롬프트의 건별 변수 값 — 분석 요청(사전분석 조건)을 위탁사·탭 프롬프트의 {{변수}} 자리에 들어갈 글로 펼친다.
ReportReceptionState.java이력100.0%5일 전 · #1971클래스이미지 전송 접수가 보고서 상태에 주는 영향을 한곳에서 다룬다 — 보고서 행 조회·잠금, 전송 생명주기 이벤트 반영, 정상 접수 뒤 워크플로우 실행 생성, 분류 시작(동시 작업 한도·대기열), 화면 갱신·예약 소비·접수 이벤트 발행 (ImageTransferReceptionService 에서 분리).
ReportReflectionPrompt.java이력100.0%5일 전 · #1970클래스「AI 보고서 반영」 요청 글·출력 스키마·응답 검증 — 순수 계산만 둔다 (통합 설계 v0.3 사고조사 4번·템플릿 5번).
ReportSummaryGroupSections.java이력100.0%4일 전 · #2031클래스요약 그룹(서류 묶음) 결과를 초안 맨 뒤 「요약」 구역으로 잇는다 — 전 위탁사 공통 (결정 20261106 「한화손사 회신」 2항).
ReportTaskLockConnectionPool.java이력90.9%클래스보고서 작업 잠금(PostgresReportTaskLock) 전용 커넥션 풀 홀더.
ReportTaskSequencer.java이력100.0%클래스보고서별 인메모리 백그라운드 작업 직렬 실행기.
ReportTextFormats.java이력93.5%4일 전 · #2029클래스위탁사·탭별 3단계 글 양식(classpath:report-text-formats/*.json) — 결정 20261106-report-text-format-by-insurer.
ReportTransferPayloadComposer.java이력96.7%클래스예전 전달 JSON 조립 (S-014 §8, 20260819 결정 2026-09-29 확정 1·5번).
ScanPdfFileLookup.java이력96.2%클래스낱장이 문서 AI 플랫폼에 올라간 한 쪽 PDF 의 파일 식별자를 찾는다.
SheetNumbers.java이력100.0%클래스화면에 보이는 낱장 번호 — 문서함의 활성 낱장을 순서대로 1부터 센 값이다.
SmartReviewTransferPayloadComposer.java이력91.4%7일 전 · #1912클래스스마트심사 전달 JSON 조립 — AI 보고서(step2)와 보고서 검수(step3)를 한 문서로 묶는다 (결정 20261020).
SmartReviewTransferRecorder.java이력0.0%클래스전송 기록 적재만 담당한다.
StartBusinessMetadataResolver.java이력100.0%5일 전 · #1971클래스API-01 접수 때 보고서에 붙일 업무 정보(피보험자명·조사자 사번·계약 목록)를 Smart심사에서 읽고 계약 스냅샷을 저장한다 (ImageTransferReceptionService 에서 분리).
StudioInstructTemplateSource.java이력96.4%5일 전 · #1970클래스보고서 프롬프트 템플릿의 출처 — 에이전트 스튜디오 3단계 INSTRUCT 설정(docs/decisions/20261021-studio-instruct-db-storage.md)의 조사건에 고정한 판에서 그 위탁사의 사용 중인 탭을 표시 순서대로 읽는다(docs/decisions/20261023…
SummaryGroupPromptRenderer.java이력50.0%클래스요약 그룹 프롬프트의 자리표시자를 분석 조건 값으로 채운다 (결정 20261104-summary-group-instruct-templates).
SummarySectionDraftBytes.java이력97.3%2일 전 · #2130클래스요약 구역의 byte 를 초안 구역 글 기준으로 센다 — 검수 단계(`AI 보고서 생성 완료`)와 초안 단계(`보고서 항목 선택 완료`)가 같은 숫자·같은 제한을 보이게 한다.
ZipPageExpander.java이력57.8%5일 전 · #1971클래스압축 해제한 ZIP 의 페이지 파일을 검증하고, PDF 를 쪽별 낱장 이미지로 푼다 (ImageTransferReceptionService 에서 분리).

statistics/88GitHub

통계 star schema — 사실 적재, 일별 롤업, 조회, 미매핑 큐, 재적재.

BackfillCommand.java이력100.0%DTO재적재 명령 본문(BackfillRequest)의 정규화된 형태 (ST04).
UnmappedQueueGroup.java이력100.0%DTO미매핑 큐를 (차원, 원문값, 상태)로 묶은 JPQL 투영 (ST05-A).
LifecycleLoadStage.java이력100.0%enum생애주기 사실 적재의 세 지점 (stat_lifecycle_load_failures.stage).
MainDiseaseRule.java이력100.0%enum메인 질병코드(E41) 판정 규칙 한 단계.
MainDiseaseSource.java이력100.0%6일 전 · #1949enum통계 사실 행의 대표 상병을 정한 곳(report_stat_facts.main_disease_source) — 결정 20261106-stat-main-disease-from-claim-hospitals.
StatDailyRollupTable.java이력100.0%6일 전 · #1949enum일별 롤업 테이블 7종(ST03-A, V202609040002) — 테이블명과 차원 키 컬럼.
StatFactLoadFailureStatus.java이력100.0%enum적재 실패 기록(stat_fact_load_failures.status)의 상태.
BusinessStatisticsQuery.java이력91.7%record업무 통계 조회 조건의 정규화된 형태 (ST03-B).
ExtractionQualityStatisticsQuery.java이력100.0%record추출 완료율 조회 조건의 정규화된 형태 (2026-10-12 야간 NE02).
HospitalAddressRegion.java이력100.0%어제 · #2140record병원 주소 앞머리 → 시/도·시/군/구.
LifecycleStatisticsQuery.java이력100.0%record시스템 통계 조회 조건의 정규화된 형태 (2026-09-11 야간 DP06).
LifecycleTotals.java이력100.0%record생애주기 일별 롤업(stat_daily_lifecycle) 합계 열 열 개의 기간 합 — 조회 API(DP06)가 읽는 벡터 (2026-09-11 야간).
ReportTransferTime.java이력100.0%record사실 행의 (보고서번호, 전송 완료 시각) 투영 — 재적재 명령(ST04)이 대상을 고를 때 조합 행까지 읽지 않기 위한 것.
StatDailyExtractionQualityContribution.java이력100.0%record보고서 1건이 추출 완료율 축별 일별 롤업(stat_daily_extraction_quality)에 더하는(또는 빼는) 기여 — 순수 계산 (2026-10-12 야간 NE01, S-007 §3-4 「추출 완료율 축별 일별 롤업」).
StatDailyLifecycleContribution.java이력100.0%5일 전 · #1970record생애주기 사실 행 1건이 생애주기 일별 롤업(stat_daily_lifecycle)에 더하는(또는 빼는) 기여 — 순수 계산 (2026-09-11 야간 DP05, S-007 §3-4 「생애주기 일별 롤업」).
StatDailyMeasureRollupStatements.java이력100.0%record합계 열 증분형 일별 롤업의 SQL 세 벌 — 생애주기 롤업(StatDailyLifecycleRollupService)과 추출 완료율 롤업 (StatDailyExtractionQualityRollupService)이 글자 그대로 같은 모양을 쓰므로 조립을 여기 한 곳에 둔다 (2026-10-12…
ReportLifecycleFactLoadListener.java이력96.1%리스너생애주기 사실 적재의 진입점 — 3지점 (2026-09-11 야간 DP04).
ReportStatFactLoadListener.java이력100.0%리스너전송 완료 후속 — 통계 사실 적재의 진입점 (ST02).
BusinessStatisticsQueryService.java이력92.4%서비스업무 통계 조회 (ST03-B — S-007 §3-4 「조회 API」).
ErrorIncidentQueryService.java이력100.0%서비스오류/장애 현황 조회 (S-007 §3-4 「오류/장애 현황 조회 API」) — 시스템 통계 「오류/장애 현황」(정의 시트 33행).
ExtractionQualityStatisticsQueryService.java이력100.0%서비스추출 완료율 조회 (2026-10-12 야간 NE02 — S-007 §3-4 「추출 완료율 조회 API」).
HospitalAliasService.java이력99.3%3일 전 · #2082서비스병원 다른 이름 등재(관리자 화면 /admin/hospital-aliases `병원 명칭 매핑`) — docs/decisions/20260910-hospital-master-matching.md §6.
HospitalMasterSyncService.java이력100.0%어제 · #2146서비스스마트심사 병원 뷰 → dim_hospitals 적재 (결정 20260910 병원 마스터 「반영 상태」 — 라이브 조회 원칙의 예외, 노션 이슈로 재검토 중).
KcdDiseaseSearchService.java이력100.0%6일 전 · #1941서비스조사자용 상병(KCD) 검색 — 분석 조건 「청구병원 및 대표 상병」의 `직접 검색`(결정 20261106-analysis-request-claim-hospitals 4항).
LifecycleBackfillService.java이력82.4%서비스생애주기 통계 사실 재적재 명령 (결정 20261027).
LifecycleStatisticsQueryService.java이력100.0%서비스시스템 통계 조회 (2026-09-11 야간 DP06 — S-007 §3-4 「생애주기 조회 API」).
ProcessingTimeStatisticsQueryService.java이력100.0%서비스처리시간 통계 조회 (2026-10-19 — S-007 §3-4 「처리시간 통계 조회 API」).
ServiceStatusQueryService.java이력84.7%서비스시스템 통계 #30 서비스 상태 — Prometheus 를 조회할 때 바로 읽는다(롤업 없음, S-007 §3-4 「서비스 상태 조회 API」).
StatDailyExtractionQualityRollupService.java이력100.0%5일 전 · #1970서비스추출 완료율 축별 일별 롤업(stat_daily_extraction_quality, V202610121900)의 증분 갱신 (2026-10-12 야간 NE01 — S-007 §3-4 「추출 완료율 축별 일별 롤업」).
StatDailyInvestigatorUsageRollupService.java이력100.0%5일 전 · #1970서비스조사자별 이용량 일별 롤업(stat_daily_investigator_usage, V202610191500)의 증분 갱신 (2026-10-19 — S-007 §3-4 「조사자별 이용량 일별 롤업」).
StatDailyLifecycleRollupService.java이력100.0%서비스생애주기 일별 롤업(stat_daily_lifecycle, V202609110003)의 증분 갱신 (2026-09-11 야간 DP05 — S-007 §3-4 「생애주기 일별 롤업」).
StatDailyProcessingTimeRollupService.java이력100.0%5일 전 · #1970서비스처리시간 구간 일별 롤업(stat_daily_processing_time, V202610191500)의 증분 갱신 (2026-10-19 — S-007 §3-4 「처리시간 구간 일별 롤업」).
StatDailyRollupService.java이력100.0%서비스일별 롤업 7종(stat_daily_*)의 증분 갱신 (ST03-A — S-007 §3-4 「일별 롤업」).
StatDimensionMasterService.java이력98.0%4일 전 · #2036서비스차원 마스터 3종(dim_hospitals·dim_doctors·dim_diseases)을 StatDimension 하나로 다루는 얇은 층 (ST05-A).
StatFactLoadFailureService.java이력26.7%서비스적재 실패 기록(stat_fact_load_failures) 쓰기 (ST02).
StatLifecycleLoadFailureService.java이력0.0%서비스생애주기 적재 실패 기록(stat_lifecycle_load_failures) 쓰기 (결정 20261027).
StatUnmappedQueueQueryService.java이력100.0%서비스미매핑 큐 목록·차원 마스터 검색 (ST05-A — S-007 §3-4 「미매핑 큐 API」).
StatUnmappedResolveService.java이력96.8%서비스미매핑 큐 처리 (ST05-A — S-007 §3-4 「미매핑 큐 API」).
StatisticsBackfillService.java이력93.6%서비스통계 사실 재적재(backfill) 명령 (ST04 — S-007 §3-4 「재적재 명령」).
UsageStatisticsQueryService.java이력100.0%서비스이용 현황 조회 (2026-10-19 — S-007 §3-4 「이용 현황 조회 API」).
DiseaseDimensionEntity.java이력54.5%엔티티질병 차원 마스터 (dim_diseases) — KCD 코드·표준 병명 (E41).
DoctorDimensionEntity.java이력57.1%엔티티의사 차원 마스터 (dim_doctors) — 키(면허번호, 없으면 병원 키 + 정규화 이름의 대체 키)·표시명·소속 병원 (E43).
HospitalDimensionEntity.java이력88.5%어제 · #2144엔티티병원 차원 마스터 (dim_hospitals) — 키·대표 표기명·지역 (E42).
ReportLifecycleFactEntity.java이력95.8%엔티티보고서 1건의 생애주기 사실(보고서당 1행) — 시스템 통계(9/1 엑셀 5~31행)의 원천 (DP03).
ReportStatFactDetailEntity.java이력87.0%엔티티보고서 1건 안의 병원·의사·질병·문서유형 조합 한 행 (ST01).
ReportStatFactEntity.java이력96.3%5일 전 · #1970엔티티보고서 1건의 통계 사실(보고서당 1행) — 전송 완료 시점 확정값의 스냅샷 (ST01).
StatDimensionAliasEntity.java이력84.4%엔티티별칭 → 차원 키 (stat_dim_aliases).
StatFactLoadFailureEntity.java이력86.7%엔티티통계 사실 적재가 실패한 보고서 한 건 (stat_fact_load_failures, ST02).
StatLifecycleLoadFailureEntity.java이력57.6%엔티티생애주기 사실 적재가 실패한 보고서의 한 지점 (stat_lifecycle_load_failures, 결정 20261027).
StatUnmappedQueueEntity.java이력90.9%엔티티코드로 바꾸지 못한 원문값 한 건 (stat_unmapped_queue).
DepartmentSnapshot.java이력인터페이스사실 행이 갖는 부서 스냅샷(요청·전송 시점의 조사자 부서) — 두 사실 테이블(ReportStatFactEntity· ReportLifecycleFactEntity)이 같은 승계 규칙(ReportStatFactSourceReader#departmentOf(String,)을 타기 위한 최소 계약…
PrometheusQueryClient.java이력71.4%인터페이스Prometheus HTTP API 조회 — 서비스 상태 조회(S-007 §3-4)가 쓰는 두 질의만.
DiseaseDimensionRepository.java이력6일 전 · #1941저장소DiseaseDimensionEntity 저장소 (Spring Data JPA 인터페이스).
DoctorDimensionRepository.java이력저장소DoctorDimensionEntity 저장소 (Spring Data JPA 인터페이스).
ErrorIncidentQueryRepository.java이력17.6%저장소오류/장애 현황의 원천 — 우리 시스템이 남긴 실패 기록 셋을 기간으로 읽는다 (S-007 §3-4 「오류/장애 현황 조회 API」).
HospitalDimensionRepository.java이력어제 · #2144저장소HospitalDimensionEntity 저장소 (Spring Data JPA 인터페이스).
ReportLifecycleFactRepository.java이력저장소보고서 생애주기 사실 저장소 (DP03).
ReportStatFactRepository.java이력6일 전 · #1949저장소보고서 통계 사실(애그리게이트 루트) 저장소.
StatDailyExtractionQualityQueryRepository.java이력100.0%저장소추출 완료율 일별 롤업(stat_daily_extraction_quality)의 축별 기간 조회 (2026-10-12 야간 NE02 — S-007 §3-4 「추출 완료율 조회 API」).
StatDailyInvestigatorUsageQueryRepository.java이력17.6%저장소조사자별 이용량 일별 롤업(stat_daily_investigator_usage)의 기간 조회 (2026-10-19 — S-007 §3-4 「이용 현황 조회 API」).
StatDailyLifecycleQueryRepository.java이력100.0%저장소생애주기 일별 롤업(stat_daily_lifecycle)의 기간 조회 (2026-09-11 야간 DP06 — S-007 §3-4 「생애주기 조회 API」).
StatDailyProcessingTimeQueryRepository.java이력6.7%저장소처리시간 구간 일별 롤업(stat_daily_processing_time)의 기간 조회 (2026-10-19 — S-007 §3-4 「처리시간 통계 조회 API」).
StatDailyRollupQueryRepository.java이력97.0%저장소일별 롤업(stat_daily_*)의 기간 합산 조회 (ST03-B — S-007 §3-4 「조회 API」).
StatDimensionAliasRepository.java이력3일 전 · #2081저장소StatDimensionAliasEntity 저장소 (Spring Data JPA 인터페이스).
StatFactLoadFailureRepository.java이력저장소StatFactLoadFailureEntity 저장소 (Spring Data JPA 인터페이스).
StatLifecycleLoadFailureRepository.java이력저장소StatLifecycleLoadFailureEntity 저장소 (Spring Data JPA 인터페이스).
StatUnmappedQueueRepository.java이력저장소StatUnmappedQueueEntity 저장소 (Spring Data JPA 인터페이스).
ReportLifecycleFactLoader.java이력99.6%적재기보고서 1건의 생애주기 사실 적재 — 3지점 갱신 (2026-09-11 야간 DP04, S-007 §3-4 report_lifecycle_facts, 경계 결정 §4-1 정정본).
ReportStatFactLoader.java이력99.2%6일 전 · #1949적재기보고서 1건의 통계 사실 적재 (ST02 — 9/1 노트 「세 층과 시점」 ①).
RetryingStatFactLoader.java이력100.0%적재기통계 사실 적재의 실행 골격 — 경합 재시도 + 실패 기록 (ST03-A 의 재시도를 ST04 가 떼어 공유).
BackfillTargets.java이력100.0%클래스재적재 대상 집합의 계산 — 순수 (ST04, S-007 §3-4 「재적재 명령」).
ContentionRetry.java이력88.9%클래스통계 적재·재집계의 경합 재시도 골격 (2026-09-11 야간 DP08 — 세 벌로 흩어져 있던 같은 루프를 한 곳으로).
ExtractionFieldMeasure.java이력100.0%클래스추출 지표(#14·#18·#19)의 모수 규칙 — 생애주기 사실과 추출 완료율 롤업이 같은 규칙을 쓴다(결정 20261103).
HospitalMasterSyncScheduler.java이력0.0%어제 · #2146클래스병원 마스터를 하루 한 번 적재한다.
HospitalNameNormalizer.java이력100.0%4일 전 · #2036클래스병원 이름의 표기 흔들림을 걷어낸다 — 띄어쓰기·괄호·구분 기호와 법인 표기가 사람마다 달라 같은 병원이 다른 이름으로 갈리는 것을 막는다.
HttpPrometheusQueryClient.java이력0.0%클래스Prometheus HTTP API(v1) 클라이언트.
MainDiseaseCodeSelector.java이력97.4%클래스보고서 1건의 질병코드 후보들 중 메인 질병코드(E41) 하나를 고른다 — 규칙 순서는 설정(MainDiseaseRule).
ReportStatFactMainDisease.java이력80.0%6일 전 · #1949클래스보고서 1건의 대표 상병 한 건(report_stat_fact_main_diseases) — ReportStatFactEntity 의 값 컬렉션이다.
ReportStatFactSourceReader.java이력100.0%6일 전 · #1949클래스통계 사실 적재(ST02)의 원천 읽기 — 보고서 1건의 확정 스냅샷(추출 항목·요약 표본·활성 낱장·최신 분석 요청)과 부서 디렉터리를 읽어 ReportStatFactLoader 가 조립할 재료로 만든다.
StatDailyRollupAxis.java이력100.0%클래스일별 롤업 테이블들의 공통 축(일자 × 위탁사 × 부서) — 업무 데이터 롤업 7종(StatDailyRollupService)과 생애주기 롤업 (StatDailyLifecycleRollupService)이 같은 WHERE 절과 파라미터를 쓴다 (2026-09-11 야간 DP08).
StatDailyRollupContributions.java이력100.0%5일 전 · #1970클래스사실 행 1건이 일별 롤업 7종에 더하는(또는 빼는) 기여 — 순수 계산 (ST03-A).
StatDailySliceQueryFilters.java이력0.0%클래스처리시간 구간·조사자별 이용량 조회가 함께 쓰는 공통 축 WHERE 절 — 생애주기 조회(StatDailyLifecycleQueryRepository)와 글자 그대로 같은 조건(기간 포함 범위 · 위탁사 · 부서 스냅샷 IN)이다.
StatDailySliceRollupWriter.java이력94.8%클래스사실 행의 열만으로 기여가 정해지는 축 키 롤업의 증분 적용 — 처리시간 구간(StatDailyProcessingTimeRollupService)과 조사자별 이용량(StatDailyInvestigatorUsageRollupService) 두 롤업이 글자 그대로 같은 절차를 쓰므로 한 곳에 둔다…
StatDimensionKeyResolver.java이력93.8%클래스추출 원문값 → 차원 키 변환 (ST02 "코드 변환").
StatDimensionLabelResolver.java이력97.1%6일 전 · #1949클래스통계 차원 키 → 대표 표기 (ST03-B).
StatText.java이력100.0%5일 전 · #1970클래스통계 패키지의 문자열 규칙 세 가지 — 필수 텍스트 검사, 공백 정리, 컬럼 길이 절단.
StatisticsQueryFilters.java이력100.0%5일 전 · #1970클래스관리자 통계 조회 API 세 곳이 함께 쓰는 요청 파라미터 정규화 — 업무(BusinessStatisticsQuery)·생애주기 (LifecycleStatisticsQuery)·추출 완료율(ExtractionQualityStatisticsQuery) 조회 조건이 기간·위탁사·부서를 글자 그대로…
package-info.java이력패키지 주석통계 사실 테이블(star schema) — 업무 데이터 통계(9/1 엑셀 32~39행)의 적재 대상 (ST01, 2026-09-03).

status/5GitHub

S-004 상태 전이표의 단일 구현.

DerivedWorkflowStatus.java이력100.0%recordWorkflowStatusResolver 의 산출물 — 화면 글로벌 상태 하나와 그 상태에서 허용되는 위험 서브 상태 목록.
InvestigationStatusTransition.java이력100.0%2일 전 · #2113클래스S-004 §7 상태 전이표의 단일 구현 지점.
ReanalysisScopeResolver.java이력98.1%2일 전 · #2113클래스`다시 분석` 범위 노출 규칙의 단일 지점 (S-012 §4 · [20260921 단계별 문서 편집·다시 분석 범위] 🟢, 야간 20261002 NR01).
StepFailureMessages.java이력100.0%어제 · #2137클래스워크플로 단계 실패 코드 → 사용자 안내 문구 (docs/decisions/20260929-pipeline-correction-roundtrip.md §8 P3).
WorkflowStatusResolver.java이력59.4%4일 전 · #2007클래스화면 글로벌 상태 11종·위험 서브 상태 6종의 파생 규칙 단일 지점 (2026-09-18 결정 「화면 상태 파생 필드」, S-004 「화면 상태 파생 규칙」 절이 이 클래스를 문서화한다).

storage/2GitHub

업로드 파일 저장 — 로컬 디스크, 설정 시 S3.

AgentStudioTestRunFileStore.java이력100.0%3일 전 · #2058클래스실행 테스트에 올린 서류(변환한 PDF)의 보관소 — 공용 ObjectStore 위의 업무 키만 맡는다 (docs/decisions/20261109-studio-test-file-object-storage.md 1항).
ImageTransferS3Store.java이력66.1%클래스운영 AP 인스턴스가 공동으로 사용하는 이미지 전송 S3 호환 저장소.

summary/12GitHub

ReportTextData.java이력95.6%4일 전 · #2029클래스양식에 넣을 탭 데이터 — 탭 원형(summary_sections.output_json)에 보고서 검수 결과를 반영한다 (결정 20261106-report-text-format-by-insurer).
ReportTextRenderer.java이력98.5%4일 전 · #2031클래스탭 출력 JSON + 위탁사·탭 양식 → 3단계 글 (결정 20261106-report-text-format-by-insurer).
SummaryByteCount.java이력100.0%클래스요약·초안 텍스트의 byte 셈 (S-014 §4) — 위탁사 자료의 「영문+숫자 기준」 값과 비교하는 수.
SummaryComposer.java이력98.3%클래스플랫폼(또는 스텁)이 준 기관 카드를 섹션 골격에 앉힌다 (S-014 §6·§9).
SummaryGroupPlanner.java이력92.5%클래스분류 작업의 검수 구조를 요약 그룹별로 모은다 — 그룹 하나에 요약 호출 하나 (docs/decisions/20261019-studio-summary-tab-doc-groups.md 「추가 2026-10-21」).
SummaryHumanDraftDedup.java이력92.7%클래스같은 조사자 판단 항목(HUMAN — AI 초안)이 탭(섹션) 여럿에 반복돼 오면 마지막 탭 값 하나만 남긴다 (S-014 §9 1항 · 20261007 결정 6항 🟢 2026-10-07).
SummaryItemEvidence.java이력97.9%7일 전 · #1912클래스보고서 탭 출력의 요약근거 — 두 꼴로 온다.
SummaryJson.java이력71.4%클래스요약 테이블의 JSON 텍스트 컬럼(열 이름 배열·청구유형 코드 배열)을 읽고 쓴다.
SummaryOutputConformance.java이력100.0%클래스보고서 탭 응답이 그 탭 출력 골격과 형식이 같은지 본다 (20261007 결정 10항 — 다르면 다시 부른다).
SummaryOutputProjector.java이력96.8%7일 전 · #1912클래스보고서 에이전트의 Instruct 출력 JSON(탭 원형)을 요약 섹션 → 카드 → 항목(줄)에 앉힌다 (S-014 §9-1, 20261007 결정 1·3·5항).
SummaryOutputSchemaBuilder.java이력97.1%5일 전 · #1969클래스골격 → Studio 요약 지시서의 출력 골격(JSON Schema)과 작성 지침 글 (S-014 §9).
SummarySkeletonResolver.java이력100.0%클래스보고서 한 건의 요약에 쓸 섹션 골격과 청구유형 스냅샷을 정한다 (S-014 §3).

web/52GitHub

REST 컨트롤러 — HTTP 요청을 서비스로 넘기고 ApiResponse 로 감싼다.

AgentStudioConfigVersionController.java이력화면 미연결Swagger0.0%어제 · #2132API관리자 에이전트 스튜디오 「config 버전 선택」 목록 API — 1단계 분류·2단계 추출 스키마의 버전은 그 단계 Studio 에이전트의 지시서(Config)다(docs/decisions/20261029-studio-config-version-list-from-studio.md).
AgentStudioDeploymentController.java이력화면 /admin/agent-studioSwagger0.0%오늘 · #2161API에이전트 스튜디오 서버 배포 API(docs/decisions/20261111-studio-server-deployment-management.md).
AgentStudioInstructController.java이력화면 /admin/agent-studioSwagger0.0%API관리자 에이전트 스튜디오 3단계 INSTRUCT(AI 보고서) 설정 API (화면 /admin/agent-studio/schema 3단계, docs/decisions/20261021-studio-instruct-db-storage.md).
AgentStudioTestRunController.java이력화면 미연결Swagger17.6%오늘 · #2149API관리자 에이전트 스튜디오 실행 테스트 API — 1단계 분류·2단계 추출을 실제 문서 AI 플랫폼으로 돌린다 (docs/decisions/20261106-studio-test-classify-run.md, 20261107-studio-test-extract-run.md).
AnalysisConcurrencyLimitController.java이력화면 /adminSwagger0.0%API관리자 통계 대시보드의 「동시 요청 제한」 — 1인 동시 AI 분석 요청 한도 조회·변경 (WBS 29.12.3).
AnalysisRequestController.java이력화면 미연결Swagger0.0%6일 전 · #1941API워크스페이스 `추출완료` 화면의 분석 요청(분석 조건) API (S-005 §3, 2026-08-19 확정 구조).
ApplicationFormController.java이력화면 /admin/application-formsSwagger87.5%API관리자 청약서 폼 설정 API (화면 /admin/application-forms `청약서 폼 설정`).
ApplicationFormQueryController.java이력화면 미연결Swagger0.0%API조사자 화면의 청약서 폼 설정 조회 (워크스페이스 `분석 조건 입력` 모달의 과거력 확인 › 청약서 유형·질문).
BusinessStatisticsController.java이력화면 /adminSwagger0.0%API관리자 업무 통계 조회 API (ST03-B — S-007 §3-4 「조회 API」).
ChatPromptController.java이력화면 미연결Swagger0.0%API챗봇·AI 보고서 반영 지시문 — 지금 문구 보기와 바꾸기(docs/decisions/20261023-chat-prompt-db-versioning.md 4항).
ClaimHospitalCandidateController.java이력화면 미연결Swagger0.0%6일 전 · #1941API분석 조건 2번 「청구병원 및 대표 상병」의 병원 후보 API (결정 20261106-analysis-request-claim-hospitals 2·3항).
ClaimTypeController.java이력화면 /admin/report-typesSwagger92.9%API관리자 청구유형 설정 API (화면 /admin/report-types `보고서 유형 설정`).
ClassificationResultController.java이력화면 미연결Swagger0.0%API워크스페이스 문서분류 화면(P1-3)의 분류 결과 조회 API.
DocumentTypeSchemaController.java이력화면 미연결Swagger0.0%API관리자 에이전트 스튜디오 「문서 분류·정보 추출 체계」 API — 화면 /admin/agent-studio/schema 1단계(CLASSIFY)·2단계 `추출 스키마 설정`의 저장본.
ErrorIncidentStatisticsController.java이력화면 /adminSwagger0.0%API관리자 시스템 통계 — 오류/장애 현황 조회 API (S-007 §3-4 「오류/장애 현황 조회 API」).
ExtractionQualityStatisticsController.java이력화면 /adminSwagger0.0%API관리자 추출 완료율 조회 API (2026-10-12 야간 NE02 — S-007 §3-4 「추출 완료율 조회 API」).
ExtractionResultController.java이력화면 미연결Swagger0.0%API워크스페이스 `추출완료` 화면(S-005 §3)의 정보추출 결과 조회·수정 API.
HospitalAliasController.java이력화면 /admin/hospital-aliasesSwagger0.0%3일 전 · #2082API관리자 병원 명칭 매핑 API (화면 /admin/hospital-aliases `병원 명칭 매핑`, docs/decisions/20260910-hospital-master-matching.md §6).
HospitalMatchController.java이력화면 미연결Swagger100.0%3일 전 · #2082API분석 요청 전 병원 지정 API (결정 20260910 병원 마스터 §4).
ImageIntegrationController.java이력화면 미연결Swagger0.0%API이미지시스템 → HWSS 연동 수신 API-01·02·03·05·06·07 (전송 시작·완료·논리 변경·확정·마스터 동기화).
InvestigationDeliveryChannelController.java이력화면 미연결Swagger0.0%API사고조사 화면 보고서 전송 버튼의 전송 방식 조회 — 사용자 경로 (결정 20260902-report-delivery-channel-selection 7항).
InvestigationDisclosureLinkController.java이력화면 미연결Swagger0.0%API워크스페이스 `공시실` 버튼의 링크 조회 — 사용자 경로 (결정 20261017-customer-onboarding-status-api 4항).
InvestigationKnowledgeDefaultsController.java이력화면 미연결Swagger0.0%API사고조사 건 위탁사의 참조 기본값 — 사전분석 조건 `지식컬렉션 선택` 의 첫 선택 (docs/decisions/20261030-reference-defaults-to-analysis-and-chat.md 2·3항).
InvestigationReportController.java이력화면 /user/investigationsSwagger0.0%API조사자 목록 화면(P1-1)과 워크스페이스 화면(P1-2)의 사고조사 보고서 조회 API.
InvestigationReportEventController.java이력화면 미연결Swagger0.0%API설명 주석 없음
InvestigationSettingsController.java이력화면 미연결Swagger0.0%API조사건에 고정한 사고조사 Workflow 설정 조회 — 워크스페이스 `분석 조건 입력` 이 그리는 청구유형 선택지·청약서 질문 (docs/decisions/20261028-investigation-settings-snapshot-at-intake.md 4항).
InvestigationStartController.java이력화면 미연결Swagger0.0%API워크스페이스의 사용자 착수 API — `AI 분류 시작`(서류 대기)·`정보 추출 시작`(분류 검수) (2026-09-18 야간 NB05).
KcdDiseaseController.java이력화면 미연결Swagger0.0%6일 전 · #1941API조사자용 상병(KCD) 검색 API — 분석 조건 「청구병원 및 대표 상병」의 `직접 검색`(결정 20261106-analysis-request-claim-hospitals 4항).
LifecycleBackfillController.java이력화면 미연결Swagger0.0%API관리자 생애주기 통계 사실 재적재 명령 API (결정 20261027).
LifecycleStatisticsController.java이력화면 /admin/dashboard/lifecycleSwagger0.0%API관리자 시스템 통계 조회 API (2026-09-11 야간 DP06 — S-007 §3-4 「생애주기 조회 API」).
ProcessingTimeStatisticsController.java이력화면 /adminSwagger0.0%API관리자 시스템 통계 — 처리시간 통계 조회 API (2026-10-19, S-007 §3-4 「처리시간 통계 조회 API」).
ReanalysisController.java이력화면 미연결Swagger0.0%5일 전 · #1981API워크스페이스의 `다시 분석` API — 가능 범위 조회와 실행 (S-012 §4, 야간 20261002 NR01·NR02).
ReportDeliveryLogController.java이력화면 /admin/report-send-logsSwagger0.0%API관리자 보고서 초안 전송 로그 조회 API (화면 /admin/report-send-logs).
ReportDisposalLogController.java이력화면 /admin/report-disposal-logsSwagger0.0%API설명 주석 없음
ReportDraftController.java이력화면 미연결Swagger0.0%7일 전 · #1921API보고서 초안 API (W12 → S-014 §7, 2026-09-29).
ReportMailController.java이력화면 미연결Swagger0.0%API보고서 초안 화면의 `메일 보내기` API (W13, 8/19 확정 B안).
ReportMailDispatchLogController.java이력화면 /admin/mail-accountSwagger70.0%API관리자 메일 발송 로그 조회 API (야간 플랜 20261005 NM01, 화면 /admin/mail-account 우측 섹션).
ReportPageEditController.java이력화면 미연결Swagger0.0%API스캔 문서함 낱장 편집 저장 API — `편집 저장` ([20260921] 🟢 0항, 야간 20261006 NP01).
ReportPageImageController.java이력화면 미연결Swagger0.0%API워크스페이스 문서 뷰어(N05)가 페이지 원본 이미지를 여는 API (2026-09-03 야간 N04).
ReportSummaryGroupController.java이력화면 미연결Swagger0.0%API보고서 `요약` 탭 — 요약 그룹 구획 조회(docs/decisions/20261019-studio-summary-tab-doc-groups.md 6항).
ReportTemplateController.java이력화면 미연결Swagger87.5%API관리자 보고서 양식 설정 API (W15, 화면 /admin/report-templates).
ServiceStatusStatisticsController.java이력화면 /adminSwagger0.0%API관리자 시스템 통계 — 서비스 상태 조회 API (S-007 §3-4 「서비스 상태 조회 API」).
SmartReviewTransferController.java이력화면 미연결Swagger0.0%API보고서 초안 화면의 `스마트심사 전송` API (결정 20261103-smart-review-report-receiver-api).
StatUnmappedQueueController.java이력화면 /admin/dashboard/unmappedSwagger73.3%API관리자 미매핑 큐·차원 마스터 API (ST05-A — S-007 §3-4 「미매핑 큐 API」).
StatisticsBackfillController.java이력화면 미연결Swagger100.0%API관리자 통계 사실 재적재(backfill) 명령 API (ST04 — S-007 §3-4 「재적재 명령」).
SummaryGroupController.java이력화면 /admin/agent-studioSwagger0.0%API관리자 요약 그룹 API — 에이전트 스튜디오 2단계 `요약 설정`의 백엔드 자리(docs/decisions/20261019-studio-summary-tab-doc-groups.md, 20261020-studio-run-result-field-types.md 5항).
SummaryResultController.java이력화면 미연결Swagger0.0%3일 전 · #2055API워크스페이스 요약 화면의 조회·수정 API (W10).
SummarySkeletonController.java이력화면 미연결Swagger70.0%API관리자 요약 섹션 골격 API (S-014 §3 — 에이전트 스튜디오 `3 Instruct` 설정의 백엔드 자리).
UsageStatisticsController.java이력화면 /adminSwagger0.0%API관리자 시스템 통계 — 이용 현황 조회 API (2026-10-19, S-007 §3-4 「이용 현황 조회 API」).
ReportDeliveryLogCsvColumns.java이력100.0%클래스보고서 초안 전송 로그 CSV 열 — ReportDeliveryLogView 의 필드와 순서·범위가 1:1 이다(목록 API 가 내리는 값 그대로, 그 이상은 싣지 않는다).
ReportDisposalLogCsvColumns.java이력100.0%클래스보고서 파기 로그 CSV 열 — 인입·파기일자는 화면과 같이 날짜만 적는다(결정 20260917 「구현 시 주의」 2항).
ReportMailDispatchLogCsvColumns.java이력100.0%클래스메일 발송 로그 CSV 열 — ReportMailDispatchLogView 의 필드와 순서·범위가 1:1 이다(목록 API 가 내리는 값 그대로 — 수신 주소·담당자 이름도 목록과 같은 범위이고, 그 이상은 싣지 않는다).

resources/db/migration/131GitHub

Flyway 마이그레이션 SQL — 파일명 V<YYYYMMDDhhmm>__설명. 앱 기동 시 모든 모듈의 것이 버전 순으로 합쳐 실행된다.

V202607220001__create_common_code.sql이력마이그레이션code-core 모듈이 필요로 하는 테이블.
V202607230001__create_investigation.sql이력마이그레이션설명 주석 없음
V202608190002__create_investigation_report.sql이력마이그레이션S-007 §3-1/§3-2 사고조사 보고서·전송·페이지·분류 결과.
V202608190004__add_report_confirm_requested_at.sql이력마이그레이션P0-3.
V202608190005__seed_investigation_workflow_definition.sql이력마이그레이션P0-3.
V202608200001__extend_image_integration.sql이력마이그레이션이미지 시스템 쓰기 API의 X-Idempotency-Key와 요청 본문 해시를 보관한다.
V202608220002__extend_investigation_workflow_steps.sql이력마이그레이션W05(주말 플랜 20260822).
V202608220003__create_extraction_result.sql이력마이그레이션W08(주말 플랜 20260822).
V202608220004__create_analysis_request.sql이력마이그레이션W09(주말 플랜 20260822).
V202608220005__create_summary_result.sql이력마이그레이션W10(주말 플랜 20260822).
V202608220006__add_summary_confirmation.sql이력마이그레이션W11(주말 플랜 20260822).
V202608220007__create_report_draft.sql이력마이그레이션W12(주말 플랜 20260822).
V202608220008__create_report_mail_dispatch.sql이력마이그레이션W13(주말 플랜 20260822).
V202608220009__create_report_template.sql이력마이그레이션W15(주말 플랜 20260822).
V202608230001__create_classification_correction.sql이력마이그레이션분류 보정 원장 (8/21 협의 §7 "중간 수정 결과 반영" 대응).
V202609010001__add_image_page_mfileid.sql이력마이그레이션API-01에서 수신한 이미지 시스템 아카이브 파일 ID를 전송 이력과 현재 페이지에 보관한다.
V202609030001__add_classification_result_provenance.sql이력마이그레이션분류 결과의 근원 표시 (야간 플랜 20260903 N02, 공통 규칙 "스텁임을 코드에 명시한다").
V202609030002__classify_step_port_backed_handler.sql이력마이그레이션CLASSIFY 단계에 스텁 분류 핸들러를 붙인다 (야간 플랜 20260903 N02).
V202609030003__add_extraction_summary_provenance.sql이력마이그레이션추출·요약 결과의 근원 표시 (야간 플랜 20260903 N03, 공통 규칙 "스텁임을 코드에 명시한다").
V202609030004__extract_analyze_step_port_backed_handler.sql이력마이그레이션EXTRACT·ANALYZE 단계에 스텁 핸들러를 붙인다 (야간 플랜 20260903 N03).
V202609030005__create_report_stat_facts.sql이력마이그레이션ST01(야간 플랜 20260903).
V202609040001__create_stat_fact_load_failures.sql이력마이그레이션ST02(야간 플랜 20260903).
V202609040002__create_stat_daily_rollups.sql이력마이그레이션ST03-A(야간 플랜 20260904).
V202609040003__add_investigation_reports_created_at_index.sql이력마이그레이션N08(야간 플랜 20260904).
V202609110001__create_extraction_field_corrections.sql이력마이그레이션DP02(야간 플랜 20260911).
V202609110002__create_report_lifecycle_facts.sql이력마이그레이션DP03(야간 플랜 20260911).
V202609110003__create_stat_daily_lifecycle.sql이력마이그레이션DP05(야간 플랜 20260911).
V202609160002__comment_code_schema.sql이력마이그레이션공통코드 테이블·컬럼 설명 (근거: docs/decisions/20260916-db-schema-doc-generation.md).
V202609160008__comment_investigation_intake_schema.sql이력마이그레이션조사 건·보고서 접수·이미지 연동 테이블의 설명을 DB 메타데이터(COMMENT)로 옮긴다.
V202609160009__comment_investigation_analysis_schema.sql이력마이그레이션문서 분석(분류·추출·요약) 테이블의 설명을 DB 메타데이터(COMMENT)로 옮긴다.
V202609160010__comment_investigation_output_schema.sql이력마이그레이션분석 요청·보고서 산출 테이블의 설명을 DB 메타데이터(COMMENT)로 옮긴다.
V202609160011__comment_investigation_statistics_schema.sql이력마이그레이션업무 데이터 통계 star schema 의 설명을 DB 메타데이터(COMMENT)로 옮긴다.
V202609160012__comment_statistics_rollup_columns.sql이력마이그레이션일별 롤업의 공통 컬럼과 앞선 파일에서 빠진 컬럼 설명.
V202609160015__comment_code_description.sql이력마이그레이션공통코드 그룹 설명 컬럼 (V202609160002 에서 빠진 것).
V202609160018__fix_investigations_comment.sql이력마이그레이션investigations 설명 정정.
V202609170001__create_report_business_contracts.sql이력마이그레이션API-01 접수 시 Smart심사 VW_AI_INVEINFO에서 조회한 계약 메타데이터 스냅샷.
V202609171700__add_investigation_report_claim_type.sql이력마이그레이션청구유형은 이미지 시스템 접수값이 아니라 사고조사 상세 화면에서 추후 입력한다.
V202609181900__add_has_low_confidence_extraction.sql이력마이그레이션화면 위험 서브 상태 `LOW_CONFIDENCE_EXTRACTION_DETECTED` 의 원천 플래그 (2026-09-18 결정 「화면 상태 파생 필드」, 야간 NB01).
V202609182000__add_summary_item_original_content_and_draft_discarded.sql이력마이그레이션보고서 검수 편집 게이트 정렬 (2026-09-18 야간 NB02, 기준선 「보고서 검수」·[20260909 초안 인라인 편집 결정]).
V202609221100__create_ai_pipeline_jobs.sql이력마이그레이션문서 AI 플랫폼 작업 원장 (2026-09-22 분류 실연동 — docs/decisions/20260922-ai-classification-async-integration.md).
V202609281300__add_extraction_field_location.sql이력마이그레이션추출 항목의 원문 위치 (2026-09-28 Studio 추출 실측 — 항목 메타의 coordinates 네 꼭짓점을 비율 사각형으로 접어 저장).
V202609281540__seed_statistics_dimensions.sql이력마이그레이션통계 차원 초기 데이터 — 병원 마스터 13건·병원 별칭 4건·KCD 25건.
V202609281550__seed_report_templates.sql이력마이그레이션보고서 양식 초기 데이터 (W15 `report_templates`) — 두 묶음이다.
V202609291000__add_extraction_result_external_job_id.sql이력마이그레이션추출 결과를 만든 문서 AI 플랫폼 작업 식별자 (2026-09-29 요약(ANALYZE) 이어 실행).
V202609291100__add_ai_pipeline_job_idempotency_key.sql이력마이그레이션문서 AI 플랫폼 작업 요청의 중복 방지 키를 원장에 저장한다 (2026-09-28 요약 실측 회귀).
V202609291500__create_ai_pipeline_result_syncs.sql이력마이그레이션검수 보정의 이어 실행 반영 — 결과 왕복 원장 (2026-09-29, docs/decisions/20260929-pipeline-correction-roundtrip.md §4).
V202609291600__extend_extraction_corrections_for_roundtrip.sql이력마이그레이션추출 값 보정의 이어 실행 반영(결과 왕복 P2, docs/decisions/20260929-pipeline-correction-roundtrip.md §4).
V202609291630__add_summary_sections_and_draft_sections.sql이력마이그레이션요약 계약 재정의 ② (2026-09-29, S-014 요약·해석 섹션 모델 — docs/specs/investigation-agent-summary-section-model-spec.md).
V202609291700__create_summary_skeletons.sql이력마이그레이션요약 섹션 골격 저장소 (2026-09-29, S-014 §3, work-plan 「요약·해석 화면 본격 구현」 ③).
V202609301100__create_claim_types.sql이력마이그레이션청구유형 마스터 (2026-09-30 야간 NT01, docs/decisions/20260918-claim-type-master.md 「후속 › 백엔드 계약」).
V202610011500__backfill_processing_failed_for_stalled_reports.sql이력마이그레이션처리 단계 실패가 보고서에 반영되지 않던 기간의 데이터 보정 (S-004 §8-6).
V202610021700__add_report_page_pdf_sheet_columns.sql이력마이그레이션여러 쪽 PDF 를 접수 때 쪽별 낱장 이미지로 푼다 (결정 20261002-pdf-page-split-at-reception).
V202610051100__add_elapsed_ms_to_report_mail_dispatches.sql이력마이그레이션야간 플랜 20261005 NM01.
V202610061900__create_report_page_edits.sql이력마이그레이션스캔 문서함 낱장 편집(삭제·표시 순서)의 저장 오버레이 (2026-10-06, 야간 20261006 NP01).
V202610071200__add_summary_sections_output_json.sql이력마이그레이션요약 섹션의 출력 JSON 원형 (2026-10-07, S-014 §9-1, 20261007 결정 1·3항).
V202610071540__create_application_form_versions.sql이력마이그레이션청약서 폼 설정 버전 (2026-10-06, 관리자 `청약서 폼 설정` 백엔드 — docs/decisions/20261006-application-form-settings-versioned-master.md).
V202610071541__add_application_form_version_to_analysis_requests.sql이력마이그레이션분석 요청이 참조한 청약서 폼 설정 버전 (2026-10-06).
V202610071542__update_application_form_version_change_note_comment.sql이력마이그레이션`원본으로 초기화` 동작을 제거하고 화면 로컬 초안의 `변경 되돌리기`로 바꾼 정책을 DB 설명에 반영한다.
V202610121900__create_stat_daily_extraction_quality.sql이력마이그레이션NE01(야간 플랜 20261012).
V202610141500__create_ai_pipeline_documents.sql이력마이그레이션이미지 전송 검증 직후 활성 낱장을 한 쪽 PDF로 변환해 문서 AI 플랫폼에 올린 원장.
V202610141510__create_ai_pipeline_job_inputs.sql이력마이그레이션READY 뒤 로컬 원본을 지워도 같은 낱장의 Studio 파일을 재사용할 수 있는 내용 식별자.
V202610151400__add_classification_result_page_document_group.sql이력마이그레이션분류 결과 낱장의 문서 묶음 번호 (20261015 신규 에이전트 결정 D1).
V202610151530__create_analysis_concurrency_settings.sql이력마이그레이션1인 동시 AI 분석 요청 한도 — 관리자 화면에서 조정하는 운영 설정 (WBS 29.12.3) 근거: docs/decisions/20260827-concurrent-session-and-request-limit.md 🟢, docs/notes/20260901-concurrent-request-l…
V202610151800__create_report_draft_ai_tabs.sql이력마이그레이션보고서 초안 구역별 AI 탭 작업 원장 (docs/decisions/20261015-studio-saas-v2-agents-adoption.md D4).
V202610161610__add_report_reclassification_reservation.sql이력마이그레이션분류·추출 진행 중 재확정 예약 (결정 20260910-confirm-reservation-and-reanalysis-scope 🟢 1항, S-012 §3-1, HSA-IF-002).
V202610181300__drop_sample_domain_tables.sql이력마이그레이션초기 샘플 도메인(공통 코드 code-core·조사 건 CRUD)을 코드에서 지우면서 그 테이블도 지운다.
V202610191500__create_stat_daily_processing_time_and_investigator_usage.sql이력마이그레이션시스템 통계 #16 건당 처리시간 분포 · #17 문서 인입량 대비 처리시간 달성률 · #23 시간 목표률 · #26 AI 분석 이용자 · #27 보고서 생성 건수의 화면 조회용 일별 롤업 두 개.
V202610191700__add_claim_type_snapshot_and_policy_no_to_analysis_requests.sql이력마이그레이션분석 요청의 청구유형 스냅샷·대표 청구유형·계약별 증권번호 (2026-10-19, 결정 20261019-analysis-request-claim-type-policy-no).
V202610191701__move_hanwha_life_summary_skeleton_scope_to_hli.sql이력마이그레이션한화생명 요약 골격의 적용 범위를 위탁사 마스터 코드로 옮긴다.
V202610192000__migrate_legacy_report_form_codes_to_claim_types.sql이력마이그레이션옛 보고서 양식 11종 코드 → 청구유형 이관 (2026-10-19, 결정 20261019-legacy-report-form-to-claim-type-migration).
V202610201400__add_report_classification_correction_carry_over.sql이력마이그레이션문서 편집을 반영하는 `분류부터` 의 사용자 분류 보정 유지 (결정 20260921-page-edit-reanalysis-policy 🟢 1항, S-012 §4).
V202610211526__create_report_draft_llm_tabs.sql이력마이그레이션보고서 초안 탭별 LLM 직접 호출 원장 (docs/decisions/20261020-report-generation-llm-input-job.md 「결정」 1·2·6·7항).
V202610212209__create_agent_studio_instruct_versions.sql이력마이그레이션에이전트 스튜디오 3단계 INSTRUCT(AI 보고서) 설정 (2026-10-21, docs/decisions/20261021-studio-instruct-db-storage.md).
V202610212210__comment_agent_studio_instruct_fk_columns.sql이력마이그레이션에이전트 스튜디오 INSTRUCT 표(V202610212209)의 FK 컬럼 설명 — 모든 컬럼에 설명을 단다(docs/rules/db.md 「테이블·컬럼 설명」).
V202610220936__create_summary_groups.sql이력마이그레이션요약 그룹 마스터 (docs/decisions/20261019-studio-summary-tab-doc-groups.md — 요약 탭 설정 단위).
V202610220937__create_summary_group_runs.sql이력마이그레이션요약 그룹 호출 원장 — 요약 그룹마다 1회 부르는 요약(Agent D)의 묶음·그룹 단위 시도와 결과 (docs/decisions/20261019-studio-summary-tab-doc-groups.md 「추가 2026-10-21」, 20261021-investigation-pipeline-…
V202610220938__seed_investigation_workflow_v2.sql이력마이그레이션사고조사 파이프라인 INVESTIGATION_MAIN v2 — 업스테이지 통합 설계 v0.3 흐름 (docs/decisions/20261021-investigation-pipeline-v2-composition.md 🟢, 20261002-pipeline-version-coexistence.md …
V202610220939__add_report_draft_llm_tabs_pipeline_job.sql이력마이그레이션보고서 LLM 탭 원장을 파이프라인 v2 「AI 보고서 생성」 단계에도 쓴다 (docs/decisions/20261021-investigation-pipeline-v2-composition.md — 단계 대응표의 GENERATE_REPORT_TABS).
V202610221100__comment_ai_pipeline_documents_case_bundle.sql이력마이그레이션사건 묶음 PDF(결정 20261021-case-documents-job-100-files) — 낱장별 한 쪽 PDF 전제였던 설명을 고친다.
V202610221430__disable_generate_draft_step.sql이력마이그레이션사고조사 파이프라인(INVESTIGATION_MAIN v1·v2)의 빈 단계 GENERATE_DRAFT 를 끈다 (WBS 29.1.3).
V202610221526__create_image_system_outbound_requests.sql이력마이그레이션설명 주석 없음
V202610221600__create_report_reflections.sql이력마이그레이션사고조사 챗봇 「AI 보고서 반영」 원장 (docs/decisions/20261021-investigation-chat-references-and-reflection.md 5~7항).
V202610221700__add_report_classification_queue.sql이력마이그레이션이미지 시스템 확정의 조사자별 분류 대기열 (결정 20261022-image-confirm-classification-queue 🟢, S-012 §5).
V202610231600__report_llm_tabs_studio_instruct_comments.sql이력마이그레이션보고서 LLM 탭 템플릿 출처가 리포 파일(report-prompts/)에서 에이전트 스튜디오 INSTRUCT 설정으로 바뀌었다 (docs/decisions/20261023-report-llm-studio-instruct-source.md).
V202610231900__extend_stat_dim_aliases_registry.sql이력마이그레이션병원 명칭 매핑(관리자 화면 /admin/hospital-aliases) — 별칭 표에 등재 정보를 더한다.
V202610232000__create_chat_prompt_versions.sql이력마이그레이션챗봇·AI 보고서 반영 지시문의 판 (2026-10-23, docs/decisions/20261023-chat-prompt-db-versioning.md).
V202610232100__add_report_reflections_instruction_version.sql이력마이그레이션AI 보고서 반영에 쓴 지시문 판을 반영 원장에 남긴다 (2026-10-23, docs/decisions/20261023-chat-prompt-db-versioning.md 7항).
V202610261500__create_agent_studio_document_type_schemas.sql이력마이그레이션에이전트 스튜디오 1단계 CLASSIFY(문서 분류)·2단계 추출 스키마 저장본 (2026-10-26).
V202610271500__create_stat_lifecycle_load_failures.sql이력마이그레이션생애주기 통계 사실(report_lifecycle_facts) 적재 실패 기록 — 결정 docs/decisions/20261027-lifecycle-fact-load-failure-backfill.md.
V202610271700__add_lifecycle_review_counts.sql이력마이그레이션시스템 통계 #15 검토율 — 결정 docs/decisions/20261027-statistics-review-rate.md.
V202610271801__create_stat_daily_claim_type_diseases.sql이력마이그레이션업무 통계 #34 위탁사 → 청구유형 → 진단명 드릴다운의 마지막 단계 — 결정 docs/decisions/20261027-business-stats-client-claim-type.md.
V202610281000__add_image_transfer_extraction_claimed_at.sql이력마이그레이션압축 해제 재개 선점 시각 — 결정 docs/decisions/20261023-production-k0s-cluster.md A 「압축 해제 재기동 재개」.
V202610281100__create_investigation_settings_snapshots.sql이력마이그레이션조사건 설정 스냅샷 (2026-10-28, docs/decisions/20261028-investigation-settings-snapshot-at-intake.md).
V202610281300__create_summary_group_versions.sql이력마이그레이션요약 그룹 판 (2026-10-28, docs/decisions/20261028-investigation-settings-snapshot-at-intake.md).
V202610281701__create_image_transfer_background_jobs.sql이력마이그레이션설명 주석 없음
V202610282000__add_claim_type_enabled.sql이력마이그레이션청구유형 활성 여부 (2026-10-28 야간 RT01, docs/decisions/20261028-report-type-enable-and-application-form-confirm.md 7·8항).
V202610291200__create_report_disposal_logs.sql이력마이그레이션보고서 원본이 파기된 뒤에도 보존하는 파기 증적.
V202610301540__create_analysis_request_files.sql이력마이그레이션분석 요청이 고른 컬렉션 안에서 좁혀 볼 문서(결정 20261030-reference-defaults-to-analysis-and-chat 1항).
V202611021600__make_instruct_tab_byte_limit_nullable.sql이력마이그레이션보고서 탭 byte 제한에 `제한 없음`을 둔다 — NULL 이 제한 없음이다(docs/decisions/20261102-report-tab-byte-limit-guide.md).
V202611021900__update_report_llm_tab_output_comment.sql이력마이그레이션뒤 탭은 {{이전결과}} 대신 프롬프트에 쓴 앞 탭의 {{탭 키}} 로 이 값을 받는다 (docs/decisions/20261102-report-prompt-previous-tab-variables.md)
V202611031600__add_statistics_definition_details.sql이력마이그레이션통계 정의 세부 기준 — 결정 docs/decisions/20261103-statistics-definition-details.md.
V202611031800__add_lifecycle_confirmed_pages.sql이력마이그레이션문서 자동 분류율 구성비(#13) — 결정 docs/decisions/20261103-classification-rate-breakdown.md.
V202611031821__create_smart_review_transfers.sql이력마이그레이션보고서 스마트심사 전송 기록 (docs/decisions/20261103-smart-review-report-receiver-api.md).
V202611031900__add_lifecycle_chat_reflected.sql이력마이그레이션검토율에 챗봇 보고서 반영을 더한다 — 결정 docs/decisions/20261103-chat-reflection-review-audit.md.
V202611032257__create_agent_studio_config_extras.sql이력마이그레이션에이전트 스튜디오 분류·추출 저장 — Studio 지시서에 담을 자리가 없는 값 (2026-11-03, docs/decisions/20261103-studio-config-save-new-config.md 4항).
V202611032258__index_agent_studio_config_extras_stage_created.sql이력마이그레이션Studio 에서 직접 만든 지시서는 행이 없어, 그보다 앞서 저장한 같은 단계의 가장 최근 행을 이어받는다 (docs/decisions/20261103-studio-config-save-new-config.md 13항).
V202611041400__add_instruct_template_summary_groups.sql이력마이그레이션업스테이지 문서종별 Instruct 템플릿 15종(한화손사_instruct_템플릿_20261103)을 요약 그룹으로 등록한다.
V202611041750__add_image_system_final_page_state.sql이력마이그레이션설명 주석 없음
V202611051523__create_agent_studio_summary_pairs.sql이력마이그레이션에이전트 스튜디오 요약 그룹 짝 (2026-11-05, docs/decisions/20261105-studio-server-deployment-summary-pair.md 1단계).
V202611051800__enable_transient_retry_classify_extract.sql이력마이그레이션분류·추출 단계의 Studio 일시 실패를 1회 자동 재시도한다(docs/decisions/20261105-ai-job-transient-retry.md).
V202611061700__create_agent_studio_test_runs.sql이력6일 전 · #1915마이그레이션에이전트 스튜디오 실행 테스트 기록 (2026-11-06, docs/decisions/20261106-studio-test-classify-run.md 5·7항).
V202611061900__add_agent_studio_test_run_step_input_file.sql이력6일 전 · #1915마이그레이션실행 테스트 분류는 올린 서류를 순서대로 합쳐 PDF 하나로 Studio 에 보낸다(2026-11-06, docs/decisions/20261106-studio-test-classify-run.md 10항).
V202611061901__create_analysis_request_claim_hospitals.sql이력6일 전 · #1941마이그레이션분석 요청의 청구병원·대표 상병(결정 20261106-analysis-request-claim-hospitals 1항 — 병원마다 대표 상병 1건).
V202611062001__copy_hanwha_life_summary_skeleton_scope_to_102.sql이력6일 전 · #1935마이그레이션이미지시스템 실제 위탁사 코드 전환 후에도 한화생명 전용 요약 골격을 사용한다.
V202611062101__create_report_stat_fact_main_diseases.sql이력6일 전 · #1953마이그레이션보고서 1건의 대표 상병 N건(결정 20261106-stat-main-disease-from-claim-hospitals).
V202611062300__add_classification_result_page_hospital_name.sql이력6일 전 · #1952마이그레이션분류 결과 낱장의 병원명 — 분류가 문서에서 읽은 병원명(Studio 분류 응답 split_criteria_info.병원명).
V202611081600__update_summary_group_tpl_11_13_prompt_20261107.sql이력5일 전 · #1994마이그레이션요약 그룹 11-13 심사평가원 묶음 프롬프트를 업스테이지 11-07 개정판(한화손사_instruct_템플릿_20261107, 원본 sha256 940bda3573fc…)으로 바꾼다.
V202611081700__add_has_reference_mismatch.sql이력4일 전 · #1998마이그레이션화면 위험 서브 상태 `REFERENCE_MISMATCH_DETECTED` 의 원천 플래그 (결정 20260910 「기준값 대조」 1단계).
V202611081800__add_report_hospital_selections.sql이력4일 전 · #2007마이그레이션분석 요청 전 병원 지정 (결정 20260910 병원 마스터 §4).
V202611082130__add_agent_studio_test_run_extract.sql이력4일 전 · #1963마이그레이션실행 테스트 2단계 추출 실연동(2026-11-07, docs/decisions/20261107-studio-test-extract-run.md).
V202611091000__allow_unlisted_hospital_selection.sql이력4일 전 · #2034마이그레이션병원 목록에 없는 병원은 서류 이름 그대로 진행한다 (결정 20261109 병원 지정 — 목록에 없는 병원).
V202611091200__add_agent_studio_test_run_report.sql이력3일 전 · #2032마이그레이션실행 테스트 3단계 보고서 실연동(2026-11-09, docs/decisions/20261109-studio-test-report-run.md).
V202611091300__add_agent_studio_test_run_correction_idempotency_key.sql이력3일 전 · #2032마이그레이션실행 테스트 결과 왕복의 멱등 키를 무작위 값으로 저장한다.
V202611091400__add_agent_studio_test_run_file_storage_key.sql이력3일 전 · #2058마이그레이션실행 테스트 서류를 Studio 대신 객체 저장소에 둔다(docs/decisions/20261109-studio-test-file-object-storage.md 4항).
V202611101530__add_report_hospital_selection_cover_relation.sql이력2일 전 · #2102마이그레이션그 외 병원(타병원 감지)의 표지 병원 관계 확인 (결정 20261110 병원 지정 창 「추가 (2026-11-10)」).
V202611111200__add_incremental_classification.sql이력2일 전 · #2113마이그레이션다시 분석 `증분` — 추가 낱장만 분류해 직전 분류 결과와 합친다 (결정 20261111-incremental-reanalysis-execution-unit).
V202611111308__create_agent_studio_deployments.sql이력2일 전 · #2112마이그레이션에이전트 스튜디오 서버 배포 기록(docs/decisions/20261111-studio-server-deployment-management.md 2항).
V202611111500__add_summary_agent_to_agent_studio_deployments.sql이력2일 전 · #2112마이그레이션배포 기록에 그때 쓰인 요약 그룹 에이전트·지시서를 남긴다(docs/decisions/20261111-studio-server-deployment-management.md 5항 「개정」).
V202611111800__create_agent_studio_summary_config_versions.sql이력어제 · #2132마이그레이션요약 그룹 지시서 버전 — 분류 지시서가 바뀌면 Import 형태를 새로 고른 요약 지시서 한 벌을 남긴다 (docs/decisions/20261111-studio-import-shape-regeneration.md 5항).
V202611111900__add_dim_hospitals_master_visibility.sql이력어제 · #2140마이그레이션병원 마스터 숨김 (S-013 §10, 결정 20260910 병원 마스터 「반영 상태」 2026-11-11 보완).
V202611121400__add_agent_studio_deployment_renamed_document_types.sql이력오늘 · #2161마이그레이션스튜디오 배포가 문서종 마스터·분류체계 매핑을 맞춘다(docs/decisions/20261112-studio-deploy-master-mapping-sync.md 2항).

src/test/238GitHub

테스트 파일 — 펼쳐서 보기
access/AssigneeActionRuleTest.java이력테스트쓰기(조치·실행) 권한의 담당 조사자 판정 한 곳(2026-10-02 야간 Q2) — 분류 조치·추출값 수정·착수·다시 분석·요약/초안 쓰기 다섯 자리가 같은 규칙을 각각 적어 두던 것을 AssigneeActionRule 로 모았다.
access/InvestigationAccessGuardTest.java이력테스트조회 권한 판정 매트릭스(2026-09-18 NB04) — 본인/범위 안 남의 건/범위 밖 × 요약 완료 전후 × 포트 유무.
chat/ReportTabJsonTest.java이력테스트탭 원형 JSON 에 검수 수정 항목을 덮어쓴다 — 시나리오 B2 (항목 키 = JSON 경로, SummaryOutputProjector).
config/AgentStudioTestRunConfigTest.java이력3일 전 · #2058테스트AgentStudioTestRunConfig 대상 테스트.
config/AiPipelinePropertiesTest.java이력테스트AiPipelineProperties 대상 테스트.
config/ExtractionPropertiesTest.java이력테스트스텁 추출 표본 신뢰도(hwss.extraction.stub.*, 2026-09-03 야간 N03)의 기동 검증 — 표본 신뢰도가 임계값과 모순이면 표본이 뜻대로 나오지 않으므로 조용히 돌지 않고 기동을 거부한다 (분류 스텁 ClassificationProperties.Stub 과 같은 계약).
config/ImageTransferStoragePropertiesTest.java이력테스트ImageTransferStorageProperties 대상 테스트.
config/InvestigationListPropertiesTest.java이력테스트InvestigationListProperties 대상 테스트.
config/InvestigationPipelineVersionTest.java이력테스트v2 는 정의 버전 설정 하나로 켠다(결정 20261021-investigation-pipeline-v2-composition).
config/ReportReviewPropertiesTest.java이력테스트요약·초안 쓰기의 담당자 판정(2026-09-18 NB02) — 분류 조치·추출값 수정과 같은 규칙이어야 한다: 담당자 본인, 담당자 없는 건은 누구나, 레벨 우회는 설정으로만(기본 비어 있음 = 아무도 우회 못 함).
config/ScanPdfUploadPropertiesTest.java이력7일 전 · #1922테스트ScanPdfUploadProperties 대상 테스트.
config/StatisticsBackfillPropertiesTest.java이력테스트StatisticsBackfillProperties 대상 테스트.
config/StatisticsErrorIncidentPropertiesTest.java이력테스트오류/장애 현황 설정 — 장애 코드는 기본 비어 있다(기준 미정), 목록·읽기 상한의 범위.
config/StatisticsExtractionQualityPropertiesTest.java이력테스트추출 완료율 조회 설정(NE02)의 기본값과 유효성.
config/StatisticsLifecyclePropertiesTest.java이력테스트StatisticsLifecycleProperties 대상 테스트.
config/StatisticsLoadPropertiesTest.java이력테스트StatisticsLoadProperties 대상 테스트.
config/StatisticsProcessingTimePropertiesTest.java이력테스트StatisticsProcessingTimeProperties 대상 테스트.
config/StatisticsQueryPropertiesTest.java이력테스트StatisticsQueryProperties 대상 테스트.
config/StatisticsRollupPropertiesTest.java이력테스트StatisticsRollupProperties 대상 테스트.
config/StatisticsServiceStatusPropertiesTest.java이력테스트StatisticsServiceStatusProperties 대상 테스트.
config/StatisticsUnmappedPropertiesTest.java이력테스트StatisticsUnmappedProperties 대상 테스트.
entity/AgentStudioDeploymentEntityTest.java이력2일 전 · #2112테스트AgentStudioDeploymentEntity 대상 테스트.
entity/AgentStudioTestRunCorrectionEntityTest.java이력3일 전 · #2032테스트AgentStudioTestRunCorrectionEntity 대상 테스트.
entity/AgentStudioTestRunReportItemEntityTest.java이력3일 전 · #2032테스트AgentStudioTestRunReportItemEntity 대상 테스트.
entity/AiPipelineJobEntityTest.java이력7일 전 · #1900테스트작업 원장의 중복 방지 키 — 행마다 무작위이고, 컬럼이 생기기 전의 행은 예전 조립 규칙으로 돌아간다.
entity/AiPipelineUploadEntityTest.java이력테스트AiPipelineUploadEntity 대상 테스트.
entity/ImageSystemOutboundRequestEntityTest.java이력테스트ImageSystemOutboundRequestEntity 대상 테스트.
entity/ImageTransferBackgroundJobEntityTest.java이력테스트ImageTransferBackgroundJobEntity 대상 테스트.
entity/ReportDisposalLogEntityTest.java이력테스트ReportDisposalLogEntity 대상 테스트.
entity/ReportPageEntityTest.java이력테스트ReportPageEntity 대상 테스트.
integration/AgentStudioInstructSeederTest.java이력6일 전 · #1958테스트AgentStudioInstructSeeder — INSTRUCT 첫 버전을 기동 때 넣는 규칙을 고정한다 (docs/decisions/20261021-studio-instruct-db-storage.md 8항).
integration/AiPipelineJobPollerTest.java이력테스트폴러가 단계를 섞지 않고, 한쪽의 실패로 다른 쪽을 멈추지 않는지를 본다 (2026-09-25 야간 Q1 — NX02 가 EXTRACT 를 더하며 생긴 성질이다).
integration/AnalysisStepWorkPortImplTest.java이력테스트ANALYZE 단계의 요약 포트 — 실연동 경로가 설 때는 플랫폼에 맡기고 외부 작업 대기로 돌아가고(2026-09-29), 그 밖에는 카드 한 장·항목 다섯 개 표본을 적재한다(2026-09-03 야간 N03).
integration/ChatPromptLookupPortImplTest.java이력테스트지시문 판 조회 포트 — 관리자 API 와 같은 지금 문구를 이름·판 번호와 함께 준다(결정 20261023 지시문 DB).
integration/ClassificationStepWorkPortImplTest.java이력테스트CLASSIFY 단계의 스텁 분류 포트 (2026-09-03 야간 N02) — 엔진이 되물으면 결과 산출 한 번으로 끝나고, 상태 전이는 하지 않는다(그건 WorkflowStepCompletionPortImpl 몫).
integration/DocumentTypeSchemaSeederTest.java이력테스트DocumentTypeSchemaSeeder — 시드 파일(프론트 기본 설정 사본)이 읽히고 분류 버전이 없을 때만 넣는지, 실패가 기동을 막지 않는지.
integration/ExtractionPreconditionPortImplTest.java이력어제 · #2151테스트추출 진입 게이트 판정 (W07 — W05 가 세운 골격의 구현체).
integration/ExtractionStepWorkPortImplTest.java이력테스트EXTRACT 단계의 추출 포트 — 실연동 경로가 설 때는 플랫폼에 맡기고 외부 작업 대기로 돌아가고 (2026-09-25 야간 NX02), 그 밖에는 최신 분류 결과의 문서종 묶음마다 표본 항목 세 개를 만든다 (2026-09-03 야간 N03).
integration/ImageTransferExtractionResumeSweeperTest.java이력테스트ImageTransferExtractionResumeSweeper 대상 테스트.
integration/InvestigationChatContextPortImplTest.java이력테스트사고조사 챗봇 맥락 포트 — 시나리오 A(접근 판정)·B(보고서 내용)·C(사건 서류)·D(제목 재료).
integration/WorkflowStepCompletionPortImplTest.java이력어제 · #2151테스트엔진 단계 성공 → 보고서 상태 반영 (2026-09-03 야간 N01).
purge/JpaReportDisposalRecorderTest.java이력테스트JpaReportDisposalRecorder 대상 테스트.
purge/ReportPurgeCandidateFinderTest.java이력테스트후보 선정 — 기준 시각·오늘 계산, 상태·커서 조건, 스마트심사 일정의 경계, 다시 확인.
purge/ReportPurgeSchedulerTest.java이력테스트ReportPurgeScheduler 대상 테스트.
purge/ReportPurgeServiceTest.java이력테스트ReportPurgeService 대상 테스트.
purge/ReportPurgeSettingsTest.java이력테스트파기 설정의 안전한 기본값, 파기 예정일 계산, 보고서 디렉터리 경로 검사.
purge/ReportPurgeWorkerTest.java이력테스트한 건 처리 — 보류 판정, dry-run, 외부 → 챗봇 → 디렉터리 → DB 순서, 실패 시 DB 를 남기는지.
realtime/ReportEventStreamRegistryTest.java이력5일 전 · #1976테스트ReportEventStreamRegistry 대상 테스트.
realtime/ReportEventStreamTimeoutWebTest.java이력6일 전 · #1966테스트5분 연결 제한에 닿은 SSE 구독이 500 으로 끝나지 않는다 — 타임아웃 뒤 Spring 이 비동기 타임아웃 예외를 오류 봉투(JSON)로 쓰려다 text/event-stream 응답이라 쓰지 못해 500 이 됐다(2026-11-07 실서류 E2E 회차 서버 로그 `/events` 5xx 22건).
realtime/ReportEventStreamTomcatAccessLogTest.java이력5일 전 · #1979테스트최소 구성(내장 Tomcat + MVC + 예외 처리기)에서 SSE 구독이 접근 로그에 어떤 상태로 남는지 본다 — 연결 제한(타임아웃)이 500 으로 남지 않는 것이 이 테스트의 몫이다(#1966).
repository/InvestigationReportsTest.java이력테스트InvestigationReports 대상 테스트.
service/AgentConfigPairGuardTest.java이력5일 전 · #1988테스트건에 고정한 지시서 짝 사전 감지 (docs/decisions/20261108-studio-config-pair-repin.md 1항).
service/AgentStudioConfigVersionServiceTest.java이력오늘 · #2161테스트AgentStudioConfigVersionService — 버전 선택 목록은 그 단계 Studio 에이전트의 지시서 목록이고, Studio 를 쓸 수 없으면 빈 목록과 available=false 다(docs/decisions/20261029-studio-config-version-list-f…
service/AgentStudioDeploymentServiceTest.java이력오늘 · #2161테스트AgentStudioDeploymentService 대상 테스트.
service/AgentStudioDocumentTypeSyncTest.java이력오늘 · #2161테스트AgentStudioDocumentTypeSync 대상 테스트.
service/AgentStudioInstructServiceTest.java이력테스트AgentStudioInstructService — INSTRUCT 저장 규칙을 고정한다 (docs/decisions/20261021-studio-instruct-db-storage.md).
service/AgentStudioInstructValidatorTest.java이력6일 전 · #1958테스트AgentStudioInstructValidator — 화면(프론트 instruct-prompt.ts)과 같은 INSTRUCT 규칙을 서버가 고정한다 (docs/decisions/20261021-studio-instruct-db-storage.md 7항).
service/AgentStudioShapeAlignmentServiceTest.java이력어제 · #2132테스트AgentStudioShapeAlignmentService 대상 테스트.
service/AgentStudioSummaryConfigServiceTest.java이력어제 · #2132테스트AgentStudioSummaryConfigService 대상 테스트.
service/AgentStudioTestClassifyJudgementTest.java이력4일 전 · #2046테스트AgentStudioTestClassifyJudgement 대상 테스트.
service/AgentStudioTestClassifyPagesTest.java이력6일 전 · #1915테스트AgentStudioTestClassifyPages 대상 테스트.
service/AgentStudioTestExtractFieldsTest.java이력4일 전 · #1963테스트AgentStudioTestExtractFields 대상 테스트.
service/AgentStudioTestExtractServiceTest.java이력2일 전 · #2123테스트AgentStudioTestExtractService 대상 테스트.
service/AgentStudioTestReportServiceTest.java이력오늘 · #2184테스트AgentStudioTestReportService 대상 테스트.
service/AgentStudioTestRunServiceTest.java이력오늘 · #2149테스트AgentStudioTestRunService 대상 테스트.
service/AiAnalysisJobServiceTest.java이력2일 전 · #2128테스트요약 실연동 원장의 상태 진행을 본다 — 이어 실행 판단 → 맡김 → 작업 요청(지시문 포함) → 완료 확인 → 반영/실패/폐기 (2026-09-29).
service/AiClassificationJobServiceTest.java이력2일 전 · #2128테스트분류 실연동 원장의 상태 진행을 본다 — 맡김 → 업로드·준비 → 작업 요청 → 완료 확인 → 반영/실패/폐기.
service/AiExtractionJobServiceTest.java이력2일 전 · #2128테스트추출 실연동 원장의 상태 진행을 본다 — 이어 실행 판단 → 맡김 → 작업 요청 → 완료 확인 → 반영/실패/폐기 (2026-09-25 야간 NX02).
service/AiPipelineResultSyncServiceTest.java이력테스트결과 왕복 준비 단계의 상태 진행을 본다 — 보정 유무 → 원장 생성 → 여섯 걸음 → 갱신 Job / 재사용 / 실패 정책 (docs/decisions/20260929-pipeline-correction-roundtrip.md).
service/AiReportTabsJobServiceTest.java이력7일 전 · #1912테스트파이프라인 v2 「AI 보고서 생성」(GENERATE_REPORT_TABS) — 단계 시도 하나로 LLM 탭들을 묶어 기다렸다가, 모두 성공하면 탭 출력을 요약 결과로 옮기고 단계를 닫는다.
service/AiSummaryGroupJobServiceTest.java이력2일 전 · #2128테스트요약 그룹 곁가지(파이프라인 v2)의 묶음 진행을 본다 — 추출 제출 → 묶음 → 계획(그룹별 문서 모으기) → 그룹마다 1회 요청 → 완료 확인 → 묶음 완료/실패, 분류가 바뀌면 새 묶음(앞 묶음 대체), 다음 묶음이 성공한 그룹을 다시 부르지 않는 것.
service/AnalysisConcurrencyLimitServiceTest.java이력테스트1인 동시 AI 분석 요청 제한(WBS 29.12.3) — 무엇을 세고, 언제 막고, 한도 변경을 어떻게 남기는가.
service/AnalysisInstructionBuilderTest.java이력6일 전 · #1941테스트분석 조건 → 요약 지시문.
service/AnalysisRequestServiceTest.java이력6일 전 · #1941테스트W09 분석 조건의 검증 규칙과 요약 단계 트리거.
service/AnalysisSourceContextTest.java이력테스트분류 Job 을 잇는 요약의 소스·수정값 덧붙임(20261015 신규 에이전트 결정 D3).
service/ApplicationFormSettingsServiceTest.java이력테스트ApplicationFormSettingsService — 관리자 `청약서 폼 설정` 의 저장 규칙을 고정한다.
service/ChatPromptServiceTest.java이력테스트지시문 판 보기·바꾸기 (docs/decisions/20261023-chat-prompt-db-versioning.md).
service/ClaimHospitalCandidateServiceTest.java이력4일 전 · #2034테스트분석 조건 2번 청구병원 후보 — 결정 20261106-analysis-request-claim-hospitals 2·3항.
service/ClaimTypeServiceTest.java이력테스트청구유형 마스터 — 결정(docs/decisions/20260918-claim-type-master.md)이 정한 규칙을 하나씩 고정한다.
service/ClassificationDocumentGroupAssignTest.java이력테스트검수 수동 지정의 묶음 단위 반영(20261015 신규 에이전트 결정 D1).
service/ClassificationQueueServiceTest.java이력테스트조사자별 분류 대기열 소비(결정 20261022-image-confirm-classification-queue) — 앞에서부터 자리만큼 시작하고, 앞 건이 자리 때문에 막히면 뒤 건을 먼저 들이지 않는다.
service/ClassificationResultActionTest.java이력테스트W07 분류 조치의 권한·상태 규칙.
service/ClassificationResultServiceTest.java이력2일 전 · #2113테스트분류 결과 산출(스텁)과 조회 매핑·집계를 본다.
service/DocumentBoxFolderResolverTest.java이력5일 전 · #1981테스트DocumentBoxFolderResolver 대상 테스트.
service/DocumentTypeSchemaServiceTest.java이력테스트DocumentTypeSchemaService — 문서 분류·추출 스키마 저장 규칙을 고정한다.
service/DocumentTypeStructuresTest.java이력5일 전 · #1971테스트분류체계 보관·페이지 순서 계산을 서비스 없이 확인한다.
service/ExtractionResultCorrectionTest.java이력4일 전 · #2007테스트추출값 사용자 수정(S-012 §2 `추출 완료`, 야간 플랜 20260911 DP01)의 권한·상태·정책 규칙과 수정 이력 (DP02, extraction_field_corrections) 기록.
service/ExtractionResultServiceTest.java이력4일 전 · #2007테스트정보추출 결과의 저장 정책 적용과 조회 매핑·집계.
service/FinalTransferCompletionServiceTest.java이력테스트최종 전송 완료 적용 지점(ST02).
service/HospitalFolderAllocatorTest.java이력2일 전 · #2113테스트라벨 → 회신 폴더 배정 — 결정 20261101-hospital-folder-bundle-overflow 1~2항.
service/HospitalMatchServiceTest.java이력어제 · #2144테스트HospitalMatchService 대상 테스트.
service/ImageIntegrationIdempotencyServiceTest.java이력테스트ImageIntegrationIdempotencyService 대상 테스트.
service/ImageMasterSyncServiceTest.java이력테스트API-06·API-07 의 계약 응답이 마스터 포트 결과로부터 그대로 만들어지는지 본다.
service/ImageReceptionRepositoryFixture.java이력클래스이미지 전송 접수가 쓰는 4개 리포지토리의 인메모리 대역.
service/ImageSnapshotValidatorTest.java이력5일 전 · #1971테스트접수 입력 규칙 검증기를 서비스 없이 확인한다.
service/ImageSystemIntegrationClientTest.java이력테스트ImageSystemIntegrationClient 대상 테스트.
service/ImageSystemOutboundEventListenerTest.java이력테스트이미지시스템 운영 연동 리스너 — 커밋 후 호출을 요청 스레드가 아니라 실행기에 넘기고, 같은 보고서는 제출 순서대로 보내며, 호출 실패를 밖으로 내지 않는다.
service/ImageSystemOutboundServiceTest.java이력4일 전 · #2048테스트ImageSystemOutboundService 대상 테스트.
service/ImageSystemRedistributionSynchronizerTest.java이력테스트ImageSystemRedistributionSynchronizer 대상 테스트.
service/ImageTransferFileCleanupServiceTest.java이력테스트ImageTransferFileCleanupService 대상 테스트.
service/ImageTransferFileStoreTest.java이력5일 전 · #1971테스트전송 파일 위치 계산을 서비스 없이 확인한다.
service/ImageTransferIncomingSyncServiceTest.java이력테스트ImageTransferIncomingSyncService 대상 테스트.
service/ImageTransferReceptionServiceTest.java이력5일 전 · #1981테스트리포지토리는 ImageReceptionRepositoryFixture 의 인메모리 대역을 쓴다 — 이 테스트가 확인하는 것은 스냅샷 비교·상태 전이·워크플로우 연결 같은 서비스 로직이고, 실제 매핑/제약이 DB에서 성립하는지는 apps/hwss-api 의 영속화 통합 테스트가 맡는다 (docs/…
service/ImageTransferTaskQueueServiceTest.java이력테스트ImageTransferTaskQueueService 대상 테스트.
service/ImageTransferTaskQueueWorkerTest.java이력테스트ImageTransferTaskQueueWorker 대상 테스트.
service/IncrementalClassificationScopeTest.java이력2일 전 · #2113테스트다시 분석 `증분` 의 대상 — 추가 인입뿐인가와 추가 낱장 고르기(결정 20261111-incremental-reanalysis-execution-unit).
service/InstructTabByteLimitsTest.java이력2일 전 · #2130테스트조사건 보고서 탭의 byte 제한 — 건에 고정한 INSTRUCT 판에서 읽는다 (결정 20261102 5항).
service/InsuredNameMatcherTest.java이력4일 전 · #1998테스트InsuredNameMatcher 대상 테스트.
service/InvestigationBusinessMetadataServiceTest.java이력테스트InvestigationBusinessMetadataService 대상 테스트.
service/InvestigationDeliveryChannelServiceTest.java이력테스트InvestigationDeliveryChannelService — 보고서 기준으로 그 건 위탁사의 전송 방식을 읽고, 메일 발송 전에 검사한다 (결정 20260902-report-delivery-channel-selection 1·7항).
service/InvestigationDisclosureLinkServiceTest.java이력테스트InvestigationDisclosureLinkService — 보고서 기준으로 그 건 위탁사의 공시실 링크를 내려 준다 (2026-10-19 야간 NL01).
service/InvestigationReceivedDateRangeTest.java이력테스트달력 날짜 → 절대 시각 구간 환산.
service/InvestigationReportQueryServiceTest.java이력5일 전 · #1981테스트필터가 실제로 어떤 행을 걸러내는지는 Criteria 로 조립되어 DB 에서 평가되므로 여기서는 검증되지 않는다 — 그 부분은 InvestigationReportListApiTest(H2 PostgreSQL 모드)가 본다.
service/InvestigationSettingsQueryServiceTest.java이력테스트조사자 화면이 그리는 설정은 그 건에 고정한 판이다(결정 20261028 4항).
service/InvestigationSettingsServiceTest.java이력2일 전 · #2130테스트조사건 설정 스냅샷 — 인입 때 고정, 이전 건은 처음 읽을 때 고정 (docs/decisions/20261028-investigation-settings-snapshot-at-intake.md).
service/InvestigationStartServiceTest.java이력테스트사용자 착수 두 지점(`AI 분류 시작`·`정보 추출 시작`)의 권한·상태 규칙 (2026-09-18 야간 NB05).
service/InvestigatorStartLockTest.java이력테스트InvestigatorStartLock 대상 테스트.
service/KcdCodeTest.java이력6일 전 · #1941테스트청구병원 대표 상병의 KCD 정규화 — 결정 20261106-analysis-request-claim-hospitals 3항.
service/LegacyStudioLabelsTest.java이력테스트옛 Studio 라벨 → 온톨로지 v2.0 문서종 전환표(docs/external/ontology/legacy-studio-label-mapping.csv)를 붙잡는다.
service/PostgresReportTaskLockTest.java이력테스트PostgresReportTaskLock 대상 테스트.
service/PreviousTabVariablesTest.java이력6일 전 · #1958테스트앞 탭 결과 변수 — 옛 {{이전결과}} 는 바로 앞 탭의 변수로 읽는다 (결정 20261102-report-prompt-previous-tab-variables).
service/ReanalysisServiceTest.java이력2일 전 · #2113테스트`다시 분석` 의 범위 조회와 세 범위 실행 (S-012 §4·§5, 야간 20261002 NR01·NR02).
service/ReanalysisWorkflowPropertyTest.java이력2일 전 · #2113테스트사고조사 워크플로우·`다시 분석` 규칙의 속성 기반 테스트 (S-004 §7 전이표 · S-012 §2·§4 · [20260921] 🟢 · [20261006] 🟢).
service/ReanalysisWorkflowWorld.java이력2일 전 · #2113클래스속성 기반 테스트(ReanalysisWorkflowPropertyTest·ReportPageEditOrderPropertyTest)가 한 보고서를 무작위 행동으로 몰아갈 때 쓰는 메모리 세계.
service/ReclassificationReservationServiceTest.java이력테스트재분류 예약 소비 판단 — 기다림·소비·폐기의 갈림을 본다(결정 20260910 1·2·3항, S-012 §3-1).
service/ReportDeliveryLogQueryServiceTest.java이력테스트관리자 보고서 초안 전송 로그 조회.
service/ReportDraftAiServiceTest.java이력테스트보고서 초안 AI 탭 작업의 상태 진행(결정 20261015 신규 에이전트 D4).
service/ReportDraftLlmServiceTest.java이력6일 전 · #1958테스트보고서 초안 LLM 직접 호출의 탭 사슬·재시도·중복 방지(결정 20261020 「결정」 1~7항).
service/ReportDraftServiceTest.java이력7일 전 · #1921테스트W12 보고서 초안의 본문 조립 규칙.
service/ReportEvidenceSourcesTest.java이력6일 전 · #1962테스트요약근거 → 낱장 출처 (결정 20261029 3항).
service/ReportMailDispatchLogServiceTest.java이력테스트관리자 메일 발송 로그 조회 (야간 플랜 20261005 NM01).
service/ReportMailServiceTest.java이력4일 전 · #2044테스트W13 보고서 메일 발송 — 항목의 완료 조건이 "발송 포트 목 테스트(실제 SMTP 호출 없음)" 라 여기가 그 자리다.
service/ReportOutputSchemaTest.java이력6일 전 · #1958테스트출력 골격 → JSON Schema 변환·검증·키 매칭 보정(결정 20261020 「실측 2」 2절, 「결정」 4~6항).
service/ReportPageEditOrderPropertyTest.java이력테스트스캔 문서함 `편집 저장`(ReportPageEditService)과 조회 겹쳐 보기(ReportPageEditOverlay)의 속성 기반 테스트 (S-012 §4-0 「표시 순서 계약」, [20261007] 🟢 편집 저장 계약).
service/ReportPageEditOverlayTest.java이력테스트저장된 낱장 편집을 문서함 목록에 겹쳐 보는 규칙 (야간 20261006 NP02).
service/ReportPageEditServiceTest.java이력테스트스캔 문서함 낱장 편집 저장 (야간 20261006 NP01).
service/ReportPageImageRendererTest.java이력테스트어떤 형식을 그대로 내고 어떤 형식을 바꾸는지, 바꾼 그림이 원본과 같은지를 본다 — 응답 헤더·오류 봉투는 ReportPageImageApiTest(apps/hwss-api) 몫이다.
service/ReportPageImageServiceTest.java이력테스트파일 위치 결정과 방어 로직을 본다 — 세션 필터·실제 스트리밍·오류 봉투는 ReportPageImageApiTest(apps/hwss-api, H2) 몫이다.
service/ReportPromptTemplatesTest.java이력테스트보고서 프롬프트 템플릿 조립(결정 20261020 「결정」 7항, 20261023-report-llm-studio-instruct-source).
service/ReportPromptVariablesTest.java이력6일 전 · #1958테스트분석 요청 → 보고서 프롬프트 변수 값.
service/ReportReflectionPromptTest.java이력테스트반영 요청 글·출력 스키마·응답 검증 — 시나리오 B2~B4, C2, C3, C5 (설계서 사고조사 4번·템플릿 5번).
service/ReportReflectionServiceTest.java이력테스트AI 보고서 반영 엔진 — 시나리오 A(막는 조건)·B(요청 조립)·C2~C4(변경 없음·검증 실패·플랫폼 실패)·D(원장).
service/ReportSummaryGroupQueryServiceTest.java이력4일 전 · #2052테스트보고서 요약 탭 그룹 구획 조회 — 마지막(대체되지 않은) 묶음의 그룹 행을 구획으로.
service/ReportSummaryGroupSectionsTest.java이력4일 전 · #2031테스트요약 그룹 결과 → 초안 「요약」 구역 (결정 20261106 「한화손사 회신」 2항).
service/ReportTaskLockConnectionPoolTest.java이력테스트ReportTaskLockConnectionPool 대상 테스트.
service/ReportTaskSequencerTest.java이력테스트ReportTaskSequencer 대상 테스트.
service/ReportTemplateFixtures.java이력클래스테스트용 템플릿 출처 — 모델팀 신한(SHL)·롯데(LOT) 3탭 원문(10/15 수령본)을 테스트 리소스 report-prompt-fixtures/ 에서 읽는다.
service/ReportTemplateServiceTest.java이력테스트W15 보고서 양식 설정 — 항목의 완료 조건이 "버전·활성 규칙 유닛 테스트" 라 여기가 그 자리다.
service/ReportTextFormatSamplesTest.java이력4일 전 · #2029테스트위탁사 양식 파일마다 시험 입력(report-text-format-samples//.json)을 찍어 기대 글(.txt)과 대조한다 (결정 20261106-report-text-format-by-insurer).
service/ReportTextFormatServiceTest.java이력4일 전 · #2029테스트초안 구역 글을 위탁사·탭 양식으로 바꾸는 연결 (결정 20261106-report-text-format-by-insurer).
service/ReportTransferPayloadComposerTest.java이력테스트전달 JSON 의 구조 (S-014 §8) — 본문·스냅샷·참조 전용·제외 섹션의 취급과 조사자 전용 항목의 null.
service/ScanPdfFileLookupTest.java이력테스트원본을 지운 낱장의 플랫폼 파일 찾기(결정 20261013-scan-pdf-preupload).
service/ScanPdfPreparationListenerTest.java이력테스트ScanPdfPreparationListener 대상 테스트.
service/ScanPdfPreparationServiceTest.java이력7일 전 · #1922테스트ScanPdfPreparationService 대상 테스트.
service/SheetNumbersTest.java이력테스트SheetNumbers 대상 테스트.
service/SmartReviewTransferPayloadComposerTest.java이력7일 전 · #1912테스트스마트심사 전달 JSON 조립 — 값은 전부 가상이다.
service/SmartReviewTransferSamplesTest.java이력7일 전 · #1912테스트스마트심사 전달 JSON 의 위탁사별 샘플(S-015 docs/specs/smart-review-transfer/samples/, 모델팀 2026-11-06 골격)을 실제 투영기 → 조립기로 되만든다.
service/SmartReviewTransferServiceTest.java이력4일 전 · #2044테스트보고서 스마트심사 전송 — 수신 API 포트를 목으로 두고 게이트·회차·기록·전이를 본다.
service/StudioInstructTemplateSourceTest.java이력테스트에이전트 스튜디오 INSTRUCT 설정 → 보고서 템플릿 (결정 20261023-report-llm-studio-instruct-source).
service/SummaryConfirmationTest.java이력3일 전 · #2055테스트요약 확정 전이 — 확정 → 검수(인라인 수정 + 반영 체크) → 초기화.
service/SummaryGroupPromptRendererTest.java이력테스트SummaryGroupPromptRenderer 대상 테스트.
service/SummaryGroupServiceTest.java이력6일 전 · #1954테스트요약 그룹 저장 규칙(결정 20261019 4·5항) — 변경 반영과 저장을 막는 그룹 문제.
service/SummaryHumanDraftTest.java이력3일 전 · #2055테스트조사자 판단(HUMAN) 항목이 AI 초안을 받은 뒤의 적재 결과 — 20261007 결정 6항 · S-014 §5.
service/SummarySectionDraftBytesTest.java이력2일 전 · #2130테스트검수 단계 구역 byte 를 초안 구역 글 기준으로 센다 — 두 단계가 같은 숫자를 보인다.
service/SummarySkeletonServiceTest.java이력테스트골격 저장소 — 범위별 활성 하나, 새 버전 저장, 위탁사 → 공통 폴백, 정의 검증.
statistics/BackfillCommandTest.java이력테스트재적재 명령 본문의 검증·기본값·기간 환산(ST04).
statistics/BackfillTargetsTest.java이력테스트재적재 대상 집합 계산(ST04) — 세 원천의 합집합·전송 시각 우선순위·정렬·원천 없는 보고서번호.
statistics/BusinessStatisticsQueryServiceTest.java이력테스트업무 통계 조회(ST03-B) — 차원 해석(404)·기간 역전(400)·정규화된 조건 전달·순위·비율·표기 폴백·캐시(히트/만료/끔/상한).
statistics/BusinessStatisticsQueryTest.java이력테스트조회 조건 정규화(ST03-B) — 같은 뜻의 요청이 같은 값(캐시 키)이 되고, 기본·상한·역전 규칙이 한 곳에 있다.
statistics/ContentionRetryTest.java이력테스트경합 재시도 골격(DP08 — 세 호출부가 공유) — 일시 오류만 상한까지 다시 돌리고, 그 밖의 예외와 상한을 넘긴 경합은 그대로 올린다.
statistics/ErrorIncidentQueryServiceTest.java이력테스트오류/장애 현황 — 서비스·유형·일자 묶음, 메일·빈 코드 처리, 안내 문구, 장애 설정, 목록 상한, 서울 달력 기간.
statistics/ExtractionQualityStatisticsQueryServiceTest.java이력테스트추출 완료율 조회 서비스(NE02) — 합계 열에서 완료율로 가는 산식과 조건 정규화의 전달을 본다.
statistics/ExtractionQualityStatisticsQueryTest.java이력테스트추출 완료율 조회 조건의 정규화(NE02) — 축 해석·기간 역전·위탁사/부서/검색어 정리·줄 수 기본과 상한.
statistics/HospitalAddressRegionTest.java이력어제 · #2140테스트HospitalAddressRegion 대상 테스트.
statistics/HospitalAliasServiceTest.java이력3일 전 · #2082테스트HospitalAliasService — 화면 기준선 `병원 명칭 매핑` 과 결정 20260910 §6 의 등재 규칙을 고정한다.
statistics/HospitalMasterSyncServiceTest.java이력어제 · #2146테스트HospitalMasterSyncService 대상 테스트.
statistics/HospitalNameNormalizerTest.java이력테스트HospitalNameNormalizer — 프로토타입 lib/hospital-matching.ts 의 정규화 규칙과 같은 판정이어야 한다.
statistics/KcdDiseaseSearchServiceTest.java이력6일 전 · #1941테스트조사자용 상병(KCD) 검색 — 결정 20261106-analysis-request-claim-hospitals 4항.
statistics/LifecycleBackfillServiceTest.java이력테스트생애주기 재적재 명령(결정 20261027) — 대기 실패 기록을 보고서별로 묶어 지점 순서로 다시 적재하고, 성공·이미 반영은 기록을 닫으며, 다시 실패하면 기록을 남기고 다음 지점으로 간다.
statistics/LifecycleStatisticsQueryServiceTest.java이력테스트시스템 통계 조회(DP06) — 기간 역전(400)·정규화된 조건 전달·일별 행 그대로·기간 합계는 일별 벡터의 합에서 다시 계산(비율 평균이 아님)·빈 결과.
statistics/LifecycleTotalsTest.java이력테스트합계 열 → 지표 산식(DP06) — 분모·반올림·분모 0·어긋난 롤업의 음수 방지·벡터 합.
statistics/MainDiseaseCodeSelectorTest.java이력테스트메인 질병코드 판정(ST02) — 규칙 순서는 설정, 기본 "진단서 주진단 → 최다 빈도 → 최초 문서".
statistics/ProcessingTimeStatisticsQueryServiceTest.java이력테스트처리시간 통계 조회 — 롤업 칸을 설정 경계(기본: 분포 5·10·15·20·30분, 매수 100·200·300쪽, 기준 10·12·15·20분)로 다시 묶는 계산.
statistics/ReportLifecycleFactEntityTest.java이력테스트ReportLifecycleFactEntity 대상 테스트.
statistics/ReportLifecycleFactLoadListenerTest.java이력테스트생애주기 적재 진입점(DP04) — 세 이벤트를 순서 실행기(ReportTaskSequencer) 경유로 백그라운드에 넘기고, 일시 오류만 상한까지 다시 돌리며, 최종 실패는 로그와 실패 기록(결정 20261027)으로 남기고 예외를 밖으로 내지 않는다.
statistics/ReportLifecycleFactLoaderTest.java이력6일 전 · #1949테스트생애주기 사실 적재(DP04)의 3지점 규칙 — 분류 시작(행 생성·재호출 무변경·재시작), 요약 완료(처리시간 규칙·페이지 수·품질 수치·재분석·근원), 전송 완료(시각·플래그), 앞 지점 실패의 자가 복구, 부서 스냅샷 승계, 포트 부재 동작.
statistics/ReportStatFactEntityTest.java이력6일 전 · #1949테스트ReportStatFactEntity 대상 테스트.
statistics/ReportStatFactLoadListenerTest.java이력테스트전송 완료 후속 진입점(ST02) — 적재를 순서 실행기(ReportTaskSequencer) 경유로 백그라운드에 넘긴다.
statistics/ReportStatFactLoaderTest.java이력6일 전 · #1949테스트통계 사실 적재(ST02)의 조립 규칙 — 추출 저장 항목 → 조합 행·메인 질병코드·미매핑 큐, 부서 스냅샷, 청구유형·증권번호, DELETE→INSERT 멱등과 버전 증가, 원천 스텁 표시 승계.
statistics/ReportStatFactSourceReaderTest.java이력6일 전 · #1949테스트통계 적재의 원천 읽기(2026-09-04 Q2 — ReportStatFactLoader 에서 분리) — 문서함 순서 묶음·저장 정책·스텁 승계·청구유형· 페이지 수·부서 디렉터리.
statistics/RetryingStatFactLoaderTest.java이력테스트적재 실행 골격(ST03-A 경합 재시도 → ST04 에서 분리) — 일시 오류만 상한까지 다시 돌리고, 최종 실패는 기록으로 남기며 예외를 밖으로 내지 않는다.
statistics/ServiceStatusQueryServiceTest.java이력테스트ServiceStatusQueryService 대상 테스트.
statistics/StatDailyExtractionQualityContributionTest.java이력테스트추출 완료율 기여(NE01)의 계산 규칙 — 항목 하나가 두 축에 각각 한 번, 같은 문서종·같은 항목 이름은 한 행으로 합산(문서종이 달라도 항목 이름이 같으면 FIELD 축에서 한 행), 수정은 항목 단위 1, 항목이 없으면 행도 없다.
statistics/StatDailyExtractionQualityQueryRepositoryTest.java이력테스트추출 완료율 롤업 조회 SQL 의 형태(NE02) — 테이블·축 필터·SUM 두 열·GROUP BY·모수 내림차순 정렬·줄 수 상한과 파라미터 순서를 고정한다.
statistics/StatDailyExtractionQualityRollupServiceTest.java이력테스트추출 완료율 롤업 증분 갱신(NE01)의 두 면 — ① 기여를 어느 상태에서 세는가(지금 최신 / 직전 적재 시각 기준, 판정 전이면 빈 기여), ② SQL 경로(축 키마다 UPDATE 후 0행이면 INSERT, 차이 0 이면 아무것도 안 함, 키 이동은 옛 키 빼기·0 이면 삭제와 새 키 더하…
statistics/StatDailyInvestigatorUsageRollupServiceTest.java이력테스트조사자별 이용량 롤업(2026-10-19) — 기여(사번 없으면 없음, 요청 1 · 요약 0/1)와 같은 칸의 차이만 더하는 경로.
statistics/StatDailyLifecycleContributionTest.java이력테스트생애주기 롤업 기여 계산(DP05)의 규칙 — 요청 시각 축의 날짜 절단, 단계 도달 여부 0/1, 판정 전(NULL) 수치는 더하지 않음, 부서 공백은 NULL 축, 벡터 차이·부호 반전, 키 순서.
statistics/StatDailyLifecycleQueryRepositoryTest.java이력테스트생애주기 롤업 조회 SQL 의 형태(DP06) — 테이블·SUM 열 열 개·필터 절·GROUP BY·정렬과 파라미터 순서·행 매핑을 고정한다.
statistics/StatDailyLifecycleRollupServiceTest.java이력테스트생애주기 롤업 증분 갱신(DP05)의 SQL 경로 — 새 행은 UPDATE 후 0행이면 INSERT, 같은 키는 차이만 한 번의 UPDATE(차이 0 이면 아무것도 안 함), 키 이동은 옛 키 빼기(+0 이면 삭제)와 새 키 더하기를 키 순서로, 뺄 행이 없으면 경고만.
statistics/StatDailyMeasureRollupStatementsTest.java이력테스트합계 열 증분형 롤업 SQL 조립 공통부 (2026-10-12 야간 Q2).
statistics/StatDailyProcessingTimeRollupServiceTest.java이력테스트처리시간 구간 롤업(2026-10-19)의 세 면 — ① 칸 나누기(올림·상한 칸)가 마이그레이션 첫 적재 SQL 과 같은 규칙인지, ② 기여(판정 전이면 없음, 판정 뒤 한 칸), ③ SQL 경로(차이 0 이면 아무것도 안 함, 새 칸은 UPDATE 0행 뒤 INSERT, 칸 이동은 옛 칸 빼…
statistics/StatDailyRollupAxisTest.java이력테스트일별 롤업 공통 축(DP08 — 7종·생애주기가 공유) — WHERE 절과 파라미터 순서·타입이 짝을 이룬다.
statistics/StatDailyRollupContributionsTest.java이력6일 전 · #1949테스트롤업 기여 계산(ST03-A)의 규칙 — 날짜 절단(시간대 경계), 보고서 단위 DISTINCT, NULL 키 제외, 메인 질병코드 축.
statistics/StatDailyRollupQueryRepositoryTest.java이력테스트롤업 조회 SQL 의 형태(ST03-B) — 차원별 테이블·GROUP BY 키·정렬·LIMIT·필터 절과 파라미터 순서를 고정한다.
statistics/StatDailyRollupServiceTest.java이력테스트롤업 증분 갱신(ST03-A)의 SQL 경로 — 더하기는 UPDATE 후 0행이면 INSERT, 빼기는 UPDATE 후 0 행 삭제, 뺄 행이 없으면 경고만.
statistics/StatDimensionKeyResolverTest.java이력테스트코드 변환(ST02) — 키 형식 → 마스터 → 별칭 → 정규화 대체 키 + 미매핑 사유 순서.
statistics/StatDimensionLabelResolverTest.java이력테스트차원 키 → 대표 표기(ST03-B) — 마스터 3종은 키 집합 한 번에, 부서는 포트(없으면 건너뜀), 나머지는 찾지 않는다.
statistics/StatDimensionMasterServiceTest.java이력4일 전 · #2036테스트차원 마스터 3종을 한 차원 enum 으로 다루는 층(ST05-A) — 존재 확인·등록·검색이 차원별 리포지토리로 갈리는지, 검색 패턴 이스케이프.
statistics/StatFactLoadFailureEntityTest.java이력테스트StatFactLoadFailureEntity 대상 테스트.
statistics/StatTextTest.java이력테스트통계 패키지 공통 문자열 규칙(2026-09-04 Q2 통합) — 엔티티·키 변환기·처리 명령·적재기가 같은 결과를 받는지 고정한다.
statistics/StatUnmappedQueueEntityTest.java이력테스트StatUnmappedQueueEntity 대상 테스트.
statistics/StatUnmappedQueueQueryServiceTest.java이력테스트미매핑 큐 목록(ST05-A) — 파라미터 정규화·묶음 → 행 조립·보고서번호 배치 채움·쪽 계산, 마스터 검색 위임.
statistics/StatUnmappedResolveServiceTest.java이력테스트미매핑 큐 처리(ST05-A) — 동작 3종·예외 유형별·커밋 뒤 재적재 제출 순서.
statistics/StatisticsBackfillServiceTest.java이력테스트재적재 명령(ST04)의 조립 — 대상 원천 조회·상한·순서 실행기 경유·결과 집계·롤업 재집계·누락 스캔.
statistics/UsageStatisticsQueryServiceTest.java이력테스트이용 현황 조회 — 롤업 합계에 이름·팀·단·센터를 조회 시점 조직도로 붙이는 규칙(결정 20261019): 경로 [회사, 본부·실, 팀·단, 센터] 에서 셋째가 팀·단, 넷째가 센터.
status/InvestigationStatusTransitionRetryTest.java이력테스트InvestigationStatusTransitionRetry 대상 테스트.
status/InvestigationStatusTransitionTest.java이력5일 전 · #1987테스트S-004 §5·§7·§8 의 전이 규칙이 이 클래스 하나로 모여 있는지 확인한다.
status/ReanalysisScopeResolverTest.java이력2일 전 · #2113테스트`다시 분석` 범위 노출 규칙 (S-012 §4 · [20260921] 🟢, 야간 20261002 NR01).
status/StepFailureMessagesTest.java이력어제 · #2137테스트단계 실패 코드 → 안내 문구.
status/WorkflowStatusResolverTest.java이력4일 전 · #2007테스트화면 상태 파생 규칙(2026-09-18 결정, S-004 「화면 상태 파생 규칙」)의 매핑 테이블 — 11종 × 원천 조합, 허용 외 위험 조합 제거, 처리 실패 시 직전 단계 유지.
storage/ImageTransferS3StoreTest.java이력테스트ImageTransferS3Store 대상 테스트.
summary/ReportTextRendererTest.java이력4일 전 · #2031테스트양식 노드·자리표시자 규칙 (결정 20261106-report-text-format-by-insurer, report-text-formats/README.md).
summary/SummaryByteCountTest.java이력테스트위탁사 자료의 「영문+숫자 기준」 byte 셈 — ASCII 1, 그 밖 2 (프로토타입 koreanByteLength 와 같다).
summary/SummaryComposerTest.java이력테스트기관 카드를 골격에 앉히는 규칙과 같은 기관 카드 병합 (S-014 §6·§9).
summary/SummaryGroupPlannerTest.java이력테스트검수 구조를 요약 그룹별로 모으는 규칙(결정 20261019 「추가 2026-10-21」).
summary/SummaryItemEvidenceTest.java이력7일 전 · #1912테스트항목별 요약근거 떼기·경로 모으기 (결정 20261029).
summary/SummaryOutputConformanceTest.java이력테스트탭 응답 ↔ 출력 골격 형식 판정 (20261007 결정 10항).
summary/SummaryOutputProjectorShapeCoverageTest.java이력7일 전 · #1912테스트출력 골격 깊이 상한(20261007 결정 11항)의 근거 — 최상위 객체·깊이 8 이하이면 어떤 모양이든 문자열 잎이 화면(기관명·소제목· 항목 라벨·내용) 어딘가에 나온다.
summary/SummaryOutputProjectorTest.java이력6일 전 · #1958테스트탭 원형 JSON → 섹션·카드·줄 투영 (S-014 §9-1).
summary/SummaryOutputSchemaBuilderTest.java이력테스트골격 → Studio 출력 골격(JSON Schema)·작성 지침 글 (S-014 §9).
summary/SummarySkeletonMergerTest.java이력테스트청구유형 중복 선택 머지 규칙 (S-014 §3-1) — 골격 합집합, 지침 연결.
summary/SummarySkeletonResolverTest.java이력테스트골격은 내장 기본값, 청구유형은 근거 분석 요청의 보고서 양식 코드 스냅샷 (S-014 §3).
web/AdminSettingsControllerAuditTest.java이력테스트관리자 설정·마스터 데이터·통계 운영·로그 반출의 감사 기록 — docs/decisions/20261018-audit-event-scope-expansion.md.
web/AgentStudioTestRunControllerTest.java이력3일 전 · #2091테스트AgentStudioTestRunController 대상 테스트.
web/HospitalMatchControllerTest.java이력3일 전 · #2082테스트HospitalMatchController 대상 테스트.
web/ReportDeliveryLogCsvColumnsTest.java이력테스트ReportDeliveryLogCsvColumns 대상 테스트.
web/ReportDisposalLogCsvColumnsTest.java이력테스트ReportDisposalLogCsvColumns 대상 테스트.
web/ReportMailDispatchLogCsvColumnsTest.java이력테스트ReportMailDispatchLogCsvColumns 대상 테스트.

modules/ · 도메인

modules/classification-shared/GitHub

위탁사·분류 마스터 · 공유 DTO

위탁사·분류 마스터 · 공유 DTO — 위탁사·문서분류 마스터와 매핑 화면 DTO.

15 소스0 테스트
의존 모듈 base
주요 라이브러리 spring-boot-starter-validation

dto/15GitHub

모듈 경계를 넘는 요청·응답 DTO (record).

ClassificationMappingConfirmationView.java이력오늘 · #2180DTO분류체계 매핑 확정 이력 한 줄 (2026-10-09 야간 NW01).
ClassificationMappingSaveRequest.java이력DTO위탁사 한 곳의 이미지시스템 폴더 ↔ 에이전트 분류 매핑 저장 요청 (야간 플랜 20260824 N02).
ClassificationMappingView.java이력오늘 · #2161DTO위탁사 한 곳의 분류체계 매핑 화면 상태 (야간 플랜 20260824 N02).
CustomerCompanyMaster.java이력DTO마스터가 보관 중인 위탁사 한 건이다 (S-007 §3-1 customer_companies).
CustomerCompanySummary.java이력DTO화면 선택지용 위탁사 한 건이다 — 코드와 표시명만 담는다.
CustomerOnboardingView.java이력오늘 · #2161DTO위탁사 한 곳의 온보딩 상태 (결정 20261017-customer-onboarding-status-api).
DisclosureLinkSaveRequest.java이력DTO공시실 링크 저장 요청 (위탁사 Workspace 4단계 `공시실 링크 수정`/`공시실 링크 등록` 팝업).
DisclosureLinkView.java이력DTO위탁사 한 곳의 공시실 링크 (위탁사 Workspace 4단계 카드가 현재 위탁사 줄을 조회한다).
DocumentTypeMaster.java이력DTO마스터가 보관 중인 위탁사별 이미지시스템 폴더 분류 한 건이다 (S-007 §3-1 document_types).
ReportDeliveryChannelSaveRequest.java이력DTO위탁사 보고서 초안 전송 방식 저장 요청 (`위탁사 워크스페이스` 3단계 라디오).
ReportDeliveryChannelView.java이력DTO위탁사 한 곳의 보고서 초안 전송 방식 — 저장 응답.
CustomerOnboardingStep.java이력enum신규 위탁사 온보딩 단계 — 화면 기준선 `위탁사 워크스페이스` 의 4단계 순서 그대로다.
CustomerOnboardingStepStatus.java이력enum온보딩 단계·전체의 상태.
DocumentExtractionMethod.java이력enum문서종의 정보추출 방식 — 온톨로지 정의서 v2.0 의 extraction_method (docs/decisions/20261016-ontology-v2-document-types-146.md 결정 2항).
MasterSyncOutcome.java이력record마스터 동기화 한 건의 적용 결과다.

빌드·리소스1GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base 모듈 참조.

modules/ · 도메인

modules/classification-core/GitHub

위탁사·분류 마스터 · 로직

위탁사·분류 마스터 · 로직 — 이미지시스템이 원천인 위탁사·폴더 분류 마스터를 보관하고, 폴더 ↔ 에이전트 분류 매핑을 관리한다. 외부 수신 표면은 investigation-core 가 갖고 이 모듈은 포트 구현으로 붙는다.

38 소스14 테스트21 마이그레이션
의존 모듈 base classification-shared
주요 라이브러리 spring-boot-starter-data-jpa spring-boot-starter-web spring-boot-starter-validation springdoc-openapi-starter-webmvc-ui

entity/6GitHub

JPA 엔티티 — 테이블 한 행을 매핑한다.

AgentDocumentTypeEntity.java이력90.5%오늘 · #2161엔티티에이전트(낱장) 분류 마스터 한 건 (S-007 §3-1 agent_document_types).
CustomerCompanyEntity.java이력87.5%오늘 · #2161엔티티위탁사(고객사) 마스터 한 건 (S-007 §3-1 customer_companies).
DisclosureLinkEntity.java이력86.7%엔티티위탁사 한 곳의 공시실 링크 (위탁사 Workspace 4단계 `공시실 링크 설정`).
DocumentTypeEntity.java이력93.8%엔티티위탁사별 이미지시스템 폴더 분류 한 건 (S-007 §3-1 document_types).
FolderClassificationMappingConfirmationEntity.java이력83.3%엔티티위탁사 한 곳의 분류체계 매핑 확정 한 건 (folder_classification_mapping_confirmations, 2026-10-09 야간 NW01).
FolderClassificationMappingEntity.java이력88.2%오늘 · #2161엔티티위탁사별 이미지시스템 폴더 ↔ 에이전트 분류 매핑 한 줄 (S-007 §3-1 folder_classification_mappings).

exception/7GitHub

BusinessException 하위 도메인 예외 — 에러 코드와 HTTP 상태를 정한다.

AgentDocumentTypeNotFoundException.java이력100.0%예외배정하려는 에이전트 분류가 마스터에 없거나 비활성일 때.
ClassificationMappingRequiredException.java이력100.0%예외배정이 한 건도 없는 상태로 최초 확정을 시도했을 때.
CustomerCompanyNotFoundException.java이력100.0%예외매핑 화면이 다루려는 위탁사가 마스터에 없을 때.
DisclosureUrlRequiredException.java이력100.0%예외공시실 URL 이 없는데 저장하거나 노출을 켜려 했을 때.
DocumentTypeNotFoundException.java이력100.0%예외배정 대상으로 지정한 폴더가 그 위탁사의 마스터에 없을 때.
DuplicateAgentDocumentTypeAssignmentException.java이력100.0%예외한 요청에 같은 (에이전트 분류, 폴더) 쌍이 두 번 이상 들어왔을 때.
InactiveDocumentTypeAssignmentException.java이력100.0%예외삭제된(비활성) 폴더로 새로 배정하려 할 때.

integration/6GitHub

base 포트 구현체 — 다른 도메인·워크플로우 엔진이 이 모듈을 부르는 입구.

CustomerCompanyLookupPortImpl.java이력64.3%포트 구현CustomerCompanyLookupPort 의 실제 구현.
DisclosureLinkLookupPortImpl.java이력100.0%포트 구현DisclosureLinkLookupPort 의 실제 구현 — 사용자 워크스페이스의 `공시실` 버튼이 읽는다.
FolderPlacementLookupPortImpl.java이력28.6%포트 구현FolderPlacementLookupPort 의 실제 구현 — 관리자 매핑(folder_classification_mappings)과 폴더 묶음을 합친다.
ImageMasterSyncPortImpl.java이력0.0%포트 구현ImageMasterSyncPort 의 실제 구현.
ReportDeliveryChannelLookupPortImpl.java이력100.0%포트 구현ReportDeliveryChannelLookupPort 의 실제 구현 — 사용자 화면의 전송 버튼과 메일 발송 검사가 읽는다 (결정 20260902 7항).
StudioDocumentTypeMasterPortImpl.java이력98.8%오늘 · #2161포트 구현StudioDocumentTypeMasterPort 구현 — 에이전트 스튜디오 배포가 운영 문서종 마스터·분류체계 매핑을 맞춘다 (docs/decisions/20261112-studio-deploy-master-mapping-sync.md 2·5·6항).

repository/7GitHub

Spring Data JPA 저장소 인터페이스.

CustomerCompanyCount.java이력100.0%record위탁사 코드별 건수 — 위탁사 여러 곳의 행 수를 한 번의 GROUP BY 조회로 받을 때의 행.
AgentDocumentTypeRepository.java이력오늘 · #2161저장소에이전트 분류 마스터 저장소.
CustomerCompanyRepository.java이력오늘 · #2161저장소위탁사 마스터 저장소.
DisclosureLinkRepository.java이력저장소공시실 링크 저장소.
DocumentTypeRepository.java이력저장소위탁사별 문서분류 마스터 저장소.
FolderClassificationMappingConfirmationRepository.java이력저장소분류체계 매핑 확정 이력 저장소.
FolderClassificationMappingRepository.java이력오늘 · #2161저장소폴더 ↔ 에이전트 분류 매핑 저장소.

service/7GitHub

비즈니스 로직과 트랜잭션 경계.

ClassificationMappingService.java이력99.5%오늘 · #2180서비스ClassificationMappingService 의 JPA 구현.
ClassificationMasterSyncService.java이력74.6%서비스ClassificationMasterSyncService 의 JPA 구현.
CustomerCompanyQueryService.java이력100.0%서비스CustomerCompanyQueryService 의 JPA 구현.
CustomerOnboardingService.java이력100.0%오늘 · #2161서비스위탁사 온보딩 상태 — 화면 기준선 `위탁사 워크스페이스` 의 4단계와 신규 위탁사 표시 (결정 20261017).
DisclosureLinkService.java이력100.0%서비스위탁사별 공시실 링크 마스터 (관리자 위탁사 Workspace 4단계 `공시실 링크 설정`).
ReportDeliveryChannelService.java이력100.0%서비스위탁사별 보고서 초안 전송 방식 저장 (결정 20260902-report-delivery-channel-selection 1·5~8항).
FolderBundles.java이력100.0%클래스위탁사 폴더의 번호 묶음 판정 — 저장된 묶음(folder_bundle_code·folder_bundle_ordinal)이 있으면 그것, 없으면 이름으로 짐작한다(결정 20261101-hospital-folder-bundle-overflow 2항).

web/5GitHub

REST 컨트롤러 — HTTP 요청을 서비스로 넘기고 ApiResponse 로 감싼다.

ClassificationMappingController.java이력화면 /admin/classification-mappingsSwagger80.0%API관리자 분류체계 매핑 API (야간 플랜 20260824 N02).
CustomerCompanyController.java이력화면 미연결Swagger0.0%API위탁사 마스터 조회 API (docs/rules/api.md 의 URL 패턴·표준 응답 구조).
CustomerOnboardingController.java이력화면 미연결Swagger0.0%API위탁사 온보딩 상태 조회 (결정 20261017-customer-onboarding-status-api).
DisclosureLinkController.java이력화면 /admin/client-workspaceSwagger90.9%API관리자 공시실 링크 API (화면 /admin/client-workspace 위탁사 Workspace 4단계 `공시실 링크 설정`).
ReportDeliveryChannelController.java이력화면 미연결Swagger100.0%API위탁사 보고서 초안 전송 방식 저장 API (화면 /admin/client-workspace 3단계, 결정 20260902 1·5~8항).

빌드·리소스1GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base, classification-shared 모듈 참조.

resources/db/migration/21GitHub

Flyway 마이그레이션 SQL — 파일명 V<YYYYMMDDhhmm>__설명. 앱 기동 시 모든 모듈의 것이 버전 순으로 합쳐 실행된다.

V202608190001__create_classification_master.sql이력마이그레이션S-007 §3-1 위탁사·분류체계 마스터 (API-06/07 동기화 수신 대상).
V202609160004__comment_classification_schema.sql이력마이그레이션위탁사·분류체계 마스터의 테이블·컬럼 설명 (근거: docs/decisions/20260916-db-schema-doc-generation.md).
V202609160014__comment_classification_active.sql이력마이그레이션분류체계 마스터의 사용 여부 컬럼 설명 (V202609160004 에서 빠진 것).
V202609220001__add_document_type_contract_to_customer_company.sql이력마이그레이션설명 주석 없음
V202609281500__folder_classification_mappings_allow_many_folders.sql이력마이그레이션매핑을 1:1 에서 N:M 으로 — 에이전트 문서종 하나를 같은 위탁사의 폴더 여러 개에 배정할 수 있다.
V202609281510__seed_customer_companies_and_document_types.sql이력마이그레이션위탁사·이미지시스템 폴더 초기 데이터 — 프로토타입 `lib/uie-client-classification-matrix.ts` 의 위탁사 10사(기존 9사 + 신규 온보딩 표본 한화생명)와 1depth 폴더를 그대로 옮겼다.
V202609281520__seed_agent_document_types.sql이력마이그레이션에이전트(Studio) 문서종 마스터 초기 데이터 — 프로토타입 `lib/uie-document-classifications.ts` 의 공통 Studio 분류 176종(정보추출 대상 98종 + 분류 전용 78종).
V202609281530__seed_folder_classification_mappings.sql이력마이그레이션위탁사별 `이미지시스템 폴더 ↔ 에이전트 문서종` 매핑 초기 데이터 — 프로토타입 매트릭스 (`lib/uie-client-classification-matrix.ts`, 원천 UIE분류문서_위탁사별_수동분류매칭_v2.xlsx) 를 펼친 것.
V202610091900__create_folder_classification_mapping_confirmations.sql이력마이그레이션위탁사별 분류체계 매핑 확정 이력 (2026-10-09 야간 NW01).
V202610151410__align_agent_document_types_to_studio_labels.sql이력마이그레이션에이전트(Studio) 문서종 마스터를 업스테이지 SaaS 신규 분류 지시서의 라벨에 맞춘다 (docs/decisions/20261015-studio-saas-v2-agents-adoption.md D2 — 2026-10-15 확정: Studio 라벨 기준으로 우리 마스터를 맞춘다).
V202610151700__remove_inactive_agent_document_types.sql이력마이그레이션Studio 신규 분류 라벨 기준으로 맞추며 꺼 둔(V202610151410) 기존 문서종을 지운다 (docs/decisions/20261015-studio-saas-v2-agents-adoption.md D2 — 2026-10-15 사용자: 쓰지 않는 문서종은 제거).
V202610161230__adopt_ontology_v2_document_types.sql이력마이그레이션에이전트(Studio) 문서종 마스터를 온톨로지 정의서 v2.0(대분류 7종 → 세부 문서종 146종)으로 바꾼다 (docs/decisions/20261016-ontology-v2-document-types-146.md — 10/15 D2 「Studio 라벨 기준」을 대체).
V202610190959__add_customer_onboarding_received_at.sql이력마이그레이션신규 위탁사 온보딩 수신 시각 (2026-10-17 결정 20261017-customer-onboarding-status-api).
V202610211700__add_customer_report_delivery_channel.sql이력마이그레이션위탁사별 보고서 초안 전송 방식 (2026-10-21 결정 20260902-report-delivery-channel-selection 1·6·7항).
V202611011000__add_document_type_folder_bundle.sql이력마이그레이션이미지시스템 폴더 묶음 — `진료기록1~10`·`병원1~15` 처럼 번호로 나뉜 폴더 여럿을 한 묶음으로 표시한다.
V202611031820__add_customer_smart_review_partner_code.sql이력마이그레이션위탁사 → 스마트심사 대외사 코드 대응 (docs/decisions/20261103-smart-review-report-receiver-api.md).
V202611061500__sync_folder_classification_mappings_v4.sql이력7일 전 · #1903마이그레이션위탁사별 `이미지시스템 폴더 ↔ 에이전트 문서종` 매핑을 「UIE분류문서_위탁사별_수동분류매칭_v4」(2026-11-05, 온톨로지 정의서 v2.0 2차_classify class_name 기준 152행 × 위탁사 10사) 로 현행화한다.
V202611062000__seed_image_system_customer_document_types.sql이력6일 전 · #1935마이그레이션이미지시스템 개발 기준정보 초기값 (2026-11-06 수령 API-06·API-07 원수사별 JSON).
V202611062100__add_image_system_new_folders_v4_mappings.sql이력6일 전 · #1935마이그레이션이미지시스템 신설 폴더 3종(청약서 · 미래에셋 관련자 확인서 · 미래에셋 건강보험공단급여내역)과 그 폴더의 위탁사별 수동분류 매칭(v4)을 넣는다.
V202611121410__add_customer_company_studio_change_review.sql이력오늘 · #2161마이그레이션스튜디오 배포 대기의 `Studio 문서종 변경 확인` 표시(docs/decisions/20261112-studio-deploy-master-mapping-sync.md 5항).

src/test/14GitHub

테스트 파일 — 펼쳐서 보기
integration/CustomerCompanyLookupPortImplTest.java이력테스트CustomerCompanyLookupPortImpl — 다른 도메인이 위탁사 마스터를 읽는 창구.
integration/DisclosureLinkLookupPortImplTest.java이력테스트DisclosureLinkLookupPortImpl — 사용자에게 여는 링크는 노출이 켜진 행뿐이다 (결정 20261017 4항).
integration/FolderPlacementLookupPortImplFolderNamesTest.java이력테스트FolderPlacementLookupPortImplFolderNames 대상 테스트.
integration/ReportDeliveryChannelLookupPortImplTest.java이력테스트ReportDeliveryChannelLookupPortImpl — 고른 값만 내보내고, 고르지 않았거나 없는 위탁사는 비어 있다.
integration/StudioDocumentTypeMasterPortImplTest.java이력오늘 · #2161테스트StudioDocumentTypeMasterPortImpl 대상 테스트.
service/ClassificationMappingServiceTest.java이력오늘 · #2180테스트ClassificationMappingService — 관리자 매핑 화면의 조회·저장 규칙을 본다.
service/ClassificationMasterSyncServiceTest.java이력테스트마스터 동기화의 판정 규칙(최신값 우선, 과거 무시, 자리표시자 위탁사 생성)을 본다.
service/CustomerCompanyQueryServiceTest.java이력테스트CustomerCompanyQueryService — 조회 결과가 화면 선택지 모양으로 내려가는지 본다.
service/CustomerOnboardingServiceTest.java이력오늘 · #2161테스트온보딩 상태 판정 규칙(결정 20261017).
service/DisclosureLinkServiceTest.java이력테스트DisclosureLinkService — 위탁사 Workspace 4단계 `공시실 링크 설정` 의 규칙을 고정한다 (docs/decisions/20261023-client-workspace-disclosure-inline.md 6항: URL 과 노출을 `저장` 한 번에).
service/FolderBundlesTest.java이력테스트번호 폴더 묶음 판정 — 결정 20261101-hospital-folder-bundle-overflow 2항.
service/ReportDeliveryChannelServiceTest.java이력테스트위탁사 전송 방식 저장 — 고르면 저장, 같은 값은 바뀌지 않음, 없는 위탁사는 404 (결정 20260902 1·7·8항).
web/ClassificationAdminControllerAuditTest.java이력테스트분류 매핑·공시실 링크 저장의 감사 기록 — docs/decisions/20261018-audit-event-scope-expansion.md.
web/ReportDeliveryChannelControllerTest.java이력테스트전송 방식 저장의 감사 기록 — 값이 바뀐 경우에만 남긴다(결정 20260902 8항).

modules/ · 도메인

modules/collection-shared/GitHub

지식컬렉션 · 공유 DTO

지식컬렉션 · 공유 DTO — 컬렉션·파일·승인 요청·검색 DTO와 상태 enum.

43 소스0 테스트
의존 모듈 base
주요 라이브러리 spring-boot-starter-validation

dto/43GitHub

모듈 경계를 넘는 요청·응답 DTO (record).

CollectionApprovalApproveRequest.java이력DTO승인 본문 — 승인 검토 화면에서 승인자가 전환 요청의 공용 대상을 바꿔 승인할 때만 쓴다(선택).
CollectionApprovalCreateRequest.java이력DTO컬렉션 자체를 대상으로 하는 승인 요청 생성 (야간 플랜 20260821 N05 — 2026-10-07 공용 대상 추가).
CollectionApprovalPage.java이력DTO승인 요청 목록의 서버 페이지.
CollectionApprovalRejectRequest.java이력DTO승인 요청 반려 (야간 플랜 20260821 N05).
CollectionApprovalRequestSummary.java이력DTO승인 요청 한 줄 (야간 플랜 20260821 N05).
CollectionApprovalResubmitRequest.java이력DTO반려된 요청을 다시 올릴 때의 본문(선택).
CollectionApprovalReviewDetail.java이력DTO승인 요청 검토 화면에 필요한 컬렉션 상세와 파일 목록.
CollectionConversionRequestView.java이력DTO컬렉션 상세에 싣는 공용 전환 요청 한 건 — 내 컬렉션 화면의 `공용 전환 요청 N건` 목록 한 줄.
CollectionCreateRequest.java이력DTO지식컬렉션 생성 요청 — 비어 있는 말단 폴더에 컬렉션을 둔다 (docs/decisions/20261006-knowledge-collection-folder-structure.md §1 「말단 폴더가 곧 컬렉션」).
CollectionDetail.java이력DTO지식컬렉션 상세 — 목록 한 줄(CollectionSummary)에 파일 목록과 지금 할 수 있는 일을 얹은 것.
CollectionFileBatchRequest.java이력DTO파일 여러 건을 한꺼번에 지우거나 재색인하는 요청(docs/decisions/20261021-knowledge-collection-bulk-file-actions.md).
CollectionFileRenameRequest.java이력DTO파일명 수정 요청 — 사용자 내 컬렉션(개인 컬렉션) 파일에만 허용한다 (docs/decisions/20260916-knowledge-collection-file-rename-removal.md 2026-10-07 개정).
CollectionFileSummary.java이력DTO컬렉션 상세 화면에 뿌리는 파일 한 줄.
CollectionFolderCreateRequest.java이력DTO폴더 생성 요청.
CollectionFolderDeletionSummary.java이력DTO폴더를 지우면 함께 사라지는 것의 집계 — 삭제 확인 모달이 보여 주는 값 (docs/decisions/20261006-knowledge-collection-folder-structure.md §3 「폴더 삭제는 하위 폴더와 그 안의 컬렉션을 모두」).
CollectionFolderSummary.java이력DTO폴더 트리 한 노드.
CollectionFolderUpdateRequest.java이력DTO폴더 이름 변경 요청.
CollectionGuideUpdateRequest.java이력DTO등록 안내 저장 요청.
CollectionReferenceDefaultItem.java이력DTO한 위탁사의 참조 기본값 — 그 위탁사에서 기본으로 참조하도록 켠 파일.
CollectionSearchHit.java이력DTO지식컬렉션 검색 결과 한 건 (야간 플랜 20260821 N06).
CollectionSearchRequest.java이력DTO지식컬렉션 검색 요청 (야간 플랜 20260821 N06).
CollectionStatusView.java이력3일 전 · #2099DTO컬렉션 상세의 반복 조회용 상태 — 상세(파일 전체 포함)는 처음 한 번만 받고, 처리 중·설명 생성 중일 때는 화면이 이것만 주기적으로 묻는다.
CollectionSummary.java이력DTO지식컬렉션 목록 한 줄.
CollectionUpdateRequest.java이력DTO지식컬렉션 부분 수정(PATCH) 요청 — 코멘트만 바꾼다.
SharedPlacementView.java이력DTO전환 요청에 붙은 공용 대상과 그 평가 결과 — 요청자 상세·승인센터 목록·팝업·검토 화면이 같은 값을 본다.
CollectionApprovalSort.java이력enum승인 요청 목록이 전체 결과에 대해 정렬을 지원하는 열.
CollectionApprovalStage.java이력enum대기 중인 승인 요청이 지금 어느 단계에 있는지 (docs/decisions/20261006-collection-first-approval-level.md).
CollectionApprovalStatus.java이력enum승인 요청 한 건의 처리 상태.
CollectionApprovalType.java이력enum승인센터가 처리하는 지식컬렉션 승인 요청의 유형.
CollectionFirstApprovalSkip.java이력enum대기 중인 승인 요청이 1차 승인을 거치지 않고 바로 최종 단계인 이유 (docs/decisions/20261026-collection-approval-strict-sequence.md 2항).
CollectionFolderSpace.java이력enum지식컬렉션 폴더 공간 (docs/decisions/20261006-knowledge-collection-folder-structure.md §4).
CollectionProcessingStatus.java이력enum컬렉션의 문서 처리 상태 — 파일 처리(색인) 상태에서 파생한 값이다(저장하지 않는다).
CollectionStatus.java이력enum지식컬렉션 사용 가능 여부 상태 (2026-08-19 현업 화면기획 리뷰 §4).
CollectionType.java이력enum지식컬렉션 구분 (2026-08-19 현업 화면기획 리뷰 §4).
SharedPlacementBlockReason.java이력enum공용 대상으로 고를 수 없는 이유 — 선택기가 폴더를 비활성으로 그리며 문구를 붙인다.
SharedPlacementMode.java이력enum개인→공용 전환 승인이 공용 대상에 따라 무엇을 하는지 (docs/decisions/20261006-knowledge-collection-folder-structure.md §4).
CollectionApprovalCounts.java이력record승인센터와 메뉴 뱃지가 함께 사용하는 요청 건수.
CollectionFileBatchResult.java이력record파일 일괄 삭제·재색인 결과 — 처리할 수 있는 파일만 처리하고 막힌 파일은 사유와 함께 돌려준다(부분 성공, docs/decisions/20261021-knowledge-collection-bulk-file-actions.md).
CollectionFileNameMatch.java이력record지식컬렉션 파일명 검색 결과 — 검색어가 파일명에 들어간 파일을 컬렉션별로 묶은 한 덩어리 (docs/decisions/20261013-knowledge-collection-folder-file-search.md §1~§3).
CollectionFileNameMatchFile.java이력record파일명 검색에서 이름이 일치한 파일 한 건 (CollectionFileNameMatch 의 항목).
CollectionGuide.java이력record지식컬렉션 등록 안내(관리자 `등록 안내 설정`) — 사용자 파일 추가 모달의 `관리자 안내` 박스 본문.
CollectionPlacementOption.java이력record공용 폴더 하나를 전환 요청의 대상으로 고를 수 있는지 — 공용 대상 선택기가 트리의 폴더마다 이 값으로 활성/비활성과 배지(`신규 컬렉션` / `파일 추가 · 컬렉션 (n건)`)를 그린다.
CollectionReferenceDefaults.java이력record공용 지식컬렉션의 위탁사별 참조 기본값 — 조회 응답이자 저장 요청이다 (docs/decisions/20261017-admin-knowledge-reference-defaults-tab.md §4).

빌드·리소스1GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base 모듈 참조.

modules/ · 도메인

modules/collection-core/GitHub

지식컬렉션 · 로직

지식컬렉션 · 로직 — 개인/공용 컬렉션, 파일 업로드·검증·원본 저장(로컬, 설정 시 S3), 승인센터, 검색. 외부 AI 플랫폼은 base 의 Vector*Port 로만 부른다.

102 소스43 테스트25 마이그레이션
의존 모듈 base collection-shared
주요 라이브러리 spring-boot-starter-web spring-boot-starter-validation spring-boot-starter-data-jpa bom s springdoc-openapi-starter-webmvc-ui jqwik

config/7GitHub

@ConfigurationProperties 설정 바인딩과 빈 구성 (application.yml hwss.* 블록).

CollectionBatchProperties.java이력100.0%설정배치 색인 시간창과 서버별 작업자(docs/decisions/20261102-collection-batch-time-window.md).
CollectionConfig.java이력50.0%2일 전 · #2093설정지식컬렉션 모듈 설정 활성화.
CollectionIngestionProperties.java이력94.7%설정지식컬렉션 적재 설정 — PDF 변환·500쪽 분할·배치 색인·개인 쪽 수 상한·원본 보관 (docs/decisions/20261013-file-ingestion-pdf-unification.md).
CollectionOriginalStorageProperties.java이력100.0%설정지식컬렉션 원본 파일 저장소 설정 (hwss.collection.original-storage).
CollectionProperties.java이력90.9%설정지식컬렉션 운영 설정 (야간 플랜 20260821 N04).
CollectionStoreDescriptionProperties.java이력100.0%설정공용 스토어 설명 생성 요청 값 — docs/decisions/20261016-collection-store-description-generate.md §3.
CollectionStudioGroupProperties.java이력100.0%2일 전 · #2093설정Studio 문서 파싱 구간에 맞춘 지식컬렉션 조각 크기(docs/decisions/20261110-collection-studio-group-size.md).

entity/14GitHub

JPA 엔티티 — 테이블 한 행을 매핑한다.

CollectionFilePreviewStatus.java이력100.0%enum컬렉션 파일 미리보기(앞 N쪽 PDF)의 상태 — collection_files.preview_status.
VectorStoreScope.java이력100.0%enum컬렉션의 플랫폼 Store(collections.vector_collection_id)를 누가 쓰는지.
CollectionApprovalRequestEntity.java이력97.3%엔티티승인센터가 처리하는 승인 요청 한 건 (collection_approval_requests).
CollectionEntity.java이력92.2%엔티티지식컬렉션 한 건 (collections).
CollectionFileEntity.java이력96.2%엔티티컬렉션에 등록된 파일 한 건 (collection_files).
CollectionFilePartEntity.java이력90.0%엔티티분할 단위(기본 500쪽)를 넘어 나눠 올린 컬렉션 파일의 조각 한 건 (collection_file_parts, docs/decisions/20261013-file-ingestion-pdf-unification.md §2-3).
CollectionFileReferenceDefaultEntity.java이력77.8%엔티티공용 지식컬렉션 위탁사별 참조 기본값 한 칸(collection_file_reference_defaults) — 켜진 (파일, 위탁사) 칸만 행이 있다 (docs/decisions/20261017-admin-knowledge-reference-defaults-tab.md §4).
CollectionFolderEntity.java이력86.2%엔티티지식컬렉션 폴더 한 건 (collection_folders) — docs/decisions/20261006-knowledge-collection-folder-structure.md.
CollectionFolderVectorStoreEntity.java이력75.0%엔티티공용 컬렉션 기준 폴더별 Vector Store (collection_folder_vector_stores) — 기준 폴더당 한 행.
CollectionGuideEntity.java이력83.3%엔티티지식컬렉션 등록 안내 (collection_guides) — 전역 한 벌이라 행이 하나(id = 1)뿐이다.
CollectionOwnerVectorStoreEntity.java이력75.0%엔티티사용자별 개인 컬렉션 Vector Store (collection_owner_vector_stores) — 사용자당 한 행.
CollectionStoreDescriptionEntity.java이력95.3%엔티티지식컬렉션 공용 스토어 하나의 설명(collection_store_descriptions) — docs/decisions/20261016-collection-store-description-generate.md, docs/decisions/20261016-collection-description…
CollectionApprovalRequestFile.java이력91.7%클래스전환 요청에 실린 파일 한 건 (collection_approval_request_files).
CollectionFileIndexingFailureAuditor.java이력100.0%클래스지식컬렉션 파일이 색인 실패로 바뀌면 감사 원장에 시스템 행위로 한 건 남긴다(AuditEventType#COLLECTION_FILE_INDEXING_FAILED).

exception/28GitHub

BusinessException 하위 도메인 예외 — 에러 코드와 HTTP 상태를 정한다.

CollectionAccessDeniedException.java이력100.0%예외남의 개인 컬렉션(또는 아직 승인되지 않은 공용 컬렉션)에 접근할 때.
CollectionApprovalConflictException.java이력100.0%예외같은 승인 요청을 다른 사람이 먼저 처리해 이 처리가 늦은 저장이 됐을 때.
CollectionApprovalNotAllowedException.java이력100.0%예외승인 권한이 없는 사용자가 승인 대기함을 열거나 승인·반려를 시도할 때.
CollectionApprovalRequestNotFoundException.java이력100.0%예외없는 승인 요청을 처리하려 할 때.
CollectionApprovalStateException.java이력86.7%예외지금 상태에서는 성립하지 않는 승인 요청·처리일 때.
CollectionDescriptionNoFilesException.java이력100.0%예외공용 스토어에 파일이 하나도 없어 `설명 자동 생성` 을 할 수 없다 (docs/decisions/20261019-collection-description-generate-requires-files.md).
CollectionFileBatchSizeException.java이력100.0%예외파일 일괄 삭제·재색인 요청의 파일 수가 맞지 않을 때.
CollectionFileExtensionChangedException.java이력100.0%예외파일명 수정으로 확장자를 바꾸려 했다 (docs/decisions/20261019-collection-file-rename-keep-extension.md).
CollectionFileLimitExceededException.java이력100.0%예외파일 크기·개수 제한을 넘겼을 때.
CollectionFileNameDuplicateException.java이력100.0%예외같은 컬렉션(폴더) 안에 같은 이름의 파일이 있다 (docs/decisions/20261006-knowledge-collection-folder-structure.md §3 — 공백·NFC·대소문자를 무시해 비교하며, 적재된 파일뿐 아니라 승인 대기 중인 파일도 포함한다).
CollectionFileNameEmptyException.java이력100.0%예외파일명 수정에서 확장자를 뺀 이름 부분이 비었다(`.pdf`, ` .pdf`) — 화면은 이름 부분이 비면 저장을 막지만 API 는 받고 있었다 (docs/decisions/20261020-unavailable-action-guards.md 3항).
CollectionFileNameKeywordRequiredException.java이력100.0%예외파일명 검색어가 비었을 때(공백만 있어도 같다).
CollectionFileNotDownloadableException.java이력100.0%예외파일이 있긴 하지만 지금은 내려받을 수 없을 때.
CollectionFileNotFailedException.java이력100.0%예외재색인 대상이 문서 처리 실패 파일이 아닐 때.
CollectionFileNotFoundException.java이력100.0%예외삭제하려는 파일이 그 컬렉션에 없을 때.
CollectionFileNotReadyException.java이력100.0%예외처리가 끝나지 않은(완료가 아닌) 파일을 위탁사별 참조 기본값으로 켜려 했다 — 완료 문서만 설정할 수 있다 (docs/decisions/20261017-admin-knowledge-reference-defaults-tab.md §2·§4).
CollectionFilePreviewUnavailableException.java이력100.0%예외파일은 있지만 미리 볼 수 없을 때.
CollectionFileRenameNotAllowedException.java이력100.0%예외파일명 수정은 사용자 내 컬렉션(소유자의 개인 컬렉션) 파일에만 허용한다 (docs/decisions/20260916-knowledge-collection-file-rename-removal.md 2026-10-07 개정).
CollectionFileStorageException.java이력100.0%예외업로드 파일을 로컬 저장소에 쓰지 못했을 때.
CollectionFileTypeNotAllowedException.java이력100.0%예외허용되지 않은 확장자의 파일을 올렸을 때.
CollectionFolderNotFoundException.java이력100.0%예외폴더가 없다(지워졌거나 잘못된 식별자).
CollectionFolderStateException.java이력88.9%예외폴더 규칙(docs/decisions/20261006-knowledge-collection-folder-structure.md §3)에 걸렸을 때.
CollectionIndexingWaitException.java이력100.0%예외작업자가 문서 한 건의 색인 완료를 기다리다 그 문서를 끝내지 못했을 때 — 플랫폼이 실패를 알렸거나, 제한 시간을 넘겼거나, 문서가 사라졌거나, 그 사이 파일 선점을 잃었거나, 서버가 멈추며 작업자가 중단됐다.
CollectionNotEditableException.java이력100.0%예외수정·삭제 허용 규칙(2026-08-20 확정: 개인 컬렉션 + 파일 처리 완료 + 진행 중인 승인 요청 없음)에 걸렸을 때.
CollectionNotFoundException.java이력100.0%예외조회·수정·삭제하려는 컬렉션이 없을 때.
CollectionOriginalMissingException.java이력100.0%예외저장 키가 가리키는 원본 파일이 로컬 저장소에 없을 때 — 저장 루트가 휘발성 경로였거나(컨테이너 재생성) 누가 지운 경우.
CollectionReferenceCustomerInvalidException.java이력100.0%예외위탁사 마스터에 없거나 비활성인 위탁사의 참조 기본값을 저장하려 했다 — 설정은 활성 위탁사만 바꾼다 (docs/decisions/20261017-admin-knowledge-reference-defaults-tab.md §3·§4).
SharedCollectionFileApprovalRequiredException.java이력100.0%예외승인이 끝난 공용 컬렉션에 파일을 바로 밀어 넣으려 할 때.

integration/3GitHub

base 포트 구현체 — 다른 도메인·워크플로우 엔진이 이 모듈을 부르는 입구.

CollectionDocumentCleanupScheduler.java이력100.0%클래스색인 모드와 무관하게 두 AP 에서 DB 의 미완료 삭제를 이어받는다.
CollectionIndexingPoller.java이력90.5%클래스색인 진행 중인 지식컬렉션 파일의 상태를 주기적으로 되묻는 폴러 — 런타임 시작점이다(docs/rules/backend.md).
KnowledgeScopePortImpl.java이력96.0%포트 구현KnowledgeScopePort 의 지식컬렉션 구현 — 채팅 본 답변의 file_search 범위와 의도 분류 후보를 우리 메타데이터로 정하고, 돌아온 출처를 우리 파일로 되돌린다 (docs/decisions/20261021-chat-two-stage-intent-file-search.md 3…

repository/11GitHub

Spring Data JPA 저장소 인터페이스.

CollectionFileNameHit.java이력100.0%DTO파일명 검색에서 걸린 파일 한 건 — 컬렉션·파일 식별자와 현재 파일명·색인 상태.
CollectionFilePreviewSource.java이력100.0%record미리보기를 만들 파일 한 건 — 원본 저장 키·파일명과 지금 미리보기 상태.
CollectionIndexingTarget.java이력100.0%record배치 색인 대상 파일 한 건 — 컬렉션과 파일 식별자.
CollectionApprovalRequestRepository.java이력저장소승인 요청 저장소.
CollectionFileReferenceDefaultRepository.java이력저장소공용 지식컬렉션 위탁사별 참조 기본값 — docs/decisions/20261017-admin-knowledge-reference-defaults-tab.md §4.
CollectionFolderRepository.java이력저장소지식컬렉션 폴더 저장소.
CollectionFolderVectorStoreRepository.java이력저장소공용 컬렉션 기준 폴더별 Vector Store 저장소 — 키는 기준 폴더 id 다.
CollectionGuideRepository.java이력저장소등록 안내 저장소 — 행이 하나뿐이다(CollectionGuideEntity#SINGLETON_ID).
CollectionOwnerVectorStoreRepository.java이력저장소사용자별 개인 컬렉션 Vector Store 저장소 — 키는 사번이다.
CollectionRepository.java이력저장소지식컬렉션 저장소.
CollectionStoreDescriptionRepository.java이력저장소공용 스토어 설명 — docs/decisions/20261016-collection-store-description-generate.md.

service/30GitHub

비즈니스 로직과 트랜잭션 경계.

ApprovalFileContent.java이력100.0%record승인 검토 화면에 제공할 원본 파일과 응답 메타데이터.
CollectionFileDownload.java이력100.0%record내려받기 직전에 확인된 파일 한 건 — 응답 머리글에 쓸 값과, 본문을 어디서 가져올지.
CollectionFileUpload.java이력100.0%record서비스 계층이 보는 업로드 파일 한 건.
CollectionApprovalService.java이력89.8%오늘 · #2188서비스승인센터 — 승인 요청·승인·반려.
CollectionDocumentCleanupService.java이력99.3%서비스삭제 의도를 DB 변경과 함께 커밋한다.
CollectionFilePreviewService.java이력97.3%서비스지식컬렉션 파일 미리보기 — 원본 옆에 저장해 둔 앞 hwss.collection.preview-pages(기본 5)쪽 PDF 를 내려준다 (docs/decisions/20261014-collection-file-preview.md).
CollectionFolderService.java이력83.8%서비스지식컬렉션 폴더 트리 — 조회·생성·이름 변경·삭제와 공용 대상 선택지 (docs/decisions/20261006-knowledge-collection-folder-structure.md §2·§3).
CollectionGuideService.java이력100.0%서비스등록 안내(관리자 `등록 안내 설정`) — 읽기는 누구나, 저장은 지식컬렉션 관리 권한자만.
CollectionIndexingBatchService.java이력95.4%서비스지식컬렉션 배치 색인 — 정해진 시각에 대기(PENDING) 파일을 플랫폼에 보낸다 (docs/decisions/20261013-file-ingestion-pdf-unification.md §4).
CollectionIndexingStatusService.java이력93.5%서비스색인 진행 중(INDEXING) 파일의 상태를 플랫폼에 되물어 종료 상태로 옮기는 서비스 — 색인 상태 폴러의 판단부다.
CollectionReferenceDefaultService.java이력97.8%오늘 · #2188서비스공용 지식컬렉션의 위탁사별 참조 기본값 — 관리자 `지식컬렉션 관리` 상세의 `위탁사별 참조 기본값` 탭 (docs/decisions/20261017-admin-knowledge-reference-defaults-tab.md §4).
CollectionSearchService.java이력100.0%서비스CollectionSearchService 구현.
CollectionService.java이력95.7%3일 전 · #2099서비스지식컬렉션 — 생성·조회·수정·삭제·파일 등록/삭제/이름 수정/내려받기.
CollectionStoreDescriptionService.java이력89.6%서비스지식컬렉션 설명 — 스토어마다 하나, 파일이 바뀌면 설명 생성 API 로 다시 만든다 (docs/decisions/20261016-collection-store-description-generate.md).
CollectionAccessPolicy.java이력88.9%클래스"지식컬렉션 관리 권한자"(관리자) 판정 한 곳.
CollectionAdditionVisibility.java이력97.0%클래스공용 컬렉션 문서 추가 요청 파일의 노출 범위 — 승인 전·반려된 추가 파일(그 파일의 최신 문서 추가 요청이 승인이 아님)은 요청자와 지식컬렉션 관리자에게만 보인다.
CollectionAfterCommitTasks.java이력100.0%클래스커밋 뒤 Studio 정리(문서 삭제 원장 즉시 실행·Store 삭제)를 요청 스레드가 아니라 전용 작업자로 돌린다.
CollectionBatchWindow.java이력100.0%클래스지금이 배치 색인 시간창 안인지와 이번 창의 끝 시각(docs/decisions/20261102-collection-batch-time-window.md).
CollectionFilePreparer.java이력97.9%2일 전 · #2109클래스색인 직전에 등록 파일을 플랫폼에 올릴 문서로 만든다 — PDF 로 바꾸고, 쪽 수 상한을 넘으면 겹침을 두고 나눈다 (docs/decisions/20261013-file-ingestion-pdf-unification.md §1·§2).
CollectionFilePreviewMaker.java이력92.3%클래스지식컬렉션 파일 미리보기(앞 hwss.collection.preview-pages쪽, 기본 5)를 만들어 원본 옆에 저장한다 (docs/decisions/20261014-collection-file-preview.md).
CollectionFileRegistrar.java이력92.5%클래스업로드 파일을 검증·저장해 컬렉션에 붙이는 한 곳.
CollectionFileTypeValidator.java이력100.0%클래스업로드 파일의 확장자·MIME 타입 검사 (docs/rules/secure.md — "파일 업로드 시 확장자 + MIME 타입 검증").
CollectionFolderPathResolver.java이력97.9%클래스컬렉션 목록·승인 목록이 폴더 경로(파일 메타 정보)를 붙일 때 쓰는 경로 조회.
CollectionFolderTree.java이력97.4%클래스한 공간(또는 한 사용자)의 폴더 트리를 메모리에 조립한 것 — 경로·하위 폴더·점유 컬렉션 조회와 형제 이름 중복 판정.
CollectionIndexingDispatcher.java이력92.0%클래스비동기 즉시 모드와 배치 시간창의 DB 기반 작업자.
CollectionNames.java이력100.0%클래스폴더 이름·파일명의 중복 판정용 정규화 (docs/decisions/20261006-knowledge-collection-folder-structure.md §3 — 「공백·NFC·대소문자 무시」).
CollectionVectorGateway.java이력91.8%2일 전 · #2093클래스이 도메인이 외부 AI 플랫폼(N01 포트)으로 나가는 유일한 통로.
CollectionVectorStoreCreationLock.java이력86.1%클래스Store 가 아직 없어도 업무 대상별로 잠근다.
EmployeeNames.java이력100.0%클래스사번 → 이름 — 사용자 디렉터리(OrganizationScopePort)에서 찾는다.
SharedPlacementEvaluator.java이력92.9%5일 전 · #1970클래스개인→공용 전환 요청의 공용 대상(SharedPlacement) 평가 (docs/decisions/20261006-knowledge-collection-folder-structure.md §4).

storage/4GitHub

업로드 파일 저장 — 로컬 디스크, 설정 시 S3.

DerivedFile.java이력100.0%enum원본에서 만든 파생 파일 — 원본 저장 키 옆에 접미사를 붙여 둔다({저장 키}.preview.pdf).
StoredCollectionFile.java이력100.0%record로컬 저장소에 실제로 기록된 파일 한 건의 결과.
CollectionFileStorage.java이력86.6%클래스업로드된 컬렉션 파일을 로컬 디스크에 두는 저장소 (야간 플랜 20260821 N04).
S3OriginalStore.java이력95.2%클래스지식컬렉션 원본 파일의 S3 보관소.

web/5GitHub

REST 컨트롤러 — HTTP 요청을 서비스로 넘기고 ApiResponse 로 감싼다.

CollectionApprovalController.java이력화면 /admin/approval-centerSwagger78.7%API지식컬렉션 승인센터 API (야간 플랜 20260821 N05).
CollectionController.java이력화면 미연결Swagger75.7%3일 전 · #2099API지식컬렉션 API (야간 플랜 20260821 N04).
CollectionFolderController.java이력화면 미연결Swagger83.3%API지식컬렉션 폴더 API (docs/decisions/20261006-knowledge-collection-folder-structure.md).
CollectionGuideController.java이력화면 미연결Swagger77.8%API지식컬렉션 등록 안내 API — 관리자 `등록 안내 설정` 과 사용자 파일 추가 모달의 `관리자 안내`.
CollectionFilePreviewResponses.java이력0.0%클래스미리보기 PDF 응답 — 지식컬렉션 화면과 승인센터가 같은 모양으로 내려준다.

빌드·리소스1GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base, collection-shared 모듈 참조.

resources/db/migration/25GitHub

Flyway 마이그레이션 SQL — 파일명 V<YYYYMMDDhhmm>__설명. 앱 기동 시 모든 모듈의 것이 버전 순으로 합쳐 실행된다.

V202608210001__create_collection.sql이력마이그레이션지식컬렉션 도메인 스키마 (야간 플랜 20260821 N03).
V202608220001__add_collection_vector_collection_id.sql이력마이그레이션지식컬렉션 ↔ 외부 AI 플랫폼 벡터 컬렉션 연결 (야간 플랜 20260821 N04).
V202609160005__comment_collection_schema.sql이력마이그레이션지식컬렉션 테이블·컬럼 설명 (근거: docs/decisions/20260916-db-schema-doc-generation.md).
V202609160017__fix_collections_comment.sql이력마이그레이션collections 설명 정정.
V202610061110__add_first_review_to_collection_approval_requests.sql이력마이그레이션지식컬렉션 1차 승인 (docs/decisions/20261006-collection-first-approval-level.md 🟢).
V202610081900__create_collection_folders.sql이력마이그레이션지식컬렉션 폴더 체계 (docs/decisions/20261006-knowledge-collection-folder-structure.md — 2026-10-07 제품 반영).
V202610081901__seed_collection_folders.sql이력마이그레이션공용 폴더 시드 (docs/decisions/20261006-knowledge-collection-folder-structure.md §2 — 프로토타입 hwss-investigation-agent-prototype/lib/knowledge-folder.ts 의 buildDefaultFolder…
V202610081902__assign_folders_to_legacy_collections.sql이력마이그레이션폴더 체계 도입 전에 만들어진 컬렉션에 폴더를 배정한다 (프로토타입 lib/knowledge-legacy-migration.ts 와 같은 취지 — 폴더당 컬렉션 하나를 지키기 위해 컬렉션마다 자기 이름의 말단 폴더를 새로 만든다).
V202610081903__add_placement_to_collection_approval_requests.sql이력마이그레이션개인→공용 전환 요청의 공용 대상(SharedPlacement) 과 승인 결과 (docs/decisions/20261006-knowledge-collection-folder-structure.md §4).
V202610081904__create_collection_guides.sql이력마이그레이션지식컬렉션 등록 안내 (관리자 `등록 안내 설정`) — 사용자 파일 추가 모달의 `관리자 안내` 박스에 보이는 코멘트.
V202610081910__add_files_to_collection_approval_requests.sql이력마이그레이션개인→공용 전환 요청을 파일 단위로 (docs/decisions/20261006-knowledge-collection-folder-structure.md §4-1).
V202610121000__create_collection_owner_vector_stores.sql이력마이그레이션개인 컬렉션의 플랫폼 컬렉션(Vector Store)을 사용자당 하나로 둔다 (docs/decisions/20261012-personal-collection-owner-vector-store.md).
V202610131000__create_collection_folder_vector_stores.sql이력마이그레이션공용 컬렉션의 플랫폼 컬렉션(Vector Store)을 2depth 「기준 폴더」 단위로 둔다 (docs/decisions/20261013-shared-collection-2depth-vector-store.md).
V202610131900__create_collection_file_parts.sql이력마이그레이션지식컬렉션 파일의 PDF 변환·분할 적재(분할 단위는 설정 max-part-pages, 기본 500쪽) (docs/decisions/20261013-file-ingestion-pdf-unification.md §2).
V202610151630__add_collection_file_preview.sql이력마이그레이션지식컬렉션 파일 미리보기(앞 N쪽 PDF)를 S3 에 미리 만들어 두고, DocMate 로 변환한 전체 PDF 는 색인 전까지만 임시 보관한다 (docs/decisions/20261015-collection-file-preview-stored.md).
V202610161545__add_collection_file_indexing_claimed_at.sql이력마이그레이션지식컬렉션 색인 선점 시각 (docs/decisions/20261016-collection-indexing-claim-commit.md).
V202610161600__create_collection_store_descriptions.sql이력마이그레이션지식컬렉션 설명 — 스토어마다 하나, 파일이 바뀌면 설명 생성 API 로 다시 만든다 (docs/decisions/20261016-collection-store-description-generate.md).
V202610162000__collection_store_description_user_edited.sql이력마이그레이션지식컬렉션 설명 — 사용자가 고치면 자동 생성을 멈추고 `설명 자동 생성` 버튼으로 다시 자동으로 돌린다, 개인 컬렉션은 설명이 없다 (docs/decisions/20261016-collection-description-manual-generate.md, V202610161600 개정).
V202610181000__create_collection_file_reference_defaults.sql이력마이그레이션공용 지식컬렉션 위탁사별 참조 기본값 (docs/decisions/20261017-admin-knowledge-reference-defaults-tab.md §4) 공용 컬렉션은 위탁사 구분값 없이 전 위탁사 공통이라, 위탁사마다 어떤 문서를 기본으로 참조할지를 문서 단위로 켜고 끈다.
V202610261848__claim_collection_store_description_generation.sql이력마이그레이션설명 생성·Studio 반영은 같은 작업 UUID 로 선점한다.
V202610261849__create_collection_document_cleanup_tasks.sql이력마이그레이션파일·컬렉션 삭제 후에도 남아야 하므로 업무 행에 FK 를 두지 않는다.
V202610271029__add_collection_document_cleanup_gave_up.sql이력마이그레이션삭제 원장의 재시도 상한.
V202610272215__add_collection_approval_request_version.sql이력마이그레이션승인 요청 행의 낙관적 잠금 버전.
V202610281700__add_collection_file_attach_pending.sql이력마이그레이션개인 → 공용 통째 전환의 문서 붙이기를 승인 뒤로 미룬다 (docs/decisions/20261028-collection-conversion-deferred-attach.md).
V202610311000__add_collection_guide_updated_by.sql이력마이그레이션지식컬렉션 등록 안내의 갱신자 — 사용자 화면 `관리자 안내` 머리에 `갱신자 · 시각` 을 보인다(프로토타입 collection-guide-box).

src/test/43GitHub

테스트 파일 — 펼쳐서 보기
config/CollectionIngestionPropertiesTest.java이력테스트CollectionIngestionProperties 대상 테스트.
config/CollectionOriginalStorageConfigTest.java이력테스트원본 저장소 설정 — 종류 판정과 S3 보관소 빈 생성(접속 정보로 클라이언트를 만든다, 네트워크는 쓰지 않는다).
config/CollectionPropertiesTest.java이력테스트CollectionProperties 대상 테스트.
entity/CollectionApprovalRequestEntityTest.java이력테스트승인 요청의 유형 분리와 처리 규칙 — 2026-08-19 리뷰 §4(반려 사유 필수·재요청 허용)와 2026-08-20 확정(공용 컬렉션 파일 추가는 전환과 별개 시나리오)을 코드로 고정한다.
entity/CollectionEntityTest.java이력테스트컬렉션 루트의 상태 전이 규칙 — 2026-08-19 리뷰 §4(개인 즉시 사용 / 공용 승인 후 사용 / 관리자 콘솔 등록은 즉시 공용)와 2026-08-20 확정(전환은 승인 시점, 반려 시 개인으로 계속 사용)을 코드로 고정한다.
entity/CollectionFileClaimPropertyTest.java이력테스트CollectionFileClaimProperty 대상 테스트.
entity/CollectionFileEntityTest.java이력테스트파일 인덱싱 상태 전이 — 특히 "실패 사유는 실패 상태에서만 남는다"는 불변을 고정한다.
entity/CollectionFileIndexingFailureAuditorTest.java이력테스트색인 실패가 된 저장 뒤에 감사 원장에 시스템 행위·실패로 한 건 남긴다.
integration/CollectionDocumentCleanupSchedulerTest.java이력테스트CollectionDocumentCleanupScheduler 대상 테스트.
integration/CollectionIndexingPollerTest.java이력테스트폴러는 고르고 하나씩 넘길 뿐이다 — 한 컬렉션의 예외가 나머지를 막지 않는지만 본다.
integration/KnowledgeScopePortImplTest.java이력테스트KnowledgeScopePortImpl 유닛 테스트 — 채팅 본 답변의 file_search 범위·의도 분류 후보·출처 되돌리기 (docs/decisions/20261021-chat-two-stage-intent-file-search.md 3·4·6항).
service/CollectionAfterCommitTasksTest.java이력테스트CollectionAfterCommitTasks 대상 테스트.
service/CollectionApprovalServiceTest.java이력오늘 · #2188테스트CollectionApprovalService 유닛 테스트 (야간 플랜 20260821 N05 완료 조건 — 상태 전이 승인/반려/재요청).
service/CollectionBatchWindowTest.java이력테스트배치 시간창 판정 — 시작 포함·끝 제외, 자정 넘김, 시간대(docs/decisions/20261102-collection-batch-time-window.md).
service/CollectionConversionDeferredAttachTest.java이력테스트개인 → 공용 통째 전환의 문서 붙이기를 승인 뒤 색인 주체로 미룬다 — docs/decisions/20261028-collection-conversion-deferred-attach.md.
service/CollectionDocumentCleanupServiceTest.java이력테스트CollectionDocumentCleanupService 대상 테스트.
service/CollectionFileNameKeywordTest.java이력테스트파일명 검색어 정규화(CollectionService#fileNameKeyword).
service/CollectionFilePreparerTest.java이력2일 전 · #2109테스트CollectionFilePreparer — 변환에 쓴 원본 사본을 작업이 끝나면 돌려주는지(S3 보관이면 로컬에 원본을 남기지 않는다, docs/decisions/20261013-file-ingestion-pdf-unification.md §4).
service/CollectionFilePreviewMakerTest.java이력테스트CollectionFilePreviewMaker — 원본을 변환해 앞쪽만 잘라 원본 옆에 두고, 색인 대기 파일이면 변환본도 남긴다 (docs/decisions/20261014-collection-file-preview.md).
service/CollectionFilePreviewServiceTest.java이력테스트CollectionFilePreviewService — 저장해 둔 미리보기를 내주고, 없으면 원본에서 만들고, 그것도 안 되면 플랫폼 문서에서 자른다 (docs/decisions/20261014-collection-file-preview.md).
service/CollectionFileRegistrarPageLimitTest.java이력테스트개인·공용 컬렉션 업로드는 쪽 수를 보지 않는다 — docs/decisions/20261013-file-ingestion-pdf-unification.md §5 개정(2026-10-16): 개인 컬렉션 쪽 수 상한(예전 1,000쪽)과 업로드 때 DocMate 쪽 수 검사를 없앴다.
service/CollectionFileSummaryMappingTest.java이력테스트컬렉션 파일 행 → 화면 응답(CollectionFileSummary) 변환 유닛 테스트.
service/CollectionFileUploadTest.java이력테스트CollectionFileUpload 대상 테스트.
service/CollectionFolderServiceTest.java이력테스트CollectionFolderService 유닛 테스트 — 폴더 규칙(docs/decisions/20261006-knowledge-collection-folder-structure.md §3): 공용은 관리자만, 내 컬렉션은 소유자만, 파일이 적재된 폴더 아래 금지, 단계 상한, 형제 이름 중복…
service/CollectionGuideServiceTest.java이력테스트CollectionGuideService 대상 테스트.
service/CollectionIndexingBatchServiceTest.java이력테스트파일 한 건 색인(CollectionIndexingBatchService#indexFile) — ① 선점을 먼저 커밋하고 ② 변환·업로드는 트랜잭션 밖에서, ③ 결과만 짧은 트랜잭션으로 쓴다(docs/decisions/20261016-collection-indexing-claim-commit.m…
service/CollectionIndexingDispatcherTest.java이력테스트CollectionIndexingDispatcher 대상 테스트.
service/CollectionIndexingStatusServiceTest.java이력테스트CollectionIndexingStatusService 유닛 테스트 — 진행 중 파일을 언제 되묻고 언제 닫는가.
service/CollectionNamesTest.java이력테스트중복 판정 정규화 — 프로토타입 normalizeUploadFileName 과 같은 규칙(공백 제거·NFC·소문자).
service/CollectionReferenceDefaultServiceTest.java이력오늘 · #2188테스트공용 지식컬렉션 위탁사별 참조 기본값 — 켜진 칸만 행, 보낸 위탁사만 통째로 교체, 완료 아닌 파일 409·지워진 파일 무시, 비활성 위탁사 400, 공용 컬렉션만, 감사 한 건(docs/decisions/20261017-admin-knowledge-reference-defaults-tab.m…
service/CollectionSearchServiceTest.java이력테스트CollectionSearchService 유닛 테스트 (docs/rules/testing.md).
service/CollectionServiceTest.java이력3일 전 · #2099테스트CollectionService 유닛 테스트 (docs/rules/testing.md — public 메서드마다 정상 1개 + 던질 수 있는 도메인 예외마다 1개).
service/CollectionStoreDescriptionServiceTest.java이력테스트스토어 설명 — 스토어마다 한 행(공용: Studio 스토어, 개인: 사용자), 마지막 파일이 끝난 뒤 생성 API 한 번, 빈 스토어는 빈 설명, 실패만 남으면 유지, 429·실패 재시도, 사용자 수정 우선, 생성 대기 표시(docs/decisions/20261016-collection-sto…
service/CollectionVectorGatewayIngestionTest.java이력2일 전 · #2093테스트색인 시점(즉시·배치)과 단위(PDF 변환·1,000쪽 겹침 분할) — docs/decisions/20261013-file-ingestion-pdf-unification.md §2·§4.
service/CollectionVectorStoreCreationLockTest.java이력테스트CollectionVectorStoreCreationLock 대상 테스트.
service/SharedPlacementEvaluatorTest.java이력테스트공용 대상 평가 — 프로토타입 isValidSharedPlacement 와 같은 규칙.
service/TestFilePreparers.java이력클래스서비스 유닛 테스트용 준비기 — 디스크를 건드리지 않는다.
storage/CollectionFileStorageS3Test.java이력테스트CollectionFileStorage 의 S3 보관 구성(docs/decisions/20261013-file-ingestion-pdf-unification.md §4) — 로컬 쓰기·복사·삭제가 S3 에도 같은 저장 키로 가는지, 로컬 사본이 없으면 S3 에서 채우는지, 다운로드는 S3 원본을 여는지.
storage/CollectionFileStorageTest.java이력테스트CollectionFileStorage — 실제 파일시스템에 쓰는 부분이라 임시 디렉터리로 검증한다.
storage/S3OriginalStoreTest.java이력테스트S3OriginalStore — 객체 키 규칙과 S3 요청 모양, 실패를 저장소 예외로 바꾸는지.
web/CollectionApprovalDecisionAuditTest.java이력테스트승인·반려 실패는 거절까지 사유 코드로 남고, 성공은 서비스 몫이라 컨트롤러가 남기지 않는다(결정 20261103-confirm-approval-audit-failures).
web/CollectionControllerAuditTest.java이력테스트지식컬렉션의 삭제·원본 반출·안내 변경 감사 기록 — docs/decisions/20261018-audit-event-scope-expansion.md.
web/CollectionWorkAuditTest.java이력테스트지식컬렉션 작업(생성·파일 등록·이름 변경·설명 변경·승인 요청) 감사 기록 — docs/decisions/20261019-collection-work-audit-events.md.

modules/ · 도메인

modules/organization-shared/GitHub

조직·권한 · 공유 DTO

조직·권한 · 공유 DTO — 부서 트리·사용자·레벨·메뉴 권한 DTO.

18 소스0 테스트
의존 모듈 base
주요 라이브러리 spring-boot-starter-validation

dto/18GitHub

모듈 경계를 넘는 요청·응답 DTO (record).

MenuPermissionMatrixResponse.java이력DTO권한 관리 화면용 매트릭스 — 레벨 5종 × 메뉴.
MenuPermissionResponse.java이력DTO한 레벨이 특정 메뉴에 대해 가지는 권한.
MenuPermissionSaveRequest.java이력DTO레벨 × 메뉴 권한 매트릭스 저장 요청 (야간 플랜 20260824 N03).
MyEmailUpdateRequest.java이력DTO본인 이메일 수정 요청 — 내 정보 화면.
OrganizationChangeAcknowledgeRequest.java이력DTO조직 변경 확인 완료 요청 — 화면에 보였던 변경 대상자 사번 전체.
OrganizationChangeAcknowledgeResponse.java이력DTO조직 변경 확인 완료 결과.
OrganizationChangeSummaryResponse.java이력DTO조직도의 조직 변경 현황 — 배너·「변경 조직」 목록·「변경 대상자만」 개수가 이 응답 하나로 그려진다.
RoleResponse.java이력DTO사용자 레벨 한 종.
UserPageResponse.java이력DTO조직도 직원 조회 결과 한 쪽.
UserProfileUpdateRequest.java이력DTO관리자 조직도 상세 팝업의 시스템 부수정보(이메일·사용자 레벨) 일괄 수정 요청.
UserResponse.java이력DTO사용자(임직원) 한 명.
UserRoleAssignRequest.java이력DTO사용자 보유 레벨 교체 요청 (야간 플랜 20260828 N01).
AccountStatus.java이력enum계정 상태.
ConsoleType.java이력enum메뉴가 속한 콘솔.
DepartmentType.java이력enum부서 유형.
UserSort.java이력enum조직도 직원 목록에서 허용하는 서버 정렬 열.
DepartmentTreeNode.java이력record조직도 트리의 노드 하나.
OrganizationChangeTarget.java이력record조직 변경 대상자 한 명 — 소속·직책·직급이 바뀌어 레벨을 다시 볼 사원 (docs/decisions/20260827-orgchart-change-tracking.md).

빌드·리소스1GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base 모듈 참조.

modules/ · 도메인

modules/organization-core/GitHub

조직·권한 · 로직

조직·권한 · 로직 — 조직도·사용자·레벨 5종 × 메뉴 권한, 그리고 인증 골격이 쓰는 세션·refresh 토큰·부수정보 저장 포트의 구현.

63 소스17 테스트24 마이그레이션
의존 모듈 base organization-shared
주요 라이브러리 spring-boot-starter-web spring-boot-starter-validation spring-boot-starter-data-jpa springdoc-openapi-starter-webmvc-ui

audit/1GitHub

감사 원장 적재 포트와 값 객체.

PermissionAuditRecorder.java이력100.0%클래스권한·계정 부수정보 변경(사용자 레벨 교체·이메일 변경·메뉴 권한 저장)의 감사 원장 적재 — docs/specs/audit-event-catalog.md 「기록 중」.

config/4GitHub

@ConfigurationProperties 설정 바인딩과 빈 구성 (application.yml hwss.* 블록).

OrganizationConfig.java이력0.0%설정조직 모듈 설정 활성화.
OrganizationDirectoryProperties.java이력100.0%설정조직도 직원 표시 설정(hwss.organization.directory.*).
OrganizationProperties.java이력100.0%설정조직·사용자 도메인 운영 설정 (야간 플랜 20260828 N01).
OrganizationScopeProperties.java이력100.0%설정조회 범위 설정 (docs/decisions/20261020-level4-company-wide-scope.md).

credential/8GitHub

인증 골격 포트 어댑터 — 세션, refresh 토큰, 사용자 부수정보.

AuthSessionEntity.java이력81.2%엔티티세션 기록 1행 — V202610121623.
RefreshTokenEntity.java이력66.7%엔티티refresh 토큰 원장 1행 — V202608260003.
AuthSessionRepository.java이력저장소세션 기록 조회·갱신.
RefreshTokenRepository.java이력저장소refresh 토큰 원장 조회·폐기.
OrganizationAuthSessionStoreAdapter.java이력100.0%포트 구현AuthSessionStorePort 의 JPA 구현 — 세션 기록(V202610121623).
OrganizationRefreshTokenStoreAdapter.java이력93.1%5일 전 · #1970포트 구현RefreshTokenStorePort 의 JPA 구현 — 회전·무효화 원장(V202608260003).
OrganizationUserSupplementAdapter.java이력100.0%포트 구현UserSupplementLookupPort 의 JPA 구현 — 우리 DB 가 원장인 부수정보를 조합한다: 이메일은 user_supplements(사번당 1행), 권한은 user_roles(1:N) 의 대표 권한 (UserRoleSelector).
OrganizationUserSupplementStoreAdapter.java이력100.0%오늘 · #2181포트 구현UserSupplementStorePort 의 JPA 구현 — 온보딩이 부여하는 값을 두 테이블에 나눠 적는다: 이메일은 user_supplements(사번당 1행), 기본 권한은 user_roles(1:N 의 첫 행).

entity/9GitHub

JPA 엔티티 — 테이블 한 행을 매핑한다.

DepartmentEntity.java이력100.0%엔티티부서 한 개 (조직도 트리의 노드).
OrganizationChangeTrackingEntity.java이력0.0%엔티티조직 변경 사원 추적 설정 — 한 행(id = 1).
RoleEntity.java이력72.7%엔티티사용자 레벨 5종(IT 슈퍼관리자 · 본부장·실장 · 단장·팀장 · 센터장·파트장 · 일반사용자) 중 하나 — 순서·이름은 docs/decisions/20261014-role-level-order-and-names.md (단·팀이 센터보다 위).
RoleMenuPermissionEntity.java이력94.4%엔티티한 레벨이 특정 메뉴에 대해 가지는 사용 권한 (레벨 5종 × 메뉴 매트릭스의 셀 하나).
UserChangeAcknowledgementEntity.java이력84.6%엔티티사원별 조직 변경 확인 기록 — 관리자가 확인한 마지막 인사 변경일시.
UserChangeHistoryEntity.java이력0.0%엔티티로컬·CI 표본 — 사원별 최종 인사 변경일시.
UserEntity.java이력93.3%엔티티사용자(임직원) 한 명 — 라이브 디렉터리(스마트심사 뷰)가 대체할 값만 남긴 표본이다.
UserRoleEntity.java이력66.7%엔티티사용자 권한 레벨 한 건 — 사용자:권한 은 1:N 이다(2026-08-26 지시, V202608260002 분리).
UserSupplementEntity.java이력80.0%엔티티사용자 부가정보 1행 — 사번당 1행인 값(이메일)만 가진다.

exception/15GitHub

BusinessException 하위 도메인 예외 — 에러 코드와 HTTP 상태를 정한다.

BoundMenuPermissionAssignmentException.java이력100.0%예외묶음 머리 메뉴를 따르는 행(셀)을 직접 저장하려 할 때(결정 20261022-admin-lnb-workspace-workflow 14항).
DepartmentNotFoundException.java이력100.0%예외조회한 부서 코드가 조직도에 없을 때.
DuplicateMenuPermissionAssignmentException.java이력100.0%예외한 저장 요청에 같은 (레벨, 메뉴) 셀이 두 번 이상 담겼을 때.
DuplicateUserEmailException.java이력100.0%예외다른 사번의 시스템 부수정보에 이미 등록된 이메일.
EmailChangeBeforeOnboardingException.java이력100.0%예외최초 로그인(이메일 등록·기본 레벨 부여)을 마치지 않은 사용자의 본인 이메일 수정.
EmptyUserRoleAssignmentException.java이력100.0%예외보유 레벨을 하나도 남기지 않는 교체 요청일 때.
FixedRoleMenuPermissionException.java이력100.0%예외고정 레벨(슈퍼관리자) 행을 저장 요청에 담았을 때.
InvalidFirstApprovalRoleException.java이력100.0%예외1차 승인 지정이 성립하지 않을 때 — 고정 레벨(최종 승인 레벨)이거나, 저장 후 승인센터를 쓸 수 없는 레벨일 때.
LastSuperAdminRoleException.java이력100.0%예외마지막 슈퍼관리자의 슈퍼관리자 레벨을 회수하려 할 때.
RoleNotFoundException.java이력100.0%예외조회한 레벨 코드가 등록된 5종에 없을 때.
UnknownMenuPermissionMenuException.java이력100.0%예외저장 요청 본문의 (레벨, 메뉴) 셀이 매트릭스에 없을 때.
UnknownMenuPermissionRoleException.java이력100.0%예외저장 요청 본문에 등록되지 않은 레벨 코드가 담겼을 때.
UnknownUserRoleAssignmentException.java이력100.0%예외레벨 교체 요청 본문에 등록되지 않은 레벨 코드가 담겼을 때.
UserNotFoundException.java이력100.0%예외조회한 사번의 사용자가 없을 때.
UserRoleAssignNotAllowedException.java이력100.0%예외허용 레벨이 아닌 사용자가 다른 사용자의 보유 레벨을 바꾸려 할 때.

repository/9GitHub

Spring Data JPA 저장소 인터페이스.

DepartmentRepository.java이력저장소부서 조회.
OrganizationChangeTrackingRepository.java이력저장소조직 변경 사원 추적 설정(한 행) 조회.
RoleMenuPermissionRepository.java이력저장소레벨 × 메뉴 권한 조회.
RoleRepository.java이력저장소사용자 레벨 조회.
UserChangeAcknowledgementRepository.java이력저장소사원별 조직 변경 확인 기록 — 사번이 PK 라 기본 메서드로 충분하다.
UserChangeHistoryRepository.java이력저장소로컬·CI 표본의 사원별 최종 인사 변경일시 — 스마트심사 미연결 환경의 폴백.
UserRepository.java이력저장소사용자 조회.
UserRoleRepository.java이력저장소사용자 권한 조회 — 역할은 LAZY 연관이라 UserRepository 와 같은 이유로 join fetch 로 한 번에 읽는다.
UserSupplementRepository.java이력저장소사용자 부가정보 조회 — 사번이 PK 라 파생 쿼리 없이 기본 메서드로 충분하다.

scope/3GitHub

OrganizationCollectionApprovalPolicyAdapter.java이력93.2%포트 구현CollectionApprovalPolicyPort 의 organization 쪽 구현 — 권한 매트릭스의 승인센터 행을 읽는다 (docs/decisions/20261006-collection-first-approval-level.md).
OrganizationMenuPermissionLookupAdapter.java이력100.0%포트 구현MenuPermissionLookupPort 의 organization 쪽 구현 — API 인가 인터셉터가 매 요청 이 판정을 부른다 (docs/decisions/20261012-api-menu-authorization.md).
OrganizationScopeAdapter.java이력93.6%포트 구현OrganizationScopePort 의 organization 쪽 구현 — 세션의 보유 레벨과 소속 부서를 부서 트리에 대조해 조회 범위(담당 조사자 사번 집합)를 만든다 (docs/decisions/20261020-level4-company-wide-scope.md 🟢 — 20260918…

security/2GitHub

base 의 사용자 조회 포트 어댑터.

OrganizationUserAccountLookupAdapter.java이력100.0%포트 구현UserAccountLookupPort 의 organization 쪽 구현 — 인증이 알아낸 사번으로 세션에 담을 사용자 정보를 읽어준다.
OrganizationUserEmailLookupAdapter.java이력100.0%포트 구현UserEmailLookupPort 의 organization 쪽 구현 — 사용자 이메일을 돌려준다.

service/7GitHub

조직도·권한 조회와 레벨 부여·회수 로직.

MenuPermissionService.java이력99.5%서비스레벨 × 메뉴 권한 조회·저장.
OrganizationChangeService.java이력95.2%서비스조직 변경 사원 — 소속·직책·직급이 바뀌어 관리자가 레벨을 다시 볼 사원을 고르고, 「변경 확인 완료」를 기록한다 (docs/decisions/20260827-orgchart-change-tracking.md 🟢).
OrganizationService.java이력95.7%서비스조직도·사용자 조회.
UserEmailChangeService.java이력100.0%서비스이메일(보고서 초안 수신 주소) 변경 — 본인 수정(내 정보)과 관리자 수정(조직도 직원 상세)이 같은 규칙을 쓴다 (docs/decisions/20261016-self-email-edit.md).
UserProfileUpdateService.java이력100.0%서비스관리자 조직도 상세 팝업에서 이메일과 사용자 레벨을 한 번에 저장한다.
UserRoleAssignmentService.java이력98.6%서비스사용자 레벨 마스터 조회 + 보유 레벨 부여·회수.
UserRoleSelector.java이력66.7%클래스보유 권한 정렬 규칙 — 사용자:권한 은 1:N 이고(V202608260002) 목록은 항상 level_order 가 앞선(상위) 레벨부터 정렬한다.

web/5GitHub

REST 컨트롤러 — HTTP 요청을 서비스로 넘기고 ApiResponse 로 감싼다.

DepartmentController.java이력화면 /admin/dashboard/lifecycle화면 /admin/organizationSwagger0.0%API조직도 조회 API (docs/rules/api.md 의 URL 패턴·표준 응답 구조).
MenuPermissionController.java이력화면 /admin/permissionsSwagger0.0%API사용자 레벨 × 메뉴 권한 API.
OrganizationChangeController.java이력화면 /admin/organizationSwagger0.0%API조직도의 조직 변경 사원 — 스마트심사 인사 변경(소속·직책·직급)으로 레벨을 다시 볼 사원 현황과 「변경 확인 완료」 (docs/decisions/20260827-orgchart-change-tracking.md 🟢).
RoleController.java이력화면 /admin/organizationSwagger0.0%API사용자 레벨 마스터 조회 API.
UserController.java이력화면 /admin/organization화면 /user/profileSwagger0.0%API사용자 조회 + 시스템 부수정보(이메일·보유 레벨) 편집 API.

빌드·리소스1GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base, organization-shared 모듈 참조.

resources/db/migration/24GitHub

Flyway 마이그레이션 SQL — 파일명 V<YYYYMMDDhhmm>__설명. 앱 기동 시 모든 모듈의 것이 버전 순으로 합쳐 실행된다.

V202608190006__create_organization.sql이력마이그레이션P0-4 조직·사용자·권한 스키마.
V202608190007__seed_organization_roles_and_menu_permissions.sql이력마이그레이션P0-4 시드 (1/2) — 시스템 마스터: 사용자 레벨 5종과 기본 메뉴 권한 매트릭스.
V202608190008__seed_organization_sample_directory.sql이력마이그레이션P0-4 시드 (2/2) — 표본 조직도·사용자.
V202608250001__create_user_credentials.sql이력마이그레이션사용자 임시 비밀번호 해시 — "신원은 스마트심사 뷰 라이브, 부수정보는 우리 DB" 결정의 비밀번호 부분 (docs/decisions/20260825-user-directory-live-and-supplement.md).
V202608260001__extract_user_supplements.sql이력마이그레이션부수정보(권한 레벨·이메일) 분리 — "신원·조직은 스마트심사 뷰 라이브, 부수정보는 우리 DB" 결정(docs/decisions/20260825-user-directory-live-and-supplement.md)의 테이블 구체화.
V202608260002__split_user_roles.sql이력마이그레이션권한 분리 — 사용자:권한 은 1:N 이다(2026-08-26 PM 지시).
V202608260003__create_auth_refresh_tokens.sql이력마이그레이션refresh 토큰 원장 — 회전·무효화의 서버 측 상태 (20260826 로테이션 결정).
V202608270001__menu_ia_prototype_alignment.sql이력마이그레이션메뉴 IA 를 프로토타입 관리자 사이드바(components/admin/app-sidebar.tsx) 기준으로 확정 반영 (2026-08-27 결정: docs/decisions/20260827-menu-ia-prototype-alignment.md).
V202608270003__seed_mail_account_menu.sql이력마이그레이션관리자 콘솔 '메일 발송 계정'(/admin/mail-account) 메뉴 등재 — 야간 20260827 N02.
V202609160007__comment_organization_schema.sql이력마이그레이션조직·사용자·권한 스키마의 테이블·컬럼 설명 (일부 컬럼 설명은 기존 마이그레이션에 이미 있다).
V202609160016__fix_local_directory_comments.sql이력마이그레이션users·departments 설명 정정.
V202609231000__user_menu_prototype_alignment.sql이력마이그레이션사용자 콘솔 메뉴를 프로토타입 사용자 사이드바(components/user/app-sidebar.tsx) 기준으로 맞춘다 (docs/decisions/20260827-menu-ia-prototype-alignment.md 결정 4 — 관리자 IA 와 같은 원칙).
V202609281560__seed_admin_menus_prototype_alignment.sql이력마이그레이션관리자 콘솔 메뉴 — 프로토타입 사이드바(IA 정본, docs/decisions/20260827-menu-ia-prototype-alignment.md)에 있으나 시드에 없던 메뉴 4개를 더한다.
V202609291400__align_console_menu_permissions_to_prototype.sql이력마이그레이션현재 프로토타입 관리자 사이드바(components/admin/app-sidebar.tsx)를 메뉴 IA 정본으로 반영한다.
V202610061100__add_first_approver_to_role_menu_permissions.sql이력마이그레이션지식컬렉션 1차 승인 레벨 (docs/decisions/20261006-collection-first-approval-level.md 🟢).
V202610091910__add_default_allowed_to_role_menu_permissions.sql이력마이그레이션권한 관리 화면의 `기본값` 버튼이 되돌릴 기준 — 레벨 × 메뉴 매트릭스의 "기본 허용 여부".
V202610121623__create_auth_sessions.sql이력마이그레이션세션 기록 — 유휴 만료와 로그아웃을 서버가 판정하는 상태 (20261008 세션 정책 결정).
V202610141000__reorder_role_levels_and_rename.sql이력마이그레이션권한 레벨 순서·이름을 조직 위계에 맞춘다 — docs/decisions/20261014-role-level-order-and-names.md 🟢 - 순서값: 단·팀이 센터보다 위 조직이라 팀장(단장) 3, 센터장 4 로 맞바꾼다(V202608190007 은 센터장 3, 팀장 4).
V202610211000__rename_role_names_to_level_numbers.sql이력마이그레이션레벨 표시 이름을 직책명 대신 레벨 숫자로 바꾼다 — docs/decisions/20261014-role-level-order-and-names.md 🟢 (2026-10-21 개정) - 현업 요청(10/20 싱크 §6, 10/21): 직책명은 레벨과 1:1 이 아니라 헷갈린다 — 권한 매트릭스·…
V202610221200__create_organization_change_tracking.sql이력마이그레이션조직 변경 사원(레벨 재검토 대상) 추적 — docs/decisions/20260827-orgchart-change-tracking.md 🟢 (2026-10-22 확정) - 변경 판정 원천은 스마트심사 뷰 VW_AI_UVORG002_HIS(사번 + 최종변경일시, 소속·직책·직급이 바뀔 때만 갱신)다.
V202610232300__restructure_admin_menus_workspace_workflow.sql이력마이그레이션관리자 LNB 를 `위탁사 Workspace`·`사고조사 Workflow` 1depth 로 재구성한다 — docs/decisions/20261022-admin-lnb-workspace-workflow.md 🟢 1·2·3·9·11항.
V202611071725__drop_user_credentials.sql이력5일 전 · #1969마이그레이션임시 비밀번호 해시 테이블 폐기.

src/test/17GitHub

테스트 파일 — 펼쳐서 보기
audit/PermissionAuditRecorderTest.java이력테스트PermissionAuditRecorder 대상 테스트.
credential/OrganizationAuthSessionStoreAdapterTest.java이력테스트OrganizationAuthSessionStoreAdapter 대상 테스트.
credential/OrganizationRefreshTokenStoreAdapterTest.java이력테스트OrganizationRefreshTokenStoreAdapter 대상 테스트.
credential/OrganizationUserSupplementAdapterTest.java이력테스트OrganizationUserSupplementAdapter 대상 테스트.
credential/OrganizationUserSupplementStoreAdapterTest.java이력오늘 · #2181테스트OrganizationUserSupplementStoreAdapter 대상 테스트.
scope/OrganizationCollectionApprovalPolicyAdapterTest.java이력테스트OrganizationCollectionApprovalPolicyAdapter 대상 테스트.
scope/OrganizationMenuPermissionLookupAdapterTest.java이력테스트OrganizationMenuPermissionLookupAdapter 대상 테스트.
scope/OrganizationScopeAdapterTest.java이력테스트레벨 → 조회 범위 판정(2026-09-18 결정 §2)과 두 원천(로컬 표본·라이브 뷰)의 트리 탐색을 본다.
security/OrganizationUserAccountLookupAdapterTest.java이력테스트OrganizationUserAccountLookupAdapter 대상 테스트.
security/OrganizationUserEmailLookupAdapterTest.java이력테스트OrganizationUserEmailLookupAdapter 대상 테스트.
service/MenuPermissionServiceTest.java이력테스트MenuPermissionService 대상 테스트.
service/OrganizationChangeServiceTest.java이력테스트조직 변경 대상자 판정과 확인 완료(결정 20260827 🟢).
service/OrganizationServiceTest.java이력테스트OrganizationService 대상 테스트.
service/UserEmailChangeServiceTest.java이력테스트UserEmailChangeService 대상 테스트.
service/UserProfileUpdateServiceTest.java이력테스트UserProfileUpdateService 대상 테스트.
service/UserRoleAssignmentServiceTest.java이력테스트UserRoleAssignmentService 대상 테스트.
support/TestEntities.java이력클래스테스트 픽스처 헬퍼.

modules/ · 도메인

modules/audit-shared/GitHub

감사 원장 · 공유 DTO

감사 원장 · 공유 DTO — 감사 로그 조회 조건·응답.

12 소스0 테스트
의존 모듈 base
주요 라이브러리 spring-boot-starter-validation

dto/12GitHub

모듈 경계를 넘는 요청·응답 DTO (record).

AuditLogEventTypesView.java이력DTO감사 로그 화면이 고를 수 있는 이벤트 종류 — 설정(hwss.audit.view.hidden-event-types)으로 숨긴 종류를 뺀 목록 (docs/decisions/20261023-business-action-audit-events.md).
AuditLogPageView.java이력DTO원장 조회 결과 한 쪽.
AuditLogView.java이력DTO감사 원장 한 행 (관리자 "전체 로그" 화면이 읽는 형태).
IntegrationExchangeDetailView.java이력DTO연동 교환 한 건의 상세 — 목록 행에 요청·응답 본문을 더한 것.
IntegrationExchangePageView.java이력DTO연동 교환 목록 한 쪽 — 시작 시각 내림차순.
IntegrationExchangeView.java이력DTO연동 교환 목록 한 행 — 본문 없음.
AuditActionItem.java이력enum감사 로그 화면의 「작업 항목」 — 이벤트를 업무 묶음으로 나눈 것(결정 20261103-audit-log-screen).
AuditEventKind.java이력enum감사 로그 화면의 「이벤트 타입」 — 행위의 성격(결정 20261103-audit-log-screen).
AuditLogSort.java이력enum감사 로그 목록에서 서버 정렬을 허용하는 열.
AuditLogSearchCondition.java이력record원장 조회 필터 — 작업 항목 · 이벤트 타입 · 처리 결과 · 기간.
IntegrationExchangeSearchCondition.java이력record연동 교환 조회 필터 — 모두 선택.
AuditEventClassification.java이력2일 전 · #2112클래스이벤트 → 작업 항목·이벤트 타입.

빌드·리소스1GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base 모듈 참조.

modules/ · 도메인

modules/audit-core/GitHub

감사 원장 · 로직

감사 원장 · 로직 — 행위자·시각·이벤트·대상·결과를 담는 범용 원장. base 의 AuditTrailPort 구현으로만 붙는다.

16 소스5 테스트5 마이그레이션
의존 모듈 base audit-shared
주요 라이브러리 spring-boot-starter-web spring-boot-starter-data-jpa springdoc-openapi-starter-webmvc-ui

config/2GitHub

@ConfigurationProperties 설정 바인딩과 빈 구성 (application.yml hwss.* 블록).

AuditViewConfig.java이력0.0%설정감사 로그 화면 표시 설정 등록 — AuditViewProperties.
AuditViewProperties.java이력100.0%설정감사 로그 화면 표시 설정 — 어떤 이벤트 종류를 관리자 감사 로그 화면·CSV 에서 보이지 않게 둘지 (docs/decisions/20261023-business-action-audit-events.md).

entity/1GitHub

JPA 엔티티 — 테이블 한 행을 매핑한다.

AuditLogEntity.java이력92.3%엔티티감사 원장 한 행 (야간 플랜 20260824 N04).

exception/1GitHub

BusinessException 하위 도메인 예외 — 에러 코드와 HTTP 상태를 정한다.

AuditLogSearchPeriodException.java이력100.0%예외기간 필터의 시작이 끝보다 늦을 때.

exchange/5GitHub

IntegrationExchangeService.java이력43.1%서비스연동 교환 기록의 적재·조회·정리 (docs/decisions/20261023-integration-exchange-log.md).
IntegrationExchangeEntity.java이력60.9%엔티티연동 교환 기록 한 행 — 추가만 되고 바뀌지 않는다(보관 기간이 지나면 정리 작업이 통째로 지운다).
IntegrationExchangeNotFoundException.java이력100.0%예외없는 교환 기록 id (404).
IntegrationExchangeSearchPeriodException.java이력100.0%예외기간 시작이 끝보다 늦을 때 — 빈 결과와 구분하기 위해 400 으로 알린다(감사 원장과 같은 이유).
IntegrationExchangeRepository.java이력저장소연동 교환 기록 리포지토리 — 조건이 전부 선택이라 Specification 으로 조립한다(감사 원장과 같은 판단).

port/1GitHub

base 포트 구현체.

AuditTrailPortAdapter.java이력0.0%포트 구현AuditTrailPort 의 구현체 — 업무 도메인이 base 인터페이스로만 원장을 부르게 하는 자리 (docs/guides/backend-module-guide.md §5).

repository/1GitHub

Spring Data JPA 저장소 인터페이스.

AuditLogRepository.java이력저장소감사 원장 리포지토리.

service/2GitHub

비즈니스 로직과 트랜잭션 경계.

AuditTrailService.java이력89.2%서비스감사 원장의 적재와 조회 (야간 플랜 20260824 N04).
AuditLogSpecifications.java이력3.2%클래스조회 조건 → JPA Criteria 조건.

web/3GitHub

REST 컨트롤러 — HTTP 요청을 서비스로 넘기고 ApiResponse 로 감싼다.

AuditLogController.java이력화면 /admin/audit-logsSwagger68.4%API관리자 감사 로그 조회 API (야간 플랜 20260824 N04).
IntegrationExchangeController.java이력화면 /admin/audit-logsSwagger0.0%API관리자 연동 교환 기록 조회 API (docs/decisions/20261023-integration-exchange-log.md).
AuditLogCsvColumns.java이력100.0%클래스감사 로그 CSV 열 — AuditLogView 의 필드와 순서·범위가 1:1 이다(목록 API 가 내리는 값 그대로, 더하지도 빼지도 않는다).

빌드·리소스1GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base, audit-shared 모듈 참조.

resources/db/migration/5GitHub

Flyway 마이그레이션 SQL — 파일명 V<YYYYMMDDhhmm>__설명. 앱 기동 시 모든 모듈의 것이 버전 순으로 합쳐 실행된다.

V202608240001__create_audit_log.sql이력마이그레이션감사 원장 (야간 플랜 20260824 N04) — 관리자 "전체 로그" 메뉴의 저장소.
V202609160001__comment_audit_schema.sql이력마이그레이션감사 원장의 테이블·컬럼 설명을 DB 메타데이터(COMMENT)로 옮긴다.
V202610071900__unify_mail_account_audit_event.sql이력마이그레이션발송 계정 설정 감사 이벤트 통합 (2026-10-07 사용자 확정).
V202610231800__create_integration_exchanges.sql이력마이그레이션연동 교환 기록 (docs/decisions/20261023-integration-exchange-log.md) — 이미지시스템·Studio 와 오간 요청·응답 본문의 저장소.
V202611032000__add_audit_logs_request_id.sql이력마이그레이션감사 로그 요청 ID — 결정 docs/decisions/20261103-audit-log-screen.md.

src/test/5GitHub

테스트 파일 — 펼쳐서 보기
exchange/IntegrationExchangeServiceTest.java이력테스트IntegrationExchangeService 대상 테스트.
service/AuditEventClassificationTest.java이력테스트AuditEventClassification 대상 테스트.
service/AuditTrailServiceTest.java이력테스트AuditTrailService 의 적재·조회 유닛 테스트 (야간 플랜 20260824 N04).
web/AuditLogControllerExportAuditTest.java이력테스트감사 로그 CSV 반출의 감사 기록(LOG_EXPORTED) — 검색 조건 값은 남기지 않는다.
web/AuditLogCsvColumnsTest.java이력테스트AuditLogCsvColumns 대상 테스트.

modules/ · 도메인

modules/workflow-shared/GitHub

워크플로우 엔진 · 공유 DTO

워크플로우 엔진 · 공유 DTO — 실행·단계 상태 enum과 시작 명령·실행 결과.

4 소스0 테스트
의존 모듈 base
주요 라이브러리 spring-boot-starter-validation

dto/4GitHub

모듈 경계를 넘는 요청·응답 DTO (record).

WorkflowStartCommand.java이력DTO워크플로우 실행 시작 명령.
WorkflowExecutionStatus.java이력enum워크플로우 실행 인스턴스의 상태.
WorkflowStepExecutionStatus.java이력enum단계 실행 1회(attempt)의 상태.
WorkflowExecutionResult.java이력record엔진 실행 1회의 결과.

빌드·리소스1GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base 모듈 참조.

modules/ · 도메인

modules/workflow-core/GitHub

워크플로우 엔진 · 로직

워크플로우 엔진 · 로직 — 업무 도메인을 모르는 범용 엔진. 단계 정의를 DB 데이터로 두고 해석·실행하며, 실제 업무는 base 의 WorkflowStepWorkPort 구현체에 위임한다.

27 소스7 테스트3 마이그레이션
의존 모듈 base workflow-shared
주요 라이브러리 spring-boot-starter-data-jpa spring-web jackson-databind

config/2GitHub

@ConfigurationProperties 설정 바인딩과 빈 구성 (application.yml hwss.* 블록).

WorkflowConfig.java이력100.0%설정워크플로우 모듈 설정 바인딩.
WorkflowDefinitionProperties.java이력100.0%설정워크플로우 정의 선택 설정 (hwss.workflow.*).

definition/1GitHub

WorkflowDefinitionSelector.java이력85.7%클래스새 실행이 쓸 워크플로우 정의를 고른다.

engine/2GitHub

워크플로우 엔진 본체.

WorkflowEngine.java이력인터페이스DB 정의 기반 파이프라인 엔진 (docs/decisions/20260804-workflow-engine-db-pipeline.md).
WorkflowEngineImpl.java이력95.5%6일 전 · #1936클래스WorkflowEngine 구현 — DB 단계 정의를 해석해 핸들러 실행·게이트 판정·실행 이력 기록.

entity/4GitHub

JPA 엔티티 — 테이블 한 행을 매핑한다.

WorkflowDefinitionEntity.java이력77.8%엔티티워크플로우 정의(버전 단위).
WorkflowExecutionEntity.java이력94.5%6일 전 · #1936엔티티보고서별 실행 인스턴스.
WorkflowStepEntity.java이력83.9%엔티티단계 정의.
WorkflowStepExecutionEntity.java이력87.5%엔티티단계 실행 1회(attempt)의 이력.

exception/5GitHub

BusinessException 하위 도메인 예외 — 에러 코드와 HTTP 상태를 정한다.

AmbiguousWorkflowDefinitionException.java이력100.0%예외같은 정의 코드에 활성 버전이 2개 이상일 때.
WorkflowDefinitionNotFoundException.java이력100.0%예외실행하려는 정의 코드에 활성(active) 버전이 하나도 없을 때.
WorkflowExecutionAlreadyRunningException.java이력100.0%예외보고서에 이미 진행 중(RUNNING/WAITING_USER) 실행이 있는데 새 실행을 시작하려 할 때 (S-007 §4-2 원칙 5 — 보고서 단위 진행 중 실행은 1개).
WorkflowExecutionNotFoundException.java이력100.0%예외진행 중인 실행이 없는 보고서에 대해 다음 단계 진행을 요청했을 때.
WorkflowStepHandlerNotFoundException.java이력100.0%예외단계 정의의 handler_bean 이 가리키는 핸들러 bean 이 이 앱 조합에 없을 때.

gate/3GitHub

단계 진입 전 선행 조건 판정.

GateDecision.java이력100.0%record게이트 판정.
WorkflowStepGate.java이력인터페이스단계 공통 선행 조건(pre-step gate).
PortBackedStepGate.java이력100.0%클래스WorkflowStepGate 의 유일한 구현체.

handler/6GitHub

단계 핸들러 계약과 레지스트리.

StepContext.java이력100.0%record단계 핸들러에 넘기는 실행 컨텍스트.
StepResult.java이력75.0%record단계 핸들러의 실행 결과.
WorkflowStepHandlerRegistry.java이력100.0%클래스workflow_steps.handler_bean 문자열을 실제 핸들러 bean 으로 바꿔주는 레지스트리.
NoopStepHandler.java이력0.0%핸들러아무 일도 하지 않고 성공만 돌려주는 스텁 핸들러.
PortBackedStepHandler.java이력100.0%핸들러단계의 실제 업무를 업무 도메인이 등록한 WorkflowStepWorkPort 에 되묻는 범용 핸들러.
WorkflowStepHandler.java이력핸들러단계 하나가 실제로 하는 일.

integration/2GitHub

base 포트 구현체 — 다른 도메인·워크플로우 엔진이 이 모듈을 부르는 입구.

WorkflowLauncherPortImpl.java이력100.0%포트 구현WorkflowLauncherPort 의 실제 구현.
WorkflowProgressPortImpl.java이력98.7%포트 구현WorkflowProgressPort 의 실제 구현.

repository/2GitHub

Spring Data JPA 저장소 인터페이스.

WorkflowDefinitionRepository.java이력저장소단계(WorkflowStepEntity)는 별도 Repository 를 두지 않는다 — 애그리게이트 루트인 정의를 통해서만 접근한다 (docs/guides/backend-module-guide.md §3-2).
WorkflowExecutionRepository.java이력저장소WorkflowExecutionEntity 저장소 (Spring Data JPA 인터페이스).

빌드·리소스1GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base, workflow-shared 모듈 참조.

resources/db/migration/3GitHub

Flyway 마이그레이션 SQL — 파일명 V<YYYYMMDDhhmm>__설명. 앱 기동 시 모든 모듈의 것이 버전 순으로 합쳐 실행된다.

V202608190003__create_workflow.sql이력마이그레이션S-007 §3-3 워크플로우 엔진 도메인.
V202609160003__comment_workflow_schema.sql이력마이그레이션워크플로우 엔진 테이블·컬럼 설명 (근거: docs/decisions/20260916-db-schema-doc-generation.md).
V202609160013__comment_workflow_timestamps.sql이력마이그레이션워크플로우 실행 시각 컬럼 설명 (V202609160003 에서 빠진 것).

src/test/7GitHub

테스트 파일 — 펼쳐서 보기
definition/WorkflowDefinitionSelectorTest.java이력테스트새 실행이 쓸 정의 고르기 — 버전을 고정하지 않으면 활성 버전, 고정하면 활성 표시와 무관하게 그 버전.
engine/InvestigationMainPipelineTest.java이력테스트W05.
engine/WorkflowEngineImplTest.java이력6일 전 · #1936테스트엔진 유닛 테스트.
gate/PortBackedStepGateTest.java이력테스트게이트가 업무 도메인 포트에 되묻는지 — 판정 자체는 포트가 한다.
handler/PortBackedStepHandlerTest.java이력테스트범용 핸들러가 단계 코드로 업무 포트를 찾아 위임하는지 — 2026-09-03 N02 의 배치 결정(도메인 핸들러는 base 포트로 붙는다)을 엔진 쪽에서 고정한다.
integration/WorkflowLauncherPortImplTest.java이력테스트업무 도메인이 쓰는 WorkflowLauncherPort 구현체.
integration/WorkflowProgressPortImplTest.java이력테스트읽기 포트 유닛 테스트.

modules/ · 도메인

modules/chat-shared/GitHub

챗봇 · 공유 DTO

챗봇 · 공유 DTO — 채팅 DTO.

31 소스0 테스트
의존 모듈 base
주요 라이브러리 springdoc-openapi-starter-webmvc-ui spring-boot-starter-validation

dto/31GitHub

모듈 경계를 넘는 요청·응답 DTO (record).

ChatAttachmentView.java이력DTO질문에 붙인 첨부 하나 — 화면이 보낸 질문 아래에 「어떤 파일을 붙였는지」를 남기는 칩의 재료다.
ChatExchangeView.java이력DTO질문 전송의 응답 — 방금 남은 질문 줄과 답변 줄.
ChatMessageView.java이력DTO대화 한 줄.
ChatQuestionRequest.java이력DTO질문 전송.
ChatResponseTimeView.java이력DTO질의 답변 응답 속도 — 응답 소요시간이 기록된 답변의 구간별 수(2026-09-14 정의 시트 30행 「10/30/60/60+ 별 건수」).
ChatSessionCreateRequest.java이력DTO새 대화 요청.
ChatSessionDetail.java이력DTO대화 상세 — 화면이 지난 대화를 그대로 다시 읽는 데 쓴다.
ChatSessionKnowledgeRequest.java이력DTO진행 중인 범용 대화의 검색 범위 변경 — 보낸 목록으로 통째로 바꾼다 (docs/decisions/20261019-agent-knowledge-picker-file-unit.md 「개정 2026-10-28」).
ChatSessionSummary.java이력DTO내 대화 목록의 한 행.
ChatSourceView.java이력4일 전 · #2030DTO답변 근거 하나 — 화면의 근거 칩·근거 뷰어가 쓴다.
ChatStatisticsView.java이력DTO챗봇 이용 통계 조회 응답 — 시스템 통계 「챗봇 질의 건수」(2026-09-14 정의 시트 29행) · 「질의 답변 응답 속도」(30행) (S-007 §3-4 「챗봇 이용 통계」).
ChatTurnScopeView.java이력DTO사고조사 질문 한 턴의 검색 범위 — 그 질문을 보낼 때 대화에 저장돼 있던 선택과 사건 서류 포함 여부 (docs/decisions/20261023-investigation-chat-session-structure.md 6항 셋째 줄).
ChatUsageItem.java이력DTO사용 내역의 한 행 — 범용 대화와 사고조사 에이전트 사용 건이 같은 모양이다.
ChatUsagePage.java이력DTO사용 내역 한 쪽.
InvestigationChatAccessView.java이력DTO사고조사 챗봇에서 지금 할 수 있는 것 — 화면이 입력창 활성·안내 문구와 반영 버튼을 정한다 (docs/decisions/20261021-investigation-chat-references-and-reflection.md 「구현에서 정한 세부(맥락 포트)」).
InvestigationChatKnowledgeRequest.java이력DTO사고조사 대화의 검색 범위 변경 — 보낸 목록으로 통째로 바꾼다(docs/decisions/20261023-investigation-chat-session-structure.md 6항).
InvestigationChatReflectRequest.java이력DTO사고조사 챗봇 「AI 보고서 반영」 요청(docs/decisions/20261021-investigation-chat-references-and-reflection.md 5~7·10항).
InvestigationChatReflectionView.java이력DTO반영 결과 — 화면이 바뀐 탭 하이라이트·「변경 전 보기」를 그린다(결정 20261008·20261020).
InvestigationChatView.java이력DTO사고조사 챗봇 패널 — 이 보고서에 대한 내 대화와 지금 할 수 있는 것 (docs/decisions/20261023-investigation-chat-session-structure.md 4항).
ChatAnswerOrigin.java이력enum답변이 어디서 왔는지.
ChatMessageRole.java이력enum대화 한 줄의 화자.
ChatSourceKind.java이력enum답변 근거의 종류 (docs/decisions/20261021-chat-two-stage-intent-file-search.md 6항, 사고조사 두 종류는 docs/decisions/20261023-investigation-chat-session-structure.md 7항).
ChatUsageKind.java이력enum사용 내역의 구분.
ChatUsagePeriod.java이력enum사용 내역 기간 조건 — 마지막 사용 시각이 이 안에 드는 건만 본다.
ChatAttachmentInspection.java이력record챗봇에 첨부하기 전 파일 개수·쪽 수를 확인한 결과.
ChatAttachmentPreparation.java이력recordPDF 변환과 외부 파일 저장소 업로드까지 마친 챗봇 첨부 준비 결과.
ChatContextUsage.java이력record대화 용량 — 직전 답변 기준(docs/decisions/20261102-agent-chat-context-capacity.md).
ChatDeletionResult.java이력record마지막 질문 삭제 결과(docs/decisions/20261030-chat-conversation-delete.md).
ChatSourceRegion.java이력record근거의 쪽 안 위치 — 쪽 왼쪽 위를 원점으로 한 0~1 비율 상자.
ChatStatisticsPerson.java이력record챗봇 질의 건수의 한 줄 — 질문자 한 명의 한 부서 스냅샷에서의 기간 합계.
ChatUsageKindCounts.java이력record구분 칩의 건수 — 검색어·기간은 반영하고 구분은 반영하지 않는다(칩을 바꿔도 다른 칩의 건수가 흔들리지 않게).

빌드·리소스1GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base 모듈 참조.

modules/ · 도메인

modules/chat-core/GitHub

챗봇 · 로직

챗봇 · 로직 — 에이전트·사고조사 챗봇의 대화, 첨부, 근거, 보관 파기.

82 소스45 테스트18 마이그레이션
의존 모듈 base chat-shared
주요 라이브러리 spring-boot-starter-web spring-boot-starter-validation spring-boot-starter-data-jpa springdoc-openapi-starter-webmvc-ui

config/6GitHub

@ConfigurationProperties 설정 바인딩과 빈 구성 (application.yml hwss.* 블록).

ChatAttachmentProperties.java이력94.7%설정챗봇 첨부파일 사전 검사의 운영 제한값.
ChatConfig.java이력50.0%설정에이전트 채팅 설정 바인딩.
ChatContextProperties.java이력100.0%설정범용 대화 용량(docs/decisions/20261102-agent-chat-context-capacity.md) — 직전 답변의 사용량을 한도에 견줘 안내하고 잠근다.
ChatRetentionProperties.java이력100.0%설정범용 채팅 원문·직접 첨부 보관 배치 설정.
ChatSourceProperties.java이력100.0%설정답변 근거 칩을 고르는 기준(hwss.chat.sources.*) — 결정 docs/decisions/20261021-chat-two-stage-intent-file-search.md 6항 「근거 칩 고르는 기준」.
ChatStatisticsProperties.java이력100.0%설정챗봇 이용 통계(S-007 §3-4 「챗봇 이용 통계」 — 시스템 통계 「챗봇 질의 건수」·「질의 답변 응답 속도」)의 설정 (hwss.statistics.chat.*).

entity/11GitHub

JPA 엔티티 — 테이블 한 행을 매핑한다.

ChatAttachmentStatus.java이력100.0%enum챗봇 첨부파일의 외부 파일 저장소 준비 상태.
ChatSessionKind.java이력100.0%enum대화 종류 — 범용 에이전트 채팅과 사고조사 챗봇이 같은 저장소를 쓰고 이 값으로 가른다 (docs/decisions/20261023-investigation-chat-session-structure.md 1항).
ChatSourceDraft.java이력100.0%record답변 줄에 붙일 근거 하나 — Studio 출처를 우리 식별자로 되돌린 값(ChatService).
ChatAttachmentEntity.java이력86.4%엔티티채팅 메시지에 아직 연결하지 않은 첨부파일 준비 이력.
ChatAttachmentSetEntity.java이력93.3%엔티티멀티턴 채팅이 다음 질문에서도 재사용할 첨부 묶음 한 판.
ChatAttachmentSetItemEntity.java이력83.3%엔티티첨부 묶음 안의 파일 한 건.
ChatMessageEntity.java이력95.2%엔티티대화 한 줄 — 질문이거나 답변이다.
ChatMessageSourceEntity.java이력84.8%엔티티답변 근거 하나.
ChatSessionCollectionEntity.java이력72.7%엔티티대화가 배경지식으로 쓰는 컬렉션 하나.
ChatSessionEntity.java이력98.6%4일 전 · #2040엔티티대화 세션 하나 — 애그리게이트 루트.
ChatSessionFileEntity.java이력72.7%엔티티대화가 배경지식으로 좁혀 쓰는 문서 하나.

exception/18GitHub

BusinessException 하위 도메인 예외 — 에러 코드와 HTTP 상태를 정한다.

ChatAnswerPendingException.java이력100.0%예외답변을 기다리거나 보고서에 반영하는 중이라 지울 수 없다 — 409 CHAT_ANSWER_PENDING.
ChatAttachmentContentNotFoundException.java이력100.0%예외없는 첨부 출처와 권한 밖 첨부 출처를 같은 응답으로 가린다.
ChatAttachmentContentUnavailableException.java이력100.0%예외첨부 출처 행은 있지만 Studio의 변환 PDF를 지금 제공할 수 없는 상태.
ChatAttachmentInspectionUnavailableException.java이력100.0%예외DocMate 장애 등 사용자가 파일을 고쳐도 해결할 수 없는 첨부 검사 실패.
ChatAttachmentSelectionException.java이력100.0%예외질문에 선택한 첨부가 소유·상태·일회성 규칙을 만족하지 않음.
ChatAttachmentUploadUnavailableException.java이력100.0%예외첨부 PDF 변환 또는 외부 저장소 업로드 구성이 준비되지 않은 경우.
ChatAttachmentValidationException.java이력100.0%예외챗봇 첨부파일 사전 검사에서 클라이언트가 수정할 수 있는 오류.
ChatContextFullException.java이력100.0%예외범용 대화의 용량이 차서 더 질문할 수 없다 — 409 CHAT_CONTEXT_FULL(docs/decisions/20261102-agent-chat-context-capacity.md).
ChatDeleteUnavailableException.java이력100.0%예외Studio 대화·턴·첨부 파일을 지우지 못했다 — 502 CHAT_DELETE_UNAVAILABLE(docs/decisions/20261030-chat-conversation-delete.md).
ChatMessageNotDeletableException.java이력100.0%예외Studio 응답 id 를 남기기 전 질문이라 그 턴만 Studio 대화에서 뺄 수 없다 — 409 CHAT_MESSAGE_NOT_DELETABLE.
ChatMessageNotFoundException.java이력100.0%예외내 대화의 답변 줄이 아니다(없는 줄·남의 대화·질문 줄) — 존재 여부를 가리지 않고 404 CHAT_MESSAGE_NOT_FOUND.
ChatMessageNotLastException.java이력100.0%예외마지막 질문만 지울 수 있다 — 409 CHAT_MESSAGE_NOT_LAST (docs/decisions/20261030-chat-conversation-delete.md).
ChatSessionNotFoundException.java이력100.0%예외없는 대화.
ChatStatisticsPeriodException.java이력100.0%예외챗봇 이용 통계 조회 기간의 시작이 끝보다 늦을 때.
InvestigationChatNotAskableException.java이력100.0%예외사고조사 챗봇을 볼 수는 있지만 지금은 질문할 수 없다 — 409 INVESTIGATION_CHAT_NOT_ASKABLE.
InvestigationChatNotReadableException.java이력100.0%예외사고조사 챗봇을 볼 수 없다 — 보고서 상세 조회와 같은 코드·상태로 응답한다(같은 판정이라 화면이 같은 안내를 쓴다).
InvestigationChatNotReflectableException.java이력100.0%예외지금은 이 답변을 AI 보고서에 반영할 수 없다 — 409 INVESTIGATION_CHAT_NOT_REFLECTABLE.
ReportReflectionRejectedException.java이력100.0%예외반영 엔진이 보고서를 바꾸지 않고 돌려보냈다 — 보고서는 그대로다(결정 20261021 6항).

investigation/5GitHub

InvestigationCitation.java이력100.0%record사고조사 챗봇 답변 한 턴의 Studio 출처 하나 — 플랫폼 식별자 그대로다(우리 파일로 되돌리는 것은 호출자 몫).
InvestigationSourceBlock.java이력100.0%5일 전 · #1970record사고조사 챗봇 답변 한 턴의 근거 블록과 AI 보고서 반영 버튼 여부 (결정 20261021 4항, 통합 설계 v0.5 사고조사 3번).
InvestigationTurnSources.java이력100.0%record사고조사 챗봇 답변 한 턴을 화면 모양으로 — 섞여 온 보고서 참조 줄을 지운 본문과 근거 블록.
InvestigationTurnPrompt.java이력100.0%클래스사고조사 챗봇 질문 한 턴을 공통 채팅 포트 입력(ChatPrompt)으로 조립한다 — 통합 설계 v0.3 사고조사 3·4번, 지시문 순서는 v0.5 프롬프트 템플릿 2번.
ReportReferenceLine.java이력100.0%클래스사고조사 챗봇 답변에 섞여 온 보고서 참조 줄()을 지운다 — 출처로 세지 않는다.

repository/6GitHub

Spring Data JPA 저장소 인터페이스.

ChatSessionSummaryRow.java이력100.0%DTO사용 내역 한 행의 투영 — 줄 수와 마지막 시각을 집계로 받는다.
InvestigationUsageRow.java이력100.0%DTO사용 내역의 사고조사 한 건 — 보고서번호와 마지막 줄 시각만 읽는다.
ChatRetentionCandidate.java이력100.0%record보관 기간을 지난 채팅 세션 후보.
ChatAttachmentRepository.java이력저장소ChatAttachmentEntity 저장소 (Spring Data JPA 인터페이스).
ChatAttachmentSetRepository.java이력저장소ChatAttachmentSetEntity 저장소 (Spring Data JPA 인터페이스).
ChatSessionRepository.java이력4일 전 · #2040저장소대화 저장소 — 범용 에이전트 채팅과 사고조사 챗봇이 함께 쓴다(결정 20261023 1항).

service/29GitHub

비즈니스 로직과 트랜잭션 경계.

ChatAttachmentContent.java이력100.0%record권한 확인을 마친 첨부 출처 PDF.
ChatAttachmentUpload.java이력100.0%record웹 계층에 의존하지 않고 첨부파일 내용을 서비스로 전달하는 경계.
ChatRetentionBatchResult.java이력100.0%record채팅 보관 배치 한 번의 처리 결과.
ChatAttachmentContentService.java이력88.0%서비스답변에 인용된 채팅 첨부의 변환 PDF를 Studio에서 받아 브라우저로 중계한다.
ChatAttachmentInspectionService.java이력89.7%서비스챗봇 첨부 전에 개수와 쪽 수를 검사한다.
ChatAttachmentPreparationService.java이력81.2%서비스첨부를 검증하고 PDF로 통일한 뒤 Studio 파일 저장소까지 올린다.
ChatAttachmentSelectionService.java이력100.0%서비스질문 전송 전 첨부 소유권과 Studio 사용 가능 상태를 확정한다.
ChatDeletionService.java이력95.2%서비스대화 전체 삭제와 마지막 질문 삭제 — 에이전트 채팅과 사고조사 챗봇(docs/decisions/20261030-chat-conversation-delete.md).
ChatHistoryRetentionService.java이력93.8%서비스마지막 대화 시각 기준으로 범용 채팅 파기 후보를 찾아 한 건씩 처리한다.
ChatService.java이력99.1%서비스에이전트 채팅 — 대화 시작·조회·질문 전송 (야간 20260930 NX01).
ChatUsageService.java이력95.8%서비스사용 내역 — 범용 대화에 사고조사 에이전트 사용 건을 합친다(docs/decisions/20261023-investigation-chat-session-structure.md 5항, 20261010-investigation-chat-usage-title.md).
InvestigationChatAttachmentService.java이력100.0%서비스사고조사 챗봇 첨부 — 보고서 아래 검사·업로드·출처 PDF(docs/decisions/20261023-investigation-chat-session-structure.md 8항).
InvestigationChatPurgeService.java이력96.9%서비스보고서 삭제 연동 — 그 보고서의 사고조사 대화를 첨부까지 지운다(docs/decisions/20261023-investigation-chat-session-structure.md 8항).
InvestigationChatReflectionService.java이력100.0%서비스사고조사 챗봇 「AI 보고서 반영」 — 답변 줄 하나의 재료를 모아 반영 엔진에 넘긴다 (docs/decisions/20261021-investigation-chat-references-and-reflection.md 5~7·9~11항).
InvestigationChatService.java이력100.0%서비스사고조사 챗봇 — 보고서 아래 진입점(docs/decisions/20261023-investigation-chat-session-structure.md 2·4항).
ChatTurnContext.java이력100.0%인터페이스한 턴 흐름(ChatService#runTurn)에서 범용과 사고조사가 다른 곳 — 답변 호출 재료와 출처 → 근거 변환 (docs/decisions/20261023-investigation-chat-session-structure.md 2항).
ChatAttachmentLimits.java이력94.4%클래스원본 바이트 수와 첨부 페이지 합계를 검사한다.
ChatAttachmentPageResolver.java이력90.2%클래스파일 형식별 쪽 수 판정.
ChatAttachmentTypeCheck.java이력85.7%클래스첨부 확장자 검사 — 사전 검사와 준비 업로드가 같이 쓴다.
ChatBusyMarker.java이력83.3%클래스질문 답변·보고서 반영이 Studio 를 부르는 동안 대화에 「진행 중」을 찍고 지운다 — 그동안 대화 삭제를 거절한다 (docs/decisions/20261030-chat-conversation-delete.md 4항).
ChatExchangeAppender.java이력96.6%클래스질문·답변 두 줄을 남기는 짧은 쓰기 트랜잭션만 담당한다 (야간 20260930 NX01 후속).
ChatHistoryRetentionScheduler.java이력100.0%클래스설정된 시각에 범용 채팅 보관 파기를 실행한다.
ChatHistoryRetentionWorker.java이력100.0%클래스파기 후보 한 건을 잠그고 재확인한 뒤 외부 자원과 로컬 원문을 순서대로 정리한다.
ChatPromptVersions.java이력75.0%클래스답변 줄에 남기는 쓴 지시문 판(`chat_messages.prompt_versions`) — {"지시문 이름": 판 번호, …}.
ChatSourceRegions.java이력100.0%클래스플랫폼 출처의 쪽 안 위치(ChatCitation.Region) → 근거 위치(ChatSourceRegion).
ChatTitleGenerator.java이력84.8%클래스범용 대화 제목을 플랫폼에 만들어 달라고 한다(통합 설계 v0.4 범용 7번, 업스테이지 공유 2026-11-03).
ChatTurnScopes.java이력81.8%클래스턴 범위 스냅샷의 저장 글자(`chat_messages.turn_scope`) ↔ 응답 모양.
ChatViews.java이력100.0%클래스줄·근거를 계약 DTO 로 옮기는 변환 한 곳.
InvestigationTurn.java이력98.1%클래스사고조사 챗봇 한 턴의 다른 곳(ChatTurnContext) — 답변 재료는 InvestigationTurnPrompt, 출처는 근거 3줄 (InvestigationTurnSources)로 묶어 줄 순서대로 근거 행을 만든다.

statistics/3GitHub

통계 star schema — 사실 적재, 일별 롤업, 조회, 미매핑 큐, 재적재.

ChatStatisticsQueryService.java이력100.0%서비스챗봇 이용 통계 조회 (S-007 §3-4 「챗봇 이용 통계」) — 시스템 통계 「챗봇 질의 건수」·「질의 답변 응답 속도」.
ChatStatisticsRollupService.java이력100.0%5일 전 · #1970서비스챗봇 이용 통계의 일별 롤업 두 개(V202610201000)를 질문·답변 저장과 같은 트랜잭션에서 하나씩 더한다 (S-007 §3-4 「챗봇 이용 통계」).
ChatStatisticsQueryRepository.java이력6.7%저장소챗봇 이용 통계 롤업 두 개의 기간 조회 (S-007 §3-4 「챗봇 이용 통계」).

web/4GitHub

REST 컨트롤러 — HTTP 요청을 서비스로 넘기고 ApiResponse 로 감싼다.

ChatController.java이력화면 /user/agentSwagger40.6%API에이전트 채팅 API (야간 20260930 NX01).
ChatStatisticsController.java이력화면 /adminSwagger0.0%API관리자 시스템 통계 — 챗봇 이용 통계 조회 API (S-007 §3-4 「챗봇 이용 통계」).
InvestigationChatController.java이력화면 미연결Swagger0.0%API사고조사 챗봇 — 보고서 아래 경로(docs/decisions/20261023-investigation-chat-session-structure.md 4항).
ChatAnswerStreamer.java이력96.4%클래스답변 스트림 한 건을 돌린다(docs/decisions/20261102-agent-chat-answer-streaming.md).

빌드·리소스1GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base, chat-shared 모듈 참조.

resources/db/migration/18GitHub

Flyway 마이그레이션 SQL — 파일명 V<YYYYMMDDhhmm>__설명. 앱 기동 시 모든 모듈의 것이 버전 순으로 합쳐 실행된다.

V202609302000__create_chat_sessions.sql이력마이그레이션에이전트 채팅 — 대화 세션·주고받은 줄·근거 (2026-09-30 야간 NX01).
V202610151600__create_chat_attachments.sql이력마이그레이션챗 메시지 연결 전, 검증·PDF 변환·Studio 업로드까지만 끝낸 첨부 이력.
V202610151620__alter_chat_attachments_sha256_varchar.sql이력마이그레이션chat_attachments.source_sha256 을 CHAR(64) → VARCHAR(64) 로 — 엔티티(@Column length = 64)·다른 해시 컬럼 관례와 맞춘다.
V202610191400__add_chat_messages_response_millis.sql이력마이그레이션답변 행에 응답 소요시간을 남긴다 — 통계 대시보드 「질의 답변 응답 속도」(2026-09-14 시트 30행)의 원천.
V202610192100__create_chat_session_files.sql이력마이그레이션대화가 배경지식으로 좁혀 쓰는 문서 (지식 컬렉션 팝업의 문서 단위 선택, WBS 5.1.2).
V202610201000__create_chat_statistics_rollups.sql이력마이그레이션통계 대시보드 「챗봇 질의 건수」(2026-09-14 정의 시트 29행)·「질의 답변 응답 속도」(30행)의 원천과 일별 롤업.
V202610201600__add_chat_sessions_external_conversation_id.sql이력마이그레이션플랫폼(Studio)이 연 대화 식별자를 대화 세션에 남긴다 — 후속 질문이 지난 주고받음을 다시 싣는 대신 이 값으로 잇는다.
V202610211500__add_chat_message_sources_kind_page.sql이력마이그레이션답변 근거를 Studio 응답 출처에서 만든다(docs/decisions/20261021-chat-two-stage-intent-file-search.md 6항).
V202610231500__add_chat_sessions_investigation_kind.sql이력마이그레이션사고조사 챗봇 대화를 범용과 같은 저장소에 담는다(docs/decisions/20261023-investigation-chat-session-structure.md 1·8항).
V202610261000__add_investigation_chat_sources_and_turn_record.sql이력마이그레이션사고조사 챗봇 질문 API — 근거 종류 두 가지와 답변 줄의 턴 기록(docs/decisions/20261023-investigation-chat-session-structure.md 7항, docs/decisions/20261023-chat-prompt-db-versioning.md 7항).
V202610261100__create_chat_attachment_sets.sql이력마이그레이션설명 주석 없음
V202610271800__add_chat_message_turn_scope.sql이력마이그레이션사고조사 챗봇 턴별 검색 범위 스냅샷(docs/decisions/20261023-investigation-chat-session-structure.md 6항 셋째 줄).
V202610281500__comment_chat_session_knowledge_changeable.sql이력마이그레이션대화의 배경지식 범위는 대화 중에도 바뀐다 — 처음에는 시작 시점 고정이었다(V202609302000·V202610192100 의 표 설명).
V202610301610__add_chat_delete_columns.sql이력마이그레이션대화 전체 삭제·마지막 질문 삭제(docs/decisions/20261030-chat-conversation-delete.md).
V202611021800__add_chat_context_segments.sql이력마이그레이션대화 용량과 맥락 구획(docs/decisions/20261102-agent-chat-context-capacity.md).
V202611050944__add_chat_message_source_regions.sql이력마이그레이션챗봇 답변 근거의 쪽 안 위치 — 화면이 근거 쪽 위에 형광펜으로 칠한다(Studio coordinates, 2026-11-04 SaaS 실측).
V202611051520__add_chat_message_prompt_versions.sql이력마이그레이션답변 줄에 쓴 지시문 판 전부를 남긴다 — 지시문이 칸별 키(역할·답변 규칙·① 분류 규칙)로 나뉘어 한 쌍(prompt_key·prompt_version_no)에 담기지 않는다(통합 설계 v0.5 프롬프트 템플릿 0·2번, 결정 20261023 7항).

src/test/45GitHub

테스트 파일 — 펼쳐서 보기
config/ChatConfigTest.java이력테스트ChatConfig 대상 테스트.
config/ChatContextPropertiesTest.java이력테스트ChatContextProperties — 범용 대화 용량(결정 20261102).
config/ChatSourcePropertiesTest.java이력테스트ChatSourceProperties — 근거 칩 고르는 기준(결정 20261021 6항).
config/ChatStatisticsPropertiesTest.java이력테스트챗봇 이용 통계 설정 — 기본 구간은 시트 30행(10·30·60초), 경계는 1~3600 오름차순, 시간대 기본 서울.
entity/ChatAnswerOriginTestSupport.java이력클래스다른 패키지 테스트가 근거 행(패키지 생성자)을 만들어 위치 저장·읽기를 보게 하는 도우미.
entity/ChatMessageTurnRecordTest.java이력테스트답변 줄의 턴 기록 — 쓴 지시문 판 묶음과 사고조사 반영 근거 조건(결정 20261023 지시문 DB 7항).
entity/ChatSessionGeneratedTitleTest.java이력테스트플랫폼이 만든 제목 반영(통합 설계 v0.4 범용 7번) — 부탁한 맥락·플랫폼 대화일 때만 바꾸고, 빈 제목은 버린다.
entity/ChatSessionKindTest.java이력테스트대화 종류·보고서번호와 첨부의 대화 묶기 (결정 20261023 1·8항).
entity/ChatSessionKnowledgeTest.java이력4일 전 · #2040테스트대화의 검색 범위 교체(사고조사·범용) — 남는 줄은 그대로 두고 순서만 고친다(유니크 충돌 방지).
investigation/InvestigationCitationTest.java이력테스트InvestigationCitation 대상 테스트.
investigation/InvestigationSourceBlockTest.java이력테스트근거 묶기·반영 버튼 — 시나리오 B (결정 20261021 4항, 통합 설계 v0.5 사고조사 3번 — 보고서는 출처에서 뺐다, S3~S5).
investigation/InvestigationTurnPromptTest.java이력테스트사고조사 턴 조립 — 시나리오 A4~A9 (통합 설계 v0.3 사고조사 3·4번, 결정 20261021 8항), 지시문 순서 B1~B4 (v0.5 템플릿 2번).
investigation/InvestigationTurnSourcesSaasReplayTest.java이력테스트SaaS 실측 재생 — 2026-10-21 사고조사 ② 전문(solar-pro4, 합성 보고서, 마스킹 접수) 20턴에서 모델이 실제로 낸 참조 줄과 출처 수를 그대로 넣어 본다.
investigation/ReportReferenceLineTest.java이력테스트섞여 온 보고서 참조 줄 지우기 — 시나리오 S1·S2 (통합 설계 v0.5 「참조 줄 폐기」, 결정 20261021 3항 2026-11-05 개정).
service/ChatAnswerStreamingTest.java이력테스트답변 스트림(docs/decisions/20261102-agent-chat-answer-streaming.md) — 조각을 넘기고, 저장은 완성본으로 끝난 뒤 한 번이다.
service/ChatAttachmentContentServiceTest.java이력테스트ChatAttachmentContentService 대상 테스트.
service/ChatAttachmentInspectionServiceTest.java이력테스트ChatAttachmentInspectionService 대상 테스트.
service/ChatAttachmentPreparationServiceTest.java이력테스트ChatAttachmentPreparationService 대상 테스트.
service/ChatAttachmentSelectionServiceTest.java이력테스트ChatAttachmentSelectionService 대상 테스트.
service/ChatBusyMarkerTest.java이력테스트답변 대기 중 표시 — 찍은 시각으로만 지운다(docs/decisions/20261030-chat-conversation-delete.md 4항).
service/ChatContextCapacityTest.java이력테스트범용 대화 용량과 구분선(docs/decisions/20261102-agent-chat-context-capacity.md) — 직전 답변의 사용량이 잠금 비율에 이르면 Studio 를 부르지 않고 거절하고, 구분선 뒤에는 새 플랫폼 대화·빈 이력으로 다시 시작한다.
service/ChatDeletionEntityTest.java이력테스트삭제가 쓰는 대화·줄 상태 — 마지막 쌍 떼기·비우기·진행 중 판정·반영 칸(docs/decisions/20261030-chat-conversation-delete.md).
service/ChatDeletionServiceTest.java이력테스트대화 전체 삭제·마지막 질문 삭제 — 순서·남기는 것·거절(docs/decisions/20261030-chat-conversation-delete.md).
service/ChatExchangeAppenderSessionBindingTest.java이력테스트저장 단계의 첨부 재확인 — 다른 대화에 묶인 첨부는 없는 첨부와 같다(결정 20261023 8항).
service/ChatHistoryRetentionSchedulerTest.java이력테스트ChatHistoryRetentionScheduler 대상 테스트.
service/ChatHistoryRetentionServiceTest.java이력테스트ChatHistoryRetentionService 대상 테스트.
service/ChatHistoryRetentionWorkerTest.java이력테스트ChatHistoryRetentionWorker 대상 테스트.
service/ChatKnowledgeChangeTest.java이력테스트진행 중 범용 대화의 검색 범위 변경(docs/decisions/20261019-agent-knowledge-picker-file-unit.md 「개정 2026-10-28」) — 본인 범용 대화만, 턴 한도에 이른 대화와 볼 수 없는 범위는 저장하지 않고 거절하며, 바꾼 범위는 다음 질문의 검색…
service/ChatServiceTest.java이력테스트ChatService 유닛 테스트 (docs/rules/testing.md).
service/ChatSourceRegionsTest.java이력테스트근거 위치 — 플랫폼 위치 옮기기, 같은 쪽 위치 합치기, 검색 근거 위치 끄기(저장 단계).
service/ChatStatisticsWiringTest.java이력테스트챗봇 이용 통계의 원천 연결 — 질문한 때의 부서를 조직 범위 포트로 찾아 두 줄에 남기고, 저장과 같은 트랜잭션에서 롤업을 더한다.
service/ChatTitleGeneratorTest.java이력테스트ChatTitleGenerator 유닛 테스트 — 언제 제목을 부탁하는지(범용·맥락의 첫 턴·플랫폼 대화가 있을 때만), 실패·빈 제목·늦게 온 제목에서 지금 제목을 지키는지.
service/ChatTurnScopesTest.java이력테스트턴 범위 스냅샷 — 저장 글자 왕복·읽을 수 없는 값·질문 줄 한정·응답 싣기 (시나리오 S4·S5).
service/ChatUsageServiceTest.java이력테스트사용 내역의 사고조사 건 — 제목 조합·검색·없어진 보고서·정렬 (시나리오 U3·U5·U9·U10).
service/InvestigationChatAskTest.java이력테스트사고조사 챗봇 질문 — 판정·첫 질문 때 대화 만들기·턴 위임 (시나리오 Q1~Q5, Q11·Q12 의 반영 버튼).
service/InvestigationChatAttachmentServiceTest.java이력테스트사고조사 챗봇 첨부 — 판정·대화 만든 뒤 묶어 올리기·출처 PDF (시나리오 T1~T4, T8).
service/InvestigationChatKnowledgeTest.java이력테스트사고조사 챗봇 대화 중 검색 범위 변경 — 판정·검증·대화 만들기·교체 (시나리오 K1~K8).
service/InvestigationChatPurgeServiceTest.java이력테스트보고서 삭제 연동 — 순서·실패 시 DB 보존·없는 포트 (시나리오 P1·P2·P4~P6).
service/InvestigationChatReflectionServiceTest.java이력테스트사고조사 챗봇 AI 보고서 반영 — 판정·재료 모으기·결과 옮기기 (시나리오 R1~R9).
service/InvestigationChatServiceTest.java이력테스트사고조사 챗봇 패널 열기 — 시나리오 C1~C9 (docs/decisions/20261023-investigation-chat-session-structure.md 4항).
service/InvestigationTurnTest.java이력테스트사고조사 턴 — 답변 재료(사건 Store 싣기)와 출처 → 근거 행(시나리오 Q6~Q10, Q13).
statistics/ChatStatisticsQueryServiceTest.java이력테스트챗봇 이용 통계 조회 — 구간 경계(이하는 아래 구간), 비율, 사람 × 부서 묶음과 조직 이름, 기간·부서 조건.
statistics/ChatStatisticsRollupServiceTest.java이력테스트챗봇 롤업 증분 — 0 건 행을 먼저 세우고(충돌이면 아무것도 안 함) 더한다, 일자는 설정 시간대의 달력, 응답 소요시간이 없으면 응답 롤업은 건드리지 않는다, 소요시간은 초 단위 올림.
web/ChatAnswerStreamerTest.java이력테스트답변 스트림 한 건 — 이벤트 순서, 오류 이벤트, 끊긴 연결(docs/decisions/20261102-agent-chat-answer-streaming.md).
web/ChatControllerTest.java이력테스트ChatController 대상 테스트.

modules/ · 인프라 어댑터

modules/aiplatform-core/GitHub

외부 AI 플랫폼 어댑터

외부 AI 플랫폼 어댑터 — Studio·DocMate 어댑터(shared 없음) — base 의 벡터 스토어, 채팅, 문서 분류·추출·요약·보고서, 문서 변환 포트를 구현한다. provider none 은 in-memory.

57 소스40 테스트
의존 모듈 base
주요 라이브러리 spring-boot-starter spring-web spring-boot-starter-json micrometer-core pdfbox wiremock-standalone

(루트)3GitHub

provider 선택과 어댑터 빈 구성.

AiPlatformProvider.java이력100.0%enum어느 AI 플랫폼 구현을 붙일지 고르는 값 (hwss.ai-platform.provider).
AiPlatformConfig.java이력83.3%설정AI 플랫폼 어댑터 빈 구성.
AiPlatformProperties.java이력100.0%설정AI 플랫폼 연동 설정 (hwss.ai-platform.*).

docmate/3GitHub

DocMate 문서 변환 어댑터.

DocMateConfig.java이력100.0%설정DocMate 변환 어댑터 빈 구성 — hwss.document-conversion.provider=docmate 일 때만 활성화된다.
DocMateProperties.java이력90.0%설정DocMate 접속·변환 설정 — hwss.document-conversion.provider=docmate 일 때만 읽는다 (docs/decisions/20261013-file-ingestion-pdf-unification.md §1-2).
DocMateDocumentConverter.java이력92.8%클래스DocMate 로 DocumentConversionPort 를 구현한다 (docs/decisions/20261013-file-ingestion-pdf-unification.md §1-2).

inmemory/2GitHub

외부 호출 없는 in-memory 벡터 저장소.

InMemoryVectorStoreAdapter.java이력97.2%포트 구현외부 호출 없는 in-memory 벡터 저장소 (hwss.ai-platform.provider=none).
StubChatModelAdapter.java이력100.0%포트 구현ChatModelPort 의 스텁 — 플랫폼 채팅을 켜지 않았을 때(기본)의 어댑터.

studio/35GitHub

업스테이지 Studio(v2) 연동 어댑터.

StudioChatPrompts.java이력100.0%4일 전 · #2030record에이전트 대화에 싣는 설정 값 — ① 의도 게이트의 모델·툴 이름과 범용 ③ 본 답변 문구(통합 설계 v0.5 「프롬프트 템플릿」 1번의 {{변수}} 자리).
StudioConfig.java이력69.5%어제 · #2132설정Studio 어댑터 빈 구성 — hwss.ai-platform.provider=studio 일 때만 활성화된다.
StudioProperties.java이력96.4%설정업스테이지 Studio(v2) 접속 설정 (hwss.ai-platform.studio.*).
StudioReportLlmProperties.java이력100.0%설정Studio 보고서 초안 LLM 직접 호출 설정 (docs/decisions/20261020-report-generation-llm-input-job.md 「결정」 3항).
StudioReportProperties.java이력100.0%설정Studio 보고서 생성 에이전트 설정 (docs/decisions/20261015-studio-saas-v2-agents-adoption.md D4).
StudioSummaryGroupProperties.java이력100.0%5일 전 · #1994설정Studio 요약(Agent D) — 요약 그룹마다 1회 부르는 경로의 설정 (docs/decisions/20261019-studio-summary-tab-doc-groups.md 「추가 2026-10-21」, 통합 설계 v0.3 「Agent D 요약」).
StudioAgentConfigCompatibility.java이력93.3%5일 전 · #1988클래스Studio 지시서 짝의 이어 실행 가능 여부 — 뒤 단계 Import 가 고른 형태에 앞 단계 지시서의 결과가 있는지 (docs/decisions/20261108-studio-config-pair-repin.md).
StudioAgentConfigContent.java이력99.0%클래스Studio 지시서(Config) 응답에서 관리자 스키마 화면에 채울 값만 읽는다(docs/decisions/20261102-studio-config-sync-fill-screen.md).
StudioAgentConfigVersions.java이력90.3%클래스Studio 에이전트의 지시서(Config) 목록 — GET /agents/{agent_id}/configs?order=desc 를 끝까지 받는다 (Studio 규약 v1.6.5 「Configs」, docs/decisions/20261029-studio-config-version-list-fro…
StudioAgentConfigs.java이력97.5%5일 전 · #1994클래스지금 설정된 Studio 에이전트·지시서 — 조사건 인입 때 건에 고정할 값(docs/decisions/20261028-investigation-settings-snapshot-at-intake.md 2항).
StudioAgentDefaultConfigs.java이력96.9%클래스Studio Agent 의 지금 기본 Config — GET /agents/{agent} 의 default_config_id (docs/decisions/20261028-investigation-settings-snapshot-at-intake.md 「배포 판 고정」).
StudioAnalysisOutputParser.java이력94.3%클래스완료된 Studio Job 응답에서 요약(Instruct) 결과를 꺼낸다.
StudioChatActive.java이력50.0%클래스Studio 채팅 어댑터가 등록되는 구성 — provider=studio 이고 studio.chat.enabled=true 일 때다.
StudioClassificationOutputParser.java이력95.3%6일 전 · #1952클래스완료된 Studio Job 응답에서 분류 결과를 꺼낸다 (계약 회신 2026-09-23 — docs/notes/20260923-studio-classify-response-shape.md).
StudioCollectionResolver.java이력93.3%클래스지시서(Config)의 Export Collection(scol_…)을 Studio 에서 해석한다 — 검수 보정 결과 왕복의 저장소를 운영자가 설정으로 넣지 않아도 되게(docs/decisions/20260929-pipeline-correction-roundtrip.md §3).
StudioDocumentErrors.java이력98.6%5일 전 · #1988클래스Studio 호출 실패를 DocumentAiException 으로 접는다 — 문서 분류 어댑터 공통.
StudioExtractionOutputParser.java이력97.3%5일 전 · #1992클래스완료된 Studio Job 응답에서 추출 결과를 꺼낸다.
StudioImportShapes.java이력85.4%어제 · #2132클래스뒤 단계 지시서의 Import 형태 맞춤 — Studio 구현(docs/decisions/20261111-studio-import-shape-regeneration.md).
StudioIndexingStatusMapper.java이력85.7%클래스플랫폼 인덱싱 상태 문자열 → VectorIndexingStatus 접기.
StudioJobPoll.java이력93.2%어제 · #2137클래스Studio(v2) background Job 상태 조회 공통 — 분류·추출·요약 어댑터의 poll 이 쓴다.
StudioJobReviewRoundtrip.java이력89.2%클래스Studio(v2) Job 검수 JSON(collection-results/11) 으로 검수 보정을 되돌려 놓는 왕복 — StudioResultCorrectionAdapter 가 Collection 이 이 방식을 지원할 때 위임한다 (docs/decisions/20261006-collection…
StudioPipelineV2Active.java이력81.8%클래스사고조사 파이프라인 v2 를 쓰는 환경인가 — hwss.workflow.definition-versions[INVESTIGATION_MAIN]=2 (AI_PLATFORM_STUDIO_PIPELINE_VERSION=2, docs/decisions/20261021-investigation-pipel…
StudioSourceFiles.java이력100.0%클래스Step 결과 additional_values.source_files — 여러 파일을 한 Job 에 넣었을 때 병합 문서 기준 page_ranges 를 원본 파일 기준으로 환산한 값(Studio v1.6.4, 문서 responses.md 「통합 입력의 페이지 좌표」).
StudioTargetEnvironmentPostProcessor.java이력96.6%클래스Studio 접속 대상을 이름 하나로 갈아 끼우는 장치 (AI_PLATFORM_STUDIO_TARGET).
StudioAnalysisAdapter.java이력90.8%포트 구현Studio(v2) Responses 로 DocumentAnalysisPort 를 구현한다 — 앞선 추출 Job 을 이어받아 요약(Instruct) background Job 을 맡기고 폴링한다.
StudioCaseDocumentStoreAdapter.java이력100.0%포트 구현공통 분류 에이전트의 Store 를 사건 서류 Store 로 준다 — GET /agents/{분류 에이전트} 의 vector_store_id (docs/decisions/20261021-investigation-chat-references-and-reflection.md 8항).
StudioChatAdapter.java이력98.9%7일 전 · #1914포트 구현Studio 채팅 어댑터 — 질문 하나에 ① 의도 게이트 → ② 컬렉션 라우팅 → ③ 본 답변 세 호출 (docs/decisions/20261021-chat-two-stage-intent-file-search.md 10항, 통합 설계 v0.4 범용 챗봇 1번).
StudioClassificationAdapter.java이력92.2%포트 구현Studio(v2) Responses 로 DocumentClassificationPort 를 구현한다 — 분류 에이전트에 background Job 을 맡기고 폴링한다.
StudioDocumentFileAdapter.java이력93.7%포트 구현Studio(v2) Files 로 DocumentFilePort 를 구현한다.
StudioExtractionAdapter.java이력94.5%2일 전 · #2113포트 구현Studio(v2) Responses 로 DocumentExtractionPort 를 구현한다 — 앞선 분류 Job 을 이어받아 추출 background Job 을 맡기고 폴링한다.
StudioGroupSummaryAdapter.java이력88.3%2일 전 · #2113포트 구현Studio(v2) 로 DocumentGroupSummaryPort 를 구현한다 — 요약 그룹마다 분류 Job 의 문서를 골라 요약(Agent D) Job 하나를 맡긴다(통합 설계 v0.3 「Agent D 요약」, 규약 v1.6.5 「문서·파일 선택 이어 실행」).
StudioReportAdapter.java이력94.9%포트 구현업스테이지 Studio 보고서 생성 에이전트 어댑터 (docs/decisions/20261015-studio-saas-v2-agents-adoption.md D4, 2026-10-15 실측).
StudioReportLlmAdapter.java이력91.9%5일 전 · #1970포트 구현업스테이지 Studio 보고서 초안 LLM 직접 호출 어댑터 (docs/decisions/20261020-report-generation-llm-input-job.md 「결정」 3·6항, 2026-10-20 SaaS 실측 「실측」·「실측 2」).
StudioResultCorrectionAdapter.java이력81.7%5일 전 · #1992포트 구현Studio(v2) Collection 결과 왕복으로 DocumentResultCorrectionPort 를 구현한다 — 검수 보정을 Export Collection 의 우리 Job 결과에 되돌려 놓고 이어 실행에 쓸 Job 을 돌려준다.
StudioVectorStoreAdapter.java이력86.3%포트 구현업스테이지 Studio(v2) Vector Stores 어댑터 (hwss.ai-platform.provider=studio) — 지식컬렉션 1개 = standalone vector store 1개.

studio/dto/14GitHub

Studio Vector Stores 요청·응답 DTO 초안.

VectorStoreCreateRequest.java이력100.0%DTOPOST /v2/vector_stores 요청 (studio-api-v260922 api/vector-stores.md 「Store 만들기와 관리」).
VectorStoreDeleteResponse.java이력100.0%DTO삭제 응답 {"id":…,"object":"vector_store.deleted","deleted":true} (실측 2026-09-28).
VectorStoreDescriptionGenerateRequest.java이력100.0%DTOPOST /v2/vector_stores/{vector_store_id}/description/generate 요청 — 업스테이지가 2026-10-16 연 설명 생성 API (docs/decisions/20261016-collection-store-description-generate.md 「실측」).
VectorStoreFileBatchCreateRequest.java이력100.0%DTOPOST /v2/vector_stores/{vector_store_id}/file_batches 요청 (studio-api-v260922 api/vector-stores.md 「File Batch」).
VectorStoreFileBatchResponse.java이력100.0%DTO파일 배치 한 건의 응답 표현 (studio-api-v260922 api/vector-stores.md 「File Batch」).
VectorStoreFileCreateRequest.java이력100.0%DTOPOST /v2/vector_stores/{vector_store_id}/files 요청 (studio-api-v260922 api/vector-stores.md 「File 색인」).
VectorStoreFileResponse.java이력100.0%DTO벡터 스토어 file membership 한 건의 응답 표현 (studio-api-v260922 api/vector-stores.md — 2026-09-28 실측 확인).
VectorStoreFileUpdateRequest.java이력100.0%DTOPOST /vector_stores/{id}/files/{file_id} 본문 — 색인된 파일의 속성만 교체한다(재임베딩 없음).
VectorStoreModifyRequest.java이력100.0%DTOPOST /v2/vector_stores/{vector_store_id} 수정 요청 (studio-api-v260922 api/vector-stores.md).
VectorStoreResponse.java이력100.0%DTO벡터 스토어 한 개의 응답 표현 (studio-api-v260922 api/vector-stores.md — 2026-09-28 실측 확인).
VectorStoreSearchRequest.java이력100.0%DTOPOST /v2/vector_stores/{vector_store_id}/search 요청 (studio-api-v260922 api/vector-stores.md 「검색」).
VectorStoreSearchResponse.java이력100.0%DTO검색 응답 (studio-api-v260922 api/vector-stores.md 「검색」 — 2026-09-28 실측 확인).
package-info.java이력패키지 주석업스테이지 Studio(v2) Vector Stores·Files 표면의 요청·응답 DTO.
VectorStoreSearchFilter.java이력100.0%필터검색 filters 트리 한 노드 (studio-api-v260922 api/vector-stores.md 「검색」).

빌드·리소스2GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base 모듈 참조.
META-INF/spring.factories이력리소스설명 주석 없음

src/test/40GitHub

테스트 파일 — 펼쳐서 보기
AiPlatformConfigTest.java이력테스트AiPlatformConfig 대상 테스트.
docmate/DocMateConfigTest.java이력테스트DocMateConfig 대상 테스트.
docmate/DocMateDocumentConverterTest.java이력테스트DocMate 어댑터 — WireMock 이 2026-10-14 실측한 응답 모양(/file/info·/convert/pdf·오류 본문)을 내주고, 운영과 같은 DocMateConfig#docMateRestClientBuilder 구성으로 부른다.
inmemory/InMemoryVectorStoreAdapterTest.java이력테스트InMemoryVectorStoreAdapter 대상 테스트.
inmemory/StubChatModelAdapterTest.java이력테스트StubChatModelAdapter 유닛 테스트.
studio/AnalysisStudioContractTest.java이력테스트요약(Instruct) 녹화 계약 — 추출 Job 을 이어받는 요약 Job 을 지시문과 함께 제출하고, 판마다 다른 완료 응답을 실제 어댑터 HTTP 코드로 읽는다.
studio/ClassificationStudioContractTest.java이력테스트분류 녹화 계약 — 파일 올리기 → 분류 Job 제출 → 진행 중 → 완료 응답을 실제 어댑터 HTTP 코드로 WireMock 에 대고 돌려, 판마다 기록해 둔 응답 모양을 포트 결과(ClassificationJobStatus)로 읽는지 본다.
studio/ErrorShapesStudioContractTest.java이력테스트알려진 오류·예외 응답 모양의 녹화 계약 — 플랫폼이 실제로 돌려준(또는 문서가 정한) 오류 본문·지연을 WireMock 으로 재현하고, 실제 RestClient 구성(타임아웃·버퍼링)을 거쳐 StudioDocumentErrors 가 설계대로 접는지 본다.
studio/ExtractionStudioContractTest.java이력테스트추출 녹화 계약 — 분류 Job 을 이어받는 추출 Job 을 제출하고 진행 중 → 완료 응답을 실제 어댑터 HTTP 코드로 읽는다.
studio/StudioAgentConfigCompatibilityTest.java이력5일 전 · #1988테스트지시서 짝 판정의 요청 형태·판정 규칙을 고정한다.
studio/StudioAgentConfigContentTest.java이력테스트지시서(Config)에서 화면에 채울 값을 읽는 규칙을 고정한다 — 모양은 2026-11-02 실측한 분류·추출 지시서와 같다 (docs/decisions/20261102-studio-config-sync-fill-screen.md).
studio/StudioAgentConfigVersionsTest.java이력테스트Studio 에이전트 지시서(Config) 목록 — 요청 모양(최신순·쪽 크기·커서), 응답 읽기(external_id·created_at·is_default), 쪽 넘김 멈춤, 실패 변환을 고정한다(Studio 규약 v1.6.5 「Configs」, docs/decisions/20261029-s…
studio/StudioAgentConfigsTest.java이력5일 전 · #1994테스트조사건 인입 때 건에 고정할 Studio 에이전트·지시서 (결정 20261028 2항).
studio/StudioAnalysisAdapterTest.java이력테스트Studio 요약 어댑터의 요청 형태와 응답 접기를 고정한다 — 실제 플랫폼은 부르지 않는다 (MockRestServiceServer).
studio/StudioAnalysisOutputParserTest.java이력테스트요약(Instruct) 응답 읽기 — 지시서의 response_format 이 고정한 카드 형식을 읽고, 형식을 따르지 않은 자유 서술도 버리지 않는다.
studio/StudioCaseDocumentStoreAdapterTest.java이력테스트사건 서류 Store 조회 — 시나리오 S1~S6.
studio/StudioChatAdapterFailureLoggingTest.java이력테스트Studio 채팅 호출이 실패했을 때 원인이 로그에 남는지와 재시도 판정을 지킨다.
studio/StudioChatAdapterTest.java이력테스트StudioChatAdapter 대상 테스트.
studio/StudioClassificationOutputParserLoggingTest.java이력테스트파싱이 실패했을 때 로그에 플랫폼 응답 원문이 실리지 않는지를 지킨다 — StudioExtractionOutputParserLoggingTest 의 분류 짝이다 (2026-09-25 야간 Q1).
studio/StudioClassificationOutputParserTest.java이력6일 전 · #1952테스트2026-09-23 계약 회신의 실제 응답 형태를 픽스처로 고정한다 — docs/notes/20260923-studio-classify-response-shape.md.
studio/StudioCollectionResolverTest.java이력테스트지시서 → Export Collection 해석의 요청 형태·고르기 규칙·캐시를 고정한다.
studio/StudioConfigTest.java이력어제 · #2132테스트provider 별 빈 등록이 실제로 배타적인지 — 두 구성을 함께 올려서 확인한다.
studio/StudioContractFixtures.java이력클래스Studio 녹화 계약 테스트(*StudioContractTest) 공용 도구 — 판마다 녹화해 둔 픽스처를 읽어 WireMock 응답으로 내주고, 어댑터를 운영과 같은 구성(StudioConfig#studioRestClientBuilder)으로 WireMock 에 붙인다.
studio/StudioDocumentAdaptersTest.java이력어제 · #2137테스트Studio 문서 분류 어댑터(파일·분류)의 요청 형태와 응답 접기를 고정한다 — 실제 플랫폼은 부르지 않는다(MockRestServiceServer).
studio/StudioDocumentErrorsTest.java이력5일 전 · #1987테스트StudioDocumentErrors#from 의 재시도 판단을 고정한다 — 작업 폴러가 이 값으로 "잠시 뒤 다시"와 "영구 실패"를 가르므로, 일시 장애를 비재시도로 접으면 Studio 쪽 Job 이 살아 있어도 우리 작업이 닫힌다.
studio/StudioExtractionAdapterTest.java이력어제 · #2137테스트Studio 추출 어댑터의 요청 형태와 응답 접기를 고정한다 — 실제 플랫폼은 부르지 않는다 (MockRestServiceServer).
studio/StudioExtractionOutputParserLoggingTest.java이력테스트파싱이 실패했을 때 로그에 추출 원문이 실리지 않는지를 지킨다.
studio/StudioExtractionOutputParserTest.java이력5일 전 · #1992테스트추출 결과 파싱 규칙을 고정한다 — content[].text 가 JSON 문자열이라는 점, 중첩·표를 펴는 방식, 그리고 깨진 값 하나가 결과 전체를 버리지 않는다는 원칙이다.
studio/StudioGroupSummaryAdapterTest.java이력2일 전 · #2113테스트요약 그룹 어댑터의 요청 형태와 응답 접기를 고정한다 — 실제 플랫폼은 부르지 않는다(MockRestServiceServer).
studio/StudioImportShapesTest.java이력어제 · #2132테스트Import 형태 맞춤의 요청 형태를 고정한다.
studio/StudioLargeResponseTest.java이력테스트큰 사건의 include=all 응답 — Parse 결과가 Jackson 기본 문자열 한도(2천만 자)를 넘어도 읽어야 한다.
studio/StudioPipelineV2ActiveTest.java이력테스트v2 스위치 하나로 요약 그룹·보고서 LLM 어댑터 조건이 함께 켜진다(결정 20261021-investigation-pipeline-v2-composition).
studio/StudioReportAdapterTest.java이력테스트Studio 보고서 생성 어댑터의 요청 형태와 응답 접기(결정 20261015 신규 에이전트 D4, 2026-10-15 실측).
studio/StudioReportLlmAdapterTest.java이력테스트Studio 보고서 초안 LLM 직접 호출 어댑터의 요청 모양과 SSE·실패 해석(결정 20261020 「결정」 3·6항, 10/20 SaaS 실측).
studio/StudioResultCorrectionAdapterTest.java이력5일 전 · #1992테스트Studio 결과 왕복 어댑터의 요청 형태와 응답 접기를 고정한다 — 실제 플랫폼은 부르지 않는다 (MockRestServiceServer 둘: API 용·서명된 URL 다운로드용).
studio/StudioTargetEnvironmentPostProcessorTest.java이력테스트접속 대상 고르기 — 고른 대상의 AI_PLATFORM_STUDIO__… 값이 application.yml 이 읽는 AI_PLATFORM_STUDIO_… 이름으로 보이는지, 고르지 않으면 아무것도 바뀌지 않는지 확인한다.
studio/StudioUploadFilenameTest.java이력테스트Studio 업로드 파일명 — 한글을 UTF-8 평문 filename="…" 그대로(NFC) 싣는다.
studio/StudioUploadPdfXmpTest.java이력테스트Studio 업로드 전 PDF XMP 제거 — docs/decisions/20261028-studio-upload-strip-pdf-xmp.md.
studio/StudioVectorStoreAdapterTest.java이력테스트Studio 벡터 스토어 어댑터의 요청 형태와 응답 접기를 고정한다 — 실제 플랫폼은 부르지 않는다 (MockRestServiceServer).
studio/dto/StudioVectorStoreDtoTest.java이력테스트어댑터가 아직 부르지 않는 DTO(배치·청킹)와 검색 필터 트리의 JSON 형태를 고정한다.

modules/ · 인프라 어댑터

modules/mail-core/GitHub

SMTP 발송 어댑터

SMTP 발송 어댑터 — 사내 Postfix 발송(MailDeliveryPort 구현)과 관리자 메일 계정 비밀번호 재설정.

25 소스8 테스트3 마이그레이션
의존 모듈 base
주요 라이브러리 spring-boot-starter-web spring-boot-starter-validation spring-boot-starter-mail spring-boot-starter-data-jpa springdoc-openapi-starter-webmvc-ui micrometer-core

(루트)6GitHub

SMTP 발송 어댑터 본체 — 설정·자격 증명·sender 공급.

SmtpMailConfig.java이력50.0%설정SMTP 발송 빈 구성.
SmtpMailProperties.java이력88.9%설정사내 SMTP 접속 설정 (hwss.mail.*).
SmtpSenderSupplier.java이력인터페이스발송 1회분 sender 를 공급한다.
SmtpCredentialProvider.java이력66.7%클래스지금 발송에 쓸 SMTP 비밀번호를 결정한다 — DB 에 저장된 값이 우선, 없으면 설정값.
SmtpMailSenderFactory.java이력100.0%클래스주어진 비밀번호로 발송 1회분 sender 를 만든다.
SmtpMailDeliveryAdapter.java이력100.0%포트 구현MailDeliveryPort 의 SMTP 구현.

password/13GitHub

SMTP 대표 계정 비밀번호 암호화 저장·변경 이력.

MailAccountPasswordConfig.java이력0.0%설정비밀번호 저장소와 기동 점검의 빈 구성.
MailAccountPasswordEntity.java이력82.4%엔티티SMTP 대표 계정 비밀번호 한 건 — 테이블에 항상 최대 한 행이다(CHECK (id = 1)).
MailAccountPasswordHistoryEntity.java이력77.8%엔티티비밀번호 변경 이력 한 줄 — 언제 누가 바꿨는가만 남긴다.
MailAccountPasswordConfirmationException.java이력100.0%예외재설정 요청의 기존 비밀번호 확인이 통과하지 못했을 때 (값이 없거나 저장된 값과 다르다).
MailAccountPasswordConflictException.java이력0.0%예외두 재설정이 같은 순간에 최초 행을 만들려다 부딪혔을 때.
MailAccountPasswordResetNotAllowedException.java이력100.0%예외허용 레벨이 아닌 사용자가 SMTP 대표 계정 비밀번호를 재설정하려 할 때.
MailAccountViewNotAllowedException.java이력100.0%예외메일 발송 계정 조회는 비밀번호 재설정과 같은 허용 레벨로 제한한다.
MailSecretException.java이력100.0%예외SMTP 대표 계정 비밀번호의 암·복호화가 성립하지 않는 상태.
MailAccountPasswordHistoryRepository.java이력저장소비밀번호 변경 이력 저장소.
MailAccountPasswordRepository.java이력저장소단일 행 비밀번호 저장소.
MailAccountPasswordStartupCheck.java이력100.0%클래스기동 시점에 저장된 비밀번호를 실제로 복호화해 본다.
MailAccountPasswordStore.java이력62.3%클래스SMTP 대표 계정 비밀번호의 저장·조회·재설정 (결정문 §1).
MailSecretCipher.java이력89.2%클래스SMTP 대표 계정 비밀번호의 대칭 암·복호화 (AES-256-GCM).

service/1GitHub

비즈니스 로직과 트랜잭션 경계.

MailAccountService.java이력96.0%서비스관리자 "메일 발송 계정" 화면의 조회·재설정 (결정문 §2·§3, 화면은 N03).

web/5GitHub

관리자 메일 계정 API와 SMTP 접속 점검 엔드포인트.

MailAccountController.java이력화면 /admin/mail-accountSwagger0.0%API관리자 메일 발송 계정 API (화면 /admin/mail-account, 결정문 docs/decisions/20260827-smtp-password-admin-reset.md).
MailAccountPasswordResetRequest.java이력100.0%DTOSMTP 대표 계정 비밀번호 재설정 요청 (결정문 §2).
MailAccountSettingsRequest.java이력50.0%DTO설명 주석 없음
MailAccountView.java이력100.0%DTO관리자 "메일 발송 계정" 화면이 읽는 상태 전체 (결정문 §1·§3, 화면은 N03).
MailAccountPasswordChange.java이력100.0%record비밀번호 변경 이력 한 줄 — 언제 누가 만 담는다.

빌드·리소스1GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base 모듈 참조.

resources/db/migration/3GitHub

Flyway 마이그레이션 SQL — 파일명 V<YYYYMMDDhhmm>__설명. 앱 기동 시 모든 모듈의 것이 버전 순으로 합쳐 실행된다.

V202608270002__create_mail_account_password.sql이력마이그레이션SMTP 대표 계정 비밀번호 저장소 + 변경 이력 (docs/decisions/20260827-smtp-password-admin-reset.md 🟢 §1).
V202609160006__comment_mail_schema.sql이력마이그레이션메일 계정 암호 테이블의 컬럼 설명 (테이블 설명은 V202608270002 에 이미 있다).
V202610081525__extend_mail_account_password_settings.sql이력마이그레이션설명 주석 없음

src/test/8GitHub

테스트 파일 — 펼쳐서 보기
SmtpCredentialProviderTest.java이력테스트SmtpCredentialProvider 대상 테스트.
SmtpMailConfigTest.java이력테스트활성화 조건과 JavaMail 프로퍼티 매핑(STARTTLS 강제·타임아웃·ssl.trust)이 설정대로 구성되는지 검증한다.
SmtpMailDeliveryAdapterTest.java이력테스트SmtpMailDeliveryAdapter 대상 테스트.
SmtpMailPropertiesTest.java이력테스트SmtpMailProperties 대상 테스트.
password/MailAccountPasswordStartupCheckTest.java이력테스트기동 점검의 네 경우.
password/MailAccountPasswordStoreTest.java이력테스트MailAccountPasswordStore 대상 테스트.
password/MailSecretCipherTest.java이력테스트MailSecretCipher 대상 테스트.
service/MailAccountServiceTest.java이력테스트관리자 메일 발송 계정 서비스의 세 책임 — 인가, 기존 비밀번호 확인 정책, 변경 주기 계산.

modules/ · 인프라 어댑터

modules/smartreview-core/GitHub

스마트심사 오라클 조회 어댑터

스마트심사 오라클 조회 어댑터 — 스마트심사 뷰(사용자·조직, 조사 건 메타, 조직 변경 이력, 보고서 파기 일정)를 두 번째 DataSource 로 라이브 조회한다(기본 비활성).

14 소스13 테스트
의존 모듈 base
주요 라이브러리 spring-boot-starter-jdbc spring-boot-starter-web ojdbc micrometer-core jackson-databind

(루트)14GitHub

오라클 커넥션 풀과 사용자·조직 디렉터리, 조사 건 메타·조직 변경 이력·보고서 파기 일정 어댑터.

SmartReviewConfig.java이력0.0%4일 전 · #2006설정스마트심사 오라클 라이브 조회 구성.
SmartReviewProperties.java이력0.0%설정스마트심사 오라클 접속 설정(hwss.smartreview.*) — 값은 전부 환경변수로 주입한다.
SmartReviewTransferConfig.java이력100.0%설정스마트심사 보고서 전송 구성.
SmartReviewTransferProperties.java이력90.9%설정스마트심사 보고서 수신 API 설정(hwss.smartreview.transfer.*) — 값은 환경변수로 주입한다.
CachingOrganizationDirectory.java이력100.0%클래스스마트심사 디렉터리를 일정 시간 메모리에 두는 OrganizationDirectoryPort — 운영 빈은 이것이다 (docs/decisions/20261012-user-org-affiliation-basis.md 🟢 결정 10).
OrganizationAffiliation.java이력100.0%클래스사용자의 소속 조직을 고르는 규칙 한 곳 — 사용 중인 조직 목록 하나로 만들어 여러 사용자에게 쓴다 (docs/decisions/20261012-user-org-affiliation-basis.md 🟢 결정 1·7).
SmartReviewConnectionPool.java이력0.0%클래스스마트심사 오라클 커넥션 풀 홀더.
SmartReviewHospitalMasterAdapter.java이력60.0%어제 · #2140포트 구현스마트심사 병원정보 뷰(SMART.VW_AI_HOSPINFO) 전체 조회 — 하루 한 번 적재 배치의 원천이다.
SmartReviewInvestigationMetadataAdapter.java이력100.0%포트 구현스마트심사 조사정보 View를 보고서번호로 라이브 조회한다.
SmartReviewOrganizationChangeHistoryAdapter.java이력100.0%포트 구현스마트심사 사용자이력정보 뷰(SMART.VW_AI_UVORG002_HIS) 라이브 조회 — 사원별 최종 인사 변경일시 (docs/decisions/20260827-orgchart-change-tracking.md 🟢).
SmartReviewOrganizationDirectoryAdapter.java이력86.9%포트 구현조직·사용자 디렉터리의 스마트심사 뷰 구현 — 조직도(VW_AI_UVORG001)·사용자 (VW_AI_UVORG002)를 라이브로 읽고, 직급/직책 코드는 공통코드 뷰 (VW_AI_UVCDT001)로 해석한다.
SmartReviewReportDisposalScheduleAdapter.java이력100.0%포트 구현스마트심사 파기 뷰(대내·대외)를 보고서번호로 라이브 조회한다 — 결정 20260909-report-disposal-policy.
SmartReviewReportTransferAdapter.java이력97.8%포트 구현스마트심사 보고서 수신 API(POST /api/v1/reports/{partnerCode}) 호출 — 명세서 v1.0(2026-11-02).
SmartReviewUserDirectoryAdapter.java이력100.0%포트 구현스마트심사 사용자 뷰(SMART.VW_AI_UVORG002) 라이브 조회 — 로그인·세션 재발급마다 오라클에서 그 사번 한 명을 새로 읽는다(캐시하지 않는다 — 퇴직 처리·신규 입사가 바로 반영돼야 한다).

빌드·리소스2GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base 모듈 참조.
smartreview/views.json이력어제 · #2140리소스설명 주석 없음

src/test/13GitHub

테스트 파일 — 펼쳐서 보기
CachingOrganizationDirectoryTest.java이력테스트디렉터리 캐시 — 시간 안에는 오라클을 다시 부르지 않고, 지나면 다시 읽는다(결정 20261012 §10).
OrganizationAffiliationTest.java이력테스트소속 조직 규칙(docs/decisions/20261012-user-org-affiliation-basis.md 🟢 결정 1·7)을 실측 사례의 모양으로 고정한다.
SmartReviewConfigTest.java이력테스트기본 비활성 검증 — 접속 정보 없는 환경(로컬·CI)에서 오라클 풀이 절대 뜨지 않아야 한다.
SmartReviewDirectoryMetricsTest.java이력테스트스마트심사 오라클 조회의 계측을 고정한다 (docs/decisions/20260828-observability-stack.md §2 "외부 연동 장애 분석").
SmartReviewHospitalMasterAdapterTest.java이력어제 · #2140테스트SmartReviewHospitalMasterAdapter 대상 테스트.
SmartReviewInvestigationMetadataAdapterTest.java이력테스트SmartReviewInvestigationMetadataAdapter 대상 테스트.
SmartReviewOrganizationChangeHistoryAdapterTest.java이력테스트사용자이력정보 뷰 — 행 해석, 디렉터리와 같은 주기의 캐시, 오라클 호출 계측(결정 20260827).
SmartReviewOrganizationDirectoryAdapterTest.java이력테스트SmartReviewOrganizationDirectoryAdapter 대상 테스트.
SmartReviewReportDisposalScheduleAdapterTest.java이력테스트SmartReviewReportDisposalScheduleAdapter 대상 테스트.
SmartReviewReportTransferAdapterTest.java이력테스트스마트심사 보고서 수신 API 호출 — 명세서 v1.0 의 요청 머리글·응답·결과 코드를 붙잡는다.
SmartReviewTransferHttpTest.java이력테스트목 요청 팩토리가 아닌 운영 구성과 실제 HTTP 소켓으로 오류 본문 보존을 확인한다.
SmartReviewUserDirectoryAdapterTest.java이력테스트SmartReviewUserDirectoryAdapter 대상 테스트.
SmartReviewViewContractTest.java이력테스트어댑터가 읽는 스마트심사 뷰·컬럼이 실제로 제공되는 것인지 검증한다.

apps/

apps/hwss-verify/GitHub

점검 실행기

점검 실행기 — Studio 실연동 점검·분류 벤치마크 실행기.

17 소스8 테스트
의존 모듈 base aiplatform-core
주요 라이브러리 spring-boot-starter spring-web spring-boot-starter-json

(루트)17GitHub

모듈 루트 패키지

BenchmarkMetrics.java이력100.0%DTO판정 결과 → 정확도·라벨별 점수·혼동표·저신뢰율.
BenchmarkReport.java이력100.0%recordhwss-benchmark/1 결과 파일 — 팀 문서 사이트(/quality/)가 그대로 파싱한다(형식은 2차 계약).
ProbeReport.java이력100.0%recordhwss-probe/1 결과 파일 — 팀 문서 사이트(/quality/)가 그대로 파싱한다(형식은 2차 계약).
StudioTarget.java이력96.7%record점검할 Studio 인스턴스 하나의 접속 설정.
StudioCallException.java이력85.7%예외실행기 쪽에서 직접 부른 Studio 호출의 실패.
Env.java이력68.2%인터페이스실행기가 읽는 환경변수 창구.
ClassificationBenchmark.java이력84.1%4일 전 · #2046클래스분류 정확도 벤치마크 실행기 (./gradlew :hwss-verify:classificationBenchmark).
ClassifySchema.java이력96.3%클래스분류 지시서(Config)에서 라벨 목록을 꺼낸다.
Dataset.java이력93.8%클래스벤치마크 데이터 폴더 읽기와 표본 고르기.
LabelMapping.java이력94.7%클래스파일 이름 → 기대 라벨(정답) 대응표 (BENCHMARK_LABELS, 기본 benchmark-labels.default.json).
LiveClassifier.java이력0.0%클래스실제 Studio 로 벤치마크 묶음을 돌린다 — 묶음마다 업로드 → 분류 작업 → 완료 대기 → 결과를 입력 순번으로 되짚기 (ResultMapper, 운영과 같은 규칙) → 작업·파일 삭제.
LiveProbe.java이력18.1%클래스실제 Studio 를 부르는 점검 묶음.
ResultMapper.java이력100.0%클래스분류 결과를 입력 파일 순번으로 되짚는다.
StudioProbe.java이력89.8%클래스Studio 실연동 점검 실행기 (./gradlew :hwss-verify:studioProbe).
StudioSession.java이력8.0%클래스Studio 대상 하나에 붙은 실행기 세션 — 운영 어댑터를 Spring 컨텍스트 없이 조립해 쓴다.
VerifyGuard.java이력100.0%클래스외부를 부르기 전의 대상 가드 — 2차 계약 「운영 분리 원칙」 3항.
VerifyJson.java이력84.6%클래스결과 파일(hwss-probe/1·hwss-benchmark/1) 쓰기.

빌드·리소스3GitHub

모듈 빌드 스크립트와 src/main/resources.

build.gradle이력빌드이 모듈의 의존성 선언 — base, aiplatform-core 모듈 참조.
logback.xml이력리소스설명 주석 없음
probe/synthetic-diagnosis.png이력리소스설명 주석 없음

src/test/8GitHub

테스트 파일 — 펼쳐서 보기
VerifyGuardTest.java이력테스트VerifyGuard 대상 테스트.
BenchmarkMetricsTest.java이력테스트BenchmarkMetrics 대상 테스트.
ClassificationBenchmarkTest.java이력테스트실행기 흐름과 결과 파일 형태(hwss-benchmark/1) — Studio 는 가짜 분류기로 바꿔 끼운다.
DatasetTest.java이력테스트Dataset 대상 테스트.
LabelMappingTest.java이력테스트LabelMapping 대상 테스트.
LiveProbeJudgeTest.java이력테스트분류 1건 점검의 판정 — "스키마 안의 라벨이면 통과"(정확도는 벤치마크 몫).
StudioProbeTest.java이력테스트네트워크 없이 가드·설정 누락·결과 파일 형태를 본다.
StudioParsingTest.java이력테스트StudioParsing 대상 테스트.

검증·계약·배포 보조

http/GitHub

API 호출 시나리오

API 수동·자동 검증 시나리오 — httpyac/IntelliJ HTTP Client 로 로컬 서버에 직접 요청을 보내는 파일. 일부는 apps/hwss-api 테스트가 파일을 그대로 재생해 기대값을 검증한다.

admin-agent-studio-instruct.http이력6일 전 · #1958HTTP 시나리오에이전트 스튜디오 3단계 INSTRUCT(AI 보고서) 설정 관리자 API (2026-10-21, docs/decisions/20261021-studio-instruct-db-storage.md).
admin-agent-studio-test-runs.http이력오늘 · #2149HTTP 시나리오에이전트 스튜디오 실행 테스트 — 1단계 분류·2단계 추출 실연동 관리자 API (2026-11-06·11-07,
admin-analysis-concurrency-limit.http이력HTTP 시나리오1인 동시 AI 분석 요청 한도 — 관리자 통계 대시보드 「동시 요청 제한」 (WBS 29.12.3)
admin-application-form.http이력HTTP 시나리오청약서 폼 설정 관리자 API (2026-10-06, docs/decisions/20261006-application-form-settings-versioned-master.md).
admin-chat-prompts.http이력HTTP 시나리오챗봇·AI 보고서 반영 지시문 관리자 API (2026-10-23, docs/decisions/20261023-chat-prompt-db-versioning.md).
admin-claim-type.http이력HTTP 시나리오청구유형 마스터 관리자 API (NT01, docs/decisions/20260918-claim-type-master.md).
admin-customer-onboarding.http이력오늘 · #2161HTTP 시나리오위탁사 온보딩 상태 조회 API (결정 20261017-customer-onboarding-status-api).
admin-hospital-alias.http이력3일 전 · #2082HTTP 시나리오병원 명칭 매핑 관리자 API (화면 기준선 `병원 명칭 매핑`, 결정 20260910-hospital-master-matching §6).
admin-integration-exchanges.http이력HTTP 시나리오관리자 연동 교환 기록 조회 (docs/decisions/20261023-integration-exchange-log.md)
admin-mail-account.http이력HTTP 시나리오관리자 메일 발송 계정 — 최초 배포 조회 → 첫 재설정 → 확인 강제 → 인가 (야간 플랜 20260827 N02)
admin-report-deliveries.http이력HTTP 시나리오관리자 보고서 초안 전송 로그 조회 API — investigation-core
admin-report-delivery-channel.http이력HTTP 시나리오위탁사 보고서 초안 전송 방식 (WBS 12.1.4, 결정 20260902-report-delivery-channel-selection 1·5~10항).
admin-report-disposal-logs.http이력HTTP 시나리오보고서 파기 로그 목록 (관리자 로그인 쿠키 필요)
admin-report-mail-dispatches.http이력HTTP 시나리오관리자 메일 발송 로그 조회 API — investigation-core (야간 플랜 20261005 NM01)
admin-report-template.http이력HTTP 시나리오관리자 보고서 양식 설정 — 등록 → 수정(버전 증가) → 복제 → 버전 전환 → 삭제 (주말 플랜 20260822 W15)
admin-statistics-backfill.http이력HTTP 시나리오관리자 통계 사실 재적재(backfill) 명령 — investigation-core statistics (야간 플랜 20260904 ST04, S-007 §3-4 「재적재 명령」)
admin-statistics-business.http이력HTTP 시나리오관리자 업무 통계 조회 API — investigation-core statistics (야간 플랜 20260904 ST03-B, S-007 §3-4 「조회 API」)
admin-statistics-chat.http이력HTTP 시나리오관리자 챗봇 이용 통계 조회 API — chat-core statistics (S-007 §3-4 「챗봇 이용 통계」, 시트 29·30행)
admin-statistics-error-incidents.http이력HTTP 시나리오관리자 오류/장애 현황 조회 API — investigation-core statistics (S-007 §3-4 「오류/장애 현황 조회 API」, 시트 33행)
admin-statistics-extraction-quality.http이력HTTP 시나리오관리자 추출 완료율 조회 API — investigation-core statistics (야간 플랜 20261012 NE02, S-007 §3-4 「추출 완료율 조회 API」)
admin-statistics-lifecycle-backfill.http이력HTTP 시나리오관리자 생애주기 통계 사실 재적재 명령 — investigation-core statistics (결정 20261027-lifecycle-fact-load-failure-backfill)
admin-statistics-lifecycle.http이력HTTP 시나리오관리자 시스템 통계 조회 API — investigation-core statistics (야간 플랜 20260911 DP06, S-007 §3-4 「생애주기 조회 API」)
admin-statistics-processing-time.http이력HTTP 시나리오관리자 처리시간 통계 조회 API — investigation-core statistics (2026-10-19, S-007 §3-4 「처리시간 통계 조회 API」)
admin-statistics-service-status.http이력HTTP 시나리오관리자 시스템 통계 — 서비스 상태 조회 (S-007 §3-4 「서비스 상태 조회 API」, 2026-10-28)
admin-statistics-unmapped.http이력HTTP 시나리오관리자 미매핑 큐·차원 마스터 API — investigation-core statistics (야간 플랜 20260904 ST05-A, S-007 §3-4 「미매핑 큐 API」)
admin-statistics-usage.http이력HTTP 시나리오관리자 이용 현황 조회 API — investigation-core statistics (2026-10-19, S-007 §3-4 「이용 현황 조회 API」)
after-deploy.txt이력HTTP 시나리오배포 뒤 시나리오 실행(http-scenarios.yml)이 재생하는 `.http` 파일 — 빈 DB·local 로그인·스텁 엔진에서 위에서 아래로 도는 것만.
agent-chat.http이력HTTP 시나리오에이전트 채팅 API (NX01, docs/plans/night/20260930.md).
audit-log.http이력HTTP 시나리오감사 로그 조회 API — audit-core (야간 플랜 20260824 N04)
auth-onboarding.http이력오늘 · #2181HTTP 시나리오최초 로그인 이메일 등록(온보딩) — POST /api/v1/auth/onboarding (화면 onboarding)
auth-session.http이력HTTP 시나리오세션 정책 — 서버 유휴 판정(60분)·세션 타이머 (base/security)
auth-sso.http이력HTTP 시나리오SSO(사이트마인더) 자체 연동 — base/security/sso 사양: docs/specs/investigation-agent-sso-login-spec.md 2-2 (흐름), 4장 (login.fcc·헤더)
chat-attachments.http이력HTTP 시나리오챗봇 첨부 검증·PDF 변환·Studio 업로드
classification-mapping.http이력HTTP 시나리오분류체계 매핑 API (야간 플랜 20260824 N02) — classification-core
classification-stub-e2e.http이력HTTP 시나리오스텁 분류 결과 E2E — 사용자 확정(`AI 분류 시작`) → `미분류검출` → W07 조치 → `정보 추출 시작` → `추출완료`
collections.http이력3일 전 · #2099HTTP 시나리오지식컬렉션 세로조각 — 폴더 체계 (docs/decisions/20261006-knowledge-collection-folder-structure.md)
customer-company.http이력HTTP 시나리오위탁사 마스터 조회 API (N03) — classification-core
document-type-schemas.http이력어제 · #2132HTTP 시나리오에이전트 스튜디오 문서 분류·정보 추출 체계 — 관리자 저장 API (/admin/agent-studio/schema 1단계 CLASSIFY·2단계 추출 스키마).
image-integration.http이력HTTP 시나리오이미지 시스템 연동 API-01~07 스모크 (S-003) 위에서 아래로 한 번에 실행하는 순서 있는 시나리오다. 정상 경로와, 컨트롤러가 실제로 돌려주는
image-reception-e2e.http이력HTTP 시나리오이미지시스템 수신 E2E — 접수 세로조각의 상태 전이 (P1-3, S-003 API-01~03 + S-004 §8)
investigation-chat.http이력HTTP 시나리오사고조사 챗봇 패널 API (docs/decisions/20261023-investigation-chat-session-structure.md 4항).
investigation-claim-hospitals.http이력6일 전 · #1941HTTP 시나리오분석 조건 2번 「청구병원 및 대표 상병」 (결정 20261106-analysis-request-claim-hospitals)
investigation-hospital-matches.http이력4일 전 · #2007HTTP 시나리오분석 요청 전 병원 지정 (결정 20260910 병원 마스터 §4) 실행 전 준비: http/investigation-workspace.http 로 같은 @reportNo 건을 `추출 완료` 까지 만든다.
investigation-knowledge-defaults.http이력HTTP 시나리오사고조사 건 위탁사의 참조 지식컬렉션 기본값 조회 (결정 20261030 3항)
investigation-page-edits.http이력HTTP 시나리오스캔 문서함 낱장 편집 저장 — `편집 저장` (S-012 §4-0, [20260921] 🟢 0항, 야간 20261006 NP01)
investigation-reanalysis.http이력HTTP 시나리오`다시 분석` — 가능 범위 조회 + 세 범위 실행 (S-012 §4, 야간 20261002 NR01·NR02)
investigation-workspace.http이력3일 전 · #2055HTTP 시나리오P1-2 워크스페이스 세로조각 — 전송 수신 → 분류 → 추출 → 분석 → 요약·확정 → 초안 → 메일 → 진행상태(W06~W14)
menu-permission.http이력HTTP 시나리오메뉴 권한 매트릭스 API — organization-core (야간 N03)
organization-changes.http이력HTTP 시나리오조직 변경 사원 — GET /api/v1/organization-changes · POST /api/v1/organization-changes/acknowledgements
pipeline-seed.http이력HTTP 시나리오전 단계 보고서 세트 시드 — 목록·워크스페이스 화면을 실제 데이터로 돌려보기 위한 시나리오 (2026-09-03 야간 N03)
prepare-image-zip.sh이력스크립트!/usr/bin/env bash image-integration.http 의 API-02(전송 완료 통지) 스모크를 돌리기 전에 실행한다.
report-page-image.http이력HTTP 시나리오페이지 원본 이미지 서빙 — 문서 뷰어(N05)가 <img src> 로 여는 경로 (2026-09-03 야간 N04)
smart-review-transfer.http이력HTTP 시나리오보고서 스마트심사 전송 (결정 20261103-smart-review-report-receiver-api, WBS 4.2.10.2)
studio-correction-roundtrip.sh이력스크립트!/usr/bin/env bash Studio(v2) 결과 왕복 실측 — docs/decisions/20260929-pipeline-correction-roundtrip.md §7 (P0)
studio-investigation-chat-probe.py이력HTTP 시나리오!/usr/bin/env python3
studio-report-llm-probe.sh이력스크립트!/usr/bin/env bash Studio 보고서 생성 LLM 방식 실측 — docs/decisions/20261020-report-generation-llm-input-job.md 「실측」·「실측 2」
studio-review-roundtrip.sh이력스크립트!/usr/bin/env bash Studio(v2) Job 검수 JSON(collection-results/11) 왕복 실측 — docs/decisions/20261006-collection-review-json-roundtrip.md
summary-groups.http이력HTTP 시나리오요약 그룹 — 관리자 마스터 API 와 보고서 `요약` 탭 구획 조회 (파이프라인 v2).
summary-skeletons.http이력HTTP 시나리오요약 섹션 골격 관리자 API (S-014 §3, 2026-09-29 ③) — 위탁사별 골격 조회·저장.
user-me.http이력HTTP 시나리오내 정보 조회 — GET /api/v1/users/me (WBS 1.1.2, 화면 profile)
user-roles.http이력HTTP 시나리오사용자 레벨 마스터 조회 + 보유 레벨 부여·회수 (야간 플랜 20260828 N01)

검증·계약·배포 보조

openapi/GitHub

API 계약 스냅샷

프론트 타입 생성의 원천이 되는 API 계약 스냅샷.

openapi.json이력오늘 · #2181계약springdoc /v3/api-docs 의 커밋 스냅샷 — 손으로 고치지 않고 ./gradlew :hwss-api:exportOpenApiSpec 으로 갱신. 프론트 lib/api/schema.d.ts·MSW 핸들러가 여기서 생성된다.
README.md이력문서스냅샷 갱신 절차와 드리프트 검사(OpenApiSnapshotTest, 프론트 check:openapi) 설명.

검증·계약·배포 보조

certs/GitHub

사내 인증서

Docker 이미지 빌드 때 JVM 신뢰 저장소에 자동 등록되는 공개 인증서.

postfix-internal.crt이력인증서사내 메일 서버(Postfix) 자가서명 인증서 — SMTP TLS 신뢰 검증용.
README.md이력문서인증서 목록·출처·등록 방식.

검증·계약·배포 보조

로컬 전용 (Git 미추적)

build · runtime

.gitignore 대상이라 저장소에는 없고 로컬에서만 생기는 폴더입니다.

build/ (각 모듈)산출물Gradle 빌드 산출물 — jar, 테스트·JaCoCo 리포트.
runtime/로컬 데이터이미지 수신·압축 해제·컬렉션 업로드 파일이 쌓이는 로컬 경로 (application.yml 의 *_ROOT 기본값).

파일 목록·역할 문장·변경 표시는 dev 에 머지될 때마다 코드와 git 이력에서 다시 뽑습니다. 설명 주석이 없는 파일은 이름 규칙으로 채웠으니, 새 파일에는 Javadoc 첫 문장을 한 줄로 써 주세요.