{
  "solution": "GUARDiA MES",
  "doc_type": "설계서",
  "out": "C:/GUARDiA/workspace/guardia-mes/doc/mes_설계서_v1.pptx",
  "subtitle": "AI 기반 제조실행시스템 (MES/WMS/QMS) · 지오정보기술 / 2026",
  "design": {"primary":"1F3A5F","accent":"2E86C1","text":"222222","font_ko":"맑은 고딕"},
  "sections": [
    {"title":"1. 시스템 구성도", "bullets":[
      "단일 JAR 서비스(포트 8013): Spring Boot 3.5 백엔드 + React 19 정적 번들",
      "DB: PostgreSQL mes_db (제조 도메인 + tb_uiws_* 권한관리 테이블)",
      "AI: Ollama 온프레미스(11434) — 불량분석·예측·예지보전·SPC 이상감지 (폴백 내장)",
      "외부 연계: ERP·ITSM·OCR·BI (REST)",
      "클라이언트: 관리자 웹 + 현장 작업자 모바일앱(통합 메신저 앱 app/mes)"
    ], "note":"구성도 도식 자리 — 클라이언트/서비스/DB/AI/연계 5블록"},
    {"type":"table", "title":"2. 도메인 / ERD 요약 (MES 본연)", "headers":["영역","핵심 엔터티"], "rows":[
      ["MES","작업지시·생산실적·공정/라우팅·BOM·설비/OEE·LOT추적·생산계획"],
      ["WMS","입고·출고·재고·로케이션·재고실사·LOT/시리얼"],
      ["QMS","검사(수입/공정/출하)·검사기준·NCR·CAPA·SPC관리도·성적서"],
      ["기준정보","품목·거래처·회원·BOM 구성"]
    ]},
    {"type":"table", "title":"3. 도메인 / ERD 요약 (UIMS 이식)", "headers":["영역","테이블/엔터티"], "rows":[
      ["업무협업","업무일지·일정·쪽지·통계 (uiws.* 도메인)"],
      ["권한관리(RBAC)","tb_uiws_sys_user(VARCHAR user_id)·role·dept_role·program·menu·role_menu"],
      ["기준(시스템)","tb_uiws_dept·company·code_grp·code"],
      ["주의","tb_uiws_sys_user 와 mes_user(BIGSERIAL)는 별개·미병합"]
    ]},
    {"type":"table", "title":"4. API 설계 — 주요 엔드포인트", "headers":["영역","베이스 / 메서드"], "rows":[
      ["MES/WMS/QMS","도메인별 REST CRUD (작업지시·생산실적·검사·재고 등)"],
      ["로그인 보조","POST /api/mes/auth/signup · /find-id · /reset-password (permitAll)"],
      ["권한관리","/api/system/{users,roles,roles/{id}/menus,menus,depts,companies,codes}"],
      ["공통조회","GET /api/public/** (permitAll, 드롭다운 룩업)"],
      ["응답봉투","ApiResponse{success,message,data} · 목록 PageResponse{content,total,page,size}"]
    ]},
    {"type":"table", "title":"5. 화면 설계 — 관리자 웹 메뉴", "headers":["섹션","화면"], "rows":[
      ["MES","작업지시·생산실적·공정진행·BOM/라우팅·설비OEE·LOT추적·생산계획"],
      ["WMS","입출고·재고·로케이션·피킹·재고실사"],
      ["QMS","수입/공정/출하검사·부적합NCR·CAPA·SPC관리도·성적서"],
      ["기준/공통","품목·거래처·사용자·설정·분석·AI도구"],
      ["업무(UIMS)","업무일지·일정·쪽지·통계"],
      ["시스템관리(권한)","권한관리·역할-메뉴권한·공통코드·메뉴관리·부서관리·거래처관리 (SUPERADMIN)"]
    ]},
    {"type":"table", "title":"6. 화면 설계 — UIMS 시스템관리 라우트", "headers":["라우트","화면 / 권한"], "rows":[
      ["/uiws/system/roles","권한 관리(역할 CRUD·다중삭제) · SUPERADMIN"],
      ["/uiws/system/role-menus","역할-메뉴 권한(읽기/쓰기 매핑) · SUPERADMIN"],
      ["/uiws/system/codes","공통코드(그룹+값 일괄 CRUD) · SUPERADMIN"],
      ["/uiws/system/menus","메뉴 관리(2-depth 트리) · SUPERADMIN"],
      ["/uiws/system/depts","부서 관리(2-depth 트리) · SUPERADMIN"],
      ["/uiws/system/companies","거래처 관리(CRUD·다중삭제) · SUPERADMIN"]
    ]},
    {"title":"7. DB 스키마 설계", "bullets":[
      "DB: mes_db — 제조 도메인 테이블 + db/92_uiws_system.sql(권한관리 10테이블)",
      "권한관리: dept·company·code_grp·code·sys_user·role·dept_role·program·menu·role_menu",
      "멱등 적용: CREATE IF NOT EXISTS / ON CONFLICT DO NOTHING + 최소 시드(ROLE/COMPANY/DEPT)",
      "application.yml schema-locations에 92_uiws_system.sql 병기 (mode=always·continue-on-error)",
      "MesUser에 approved 필드 추가(기존 계정 기본 true → 로그인 회귀 0)"
    ]},
    {"title":"8. 보안 설계", "bullets":[
      "인증: JWT + 2차 인증(2FA, 이메일 인증코드 verify-token)",
      "RBAC: /api/system/** → hasRole(SUPERADMIN), /api/public/** permitAll, /api/mes/auth/** permitAll",
      "회원가입 승인 게이트: approved=false 차단, role=VIEWER 기본",
      "계정 열거 방지: reset-password 미존재도 success=true, 임시비번 응답/로그 미노출(메일만)",
      "아이디찾기 마스킹(앞 2자), 임시비번 BCrypt 저장",
      "보안 불변: 자격증명·비밀번호·SSH·내부IP·스택트레이스 미노출 (외부 API 0)"
    ]},
    {"type":"table", "title":"9. 연계 설계", "headers":["연계 대상","내용"], "rows":[
      ["ERP","재고/정산 연계"],
      ["ITSM","CS / 운영 연계"],
      ["OCR","문서/상품 등록 연계"],
      ["BI","제조 데이터 분석 피드"],
      ["통합 메신저앱","모바일 QR 배포 (중앙 APK 저장소 재사용)"]
    ]}
  ]
}
