docs/db · tbls 생성 · 커밋 19f08289 · 2026-09-16 13:54 KST 빌드

HWSS DB 스키마

-core 모듈의 Flyway 마이그레이션을 실제 PostgreSQL 에 적용한 결과를 읽어 만든 명세서입니다. 소유 모듈 기준으로 자른 뷰포인트마다 ER 다이어그램과 테이블 목록이 있고, 테이블 이름을 누르면 컬럼·제약·인덱스 전문이 있는 GitHub 문서로 갑니다. 설명이 비어 있는 테이블은 마이그레이션에 COMMENT ON 이 아직 없다는 뜻입니다. 문서를 직접 고치지 않고 ./scripts/db-docs.sh 로 다시 생성합니다.

66테이블
645컬럼
37관계
60마이그레이션

변경 추적

최근 변경

최근 14일 · PR 5건

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

#50609/16 · 오늘제목은 로그인 후 표시
external/smartreview-views.md
#50509/16 · 오늘제목은 로그인 후 표시
external/smartreview-views.md
#50309/16 · 오늘제목은 로그인 후 표시
README.mdpublic.collections.mdpublic.departments.mdpublic.investigations.mdpublic.users.mdschema.jsonviewpoint-0.mdviewpoint-2.md+1
#50109/16 · 오늘제목은 로그인 후 표시
external/smartreview-views.md
#50009/16 · 오늘제목은 로그인 후 표시
README.mdpublic.agent_document_types.mdpublic.analysis_request_collections.mdpublic.analysis_request_contract_items.mdpublic.analysis_request_contracts.mdpublic.analysis_request_forms.mdpublic.analysis_requests.mdpublic.audit_logs.md+69

조직·사용자·권한GitHub

organization-core. 조직도·사용자와 레벨×메뉴 권한, 시스템 세션용 자격증명·리프레시 토큰.

erDiagram

"public.departments" }o--o| "public.departments" : "parent_department_id"
"public.users" }o--|| "public.departments" : "department_id"
"public.role_menu_permissions" }o--|| "public.roles" : "role_code"
"public.user_roles" }o--|| "public.roles" : "role_code"

"public.departments" {}
"public.roles" {}
"public.users" {}
"public.role_menu_permissions" {}
"public.user_roles" {}
organization-core오늘 · #503컬럼 7부서 로컬 디렉터리 (자기 참조 트리) — users 와 같다. 연동이 켜지면 스마트심사 조직도 뷰가 대신한다
organization-core오늘 · #503컬럼 15사용자 로컬 디렉터리 — 스마트심사 라이브 연동이 꺼진 환경에서 쓴다. 연동이 켜지면 신원·조직은 스마트심사 뷰에서 직접 읽고 이 표는 조회 경로에서 빠진다
organization-core오늘 · #500컬럼 4사용자 부수정보 — 스마트심사 뷰가 주지 않는 값(권한 레벨·이메일)만 우리 DB 에 둔다
organization-core오늘 · #500컬럼 6사용자 권한 레벨 5종 — 레벨 자체는 시스템 상수이고, 라벨과 순서만 데이터로 두어 코드 배포 없이 바꿀 수 있게 한다
organization-core오늘 · #500컬럼 5사용자별 권한 — 사용자:권한은 1:N 이다. 권한이 늘어도 이메일이 행마다 중복되지 않도록 부수정보와 분리했다
organization-core오늘 · #500컬럼 11권한 레벨 × 메뉴 사용 권한 — 메뉴 카탈로그(코드·라벨·콘솔·순서)를 따로 두지 않고 여기에 동봉한다
organization-core오늘 · #500컬럼 4임시 비밀번호 해시 — 신원은 스마트심사 뷰가 원천이고 비밀번호만 우리가 보관한다. SSO 전환 시 사라질 자리
organization-core오늘 · #500컬럼 7refresh 토큰 원장 — 회전·무효화의 서버 측 상태. 폐기된 토큰이 다시 오면 탈취 신호로 보고 그 사번의 토큰을 모두 폐기한다

마스터 데이터GitHub

classification-core·code-core. 위탁사와 문서종 분류체계, 폴더 매핑, 공통코드.

erDiagram

"public.common_code_details" }o--|| "public.common_codes" : "common_code_id"
"public.document_types" }o--|| "public.customer_companies" : "customer_company_code"
"public.folder_classification_mappings" }o--|| "public.document_types" : "customer_company_code, document_type_code"
"public.folder_classification_mappings" }o--|| "public.agent_document_types" : "agent_document_type_code"

"public.common_codes" {}
"public.common_code_details" {}
"public.customer_companies" {}
"public.document_types" {}
"public.agent_document_types" {}
"public.folder_classification_mappings" {}
classification-core오늘 · #500컬럼 7위탁사 마스터 — 이미지 시스템에서 동기화(API-06)해 받는다
classification-core오늘 · #500컬럼 11위탁사별 이미지시스템 폴더 분류 체계 — 에이전트 분류와 다른 체계다
classification-core오늘 · #500컬럼 6낱장 단위 에이전트 분류 체계 마스터 — 위탁사와 무관한 공통 체계
classification-core오늘 · #500컬럼 7위탁사별 "폴더 분류 ↔ 에이전트 분류" 매핑 — 미분류 낱장을 어느 폴더에 넣을지 결정하는 기준
code-core오늘 · #500컬럼 7공통코드 그룹 — 코드 체계의 상위 분류
code-core오늘 · #500컬럼 8공통코드 상세 — 그룹에 속한 개별 코드값

보고서 접수·이미지 연동GitHub

investigation-core. 조사 건과 보고서, 이미지 시스템에서 받은 전송 건과 낱장. 전송(image_transfers·transfer_pages)은 접수 이력이고 report_pages 가 현재 문서함이다.

erDiagram

"public.image_transfers" }o--|| "public.investigation_reports" : "report_no"
"public.transfer_pages" }o--|| "public.image_transfers" : "transfer_id"
"public.report_pages" }o--|| "public.investigation_reports" : "report_no"

"public.investigation_reports" {}
"public.image_transfers" {}
"public.transfer_pages" {}
"public.report_pages" {}
investigation-core오늘 · #503컬럼 6조사 건 — 제목·설명·상태 코드를 갖는 최소 형태. 상태 코드는 공통코드(INVESTIGATION_STATUS 그룹)를 가리키지만 도메인 분리로 FK 를 두지 않고 애플리케이션이 검증한다
investigation-core오늘 · #500컬럼 19사고조사 보고서 — 접수번호 단위의 업무 건. 화면 목록과 처리 파이프라인이 모두 이 행을 기준으로 돈다
investigation-core오늘 · #500컬럼 18이미지 시스템에서 받은 전송 묶음 — 접수 이력이다. 현재 문서함은 report_pages 쪽이다
investigation-core오늘 · #500컬럼 15전송이 선언한 낱장 목록 — 통지 원문의 스냅샷이라 뒤에 바뀌지 않는다
investigation-core오늘 · #500컬럼 16보고서의 현재 문서함 — 전송들을 반영한 결과의 구체화 뷰. 화면이 보는 것은 이 표다
investigation-core오늘 · #500컬럼 7이미지 시스템 쓰기 API 의 멱등 키 원장 — 같은 키의 재요청을 가려낸다

문서 분석 (분류·추출·요약)GitHub

investigation-core. 에이전트 파이프라인의 단계별 결과와 사용자 수정 이력.

erDiagram

"public.classification_result_pages" }o--|| "public.classification_results" : "classification_result_id"
"public.extraction_result_fields" }o--|| "public.extraction_results" : "extraction_result_id"
"public.summary_cards" }o--|| "public.summary_results" : "summary_result_id"
"public.summary_items" }o--|| "public.summary_cards" : "summary_card_id"
"public.summary_item_sources" }o--|| "public.summary_items" : "summary_item_id"
"public.classification_corrections" }o--|| "public.classification_results" : "classification_result_id"
"public.extraction_field_corrections" }o--|| "public.extraction_results" : "extraction_result_id"
"public.extraction_field_corrections" }o--|| "public.extraction_result_fields" : "extraction_result_field_id"

"public.classification_results" {}
"public.classification_result_pages" {}
"public.extraction_results" {}
"public.extraction_result_fields" {}
"public.summary_results" {}
"public.summary_cards" {}
"public.summary_items" {}
"public.summary_item_sources" {}
"public.classification_corrections" {}
"public.extraction_field_corrections" {}
investigation-core오늘 · #500컬럼 10분류 결과 한 벌 — 버전으로 쌓는다. 재분류가 이전 결과를 지우지 않아야 무엇이 달라졌는지 볼 수 있다
investigation-core오늘 · #500컬럼 11낱장별 분류 결과 — 분류 결과 한 벌에 속한 행들
investigation-core오늘 · #500컬럼 21분류 보정 원장 — 결과 행을 덮어쓰기 전후를 남긴다. 외부에 보낼 델타이자 되돌리기·감사의 근거
investigation-core오늘 · #500컬럼 7추출 결과 한 벌 — 분류와 같은 이유로 버전을 둔다
investigation-core오늘 · #500컬럼 11추출 항목 — 문서종별 컬럼이 아니라 키·값·신뢰도의 범용 행으로 둔다. 추출 스키마가 바뀌어도 테이블이 흔들리지 않는다
investigation-core오늘 · #500컬럼 13추출값 수정 이력 — 분류 보정 원장과 같은 형태. 항목이 지워지면 이력도 함께 지워진다
investigation-core오늘 · #500컬럼 9요약 결과 한 벌 — 확정 전에는 본문을 고칠 수 있고 확정 후에는 항목별 보고서 반영만 체크한다
investigation-core오늘 · #500컬럼 7병원(기관)별 요약 카드 — 화면 구조를 그대로 따른다
investigation-core오늘 · #500컬럼 14카드 안의 요약 항목 — 내원경위·검사내용·진단병명·치료내용 등
investigation-core오늘 · #500컬럼 11요약 항목의 출처 — 한 항목에 여럿이 붙고, 스캔 낱장과 지식컬렉션 청크가 섞일 수 있다

분석 요청·보고서 산출GitHub

investigation-core. 분석 요청 입력값과 보고서 초안·양식·메일 발송.

erDiagram

"public.analysis_request_forms" }o--|| "public.analysis_requests" : "analysis_request_id"
"public.analysis_request_contracts" }o--|| "public.analysis_requests" : "analysis_request_id"
"public.analysis_request_contract_items" }o--|| "public.analysis_request_contracts" : "contract_id"
"public.analysis_request_collections" }o--|| "public.analysis_requests" : "analysis_request_id"
"public.report_template_variables" }o--|| "public.report_templates" : "report_template_id"

"public.analysis_requests" {}
"public.analysis_request_forms" {}
"public.analysis_request_contracts" {}
"public.analysis_request_contract_items" {}
"public.analysis_request_collections" {}
"public.report_templates" {}
"public.report_template_variables" {}
investigation-core오늘 · #500컬럼 9분석 요청(분석 조건) 한 벌 — 양식 → 계약별 정보 → 참조 컬렉션 → 기타 요청 순서로 화면과 같은 구조다
investigation-core오늘 · #500컬럼 6요청이 고른 보고서 양식 — 복수 선택할 수 있고 하위 항목 활성화에 영향을 준다
investigation-core오늘 · #500컬럼 9요청에 딸린 계약별 정보 — 계약일자·상품명·청약서 유형·약관 매칭
investigation-core오늘 · #500컬럼 9계약별 청약서 질문과 고지사항 항목
investigation-core오늘 · #500컬럼 6요청이 참조할 지식컬렉션 — 컬렉션은 다른 도메인 소유라 FK 없이 값만 보관한다
investigation-core오늘 · #500컬럼 11보고서 초안 — 섹션으로 쪼개지 않고 통 본문으로 둔다. 세부 구성이 아직 미확정이기 때문이다
investigation-core오늘 · #500컬럼 12보고서 양식(프롬프트 형식) — 관리자 화면의 저장소이자 분석 요청이 고르는 목록
investigation-core오늘 · #500컬럼 7양식 본문에 삽입할 수 있는 변수 목록 — 화면의 "변수 삽입" 버튼이 읽는다
investigation-core오늘 · #500컬럼 12보고서 메일 발송 기록 — 무엇을 누구에게 언제 보냈는지

업무 데이터 통계GitHub

investigation-core statistics. 차원(dim_*)·사실(report_stat_*)·일별 롤업(stat_daily_*) 의 star schema 와 적재 실패·미매핑 대기열.

erDiagram

"public.report_stat_fact_details" }o--|| "public.report_stat_facts" : "report_stat_fact_id"

"public.report_stat_facts" {}
"public.report_stat_fact_details" {}
investigation-core오늘 · #500컬럼 7병원 차원 — 집계 키는 코드이고 표시명은 여기 대표 표기다. 모델이 뽑은 문자열로 집계하지 않는다
investigation-core오늘 · #500컬럼 6의사 차원
investigation-core오늘 · #500컬럼 5질병 차원
investigation-core오늘 · #500컬럼 6표기 차이 흡수용 별칭 사전 — 원문 표기 하나가 차원 키 하나로. 세 차원이 같은 형태라 한 표에 둔다
investigation-core오늘 · #500컬럼 16업무 데이터 통계의 보고서당 1행 — 단일값 차원을 담는다. 보고서가 파기돼도 통계는 남아야 하므로 FK 를 두지 않는다
investigation-core오늘 · #500컬럼 10보고서 1건 안의 병원·의사·질병·문서종 조합 — 병원이 3곳이면 3행. 부모가 지워지면 함께 지워진다
investigation-core오늘 · #500컬럼 21시스템 통계의 보고서당 1행 — 분류 시작에 생기고 요약·전송 완료에 갱신된다. 미전송 건도 남는 것이 이 표의 존재 이유다
investigation-core오늘 · #500컬럼 7일별 롤업 — 위탁사·조직별 보고서 건수 (차원 키 없음)
investigation-core오늘 · #500컬럼 8일별 롤업 — 병원별 청구 집중도. 표시명·지역은 병원 차원이 갖는다
investigation-core오늘 · #500컬럼 8일별 롤업 — 질병코드별 건수. 키는 보고서의 메인 질병코드다
investigation-core오늘 · #500컬럼 9일별 롤업 — 병원 + 질병 조합 건수. 둘 중 하나라도 미매핑이면 제외된다
investigation-core오늘 · #500컬럼 10일별 롤업 — 병원 + 의사 + 질병 조합 건수
investigation-core오늘 · #500컬럼 8일별 롤업 — 청구유형별 건수
investigation-core오늘 · #500컬럼 8일별 롤업 — 증권번호별 청구 현황(동일 증권의 반복 청구 탐지)
investigation-core오늘 · #500컬럼 16일별 롤업 — 시스템 통계의 화면 조회용 집계층. 합계와 모수를 함께 두어 평균을 조회 시점에 나눈다
investigation-core오늘 · #500컬럼 10통계 적재 실패 기록 — 재시도(backfill)의 입력이 된다
investigation-core오늘 · #500컬럼 11코드로 바꾸지 못한 값의 대기열 — 관리자가 매핑하면 그 보고서를 다시 적재한다

워크플로우 엔진GitHub

workflow-core. 단계 정의를 데이터로 두고 엔진이 해석·실행한다. 도메인 비의존이라 업무 건을 report_no 문자열로만 다루고 investigation_reports 로의 FK 를 두지 않는다.

erDiagram

"public.workflow_steps" }o--|| "public.workflow_definitions" : "workflow_definition_id"
"public.workflow_executions" }o--|| "public.workflow_definitions" : "workflow_definition_id"
"public.workflow_step_executions" }o--|| "public.workflow_executions" : "workflow_execution_id"

"public.workflow_definitions" {}
"public.workflow_steps" {}
"public.workflow_executions" {}
"public.workflow_step_executions" {}
workflow-core오늘 · #500컬럼 7워크플로우 정의 — 코드+버전 단위. 단계 구성을 코드가 아닌 데이터로 둔다
workflow-core오늘 · #500컬럼 13단계 정의 — 순서·배치 변경이 이 테이블의 데이터 수정만으로 이뤄진다(코드 변경 없음)
workflow-core오늘 · #500컬럼 10보고서별 실행 인스턴스 — 업무 건 하나에 대한 워크플로우 진행 상태
workflow-core오늘 · #500컬럼 11단계 실행 이력 — 재시도마다 한 행이 쌓인다

참조 컬렉션GitHub

collection-core. RAG 참조 컬렉션과 파일의 메타데이터. 지식컬렉션 본체는 업스테이지가 보유한다.

erDiagram

"public.collection_files" }o--|| "public.collections" : "collection_id"
"public.collection_approval_requests" }o--|| "public.collections" : "collection_id"
"public.collection_approval_requests" }o--o| "public.collection_files" : "collection_file_id"

"public.collections" {}
"public.collection_files" {}
"public.collection_approval_requests" {}
collection-core오늘 · #503컬럼 10RAG 참조 컬렉션 — 개인은 즉시 사용, 공용은 관리자 승인 후 사용. 파일은 우리 저장소에 두고 임베딩·검색용 벡터 인덱스만 외부 AI 플랫폼이 갖는다
collection-core오늘 · #500컬럼 14컬렉션에 등록된 파일과 그 인덱싱 상태
collection-core오늘 · #500컬럼 12공용 컬렉션 승인 요청 — 재요청은 같은 행을 되돌리지 않고 새 행을 쌓아 이력이 남는다

운영 (메일 계정·감사)GitHub

mail-core·audit-core. 발송 계정 암호와 그 변경 이력, 감사 로그.

mail-core오늘 · #500컬럼 4SMTP 대표 계정 비밀번호(AES-256-GCM 암호문) — 단일 행
mail-core오늘 · #500컬럼 5SMTP 대표 계정 비밀번호 변경 이력 — 비밀번호 값은 저장하지 않는다
audit-core오늘 · #500컬럼 12감사 원장 — 관리자 "전체 로그" 화면의 저장소. 이벤트별 전용 컬럼 없이 행위자·대상·결과만 담는 범용 형태

스마트심사 제공 뷰

스마트심사가 제공하는 읽기 전용 뷰입니다 — 우리가 만든 스키마가 아니라 Oracle 19.11.0.0.0 의 SMART 스키마에 있고, 실제 접속해야만 무엇이 있는지 알 수 있습니다. 여기 보이는 것은 2026-09-16 기준 스냅샷(실제 접속으로 뜬 값)이며, 어댑터가 읽는 뷰·컬럼이 이 목록에 있는지는 SmartReviewViewContractTest 가 지킵니다 · 명세서.

23,938행컬럼 2질병코드 마스터
3,483행컬럼 3파기정보 (대외)
53,533행컬럼 2파기정보 (대내)
27,751행컬럼 7조사 건 계약 메타
0행컬럼 7알림톡 발송
80행컬럼 6공통코드
93행컬럼 9조직도 (정의서 공식명: 부서정보)
1,912행컬럼 9사용자

스키마가 바뀌면 ./scripts/db-docs.sh 로 docs/db/ 를 다시 만들어 마이그레이션과 함께 커밋합니다 — 빠뜨리면 db-docs-check 워크플로가 PR 에서 막습니다. 테이블·컬럼 설명은 마이그레이션의 COMMENT ON 에서 옵니다.