flowchart LR

%% ========== 프론트엔드 UI 레이어 ==========
subgraph FRONT[프론트엔드 UI]
    CHAT_UI[직원 챗봇 UI]
    CREATOR_UI[영상 제작자 UI]
    ADMIN_UI[관리자 문서 UI]
end

CHAT_UI --> GW_CHAT[API 게이트웨이 채팅]
CREATOR_UI --> GW_DOC[API 게이트웨이 문서 업로드]
ADMIN_UI --> GW_DOC

%% ========== 백엔드 서비스 레이어 ==========
subgraph SERVICE[백엔드 서비스 레이어]
    GW_CHAT --> AUTH[인증 인가]
    AUTH --> Q_RAW[질문 수신 원문]
    Q_RAW --> PII2_IN[2차 PII 마스킹 입력 실시간 대화 레벨]
    PII2_IN --> CLS[의도 도메인 분류]
    CLS --> ROUTER[라우팅 서비스 선택]

    ROUTER --> RAG[RAG 서비스]
    ROUTER --> INT_LLM[내부 LLM]
    ROUTER --> EXT_LLM[외부 LLM]

    GW_DOC --> DOC_SRC[업로드 문서 원본 PDF HWP CSV]
    DOC_SRC --> PII1[1차 PII 마스킹 콘텐츠 인입 레벨]
    PII1 --> PRE[전처리 청킹 임베딩]
end

%% ========== 데이터 저장소 레이어 ==========
subgraph DATA[데이터 저장소 레이어]
    PRE --> VDB[벡터 DB]
    PRE --> META[메타데이터 DB]
    RAG --> VDB
    PII2_IN --> CHAT_LOG[채팅 로그]
end

%% ========== 스타일 정의 ==========
classDef ui fill:#E3FCEF,stroke:#2ECC71,stroke-width:1px;
classDef service fill:#EAF3FF,stroke:#2980B9,stroke-width:1px;
classDef data fill:#FFF5D9,stroke:#F39C12,stroke-width:1px;
classDef pii fill:#FDEDEC,stroke:#E74C3C,stroke-width:1.5px;

class CHAT_UI,CREATOR_UI,ADMIN_UI ui;
class GW_CHAT,GW_DOC,AUTH,Q_RAW,CLS,ROUTER,RAG,INT_LLM,EXT_LLM,PRE service;
class VDB,META,CHAT_LOG data;
class PII1,PII2_IN pii;

flowchart LR

%% ========== 1차 PII 마스킹 레벨 (콘텐츠 인입) ========== subgraph LEVEL1[1차 PII 마스킹 콘텐츠 인입 레벨] DOC_SRC[업로드 문서 원본] --> PII1[1차 PII 마스킹 콘텐츠] PII1 --> PRE[전처리 청킹 임베딩] end

%% ========== 2차 PII 마스킹 레벨 (실시간 대화) ========== subgraph LEVEL2[2차 PII 마스킹 실시간 대화 레벨] Q_RAW[질문 원문] --> PII2_IN[2차 PII 마스킹 입력] PII2_IN --> LLM_PIPE[LLM RAG 처리 파이프라인] LLM_PIPE --> PII2_OUT[2차 PII 마스킹 출력] end

%% ========== 3차 PII 마스킹 레벨 (로그 학습) ========== subgraph LEVEL3[3차 PII 마스킹 로그 학습 레벨] CHAT_LOG[채팅 로그] --> PII3[3차 PII 마스킹 로그] PII3 --> ANAL[품질 보안 분석] ANAL -.-> TRAIN[소형 모델 학습 PII 태거 의도 분류] end

%% ========== 공통 PII 태거 서비스 ========== PII_MODEL[공통 PII 태거 서비스]

PII_MODEL --> PII1 PII_MODEL --> PII2_IN PII_MODEL --> PII2_OUT PII_MODEL --> PII3

%% ========== 스타일 정의 ========== classDef level1 fill:#FDF2E9,stroke:#E67E22,stroke-width:1.5px; classDef level2 fill:#EBF5FB,stroke:#2980B9,stroke-width:1.5px; classDef level3 fill:#F5EEF8,stroke:#8E44AD,stroke-width:1.5px; classDef pii fill:#FADBD8,stroke:#C0392B,stroke-width:1.5px; classDef model fill:#E8F8F5,stroke:#16A085,stroke-width:1.5px;

class DOC_SRC,PRE level1; class Q_RAW,LLM_PIPE level2; class CHAT_LOG,ANAL,TRAIN level3; class PII1,PII2_IN,PII2_OUT,PII3 pii; class PII_MODEL model;