# [특허 기술문서 1] SAM 고객사 맞춤형 ERP/MES 자동 구성 — 처리 흐름도

> **문서 목적**: 변리사 제출용 — 방법특허 청구항 근거 자료
> **대상**: 축1 플랫폼 방법특허 (고객사별 맞춤형 시스템 자동 생성 방법)
> **작성일**: 2026-03-20
> **출원인**: (주)코드브릿지엑스

---

## 1. 발명이 해결하는 과제

### 1.1 기존 ERP 도입의 문제

중소 제조업체가 ERP/MES를 도입하려면:

```
❌ 기존 방식 (6개월~1년 소요)
┌─────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│ ① 현장 방문  │→ │ ② 업무 분석   │→ │ ③ 커스터마이징 │→ │ ④ 데이터 이관 │
│ (1~2주)     │    │ (1~2개월)    │    │ (3~6개월)    │    │ (1~2개월)    │
│ 컨설턴트 파견│    │ 인터뷰+문서화 │    │ 코드 포크     │    │ 수동 매핑    │
└─────────────┘    └──────────────┘    └──────────────┘    └──────────────┘
비용: 3,000만~2억원 / 인력: 2~5명 / 실패율: 40~60%
```

**핵심 문제**: 모든 과정이 **사람 의존적**이며, 업체마다 처음부터 반복해야 한다.

### 1.2 본 발명의 해결

```
✅ SAM 방식 (1주일 이내)
┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│ ① 로우데이터 │→ │ ② AI 분석     │→ │ ③ 자동 구성   │
│ 비대면 수집   │    │ + 패턴 매칭   │    │ + 자동 초기화 │
│ (1~2일)      │    │ (수분 이내)   │    │ (수초 이내)   │
└──────────────┘    └──────────────┘    └──────────────┘
비용: 기존 대비 1/10 / 인력: AI + 1명 / 성공률: 실증 완료
```

---

## 2. 전체 처리 흐름도 — 5단계 자동화 파이프라인

```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
단계 1: 로우데이터 수집 (비대면, 3채널)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

채널 A                   채널 B                    채널 C
┌──────────────────┐    ┌──────────────────┐    ┌──────────────────┐
│ 기존 견적서 양식  │    │ 체크리스트형 설문  │    │ 음성 인터뷰       │
│ 파일 업로드       │    │ (인터뷰 시나리오)  │    │ (전화/화상 녹음)  │
│                  │    │                  │    │                  │
│ • 엑셀/PDF 견적서│    │ • 카테고리별 질문  │    │ • 브라우저 STT    │
│ • BOM 양식       │    │ • 체크박스+서술형  │    │ • Google Cloud STT│
│ • 단가표         │    │ • 진행률 실시간    │    │ • 화자 분리       │
│ • 공정 흐름표    │    │   추적 (%)        │    │ (Diarization)    │
└────────┬─────────┘    └────────┬─────────┘    └────────┬─────────┘
         │                       │                       │
         ▼                       ▼                       ▼
    구조화된 데이터          설문 응답 JSON            텍스트 변환본
    (파일 파싱 결과)        (질문별 체크/서술)        (화자별 분리)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
단계 2: 전처리 및 정규화
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

┌──────────────────────────────────────────────────────────┐
│                    전처리 엔진                            │
│                                                          │
│  [A] 파일 파싱                                           │
│      엑셀 → 행/열 구조 추출 → 컬럼 유형 추론             │
│      PDF → 테이블 영역 감지 → 텍스트 추출                │
│                                                          │
│  [B] 설문 응답 정규화                                    │
│      InterviewAnswer → 카테고리별 집계                   │
│      체크박스: is_checked 기반 이진 분류                  │
│      서술형: answer_text 키워드 추출                      │
│      진행률: answered_questions / total_questions         │
│                                                          │
│  [C] 음성 텍스트 정제                                    │
│      STT 결과 → 문장 분리 → 화자별 그룹핑               │
│      업무 키워드 추출 → 도메인 태깅                       │
│                                                          │
│  ──────────────────────────────────────────────────────  │
│  출력: 통합 분석 입력 데이터 (JSON)                       │
│  {company_info, collected_answers, documents, keywords}   │
└───────────────────────────┬──────────────────────────────┘
                            │
                            ▼
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
단계 3: AI 분석 — 업종·규모·공정 패턴 도출
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

┌──────────────────────────────────────────────────────────┐
│                  AI 분석 엔진 (LLM)                       │
│                                                          │
│  입력:                                                   │
│    • 통합 분석 입력 데이터 (단계 2 출력)                  │
│    • 도메인 지식 베이스 (20만줄+ 기술 문서)               │
│    • 모듈 카탈로그 (가용한 ERP/MES 기능 목록)            │
│                                                          │
│  처리:                                                   │
│    ① 업종 분류 (제조/시공/유통 + 세부 업종)              │
│    ② 규모 판별 (매출/직원수/거래처수 기반)               │
│    ③ 핵심 업무 프로세스 도출                             │
│       (견적→수주→생산→출하→정산 등)                      │
│    ④ 필요 모듈 매칭 (모듈 카탈로그 대조)                 │
│    ⑤ BOM 구조 패턴 추론 (견적서 양식 분석)               │
│    ⑥ 수식 템플릿 선택/생성                               │
│       (면적/중량/수량 기반 계산 방식 결정)                │
│                                                          │
│  출력:                                                   │
│    {                                                     │
│      company_analysis: 업종/규모/특성,                    │
│      business_domains: 핵심 업무 영역[],                  │
│      recommended_modules: 필요 모듈[],                    │
│      bom_structure: BOM 패턴 정의,                        │
│      formula_templates: 수식 템플릿[],                    │
│      customization_plan: 커스터마이징 계획                 │
│    }                                                     │
└───────────────────────────┬──────────────────────────────┘
                            │
                            ▼
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
단계 4: 테넌트 자동 생성 및 시스템 초기화
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

┌──────────────────────────────────────────────────────────┐
│              RegisterService + TenantBootstrapper         │
│                                                          │
│  [4-1] 테넌트 코드 자동 생성                             │
│        한글 회사명 → 유니코드 초성 추출                   │
│        (0xAC00 기준 588 단위 나눗셈)                     │
│        → 영문 변환 (ㄱ→G, ㄲ→KK, ...)                   │
│        → 36진수 4자리 순번 부여                          │
│        → 코드 생성 (예: "경동기업" → "KDKO0001")         │
│        → 최대 1,679,616개 테넌트 지원 (36^4)            │
│                                                          │
│  [4-2] 테넌트 레코드 생성                                │
│        Tenant::create(code, status='trial')              │
│                                                          │
│  [4-3] 메뉴 계층 자동 복제                               │
│        MenuBootstrapService::cloneGlobalMenusForTenant() │
│        global_menus → menus (부모-자식 ID 재매핑)        │
│                                                          │
│  [4-4] 사용자 + 역할 + 권한 자동 설정                    │
│        User 생성 → Role('system_manager') 생성           │
│        → 메뉴별×5종(view/create/update/delete/approve)   │
│          권한 일괄 부여                                   │
│                                                          │
│  [4-5] 레시피 기반 부트스트래핑 (4단계)                   │
│        ┌──────────────────────────────────────┐          │
│        │ RecipeRegistry('STANDARD')            │          │
│        │                                      │          │
│        │ Step 1: CapabilityProfilesStep       │          │
│        │   → 완제품/서브어셈블리/구매부품/팬텀│          │
│        │   → 4속성 조합으로 품목 유형 정의     │          │
│        │                                      │          │
│        │ Step 2: CategoriesStep               │          │
│        │   → 기본 카테고리 자동 생성           │          │
│        │                                      │          │
│        │ Step 3: SettingsStep                 │          │
│        │   → 기본 시스템 설정 3종 자동 구성    │          │
│        │                                      │          │
│        │ Step 4: ApprovalFormsStep            │          │
│        │   → 5개 결재 양식 자동 생성           │          │
│        │   → JSON 필드 정의 (7종 입력 유형)    │          │
│        └──────────────────────────────────────┘          │
│                                                          │
│  모든 Step은 멱등성(idempotent) 보장                     │
│  — 재실행 시 데이터 중복 없이 안전                        │
│  — updateOrInsert 패턴으로 구현                           │
│                                                          │
│  실행 이력: tenant_bootstrap_runs 테이블                  │
│  → status(RUNNING/SUCCESS/FAILED)                        │
│  → steps[], log[] (JSON 진행 상태 기록)                  │
└───────────────────────────┬──────────────────────────────┘
                            │
                            ▼
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
단계 5: 테넌트별 동적 커스터마이징
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

┌──────────────────────────────────────────────────────────┐
│               동적 필드 + 수식 엔진 구성                  │
│                                                          │
│  [5-A] 동적 필드 3계층 자동 구성                         │
│        ┌─ item_pages (품목 유형별 페이지 생성)           │
│        │   └─ item_sections (섹션 분류)                  │
│        │       └─ item_fields (필드 정의)                │
│        │           ├─ field_type: 6종                    │
│        │           │  (textbox/number/dropdown/          │
│        │           │   checkbox/date/textarea)           │
│        │           ├─ validation_rules: JSON             │
│        │           │  {min, max, pattern}                │
│        │           ├─ display_condition: JSON            │
│        │           │  {field_id, operator, value}        │
│        │           │  → DB 수준 조건부 렌더링            │
│        │           └─ options: JSON (드롭다운 선택지)    │
│        │                                                 │
│        └─ 프론트엔드: API 메타데이터로 폼 자동 생성      │
│                                                          │
│  [5-B] 전역/테넌트 오버레이 설정                         │
│        SettingFieldDef (전역 필드 정의, 불변)             │
│        + TenantFieldSetting (테넌트별 재정의, 가변)      │
│        → buildEffectiveRow() 합성                        │
│        → is_core=true 필드는 설정 없어도 자동 활성       │
│                                                          │
│  [5-C] 수식 엔진 자동 라우팅 (Zero-Config)              │
│        FormulaHandlerFactory::make(tenantId)             │
│        → class_exists("Handlers/Tenant{id}/...")         │
│        → 파일 존재만으로 자동 발견 (DB/설정파일 불필요)  │
│        → 없으면 제네릭 DB 수식 기반 계산으로 폴백        │
│                                                          │
│  [5-D] 멀티테넌트 데이터 자동 격리                       │
│        BelongsToTenant trait → TenantScope               │
│        → 모든 Eloquent 쿼리에 WHERE tenant_id = ? 주입  │
│        → 267개 모델 전체 적용                            │
│        → 개발자 실수와 무관하게 아키텍처 수준 차단       │
└──────────────────────────────────────────────────────────┘
```

---

## 3. 필수 구성 요소 (Essential Elements) — 청구항 기초

> 변리사 요청: "자동화 프로세스에서 반드시 거쳐야 하는 단계를 특정"

### 3.1 생략 불가한 필수 단계

| 단계 | 필수 구성 요소 | 생략 시 결과 | SAM 구현 |
|:----:|-------------|-----------|---------|
| 1 | 복수 채널 로우데이터 수집 | 고객사 업무 파악 불가 | InterviewScenario (5모델) |
| 2 | 데이터 전처리 및 정규화 | AI 분석 입력 불가 | 파일 파싱 + STT + 응답 정규화 |
| 3 | AI 기반 업종·공정 패턴 도출 | 수동 분석 필요 (기존과 동일) | LLM + 도메인 지식 베이스 |
| 4a | 테넌트 코드 자동 생성 | 수동 코드 부여 필요 | 한글 초성 유니코드 알고리즘 |
| 4b | 레시피 기반 단계별 초기화 | 수동 설정 필요 | TenantBootstrapper (4 Steps) |
| 5a | 동적 필드 자동 구성 | 고정 스키마 한계 | ItemMaster 3계층 |
| 5b | 수식 엔진 자동 라우팅 | 테넌트별 코드 전면 수정 | Zero-Config Factory Pattern |
| 5c | 행 수준 데이터 자동 격리 | 데이터 유출 위험 | BelongsToTenant Global Scope |

### 3.2 청구항 초안 (변리사 검토용)

**독립항 1 (플랫폼 방법특허):**

> 컴퓨터로 구현되는 멀티테넌트 ERP/MES 시스템의 고객사별 맞춤형 자동 구성 방법으로서,
>
> (a) 복수의 채널을 통해 고객사의 업무 데이터를 비대면으로 수집하는 단계;
> (b) 수집된 데이터를 정규화하여 통합 분석 입력을 생성하는 단계;
> (c) AI 모델을 이용하여 상기 통합 분석 입력으로부터 업종, 규모 및 업무 프로세스 패턴을 도출하는 단계;
> (d) 도출된 패턴을 기반으로 테넌트 식별 코드를 자동 생성하고, 사전 정의된 레시피에 따라 시스템 구성 요소를 단계별로 자동 초기화하는 단계;
> (e) 초기화된 시스템의 데이터 필드, 메뉴 구조 및 권한을 고객사 특성에 맞게 동적으로 조정하되, 행 수준 데이터 격리를 자동 적용하는 단계;
>
> 를 포함하는 것을 특징으로 하는 방법.

**종속항 후보:**

| # | 종속 대상 | 한정 내용 |
|---|----------|---------|
| 2 | 항 1의 (a) | 상기 복수의 채널은 파일 업로드, 체크리스트형 설문, 및 음성 인터뷰 녹음을 포함 |
| 3 | 항 1의 (a) | 상기 설문은 마스터 질문 세트를 프로젝트별로 완전 복제하여 독립 운용 |
| 4 | 항 1의 (d) | 상기 테넌트 코드는 한글 회사명의 유니코드 초성을 추출하여 영문 변환하고 36진수 순번을 결합 |
| 5 | 항 1의 (d) | 상기 레시피는 복수의 단계(Step)를 순차 실행하되, 각 단계는 멱등성을 보장하며, 실행 이력을 데이터베이스에 기록 |
| 6 | 항 1의 (e) | 상기 동적 필드는 3계층 구조(페이지-섹션-필드)로 정의되고, 조건부 표시 규칙을 JSON으로 저장 |
| 7 | 항 1의 (e) | 상기 동적 조정은 전역 필드 정의와 테넌트별 설정을 오버레이 합성하여 수행 |
| 8 | 항 1의 (e) | 상기 수식 엔진은 파일 시스템 기반 자동 발견으로 테넌트별 핸들러를 라우팅하되, 설정 파일 및 데이터베이스 매핑 없이 클래스 존재 여부만으로 판별 |

**독립항 2 (역방향 AI 동적 설문):**

> 컴퓨터로 구현되는 ERP/MES 도입을 위한 고객사 업무 분석 방법으로서,
>
> (a) AI 모델이 고객사 담당자에게 업무 방식에 관한 질문을 제시하는 단계;
> (b) 담당자의 응답을 실시간으로 분석하여 후속 질문을 동적으로 생성하는 단계;
> (c) 수집된 응답의 전체 집합으로부터 업무 프로세스 모델을 자동 도출하는 단계;
> (d) 도출된 업무 프로세스 모델을 ERP/MES 모듈 구성 및 시스템 설정으로 자동 변환하는 단계;
>
> 를 포함하는 것을 특징으로 하는 방법.

---

## 4. SAM만의 독창적 처리 방식 — 선행기술 대비

### 4.1 선행기술과의 차별점

| 요소 | 젠소프트 "하이퍼 오토메이션" | 이카운트 ERP | **SAM** |
|------|:----:|:----:|:----:|
| 업종 특화 BOM 수식 | ❌ 범용 | ❌ 없음 | ✅ 10단계 파이프라인 |
| 비대면 3채널 수집 | ❌ | ❌ | ✅ 파일+설문+음성 |
| 한글 초성 코드 생성 | ❌ | ❌ | ✅ 유니코드 알고리즘 |
| 레시피 기반 부트스트래핑 | ❌ | ❌ | ✅ 멱등성 보장 Step |
| 동적 필드 3계층 | △ 고정 스키마 | △ 고정 필드 | ✅ page→section→field |
| 조건부 렌더링 (DB 수준) | ❌ | ❌ | ✅ display_condition JSON |
| Zero-Config 핸들러 | ❌ | ❌ | ✅ 파일 존재만으로 발견 |
| 행 수준 자동 격리 | △ DB 분리 | ❌ 단일 테넌트 | ✅ Global Scope 267모델 |
| 전역/테넌트 오버레이 | ❌ | ❌ | ✅ buildEffectiveRow() |

### 4.2 기술적 진보성 근거

**① 레시피 기반 멱등적 초기화 파이프라인**

기존 SaaS 온보딩은 스크립트 1회 실행 방식으로, 실패 시 롤백/재시도가 어렵다. SAM은:
- `TenantBootstrapStep` 인터페이스로 각 단계의 멱등성을 강제
- `updateOrInsert` 패턴으로 재실행해도 데이터 중복 없음
- `tenant_bootstrap_runs` 테이블로 실행 이력 추적 (RUNNING/SUCCESS/FAILED)
- `RecipeRegistry`로 레시피(LITE/STANDARD)별 다른 단계 조합 선택

**② 한글 유니코드 기반 테넌트 코드 자동 생성**

외부 라이브러리 없이 유니코드 0xAC00~0xD7A3 범위의 한글 자모 분리를 직접 구현:
```
code = mb_ord(char)
index = floor((code - 0xAC00) / 588)  ← 19개 초성 인덱스
초성 → 영문 매핑 (ㄱ→G, ㄴ→N, ㄷ→D, ...)
+ 36진수 4자리 시퀀스 (0~9, A~Z)
→ 최대 1,679,616개(36^4) 테넌트 순환 지원
```

**③ Zero-Config 테넌트 수식 핸들러 라우팅**

```php
class_exists("App\\Services\\Quote\\Handlers\\Tenant{$tenantId}\\FormulaHandler")
```
38줄의 Factory가 DB 조회, 설정 파일, 레지스트리 없이 **파일 시스템만으로** 테넌트별 계산 엔진을 자동 발견한다. 새 업체 추가 = PHP 파일 1개 생성.

**④ 3계층 동적 필드 + DB 수준 조건부 렌더링**

일반 SaaS의 커스텀 필드는 key-value 평면 구조이다. SAM은:
- page → section → field 3계층 트리
- `display_condition` JSON으로 **다른 필드의 값에 따라 표시/숨김** 결정
- 이 조건이 DB에 저장되어 **코드 배포 없이** 변경 가능
- 프론트엔드는 API 메타데이터로 폼을 동적 생성

---

## 5. 증빙 코드 및 문서 목록

| 증빙 | 경로 | 줄 수 | 역할 |
|------|------|:-----:|------|
| 테넌트 부트스트래퍼 | `api/app/Services/TenantBootstrapper.php` | 56 | 파이프라인 오케스트레이터 |
| 레시피 레지스트리 | `api/app/Services/TenantBootstrap/RecipeRegistry.php` | 40 | 레시피→Step 매핑 |
| 회원가입 서비스 | `api/app/Services/RegisterService.php` | 154 | 12단계 온보딩 시퀀스 |
| 메뉴 복제 서비스 | `api/app/Services/MenuBootstrapService.php` | 291 | 글로벌→테넌트 계층 복제 |
| 테넌트 코드 생성 | `api/app/Helpers/TenantCodeGenerator.php` | 114 | 한글 초성 알고리즘 |
| 동적 필드 서비스 | `api/app/Services/TenantFieldSettingService.php` | 212 | 전역/테넌트 오버레이 |
| 수식 핸들러 팩토리 | `api/app/Services/Quote/FormulaHandlerFactory.php` | 38 | Zero-Config 발견 |
| 인터뷰 서비스 | `mng/app/Services/Sales/InterviewScenarioService.php` | 732 | 설문 온보딩 |
| AI 견적 엔진 설계 | `docs/plans/ai-quotation-engine-plan.md` | 929 | 2단계 AI 파이프라인 |
| 인터뷰 시스템 문서 | `docs/features/sales/interviews.md` | 282 | 설문 시스템 |

---

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