# KINTEX AI 전시·행사시스템 — 미개발 전수 감사 (GAP_AUDIT)

- 감사일: 2026-07-12 · 감사자: `kintex-gap-auditor`
- 범위: `src/frontend`(85 라우트) + `src/backend`(74 컨트롤러) 4자 체인(메뉴↔라우트↔화면↔API) 교차 대조
- 방법: gap-taxonomy grep 신호 + 실코드 확인. 수정 없음(감사·문서 전용).

---

## ① 요약

| 구분 | 건수(최초 감사 2026-07-12) | 재판정(2026-07-14) |
|------|------|------|
| **미개발 총계(코드)** | **9건** | **0건**(전량 해소) |
| P0 (핵심 흐름 차단) | 0 | 0 |
| P1 (주요 화면 미배선/백엔드 전무) | 2 | 0 (G-01·G-02 해소, 2026-07-13) |
| P2 (부분·degraded·planned) | 7 | 0 (G-03~G-09 전량 해소, 2026-07-13~14) |
| 데이터 이슈(별도, 코드 정상) | 행사스코프 시드 정렬 계열(전수 아님) | 동일 |
| 문서 위생(별도, 미개발 아님) | 4 (stale "미구현" 주석) | 해소 + MeetingPage 헤더 주석 1건 추가 정정(2026-07-14) |

> **재판정 총평(2026-07-14):** 최초 감사의 P1 2건은 2026-07-13에, P2 7건(G-03~G-09)은 이후 세션에서 전량 실구현으로 해소됨을 코드/엔드포인트/Flyway(V50~V56) 기준으로 재확인했다. **현재 GAP_AUDIT 상 코드 미개발 잔여는 0건.** 진짜 잔여는 (a) 서류 **HWP** 렌더(G-05 후속, 명시적 스코프 밖), (b) AppQr **iOS**(EAS G3 게이트, 계획됨) — 둘 다 로드맵성 항목이며 "미개발 결함"이 아니다.

**총평:** 앱 완성도는 매우 높다. 데드 메뉴 0, 빈 onClick/데드링크 0, 최상위 `return null` 라우트 0. 도메인 백엔드(auction·visitor·cms·marketing·logistics·settlement·hallassign·boothsales)는 전부 실구현. **가장 중요한 발견은 "미개발이 많다"가 아니라 "프론트 `sample` 헤더 주석이 Phase D 백엔드 배포 이후 갱신되지 않아 STALE 하다"는 점** — 실제 미개발은 아래 2건(P1)뿐이며 나머지는 graceful degraded/planned.

### 최우선(P0/P1) 목록
1. **[P1] TenantAdminPage** — 백엔드 `/api/admin/tenants`(목록+생성) 실존하나 프론트가 하드코딩 배열·`disabled` 버튼으로 미배선.
2. **[P1] PublicTicketPage(입장권 예매/조회)** — 티켓·재고·결제(PG) 백엔드가 아예 없음(고객 대면 공개 라우트).

---

## ② 4자 체인 인벤토리 (요약)

메뉴 `to` 타깃 ↔ App.tsx 라우트 ↔ 화면 컴포넌트 ↔ 백엔드 매핑. **전 메뉴 항목이 라우트에 정합(데드 메뉴 없음).**

| 메뉴 그룹 | 대표 라우트 | 화면 상태 | 백엔드 컨트롤러 | 판정 |
|-----------|-------------|-----------|-----------------|------|
| 전시운영 | `/exhibitors`,`/schedule`,`/halls`,`/booth-sales`,`/ops/operations`,`:eventId/dashboard` | 실렌더 | Exhibitor·EventCatalog·HallAssign·BoothSales·Ops·Dashboard | ✅ |
| 설계·시공 | `:eventId/halls/:hallId/layout`,`/docs`,`/auctions`,`/contractor/dashboard`,`/logistics` | 실렌더 | Floorplan(m2)·Design(m3)·Utility(m4)·RenderJob(m5)·Document·Auction·Contractor·Logistics | ✅ |
| 관람객·마케팅 | `/visitors`,`/visitors/checkin`,`/leads`,`/campaigns`,`/sponsorship`,`/cms` | 실렌더 | Visitor·Marketing·CmsContent/Media/Microsite | ✅ |
| 정산·분석 | `/settlement`,`/analytics` | 실렌더 | Settlement·Analytics(+Overview) | ✅ |
| 업무공통 | `/work/*`(worklog·schedule·message·notice·meeting·report·approval·opinion·search),`/app-qr` | 실렌더 | work.* 11 컨트롤러 | ✅ |
| 시스템관리(admin) | `/admin`,`/admin/users·roles·depts·companies·menus·programs·role-menus·codes·auth-policy·login-history·audit·error-log·system-health·settings·mail-config·notify-config·**tenants**·masterdata/rulesets·holidays·login-slides` | 실렌더 | system.* + AdminDashboard·AuditLog·Ruleset·**TenantAdmin** | ⚠ tenants만 미배선 |
| 공개사이트 | `/public/*`,`/visitor·/business·/agency`,`/tickets/*` | 실렌더 | PublicSite·PublicGuide·PublicCms·PublicMicrosite·VisitorAssistant | ⚠ `/tickets/*`만 백엔드 전무 |
| 모바일 셀프 | `/m/booths/:id/checklist·/inspection` | 실렌더(웹뷰) | (모바일 앱 `mobile/` 별도 트랙) | ✅ |

---

## ③ 미개발 목록 (근거·유형·심각도·정본)

### P1 — 주요 미배선/백엔드 전무

**G-01 [P1] 테넌트 관리 화면 미배선 (frontend)** — ✅해소(2026-07-13)
- 파일: `src/frontend/src/screens/admin/TenantAdminPage.tsx:20`(하드코딩 `TENANTS`), `:53`(추가 버튼 `disabled title=notImpl`)
- 유형: 미배선(백엔드 존재, 프론트 sample 고정) — CRUD 누락(목록·생성 미연결)
- 근거: 백엔드 `TenantAdminController`(`/api/admin/tenants` GET list + POST create) **실존**. 화면 주석 "백엔드 미구현"은 **STALE**.
- 정본: PLANNING M18 §1A(테넌트 온보딩), design.md SCR-A9. 기획에 있음.
- **해소:** `tenantApi`(list/create) 라이브 배선 — react-query 목록(로딩/에러/빈 상태), 등록 모달(서버 권위 검증+클라 미러), KxDataTable(검색·정렬·CSV), `tenant.*` i18n 17키×4로케일. 하드코딩·disabled·샘플 배너 제거.

**G-02 [P1] 입장권 예매/조회 백엔드 전무** — ✅해소(2026-07-13)
- 파일: `src/frontend/src/screens/public/PublicTicketPage.tsx:5`(주석 "티켓·재고·결제 API 부재 → 샘플"), `:36`(하드코딩 `TICKETS`)
- 라우트: `/tickets/:eventId/purchase`, `/tickets/lookup` (공개, 비로그인 고객 대면)
- 유형: 미구현 API(백엔드 컨트롤러 부재 — grep "ticket" in backend = 0) + PG 미연동
- 정본: PLANNING M10(관람객)·M9(정산) design.md SCR-P7. 기획에 있음.
- **해소:** 티켓 도메인 풀 슬라이스 구현. 백엔드 `com.zioinfo.kintex.ticket`(Controller·Service·Mapper+XML) + `payment`(PaymentGateway 어댑터·MockPaymentGateway 기본) + Flyway `V50__ticket_domain.sql`(ticket_product·ticket_order·ticket_issue, tenant_id 복합 PK, e-2026-live 상품 3종+데모 주문 3건·발권·타행사 3종). 공개 API 3종: `GET /api/public/tickets/{eventId}`(판매상품·잔여 서버권위), `POST .../orders`(수량·판매기간·재고 서버검증→조건부 재고차감 oversell 차단→Mock PG 승인→발권, 실패 시 트랜잭션 롤백 원복), `GET .../lookup?orderNo=&contact=`(연락처 sha256 해시 대조·PII 마스킹 응답, 원문 미저장). 프론트 `ticketApi.ts`(react-query) 실배선 — PublicTicketPage 예매(권종→예매자→결제→발권결과 티켓코드)·조회 탭, 로딩/에러/빈 3상태, NETWORK/NOT_FOUND 강등 시에만 샘플 배지 폴백. `ticket.*` i18n 15키×4로케일(leaf 2374 패리티). 하드코딩 `TICKETS` 제거.

### P2 — 부분 미개발(정상 degraded/planned)

| ID | 항목 | 근거(파일:라인) | 유형 | 비고 |
|----|------|-----------------|------|------|
| ~~G-03~~ ✅ | CMS AI 자동번역 | `cms/CmsService.aiTranslate` · `cmsApi.ts:aiTranslate` | 실배선 완료(2026-07-13) — POST `/api/cms/contents/{id}/translations/ai?lang=` (AiTextRouter Claude→Ollama 폴백) | 초벌 번역 ko→en/zh/ja 실동작, degraded 정직 폴백 |
| ~~G-04~~ ✅ | 마케팅 캠페인 실발송 | `marketing/MarketingService.sendCampaign` · `mail/MailService`·`MailProperties` | 실배선 완료 — **운영 실발송 검증(2026-07-14)** | `sendCampaign`이 SMTP(MailService) 실디스패치 — cap/rate/testMode/live 강제, 수신동의+unsub 토큰, V53 `marketing_consent_send_history`, mail_log 정본(비동기 성공/실패). 힌트 "status 전이만"은 STALE |
| ~~G-05~~ ✅ | 서류 PDF 생성 | `document/DocumentController.java:83` · `DocumentPdfService` | 실배선 완료(2026-07-13) — POST `/documents/{docType}/pdf`(생성·저장·다운로드 메타) | 안전관리 계획서 PDF 실동작. **HWP** 렌더만 스코프 밖(후속·엔드포인트 미노출) |
| ~~G-06~~ ✅ | 회의 녹음/STT 전사 | `work/MeetingPage.tsx:174`(MeetingAiPanel) · `work/meeting/MeetingSttClient`·`MeetingMinutesGenerator` | 실배선 완료 — 업로드→STT→AI 회의록 자동작성, V52 `meeting_transcript` | 헤더 주석(구 `:5`) 정정(2026-07-14). Jasper PDF만 후속 |
| ~~G-07~~ ✅ | 통합검색 자연어(AI) | `work/search/SearchController.java:36`(POST `/api/work/search/ai`) · `SearchAiService` | 실배선 완료 — 자연어 AI 검색 + 키워드 검색 병존 | AiTextRouter 경유 |
| ~~G-08~~ ✅ | 마이페이지 프로필·알림 서버동기화 | `auth/AccountSettingsController.java`(PUT `/api/auth/me` · GET·PUT `/notification-prefs`) · V55 `user_notification_pref`·`NotificationPrefMapper` | 실배선 완료(2026-07-13~14) — 프로필 PUT + 알림설정 멱등 저장 | 로컬 저장→서버 동기화 전환 |
| ~~G-09~~ ✅ | 부스설계 렌더 이력 저장 | `module/m5/RenderJobController.java:60`(GET `/booths/{boothId}/render-history`) · V54 `render_history_index` · `renderHistoryApi.list` | 실배선 완료 — DONE 렌더 최신순 영속 이력 갤러리 | 초기 spec 501 폴백은 이력이 아닌 "기본 스펙 시연"용(정상) |

### 계획됨(미개발 아님) — 로드맵 잔여
- **서류 HWP 렌더**(G-05 후속) — PDF는 실동작, HWP 포맷 렌더만 명시적 스코프 밖.
- **AppQr iOS** — `appqr/AppQrCodePage.tsx`: Android APK 배포, iOS는 EAS G3 게이트 명시적 로드맵.

---

## ④ 별도 분류 (미개발 아님)

### 데이터 이슈 (코드 정상 · 담당=kintex-testdata-dev)
- sample-import 12개 화면(analytics·dashboard·ops·floorplan·gallery·marketing×2·schedule·visitor×3)은 **조건부 degraded 폴백**(NETWORK/NOT_FOUND/NOT_IMPLEMENTED 시에만 sample). 실 API가 primary. 빈 화면으로 보이면 코드가 아니라 **행사스코프 시드 미정렬** → testdata 담당.

### 문서 위생 — STALE 주석 (기능 영향 없음 · 담당=frontend-dev 청소) — ✅해소(2026-07-13)
- ~~`screens/auction/sampleAuction.ts:3` "M15 역경매 엔진 미구현"~~ → 실구현 반영 주석 갱신
- ~~`screens/visitor/sampleVisitor.ts:3` "M10/M11 백엔드 미구현"~~ → 실구현 반영 주석 갱신
- ~~`screens/marketing/sampleMarketing.ts:3` "M12 백엔드 미구현"~~ → 실구현 반영 주석 갱신(G-04 실발송 후속 명시)
- ~~`screens/cms/cms.css:4` "M17 백엔드 미구현 → 전 화면 로컬 샘플"~~ → cmsApi 실배선 반영 주석 갱신
→ 4건 모두 "실구현 완료 + 샘플은 강등 폴백" 문구로 정정. 재감사 오탐 방지.
- ~~`screens/work/MeetingPage.tsx:5` "녹음·STT·AI 요약·Jasper PDF 엔드포인트 부재 → disabled+툴팁"~~ → **STT·AI 회의록 실배선(G-06) 반영 주석 갱신(2026-07-14)**. Jasper PDF만 후속으로 명시.

---

## ⑤ 우선순위 백로그 (수정 담당 매핑)

| 순위 | ID | 작업 | 담당 |
|------|-----|------|------|
| 1 | ~~G-01~~ ✅ | TenantAdminPage → `/api/admin/tenants` GET/POST 배선(하드코딩·disabled 제거) — 2026-07-13 해소 | **kintex-frontend-dev** |
| 2 | ~~G-02~~ ✅ | 티켓 도메인 백엔드(티켓·재고·예매·조회) + PG 어댑터 + 프론트 배선 — 2026-07-13 해소 | **kintex-backend-dev**(+visitor-dev) → frontend-dev |
| 3 | ~~G-04~~ ✅ | 캠페인 실발송(SMTP, 수신동의·상한) — 운영 실발송 검증 2026-07-14 | kintex-backend-dev(marketing) |
| 4 | ~~G-03~~ ✅ | CMS AI 자동번역 배선(AiTextRouter) — 2026-07-13 해소 | kintex-ai-dev |
| 5 | ~~G-06/G-07~~ ✅ | 회의 STT·통합검색 자연어 AI — MeetingAiPanel·SearchAiService 실배선 | kintex-ai-dev |
| 6 | ~~G-05/G-09~~ ✅ | 서류 PDF 생성·렌더 이력 영속 — DocumentPdfService·render-history(V54). HWP만 후속 | kintex-backend-dev |
| 7 | ~~G-08~~ ✅ | 마이페이지 프로필 PUT·알림설정 API — AccountSettingsController·V55 | kintex-backend-dev + frontend-dev |
| 8 | ~~(위생)~~ ✅ | STALE "미구현" 주석 정리(4건 + MeetingPage 헤더 2026-07-14) | kintex-frontend-dev |
| — | (데이터) | 행사스코프 시드 정렬(빈 화면 폴백 해소) | kintex-testdata-dev |
| — | (로드맵) | 서류 HWP 렌더 · AppQr iOS(EAS G3) — 미개발 결함 아님 | 후속 |

> **재판정 결론(2026-07-14):** ⑤ 백로그의 코드 수정 항목(G-01~G-09) **전량 ✅해소**. 남은 것은 데이터 시드 정렬(별도 트랙)과 로드맵성 2건(HWP·iOS)뿐. **GAP_AUDIT 상 코드 미개발 잔여 0.**

---
*P0/P1 지적은 kintex-qa가 실동작(라우트 렌더·경계면)으로 재검증 후 kintex-impl-orchestrator로 인계.*
