- .gitignore를 sam/ 기반에서 루트 기반으로 변경 - sam/docs/ 하위 문서를 루트로 이동 (contracts, features, guides, plans 등) - sam/ 폴더 삭제 (docker, coocon 포함)
130 lines
5.2 KiB
Markdown
130 lines
5.2 KiB
Markdown
# 주일기업 기획 메뉴
|
|
|
|
> **작성일**: 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
|