각 -core 모듈의 Flyway 마이그레이션을 실제 PostgreSQL 에 적용한 결과를 읽어 만든 명세서입니다. 소유 모듈 기준으로 자른 뷰포인트마다 ER 다이어그램과 테이블 목록이 있고, 테이블 이름을 누르면 컬럼·제약·인덱스 전문이 있는 GitHub 문서로 갑니다. 설명이 비어 있는 테이블은 마이그레이션에 COMMENT ON 이 아직 없다는 뜻입니다. 문서를 직접 고치지 않고 ./scripts/db-docs.sh 로 다시 생성합니다.
142테이블
1586컬럼
86관계
230마이그레이션
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 빌드 · 빌드 런
변경 추적
최근 변경
최근 14일 · PR 35건 (최근 20건 표시)
dev 에 머지된 PR 중 이 가이드 범위의 파일을 바꾼 것입니다. 파일을 누르면 아래 해당 행으로 이동하고, 7일 이내에 바뀐 파일 행은 주황색으로 강조됩니다. PR 제목은 로그인하면 보입니다.
사고조사 보고서 — 접수번호 단위의 업무 건. 화면 목록과 처리 파이프라인이 모두 이 행을 기준으로 돈다
컬럼
타입
기본값
키·허용값·설명
idPK
bigint
NOT NULL
report_noUQ
varchar(100)
NOT NULL
접수번호. 이미지 시스템과 공유하는 업무 건 식별자이며 다른 테이블이 이 값으로 참조한다
customer_company_code
varchar(50)
NOT NULL
위탁사 코드. 마스터는 다른 도메인 소유라 FK 를 두지 않는다
insured_name
varchar(200)
NULL
피보험자명. 개인정보이며 로그 마스킹 대상
investigator_employee_no
varchar(50)
NULL
담당 조사자 사번
consignment_type
varchar(20)
NULL
LONG_TERM · LIFE · 위탁 구분 (장기/생명)
list_status
varchar(40)
NOT NULL
BEFORE_CONFIRM · CLASSIFYING · UNCLASSIFIED_DETECTED · EXTRACTING · EXTRACTION_COMPLETED · ANALYZING · ANALYSIS_COMPLETED · TRANSFER_COMPLETED · 목록 화면에 보이는 상태. 화면 스테퍼가 쓰는 값이다
processing_status
varchar(40)
NOT NULL
WAITING_FOR_TRANSFER · RECEIVED · VALIDATING · READY_FOR_CONFIRM · CLASSIFYING · EXTRACTING · UNCLASSIFIED_DETECTED · EXTRACTION_COMPLETED · ANALYZING · ANALYSIS_COMPLETED · REANALYSIS_REQUIRED · PROCESSING_FAILED · COMPLETED · TRANSFER_FAILED · 내부 처리 상태. 워크플로우 단계 진입 조건이 이 값으로 판정된다
snapshot_baseline_status
varchar(40)
NOT NULL
'NOT_CONFIRMED'
NOT_CONFIRMED · CONFIRMED_BASELINE · CHANGED_AFTER_BASELINE · 확정 기준 스냅샷이 잡혔는지, 잡힌 뒤 바뀌었는지
confirmed_snapshot_transfer_id
uuid
NULL
처리 기준으로 확정한 전송. 순환 FK 를 피해 값만 보관한다
latest_accepted_transfer_id
uuid
NULL
가장 최근에 정상 접수된 전송
changed_after_confirm
boolean
NOT NULL
false
확정 이후 변경이 들어왔는지. 목록 상태가 아니라 플래그로 관리한다
has_unclassified_documents
boolean
NOT NULL
false
미분류 낱장이 남아 있는지
has_low_confidence_documents
boolean
NOT NULL
false
분류 신뢰도가 낮은 낱장이 있는지
report_draft_status
varchar(20)
NOT NULL
'NONE'
NONE · GENERATING · READY · CONFIRMED · DISCARDED · 보고서 초안 진행 상태. NONE·GENERATING·READY(항목 선택 완료)·CONFIRMED(폐지, READY 와 같음)·DISCARDED(확정 초기화로 폐기)
latest_raw_metadata
jsonb
NULL
최신 시작 통지 원문 캐시. 전송별 원문은 image_transfers.raw_metadata 에 남는다
created_at
timestamptz
NOT NULL
updated_at
timestamptz
NOT NULL
confirm_requested_at
timestamptz
NULL
ZIP 검증 중에 들어온 확정 요청을 기억해 두는 자리. 검증이 끝나면 이어서 처리한다
claim_type
varchar(200)
NULL
사고조사 상세 화면에서 입력한 청구유형
has_low_confidence_extraction
boolean
NOT NULL
false
추출 완료 시 신뢰도가 임계 미만인 추출값이 있었는지. 분석 시작 때 해제된다
reclassification_reserved_at
timestamptz
NULL
분류·추출 중 재확정으로 걸린 재분류 예약을 처음 받은 시각. 비어 있으면 예약 없음, 소비되면 비운다
reclassification_last_confirmed_at
timestamptz
NULL
예약에 합쳐진 마지막 확정의 요청 시각. 예약과 함께 비운다
carry_classification_corrections
boolean
NOT NULL
false
다음 분류 결과에 직전 결과의 사용자 분류 지정을 다시 적용할지. 문서 편집 반영 분류부터에서 켜고, 결과를 만들 때 비운다
classification_queued_at
timestamptz
NULL
동시 AI 작업 한도로 자동 분류 시작이 대기열에 들어간 시각. 비어 있으면 대기 아님, 분류가 시작되면 비운다
has_reference_mismatch
boolean
NOT NULL
false
추출한 환자명이 피보험자 이름과 다른 항목이 있는지. 분석 시작 때 해제된다
has_hospital_match_required
boolean
NOT NULL
false
추출한 병원명 중 병원 목록에서 한 곳으로 정해지지 않은 것이 있는지. 분석 시작 때 해제된다
incremental_base_classification_version
integer
NULL
다시 분석 증분이 기다리는 기준 분류 버전 — CLASSIFY 단계가 기준 버전에 없는 낱장만 분류해 합친 뒤 비운다
collection-core. RAG 참조 컬렉션과 파일의 메타데이터, 폴더 체계(말단 폴더 = 컬렉션), 등록 안내, 개인 컬렉션이 함께 쓰는 사용자별 Vector Store, 공용 컬렉션이 함께 쓰는 2depth 기준 폴더별 Vector Store. 지식컬렉션 본체는 업스테이지가 보유한다.
RAG 참조 컬렉션 — 개인은 즉시 사용, 공용은 관리자 승인 후 사용. 파일은 우리 저장소에 두고 임베딩·검색용 벡터 인덱스만 외부 AI 플랫폼이 갖는다
컬럼
타입
기본값
키·허용값·설명
idPK
bigint
NOT NULL
collection_type
varchar(20)
NOT NULL
PERSONAL · SHARED · 개인/공용 구분. 승인 필요 여부를 가르는 값이다
scope_code
varchar(50)
NOT NULL
'COMMON'
적용 범위 — 위탁사 코드, 또는 위탁사 무관을 뜻하는 COMMON
status
varchar(20)
NOT NULL
ACTIVE · PENDING_APPROVAL · REJECTED · 승인 관점의 사용 가능 여부. 파일 인덱싱 상태와는 다른 축이다
owner_employee_no
varchar(50)
NOT NULL
소유자 사번 — 개인 컬렉션의 주인이자 공용 컬렉션의 등록자
name
varchar(200)
NOT NULL
컬렉션 이름
created_at
timestamptz
NOT NULL
updated_at
timestamptz
NOT NULL
vector_collection_id
varchar(200)
NULL
외부 AI 플랫폼이 발급한 벡터 컬렉션 식별자. 플랫폼 어댑터가 없는 조합에서는 비어 있다
folder_idUQ
bigint
NULL
→ collection_folders.id · 이 컬렉션이 놓인 말단 폴더(collection_folders). 폴더당 컬렉션 하나이며 컬렉션 이름은 폴더 이름을 따른다
vector_store_scope
varchar(20)
NOT NULL
'COLLECTION'
COLLECTION · OWNER · FOLDER · vector_collection_id 의 Store 를 누가 쓰는지 — COLLECTION: 이 컬렉션만, OWNER: 소유자의 개인 컬렉션 전체(collection_owner_vector_stores), FOLDER: 기준 폴더 아래 공용 컬렉션 전체(collection_folder_vector_stores). COLLECTION 이 아니면 Store 를 컬렉션 단위로 바꾸거나 지우지 않는다
investigation-core. 문서 AI 플랫폼(업스테이지 Studio 등)에 맡긴 작업의 원장과 올린 낱장 파일 대응표, 검수 보정을 플랫폼 저장 결과에 되돌려 놓는 결과 왕복 원장. 워크플로 단계가 외부 작업을 맡기면 폴러가 이 원장으로 업로드·요청·완료 확인·반영을 이어 간다.
chat-core. 범용 에이전트 채팅과 사고조사 챗봇의 대화 세션·주고받은 줄·답변 근거·첨부. 두 챗봇은 같은 표를 쓰고 chat_sessions.chat_kind 로 가른다 — 사고조사 대화는 report_no 를 갖고 (보고서, 사람)마다 하나다 (docs/decisions/20261023-investigation-chat-session-structure.md). report_no 는 조사 모듈 표로 FK 를 걸지 않는다. 대화의 배경지식 컬렉션은 대화 중에 바꿀 수 있고(다음 질문부터), 근거는 우리 식별자와 이름 스냅샷으로 남는다 (컬렉션·파일이 지워져도 지난 대화의 근거 표기가 비지 않게 — FK 를 걸지 않는 이유다). 통계 대시보드 「챗봇 질의 건수」·「질의 답변 응답 속도」의 일별 롤업 2종도 이 모듈에 있다(질문 저장과 같은 트랜잭션 증분).
답변 응답 소요시간(ms) — 지식 검색 시작부터 모델 답 수신까지. 질문 행·컬럼 추가 전 답변 행은 NULL
department_code
varchar(30)
NULL
질문한 때 질문자의 부서 코드 스냅샷 — 통계 조직 축. 찾지 못했거나 컬럼 추가 전 행은 NULL
prompt_key
varchar(60)
NULL
답변에 쓴 지시문 이름 — 2026-11-05 전 사고조사 답변 줄만(그 뒤는 prompt_versions)
prompt_version_no
integer
NULL
답변에 쓴 지시문 판 번호 — 2026-11-05 전 사고조사 답변 줄만(그 뒤는 prompt_versions). 기본 문구면 0
reflection_grounded
boolean
NULL
사고조사 답변이 AI 보고서 반영 버튼의 근거 조건(인용 출처 + 참조 탭 ≥ 1)을 만족했는지 — 버튼은 이 값과 지금의 반영 권한을 함께 본다. 범용은 NULL
turn_scope
text
NULL
사고조사 질문 줄의 그 턴 검색 범위 JSON {collectionIds, fileIds, caseDocuments}. 범용 줄·답변 줄·이전 줄은 NULL
studio_response_id
varchar(100)
NULL
답변 줄을 만든 Studio 응답 id — 마지막 질문 삭제 때 그 턴을 지운다. 질문 줄·스텁·이전 답변은 NULL
reflected_at
timestamp
NULL
사고조사 답변을 AI 보고서에 반영한 시각. 반영하지 않았거나 범용 줄이면 NULL
input_tokens
bigint
NULL
답변 턴의 입력 토큰(Studio usage). 질문 줄·스텁·이전 답변은 NULL
output_tokens
bigint
NULL
답변 턴의 출력 토큰(Studio usage). 질문 줄·스텁·이전 답변은 NULL
context_segment
integer
NOT NULL
1
이 줄의 맥락 구획. 대화의 지금 구획보다 작으면 구분선 위 줄로 답변에 쓰지 않는다
prompt_versions
text
NULL
답변에 쓴 지시문 판 — {지시문 이름: 판 번호} JSON(기본 문구면 0). 사고조사는 INVESTIGATION_ROLE·INVESTIGATION_ANSWER_RULES·CHAT_INTENT_RULES, 범용은 CHAT_INTENT_RULES. 질문 줄과 2026-11-05 전 답변 줄은 NULL
스마트심사가 제공하는 읽기 전용 뷰입니다 — 우리가 만든 스키마가 아니라 Oracle 19.11.0.0.0 의 SMART 스키마에 있고, 실제 접속해야만 무엇이 있는지 알 수 있습니다. 여기 보이는 것은 2026-11-11 기준 스냅샷(실제 접속으로 뜬 값)이며, 어댑터가 읽는 뷰·컬럼이 이 목록에 있는지는 SmartReviewViewContractTest 가 지킵니다 · 명세서.
23,992행
컬럼 2
질병코드 마스터
질병코드와 병명의 마스터. 2026-09-16 실측에서 처음 나타났고 같은 날 스마트심사 확인으로 용도가 정해졌다 — 뷰 정의서(v1.5)에는 아직 실려 있지 않다. 통계 차원 dim_diseases(코드 + 표준 병명)를 채울 원천이 될 수 있다. 코드 체계(KCD 차수 등)와 갱신 주기는 아직 확인되지 않았다. 2026-10-28 실측 0행(9/16 은 23,938행)은 스마트심사 테스트 중 삭제 — 같은 날 재적재 완료 회신. 2026-10-29 재실측 2,110행, 2026-11-11 재실측 23,992행으로 9/16 수준 회복.
컬럼
타입
설명
DSAS_CODE
VARCHAR2(16)
NULL
질병코드
DSAS_NAME
VARCHAR2(200)
NULL
질병명
5행
컬럼 3
파기정보 (대외)
DES_CO_DATE 에 맞춰 파기(날짜 지정형). 조회 범위는 조회일 기준 과거 30일.
컬럼
타입
설명
CONU_SQNO
VARCHAR2(50)
NOT NULL
보고서번호
EXT_CMPN_DVCD
VARCHAR2(10)
NULL
대외사 코드
DES_CO_DATE
VARCHAR2(8)
NULL
파기완료일자
150,468행
컬럼 14
병원정보 마스터
병원코드·병원명·주소·지역 코드의 마스터(오브젝트정의서 v1.7 신규, v1.9 2026-11-11 에 HSPL_FULL_ADDR 추가·HSPL_ADDR 를 시군구만으로 변경). 갱신은 한화생명 배치(신규 병원은 다음 날, 2026-10-28 회신). 2026-11-11 스마트심사 1차 가공 — 이름에 테스트 포함·약국·주소 공란 제외, 같은 이름+같은 시군구 중복 제외 → 150,468행(코드 유일). 이름 표기 차이·주소 표기 차이로 남은 중복은 스마트심사가 제거 불가로 회신했다.
컬럼
타입
설명
HSPL_CODE
VARCHAR2(10)
NOT NULL
병원코드 — 마스터 키 (2026-11-11 실측 코드 유일)
HSPL_NM
VARCHAR2(150)
NULL
병원명
HSDR_NM
VARCHAR2(150)
NULL
병원장명
HSPL_TLNO
VARCHAR2(20)
NULL
병원전화번호
HSPL_PSCD
VARCHAR2(10)
NULL
병원우편번호
HSPL_ADDR
VARCHAR2(1005)
NULL
병원주소(시군구) — 「시도 시군구」 두 낱말만(예: 경기 분당구). 정의서 길이 500, 실측 타입 1005
HSPL_FULL_ADDR
VARCHAR2(500)
NULL
병원주소(전체) — 원본 전체 주소(v1.9 신규). 적재의 지역 파생 원천
CTPR_DVSN_CODE
VARCHAR2(10)
NULL
시도구분코드 (정의서 v1.9 — A 서울 ~ S 제주로 보인다, 코드표 미제공)
HSPL_ASCF_DVSN_CODE
VARCHAR2(10)
NULL
병원종별구분코드 (코드표 미제공)
CRNO
VARCHAR2(10)
NULL
사업자등록번호
RCPR_ORGN_NO
VARCHAR2(8)
NULL
요양기관번호
HSPL_CNTY_CODE
VARCHAR2(10)
NULL
병원국가코드 (정의서 v1.9 — 대부분 KR, 시군구 코드 아님)
RCPR_ORGN_VRFC_YN
VARCHAR2(1)
NULL
요양기관검증여부
ROAD_NM_ADDR_YN
VARCHAR2(1)
NULL
도로명주소여부
11,871행
컬럼 2
파기정보 (대내)
LAST_PRCS_DATE + 90일 경과 시 파기(기간 계산형). 2026-10-28 실측 0행(9/16 은 53,533행)은 스마트심사 테스트 중 삭제 — 같은 날 재적재 완료 회신.
컬럼
타입
설명
CSNL_SQNO
VARCHAR2(12)
NULL
보고서번호 (이 뷰만 CSNL_SQNO 표기)
LAST_PRCS_DATE
VARCHAR2(8)
NULL
손해사정결재일자. 수령분 라벨은 최종결재일자
37,921행
컬럼 7
조사 건 계약 메타
계약 수만큼 다행. 보고서번호 실형식은 AIyyyymmddNNNN.
컬럼
타입
설명
CONU_SQNO
VARCHAR2(50)
NULL
조사 건 번호(보고서번호). 정의서 표기는 COINU_SQNO — 표기 불일치 미해소
EXT_CMPN_DVCD
VARCHAR2(10)
NULL
대외사(위탁사) 코드. 명칭은 공통코드 뷰로 해석. NULL 5,377건
INVR_MPNO
VARCHAR2(8)
NULL
조사자 사번 (실데이터 7자리)
ACCI_NAME
VARCHAR2(100)
NULL
사고자명 (피보험자명이 아니다 — 정의서 v1.5 확정) 개인정보
POLY_NO
VARCHAR2(50)
NULL
증권번호
IRKD_CODE_NAME
VARCHAR2(200)
NULL
보험종류(상품)명
CNTT_DATE
VARCHAR2(8)
NULL
계약일자 yyyymmdd
11행
컬럼 7
알림톡 발송
조회용이 아니라 발송 큐로 보인다 — 행을 INSERT 해 알림톡을 트리거하는 대상. 용도 확인 필요.
컬럼
타입
설명
MT_PR
NUMBER(11)
NOT NULL
고유 키 (SQ_ATA_MMT_TRAN_01 시퀀스)
DATE_CLIENT_REQ
TIMESTAMP(6)
NOT NULL
전송예약시간
SENDER_KEY
VARCHAR2(40)
NOT NULL
발신 프로필 키. 정의서 길이(8)와 고정값 예시(40자) 불일치 — 확인 필요
CALLBACK
VARCHAR2(25)
NOT NULL
발신자 전화번호
TEMPLATE_CODE
VARCHAR2(40)
NULL
템플릿 코드 (고정값 IMG00001)
CONTENT
VARCHAR2(4000)
NOT NULL
전송 메시지 (고정 템플릿)
RECIPIENT_NUM
VARCHAR2(25)
NULL
수신자 전화번호 개인정보
80행
컬럼 6
공통코드
공통 뷰 + 코드 구분 방식. 그룹 3종 — EXT_CMPN_DVCD(위탁사)·DUTY_CODE(직책)·RNKS_CODE(직급).
컬럼
타입
설명
CMPN_DVCD
VARCHAR2(10)
NOT NULL
회사 구분 (실측 전부 0000)
CODE_ID
VARCHAR2(20)
NOT NULL
코드 그룹
CODE_VAL
VARCHAR2(30)
NOT NULL
코드 값
CODE_IDNM
VARCHAR2(200)
NULL
코드 그룹 명
CODE_NAME
VARCHAR2(4000)
NULL
코드 명
OUTP_ORDR
NUMBER(22)
NULL
표시 순서
95행
컬럼 9
조직도 (정의서 공식명: 부서정보)
컬럼
타입
설명
ORGN_CODE
VARCHAR2(20)
NOT NULL
조직 코드 (정의서 용어: 기관코드)
ORGN_NAME
VARCHAR2(50)
NULL
조직 명
PRCD_ORGN
VARCHAR2(40)
NULL
상위 조직 코드 (재귀 구조)
PRCD_NAME
VARCHAR2(50)
NULL
상위 조직 명
USE_YN
VARCHAR2(1)
NULL
사용 여부
ORGN_CRTN_DATE
VARCHAR2(8)
NULL
개설일
ORGN_CLOS_DATE
VARCHAR2(8)
NULL
폐쇄일
ORGN_LV
NUMBER(3)
NULL
조직 레벨 (실측 1~4). 정의서는 VARCHAR2(3) 로 표기 — 타입 불일치 미해소
HOD_NO
VARCHAR2(8)
NULL
부서장 사번
1,898행
컬럼 9
사용자
로그인 신원·세션 정보의 라이브 원천.
컬럼
타입
설명
EMPL_NO
VARCHAR2(8)
NOT NULL
사번 (세션 기준키)
NAME
VARCHAR2(50)
NULL
성명 개인정보
CONN_PSYN
VARCHAR2(1)
NULL
접속가능여부 — 계정 활성 여부로 쓴다(N 이면 비활성: 로그인 거절·조직도 기본 제외, 결정 20261012)
DUTY_CODE
VARCHAR2(10)
NULL
직책 코드 (공통코드 뷰로 해석)
RNKS_CODE
VARCHAR2(10)
NULL
직급 코드 (공통코드 뷰로 해석)
WORK_PSTN_OGCD
VARCHAR2(20)
NULL
근무 조직 코드 — 대부분 단·팀. 센터 코드가 없거나 폐쇄면 소속
ORIG_PSTN_OGCD
VARCHAR2(20)
NULL
원소속 조직 코드 (미사용 — 대부분 근무 조직 코드와 같다)
WORK_PSTN_CECD
VARCHAR2(20)
NULL
근무소속센터코드 — 사용 중이면 소속(부서장 지정 다음 순위)
ENTR_DATE
VARCHAR2(8)
NULL
입사일
251행
컬럼 2
사용자이력정보
사원별 최종 인사 변경일시 — 근무소속기관·센터 코드, 직책, 직급이 바뀔 때만 갱신된다(스마트심사 정의서 2026-10-19). 사번당 한 행이고 한 번도 바뀌지 않은 사원은 행이 없다. 2026-10-22 읽기 전용 조회로 컬럼·건수를 실측해 이 항목만 더했다(스냅샷 스크립트 재실행 아님 — 다음 --json 갱신 때 덮어써도 같다). 조직도 「변경 대상자」의 원천(결정 20260827).
컬럼
타입
설명
EMPL_NO
VARCHAR2(8)
NOT NULL
사원번호
LAST_CHNG_DTTM
DATE
NOT NULL
최종변경일시
스키마가 바뀌면 ./scripts/db-docs.sh 로 docs/db/ 를 다시 만들어 마이그레이션과 함께 커밋합니다 — 빠뜨리면 db-docs-check 워크플로가 PR 에서 막습니다. 테이블·컬럼 설명은 마이그레이션의 COMMENT ON 에서 옵니다.