kintex/docs/GAP_AUDIT.md
zio 41503f7bb6 docs(audit): GAP_AUDIT re-adjudication 2026-07-14 — code gaps 0 remaining
- G-01~G-09 all verified resolved against live code/endpoints/Flyway V50~V56
- remaining items are roadmap-only: document HWP render, AppQr iOS (EAS G3)
- UNDEVELOPED_BACKLOG: lead AI rescore + CMS AI translation marked shipped

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 22:06:45 +09:00

117 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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로 인계.*