# 주일기업 기획 메뉴

> **작성일**: 2026-03-06
> **상태**: 운영 중
> **프로젝트**: SAM MNG (관리자 웹)
> **라우트 접두사**: `/juil`

---

## 1. 개요

### 1.1 목적

블라인드/스크린 제조업체의 현장 관리를 위한 기획 도구 모음. 견적부터 공사, 준공까지의 업무 흐름과 현장 기록(사진대지), 회의 기록(STT/AI 요약)을 제공한다.

### 1.2 문서 구조

| 문서 | 설명 |
|------|------|
| **README.md** (이 문서) | 전체 개요, 메뉴 구조, 아키텍처 |
| [construction-photos.md](construction-photos.md) | 공사현장 사진대지 기술 명세 |
| [meeting-minutes.md](meeting-minutes.md) | 회의록 작성 기술 명세 (STT/AI 통합) |
| [planning-views.md](planning-views.md) | 견적/프로젝트/워크플로우 화면 명세 |

### 1.3 하위 메뉴 구조

```
주일기업 기획
├── 견적/입찰/공사관리        /juil/estimate
├── 프로젝트관리/기성청구     /juil/project
├── 업무 Workflow            /juil/workflow
├── 공사현장 사진대지         /juil/construction-photos
└── 회의록 작성              /juil/meeting-minutes
```

---

## 2. 아키텍처

### 2.1 기술 스택

| 계층 | 기술 | 설명 |
|------|------|------|
| 뷰 | Blade + React (인라인) + Babel | 브라우저 트랜스파일 React 컴포넌트 |
| API | Laravel Controller + Service | JSON API (AJAX) |
| 모델 | Eloquent ORM | Multi-tenant (BelongsToTenant) |
| 파일 저장 | Google Cloud Storage | 사진, 오디오 파일 |
| AI | Gemini API (Vertex AI) | 요약, 화자 분리 |
| STT | Google Speech-to-Text V1/V2 + Web Speech API | 음성 인식 |

### 2.2 프로젝트 파일 구조

```
mng/
├── app/Http/Controllers/
│   ├── PlanningController.php                   ← 견적/프로젝트/워크플로우
│   ├── ConstructionSitePhotoController.php      ← 사진대지 CRUD + 파일 관리
│   └── MeetingMinuteController.php              ← 회의록 CRUD + AI 기능
├── app/Services/
│   ├── ConstructionSitePhotoService.php         ← 사진대지 비즈니스 로직
│   └── MeetingMinuteService.php                 ← 회의록 + AI 통합 로직
├── app/Models/
│   ├── ConstructionSitePhoto.php                ← 사진대지 모델
│   ├── ConstructionSitePhotoRow.php             ← 사진 행 모델
│   ├── MeetingMinute.php                        ← 회의록 모델
│   └── MeetingMinuteSegment.php                 ← 회의 세그먼트 모델
└── resources/views/juil/
    ├── estimate.blade.php                       ← 견적/입찰/공사관리
    ├── project.blade.php                        ← 프로젝트관리/기성청구
    ├── workflow.blade.php                       ← 업무 Workflow
    ├── construction-photos.blade.php            ← 사진대지 SPA
    └── meeting-minutes.blade.php                ← 회의록 SPA
```

### 2.3 기능별 구현 현황

| 기능 | 구현 방식 | 백엔드 | DB |
|------|----------|--------|-----|
| 견적/입찰/공사관리 | React 뷰 (목데이터) | PlanningController (뷰 반환만) | 없음 |
| 프로젝트관리/기성청구 | React 뷰 (목데이터) | PlanningController (뷰 반환만) | 없음 |
| 업무 Workflow | React 뷰 (정적 데이터) | PlanningController (뷰 반환만) | 없음 |
| 공사현장 사진대지 | React SPA + API | Controller + Service | 2 테이블 |
| 회의록 작성 | React SPA + API | Controller + Service + AI | 2 테이블 |

---

## 3. 외부 서비스 의존성

| 서비스 | 용도 | 추적 |
|--------|------|------|
| **Google Cloud Storage** | 사진/오디오 파일 저장 | `AiTokenHelper::saveGcsStorageUsage()` |
| **Google Speech-to-Text V2 (Chirp2)** | 자동 화자 분리 (최우선) | `AiTokenHelper::saveSttUsage()` |
| **Google Speech-to-Text V1** | 화자 분리 (V2 실패 시 폴백) | `AiTokenHelper::saveSttUsage()` |
| **Gemini API (Vertex AI)** | 요약 생성 + 화자 재분배 | `AiTokenHelper::saveGeminiUsage()` |
| **Web Speech API** | 브라우저 음성 입력 (현장명/설명) | `logSttUsage()` |

### 3.1 도메인 용어 힌트 (STT 정확도 향상)

```
블라인드, 스크린, 롤스크린, 허니콤, 버티컬,
원단, 바텀레일, 헤드레일, 브라켓,
주일, 경동, 주일블라인드, 경동블라인드,
수주, 발주, 납기, 출하, 재고, 원가, 단가,
SAM, ERP, MES
```

---

## 4. HTMX 전체 페이지 로드 규칙

모든 `/juil/*` 페이지는 React 인라인 컴포넌트를 사용하므로, HTMX 부분 로드 시 스크립트가 실행되지 않는다. 각 컨트롤러 메서드에서 HTMX 요청 감지 시 **HX-Redirect로 전체 페이지 리로드를 강제**한다.

```php
if ($request->header('HX-Request')) {
    return response('', 200)->header('HX-Redirect', route('juil.estimate'));
}
```

---

## 5. 관련 문서

- [공사현장 사진대지](construction-photos.md) — GCS 파일 관리, 행 구조, 음성 입력
- [회의록 작성](meeting-minutes.md) — STT/화자분리/AI 요약, 오디오 녹음
- [견적/프로젝트/워크플로우](planning-views.md) — React 뷰 구성, 업무 프로세스 정의

---

**최종 업데이트**: 2026-03-06
