diff --git a/.gitignore b/.gitignore index ccfa028..9109c08 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ sam/docs/contracts/docx/backup/ # 기타 sam/sales .DS_Store +_to_notion/ diff --git a/CURRENT_WORKS.md b/CURRENT_WORKS.md deleted file mode 100644 index ad950b4..0000000 --- a/CURRENT_WORKS.md +++ /dev/null @@ -1,11 +0,0 @@ -# SAM Docs 작업 현황 - -> 모든 문서 정리 및 E2E 테스트 버그 수정 완료. 현재 활발한 작업 없음. - -## 최근 커밋 이력 (참고용) - -| 날짜 | 내용 | -|------|------| -| 2026-01-15 | E2E 테스트 버그 수정 완료 (Phase 1-3) | -| 2025-12-26 | 문서 업데이트 및 정리 (Phase 1-4.5) | -| 2025-12-22 | MNG 견적수식 관리 개발 계획 문서 작성 | diff --git a/INDEX.md b/INDEX.md index 572b412..580176b 100644 --- a/INDEX.md +++ b/INDEX.md @@ -1,241 +1,212 @@ -# SAM 프로젝트 문서 인덱스 +# SAM 문서 인덱스 (Claude Code용) -> **Claude Code 작업 전 필수 확인** - 작업 유형에 맞는 문서를 먼저 읽고 시작하세요. +> 작업 유형에 맞는 문서를 먼저 읽고 시작하세요. +> 최종 갱신: 2026-03-07 --- -## 🎯 작업별 필수 문서 (반드시 먼저 확인) +## 작업별 필수 문서 | 작업 유형 | 필수 문서 | 용도 | |----------|----------|------| -| **TODO 확인** | `TODO.md` | 긴급/중요 이슈 및 개선사항 추적 | -| **API 개발** | `standards/api-rules.md` | Service-First, FormRequest, i18n 규칙 | -| **DB 변경** | `specs/database-schema.md` | 테이블 구조, 관계, 컬럼 규칙 | -| **새 기능 구현** | `architecture/system-overview.md` | 전체 아키텍처 이해 | -| **보안 관련** | `architecture/security-policy.md` | 인증/인가, 보안 규칙 | -| **Git 커밋** | `standards/git-conventions.md` | 커밋 메시지, 브랜치 전략 | -| **품질 검증** | `standards/quality-checklist.md` | 코드 품질 체크리스트 | -| **Swagger 작성** | `guides/swagger-guide.md` | API 문서 작성 방법 | -| **품목관리** | `rules/item-policy.md` | 품목 정책 (유형, 예약어, API 규칙) | -| **게시판** | `specs/board-system-spec.md` | 게시판 시스템 설계 | -| **단가관리** | `rules/pricing-policy.md` | 원가/판매가 계산, 리비전 관리 | -| **과금정책 (고객용)** | `rules/customer-pricing.md` | 고객 안내용 서비스 요금표 | -| **과금정책 (파트너)** | `rules/partner-commission.md` | 영업파트너 수당 체계 및 정산 | -| **과금정책 (내부용)** | `rules/billing-policy.md` | 내부용 원가/마진/코드참조 (CONFIDENTIAL) | -| **견적관리** | `features/quotes/README.md` | 견적 시스템, BOM 계산, 10단계 로직 | -| **MES 개발** | `projects/mes/README.md` | MES 프로젝트 개요 | +| API 개발 | `dev/standards/api-rules.md` | Service-First, FormRequest, i18n | +| DB 변경 | `system/database/README.md` | 테이블 구조, 관계, 컬럼 규칙 | +| 새 기능 | `system/overview.md` | 전체 아키텍처 | +| 보안 | `system/security-policy.md` | 인증/인가, 보안 규칙 | +| Git 커밋 | `dev/standards/git-conventions.md` | 커밋 메시지, 브랜치 전략 | +| 품질 검증 | `dev/standards/quality-checklist.md` | 코드 품질 체크리스트 | +| Swagger | `dev/guides/swagger-guide.md` | API 문서 작성법 | +| 품목관리 | `rules/item-policy.md` | 품목 정책 | +| 단가관리 | `rules/pricing-policy.md` | 원가/판매가, 리비전 | +| 견적관리 | `features/quotes/README.md` | 견적 시스템, BOM 계산 | +| 운영 배포 | `dev/dev_plans/production-deployment-plan.md` | 배포 계획 | +| 서버 운영 | `dev/deploys/ops-manual/README.md` | 서버 운영 매뉴얼 | +| 서버 접근/백업 | `system/server-access-management.md` | 계정, 권한, 백업, 리플리케이션 | +| MES | `projects/mes/README.md` | MES 프로젝트 | --- -## 📁 폴더 구조 +## 폴더 구조 ``` docs/ -├── plans/ # 🆕 개발 계획 - 임시 (작업 완료 후 정리 → 삭제) -├── standards/ # 개발 표준 - "어떻게 코드를 작성할 것인가" -├── architecture/ # 아키텍처 - "왜 이렇게 설계하는가" -├── rules/ # 비즈니스 규칙 - "무엇이 유효한 데이터인가" -├── specs/ # 기술 스펙 - "무엇을 구현할 것인가" -├── guides/ # 구현 가이드 - "어떻게 구현할 것인가" -├── quickstart/ # 빠른 시작 - 핵심 요약 -├── front/ # 프론트엔드 공유 문서 -├── features/ # 기능별 상세 문서 -├── projects/ # 프로젝트별 문서 (MES, Legacy) -├── history/ # 히스토리 및 로드맵 -├── changes/ # 변경 이력 -└── data/ # 데이터 분석 +├── [공유] +│ ├── features/ # 기능별 상세 명세 +│ ├── rules/ # 비즈니스 규칙·정책 +│ ├── projects/ # 프로젝트별 자료 +│ ├── system/ # 시스템 현황 (아키텍처, DB, 인프라) +│ +├── [개발팀] +│ ├── dev/standards/ # 개발 표준 +│ ├── dev/guides/ # 구현 가이드 +│ ├── dev/quickstart/ # 빠른 시작 +│ ├── dev/changes/ # 변경 이력 +│ ├── dev/deploys/ # 배포/운영 +│ ├── dev/data/ # 데이터 분석 +│ ├── dev/history/ # 과거 이력 +│ ├── dev/dev_plans/ # 개발 계획 (임시) +│ +├── [프론트엔드] +│ ├── frontend/api-specs/ # API 연동 명세 +│ ├── frontend/integration/ # 연동 가이드 +│ +├── [기획팀] +│ ├── requests/ # 기획 요청 +│ +├── resources.md # 외부 자료 링크 (노션) +├── README.md # 사람용 안내 +└── INDEX.md # 이 파일 (Claude Code용) ``` --- -## 📚 폴더별 문서 목록 +## 폴더별 문서 목록 -### standards/ - 개발 표준 -> 코딩 컨벤션, 스타일 가이드, 품질 기준 - -| 문서 | 설명 | 필수 확인 시점 | -|------|------|--------------| -| [api-rules.md](standards/api-rules.md) | API 개발 규칙 (Service-First, FormRequest, i18n) | API 개발 전 | -| [git-conventions.md](standards/git-conventions.md) | Git 커밋 메시지, 브랜치 전략 | 커밋 전 | -| [quality-checklist.md](standards/quality-checklist.md) | 코드 품질 체크리스트 | PR 전 | - -### architecture/ - 아키텍처 & 설계 원칙 -> 시스템 설계, 보안 정책, 아키텍처 결정 - -| 문서 | 설명 | 필수 확인 시점 | -|------|------|--------------| -| [system-overview.md](architecture/system-overview.md) | 전체 시스템 아키텍처 | 새 기능 설계 전 | -| [security-policy.md](architecture/security-policy.md) | 인증/인가, 보안 규칙 | 보안 관련 작업 전 | - -### rules/ - 비즈니스 규칙 -> 도메인 로직, 검증 규칙, 상태 전이 - -| 문서 | 설명 | 필수 확인 시점 | -|------|------|--------------| -| [README.md](rules/README.md) | 비즈니스 규칙 개요 | 도메인 로직 구현 전 | -| [item-policy.md](rules/item-policy.md) | 품목 정책 (유형 체계, 예약어, API 규칙) | 품목 관련 작업 전 | -| [pricing-policy.md](rules/pricing-policy.md) | 단가 정책 (원가/판매가 계산, 리비전 관리) | 단가 관련 작업 전 | -| [customer-pricing.md](rules/customer-pricing.md) | 고객 안내용 서비스 요금표 | 고객 요금 안내 시 | -| [partner-commission.md](rules/partner-commission.md) | 영업파트너 수당 체계 및 정산 | 수당/정산 관련 작업 전 | -| [billing-policy.md](rules/billing-policy.md) | 내부용 원가/마진/코드참조 (CONFIDENTIAL) | 과금 코드 개발 전 | - -### specs/ - 기술 스펙 -> 구현 명세, DB 스키마, 시스템 설정 - -| 문서 | 설명 | 필수 확인 시점 | -|------|------|--------------| -| [database-schema.md](specs/database-schema.md) | DB 구조 및 관계도 | DB 변경 전 | -| [board-system-spec.md](specs/board-system-spec.md) | 게시판 시스템 설계 | 게시판 작업 전 | -| [item-master-integration.md](specs/item-master-integration.md) | 품목관리 연동 설계 | 품목 연동 구현 시 | -| [docker-setup.md](specs/docker-setup.md) | Docker 환경 구성 | 환경 설정 시 | -| [remote-work-setup.md](specs/remote-work-setup.md) | 원격 개발 설정 | 원격 작업 시 | - -### guides/ - 구현 가이드 -> 특정 기능 구현을 위한 단계별 매뉴얼 - -| 문서 | 설명 | 필수 확인 시점 | -|------|------|--------------| -| [swagger-guide.md](guides/swagger-guide.md) | Swagger API 문서 작성법 | API 문서 작성 전 | -| [file-storage-guide.md](guides/file-storage-guide.md) | 파일 업로드/다운로드 구현 | 파일 기능 구현 전 | -| [item-management-migration.md](guides/item-management-migration.md) | Item 시스템 전환 가이드 | 마이그레이션 작업 전 | -| [project-launch-roadmap.md](guides/project-launch-roadmap.md) | 런칭 준비 현황 | 런칭 관련 작업 시 | -| [production-env-sync.md](guides/production-env-sync.md) | 운영 전환 시 .env 동기화 절차 | 테스트→운영 전환 시 | - -### quickstart/ - 빠른 시작 -> 핵심 규칙 요약, 자주 쓰는 명령어 - -| 문서 | 설명 | 필수 확인 시점 | -|------|------|--------------| -| [quick-start.md](quickstart/quick-start.md) | 프로젝트 핵심 규칙 요약 | 세션 시작 시 | -| [dev-commands.md](quickstart/dev-commands.md) | 일상 개발 명령어 모음 | 명령어 확인 시 | - -### front/ - 프론트엔드 공유 문서 -> API 연동 가이드, 프론트엔드 스펙 +### system/ — 시스템 현황 | 문서 | 설명 | |------|------| -| [item-master-guide.md](front/item-master-guide.md) | 품목기준관리 페이지-섹션-필드 구조 | +| [overview.md](system/overview.md) | 전체 시스템 아키텍처 | +| [api-structure.md](system/api-structure.md) | API 서버 구조 (~1,027 엔드포인트) | +| [react-structure.md](system/react-structure.md) | React 프론트엔드 구조 | +| [mng-structure.md](system/mng-structure.md) | MNG 관리자 패널 구조 | +| [docker-setup.md](system/docker-setup.md) | Docker 환경 + CI/CD | +| [database/README.md](system/database/README.md) | DB 스키마 인덱스 | +| [security-policy.md](system/security-policy.md) | 보안 정책 | +| [server-access-management.md](system/server-access-management.md) | 서버 접근 권한, 백업, 리플리케이션 | +| [scaling-roadmap.md](system/scaling-roadmap.md) | 스케일링 로드맵 | +| [board-system-spec.md](system/board-system-spec.md) | 게시판 시스템 설계 | +| [item-master-integration.md](system/item-master-integration.md) | 품목 마스터 통합 설계 | +| [erp-analysis/](system/erp-analysis/) | ERP 스토리보드 분석 | -> 날짜별 API 요청 문서는 `history/2025-11/front-requests/`로 이동됨 +DB 도메인별: -### data/ - 데이터 분석 -> 시스템 분석, 데이터 모델링 +| 문서 | 도메인 | +|------|--------| +| [database/tenants.md](system/database/tenants.md) | 테넌트, 사용자, 권한 | +| [database/products.md](system/database/products.md) | 제품, 품목, 설계 | +| [database/sales.md](system/database/sales.md) | 영업, 수주, 견적 | +| [database/production.md](system/database/production.md) | 생산, 시공, 자재, 품질 | +| [database/finance.md](system/database/finance.md) | 재무, 회계 | +| [database/hr.md](system/database/hr.md) | 인사 | +| [database/documents.md](system/database/documents.md) | 문서, 전자서명 | +| [database/commons.md](system/database/commons.md) | 공통, 게시판, 감사 | +| [database/stats.md](system/database/stats.md) | 통계 | + +--- + +### dev/standards/ — 개발 표준 | 문서 | 설명 | |------|------| -| [analysis/item-db-analysis.md](data/analysis/item-db-analysis.md) | Item DB/API 분석 최종본 | +| [api-rules.md](dev/standards/api-rules.md) | API 개발 규칙 | +| [git-conventions.md](dev/standards/git-conventions.md) | Git 컨벤션 | +| [quality-checklist.md](dev/standards/quality-checklist.md) | 품질 체크리스트 | +| [pagination-policy.md](dev/standards/pagination-policy.md) | 페이지네이션 표준 | +| [options-column-policy.md](dev/standards/options-column-policy.md) | JSON options 컬럼 정책 | -### features/ - 기능별 문서 +--- + +### rules/ — 비즈니스 규칙 | 문서 | 설명 | |------|------| -| [barobill-kakaotalk/README.md](features/barobill-kakaotalk/README.md) | 바로빌 카카오톡 (알림톡/친구톡) 연동 | -| [boards/README.md](features/boards/README.md) | 게시판 시스템 구현 | -| [boards/mng-implementation.md](features/boards/mng-implementation.md) | MNG 게시판 구현 상세 | -| [hr/hr-api-analysis.md](features/hr/hr-api-analysis.md) | HR API 분석 (근태/직원/부서) | -| [quotes/README.md](features/quotes/README.md) | 견적 시스템 분석 (BOM 계산, 10단계 로직) | +| [item-policy.md](rules/item-policy.md) | 품목 정책 | +| [pricing-policy.md](rules/pricing-policy.md) | 단가 정책 | +| [numbering-rules.md](rules/numbering-rules.md) | 채번 규칙 | +| [client-policy.md](rules/client-policy.md) | 고객사 관리 정책 | +| [billing-policy.md](rules/billing-policy.md) | 과금 정책 (CONFIDENTIAL) | +| [customer-pricing.md](rules/customer-pricing.md) | 고객 요금표 | +| [partner-commission.md](rules/partner-commission.md) | 영업파트너 수당 체계 | +| [attendance-api.md](rules/attendance-api.md) | 근태 API 규칙 | +| [department-tree-api.md](rules/department-tree-api.md) | 부서 트리 API | +| [employee-api.md](rules/employee-api.md) | 직원 API | -### projects/ - 프로젝트별 문서 +--- + +### features/ — 기능별 문서 + +| 문서 | 설명 | +|------|------| +| [quotes/README.md](features/quotes/README.md) | 견적 시스템 | +| [sales/README.md](features/sales/README.md) | 영업 관리 | +| [documents/README.md](features/documents/README.md) | 문서관리 | +| [finance/README.md](features/finance/README.md) | 재무 관리 | +| [hr/](features/hr/) | 인사관리 | +| [crm/README.md](features/crm/README.md) | CRM | +| [esign/README.md](features/esign/README.md) | 전자서명 | +| [equipment/README.md](features/equipment/README.md) | 설비관리 | +| [boards/README.md](features/boards/README.md) | 게시판 | +| [ai/README.md](features/ai/README.md) | AI 분석 | +| [card-vehicle/README.md](features/card-vehicle/README.md) | 법인카드·차량 | +| [settlement/README.md](features/settlement/README.md) | 정산 | +| [barobill-kakaotalk/README.md](features/barobill-kakaotalk/README.md) | 바로빌 카카오톡 | + +--- + +### dev/guides/ — 구현 가이드 + +| 문서 | 설명 | +|------|------| +| [swagger-guide.md](dev/guides/swagger-guide.md) | Swagger 작성법 | +| [file-storage-guide.md](dev/guides/file-storage-guide.md) | 파일 업로드/다운로드 | +| [item-management-migration.md](dev/guides/item-management-migration.md) | Item 전환 가이드 | +| [server-how-it-works.md](dev/guides/server-how-it-works.md) | 서버 동작 원리 | +| [jenkins-setup-guide.md](dev/guides/jenkins-setup-guide.md) | Jenkins CI/CD | +| [erp-api-list.md](dev/guides/erp-api-list.md) | ERP API 목록 | +| [erp-api-detail.md](dev/guides/erp-api-detail.md) | ERP API 상세 | +| [item-master-guide.md](dev/guides/item-master-guide.md) | 품목기준관리 구조 | + +--- + +### projects/ — 프로젝트 자료 | 프로젝트 | 문서 | 설명 | |---------|------|------| -| **MES** | [README.md](projects/mes/README.md) | MES 프로젝트 개요 | -| **MES** | [MES_PROJECT_ROADMAP.md](projects/mes/MES_PROJECT_ROADMAP.md) | 개발 로드맵 | -| **Legacy** | [draw-module.md](projects/legacy-5130/draw-module.md) | 레거시 드로우 모듈 | +| MES | [projects/mes/README.md](projects/mes/README.md) | MES 개요 | +| 5130 이관 | [projects/5130-migration/](projects/5130-migration/) | 레거시 이관 | +| API 연동 | [projects/api-integration/](projects/api-integration/) | React↔API | +| 견적 | [projects/quotation/](projects/quotation/) | 견적 프로젝트 | +| 전자서명 | [projects/e-sign/](projects/e-sign/) | 전자서명 | -### history/ - 히스토리 +--- -| 기간 | 문서 | +### dev/deploys/ — 배포/운영 + +| 문서 | 설명 | |------|------| -| **2025-11** | [item-master-gap-analysis.md](history/2025-11/item-master-gap-analysis.md), [item-master-spec.md](history/2025-11/item-master-spec.md), [front-requests/](history/2025-11/front-requests/), [item-master-archived/](history/2025-11/item-master-archived/) | -| **2025-09** | [checkpoint.md](history/2025-09/checkpoint.md), [database-schema.md](history/2025-09/database-schema.md) | -| **Roadmaps** | [december-2025.md](history/roadmaps/december-2025.md) | +| [ops-manual/README.md](dev/deploys/ops-manual/README.md) | 서버 운영 매뉴얼 | --- -## 🏗️ 서브프로젝트 문서 +### dev/quickstart/ — 빠른 시작 -각 서브프로젝트는 독립적인 `docs/` 디렉토리를 가집니다. - -| 프로젝트 | 문서 경로 | 설명 | -|---------|----------|------| -| **API** | [api/docs/INDEX.md](../api/docs/INDEX.md) | REST API 프로젝트 | -| **MNG** | [mng/docs/INDEX.md](../mng/docs/INDEX.md) | Plain Laravel 관리자 (운영 주력) | -| **React** | [react/docs/](../react/docs/) | Next.js 프론트엔드 | +| 문서 | 설명 | +|------|------| +| [quick-start.md](dev/quickstart/quick-start.md) | 핵심 규칙 요약 | +| [dev-commands.md](dev/quickstart/dev-commands.md) | 개발 명령어 모음 | --- -## 📝 문서 작성 가이드 +### 서브프로젝트 문서 -### 새 문서 작성 시 -1. **적절한 폴더 선택**: 위 폴더 구조 참고 -2. **파일명**: 소문자 + 하이픈 (kebab-case) -3. **크기 목표**: 10KB 이하 -4. **INDEX 업데이트**: 새 문서는 반드시 이 파일에 추가 - -### 폴더 선택 기준 -- **"개발 계획/작업 예정"** → `plans/` (임시, 완료 후 삭제) -- **"어떻게 코드 작성?"** → `standards/` -- **"왜 이렇게 설계?"** → `architecture/` -- **"무엇이 유효한 데이터?"** → `rules/` -- **"무엇을 구현?"** → `specs/` -- **"어떻게 구현?"** → `guides/` - -### plans/ 워크플로우 -1. 개발 계획 문서를 `plans/`에 작성 -2. 작업 진행 -3. 완료 후 결과물을 해당 프로젝트 docs에 정리 -4. plan 문서 삭제 - -### plans/flow-tests/ -API Flow Tester에서 생성되는 JSON 파일 저장 경로 -- 경로: `plans/flow-tests/*.json` -- 용도: MNG API Flow Tester 테스트 시나리오 -- 예시: `item-master-page-api-flow.json`, `client-api-flow.json` +| 프로젝트 | 경로 | +|---------|------| +| API | [api/docs/](../api/docs/) | +| MNG | [mng/docs/](../mng/docs/) | +| React | [react/docs/](../react/docs/) | --- -## 🔄 문서 구조 변경 이력 +## 폴더 선택 기준 -- **2026-01-28**: API 라우터 분리 및 버전 폴백 시스템 구현 - - `routes/api.php` → 13개 도메인별 파일로 분리 (1,479줄 → 61줄) - - `ApiVersionMiddleware` 추가 (헤더/쿼리 기반 버전 선택, v2→v1 폴백) - - `standards/api-rules.md` 라우팅 섹션 업데이트 - - `architecture/system-overview.md` 라우팅 구조 업데이트 - -- **2025-12-09**: 품목 정책 통합 문서 생성 - - `rules/item-policy.md` 생성 (4개 문서 통합) - - 삭제: `specs/ITEM-MASTER-INDEX.md`, `specs/item-master-field-key-validation.md`, `specs/item-master-field-integration.md`, `plans/items-api-unified-plan.md` - - 품목 관련 정책을 rules/ 디렉토리로 이동 - -- **2025-12-09**: Item Master 문서 정리 및 인덱스 생성 - - `specs/ITEM-MASTER-INDEX.md` 생성 (개발 현황/필요 항목 정리) - - `history/2025-11/item-master-archived/` 생성 (구버전 문서 아카이브) - - 중복 문서 정리 (front-requests → history 이동) - -- **2025-12-09**: 문서 정리 및 통합 - - 중복 분석 문서 삭제 (v2, DB_Modeling) - - `SAM_Item_DB_API_Analysis_v3_FINAL.md` → `item-db-analysis.md` 리네임 - - `ITEM_MASTER_FIELD_INTEGRATION_PLAN.md` → `item-master-field-integration.md` 리네임 - - `HR_API_ANALYSIS.md` → `features/hr/hr-api-analysis.md` 이동 - - 날짜 접두사 front 문서 → `history/2025-11/front-requests/` 이동 - - api/docs에서 프로젝트 문서 분리 (swagger, api-flows만 유지) - -- **2025-12-09**: api/docs 문서 통합 - - `api/docs/analysis/` → `docs/data/analysis/` 이동 - - `api/docs/front/` → `docs/front/` 병합 - - `api/docs/specs/` → `docs/specs/` 병합 - - api/docs에는 API 구성/설정 문서만 유지 (swagger, api-flows) - -- **2025-12-09**: `plans/` 폴더 추가 - - 개발 계획 문서용 임시 폴더 - - 작업 완료 후 정리 → 삭제 워크플로우 - -- **2025-12-05**: 폴더 구조 대폭 재정리 - - `reference/` → `standards/`, `architecture/`, `quickstart/`로 분리 - - `principles/` → `architecture/`로 통합 - - 작업별 필수 문서 가이드 추가 - -- **2025-11-20**: 문서 구조 대규모 재정리 - - claudedocs → docs/ 체계화 - - 각 서브프로젝트별 docs/ 디렉토리 생성 \ No newline at end of file +| 질문 | 폴더 | +|------|------| +| 시스템 현재 상태? | `system/` | +| 코드 작성 규칙? | `dev/standards/` | +| 비즈니스 규칙? | `rules/` | +| 기능 동작 방식? | `features/` | +| 구현 방법? | `dev/guides/` | +| 개발 계획? | `dev/dev_plans/` | +| 프로젝트 자료? | `projects/` | +| 변경 이력? | `dev/changes/` | \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..9ed2b97 --- /dev/null +++ b/README.md @@ -0,0 +1,128 @@ +# SAM 프로젝트 문서 + +SAM ERP 시스템의 기술 문서, 비즈니스 규칙, 기능 명세를 관리하는 저장소입니다. + +--- + +## 대상별 안내 + +### 전 팀 공유 +누구나 참고할 수 있는 공통 문서입니다. + +| 폴더 | 설명 | 예시 | +|------|------|------| +| **features/** | 기능별 상세 명세 | 견적, CRM, 문서관리, 인사, 재무 등 | +| **rules/** | 비즈니스 규칙·정책 | 품목 정책, 단가 정책, 채번 규칙, 청구 정책 | +| **projects/** | 프로젝트별 자료 | MES, 5130 마이그레이션, 전자서명 등 | +| **system/** | 시스템 현황 | 아키텍처, DB 스키마, Docker, 인프라 | +| **resources.md** | 외부 자료 링크 | BI, 제품 소개서 등 대용량 자료 (노션 링크) | + +### 개발팀 전용 (`dev/`) +개발 표준, 가이드, 변경 이력 등 개발자 대상 문서입니다. + +| 폴더 | 설명 | 예시 | +|------|------|------| +| **dev/standards/** | 개발 표준 | API 규칙, Git 컨벤션, 품질 체크리스트 | +| **dev/guides/** | 구현 가이드 | Swagger 작성법, 파일 저장, Jenkins 설정 | +| **dev/quickstart/** | 빠른 시작 | 개발 명령어, 퀵스타트 가이드 | +| **dev/changes/** | 변경 이력 | 날짜별 변경 내용 기록 | +| **dev/deploys/** | 배포·운영 | 운영 매뉴얼, 배포 SQL | +| **dev/data/** | 데이터 분석 | BOM 매핑 분석, 견적 데이터 | +| **dev/history/** | 과거 이력 | 월별 히스토리, 로드맵 | +| **dev/dev_plans/** | 개발 계획 | 작업별 계획 문서 (개인 작업용, 정리 후 폐기 가능) | + +### 프론트엔드 전용 (`frontend/`) +프론트엔드 개발자 대상 문서입니다. + +| 폴더 | 설명 | 예시 | +|------|------|------| +| **frontend/api-specs/** | API 연동 명세 | 문서 API 연동 가이드 | +| **frontend/integration/** | 프론트-백엔드 연동 | 연동 패턴, 주의사항 | + +### 기획팀 (`requests/`) +기획 요청 및 확인 문서입니다. + +| 폴더 | 설명 | 예시 | +|------|------|------| +| **requests/** | 기획 확인 요청 | 기획서 검토 요청, 워크플로우 공유 | + +--- + +## 폴더 구조 + +``` +docs/ +├── features/ # [공유] 기능별 상세 명세 +│ ├── quotes/ # 견적 시스템 +│ ├── sales/ # 영업/수주 +│ ├── documents/ # 문서관리 +│ ├── finance/ # 재무/회계 +│ ├── hr/ # 인사관리 +│ ├── crm/ # 고객관리 +│ ├── esign/ # 전자서명 +│ ├── equipment/ # 설비관리 +│ ├── boards/ # 게시판 +│ ├── ai/ # AI 기능 +│ └── ... +│ +├── rules/ # [공유] 비즈니스 규칙 +│ ├── item-policy.md +│ ├── pricing-policy.md +│ ├── numbering-rules.md +│ └── ... +│ +├── projects/ # [공유] 프로젝트별 자료 +│ ├── mes/ +│ ├── 5130-migration/ +│ ├── e-sign/ +│ └── ... +│ +├── system/ # [공유] 시스템 현황 +│ ├── overview.md +│ ├── database/ +│ ├── docker-setup.md +│ └── ... +│ +├── resources.md # [공유] 외부 자료 링크 (노션) +│ +├── dev/ # [개발팀] 개발 전용 +│ ├── standards/ # 개발 표준 +│ ├── guides/ # 구현 가이드 +│ ├── quickstart/ # 빠른 시작 +│ ├── changes/ # 변경 이력 +│ ├── deploys/ # 배포/운영 +│ ├── data/ # 데이터 분석 +│ ├── history/ # 과거 이력 +│ └── dev_plans/ # 개발 계획 (개인 작업용) +│ +├── frontend/ # [프론트엔드] 프론트 전용 +│ ├── api-specs/ # API 연동 명세 +│ └── integration/ # 연동 가이드 +│ +├── requests/ # [기획팀] 기획 요청 +│ +├── README.md # 이 문서 (사람용 안내) +├── INDEX.md # Claude Code용 문서 인덱스 +└── TODO.md +``` + +--- + +## 문서 작성 규칙 + +### 파일 이름 +- 영문 소문자, 하이픈(`-`) 구분: `item-policy.md` +- 변경 이력: `YYYYMMDD_설명.md` (예: `20260305_login_fix.md`) +- 한글 파일명 허용 (가이드 등 내부 문서) + +### 문서 구조 +- 모든 MD 파일은 `# 제목`으로 시작 +- 폴더에 파일이 3개 이상이면 `README.md`로 목차 제공 +- 이미지/대용량 파일은 노션에 업로드하고 `resources.md`에 링크 추가 + +### 폴더 관리 +- **공유 폴더**: 전 팀이 수정 가능, 변경 시 관련 팀에 공유 +- **dev/**: 개발팀만 수정 +- **frontend/**: 프론트엔드 팀만 수정 (API 명세는 개발팀이 제공) +- **requests/**: 기획팀이 작성, 개발팀이 확인 +- **dev/dev_plans/**: 개인 작업용, 완료 후 archive/ 이동 또는 삭제 \ No newline at end of file diff --git a/architecture/README.md b/architecture/README.md deleted file mode 100644 index e6eec46..0000000 --- a/architecture/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Architecture (아키텍처 & 설계 원칙) - -> 시스템 설계와 아키텍처 결정의 근간 - **"왜 이렇게 설계하는가"** - -## 목적 -- 일관된 아키텍처 결정 기준 제공 -- 기술 부채 방지 -- 확장성과 유지보수성 확보 - -## 문서 목록 - -| 문서 | 설명 | 필수 확인 시점 | -|------|------|--------------| -| [system-overview.md](system-overview.md) | 전체 시스템 아키텍처 | 새 기능 설계 전 | -| [security-policy.md](security-policy.md) | 인증/인가, 보안 규칙 | 보안 관련 작업 전 | - -## 관련 폴더 -- [standards/](../standards/) - 개발 표준 (어떻게 코드를 작성할 것인가) -- [rules/](../rules/) - 비즈니스 규칙 (무엇이 유효한 데이터인가) -- [specs/](../specs/) - 기술 스펙 (무엇을 구현할 것인가) \ No newline at end of file diff --git a/architecture/system-overview.md b/architecture/system-overview.md deleted file mode 100644 index 35f2d58..0000000 --- a/architecture/system-overview.md +++ /dev/null @@ -1,392 +0,0 @@ -# SAM 시스템 아키텍처 - -**업데이트**: 2026-01-28 - ---- - -## 전체 아키텍처 - -SAM은 다중 애플리케이션 Laravel 기반 시스템으로 구성됩니다: - -``` -SAM/ -├── api/ # Laravel 12 REST API (백엔드) -├── mng/ # Laravel 12 + Plain Blade/Tailwind (관리자 패널) -├── react/ # Next.js 15.5.7 프론트엔드 -├── docs/ # 기술 문서 -├── design/ # 디자인 시스템 (Storybook) -├── planning/ # 기획 문서 -├── sales/ # 영업자 사이트 (추후 개발) -├── 5130/ # 레거시 PHP 애플리케이션 -└── docker/ # Docker 설정 -``` - -## 애플리케이션별 상세 - -### mng/ - 관리자 패널 - -**기술 스택:** -- Laravel 12 -- PHP 8.4 -- Pure Blade + Tailwind CSS 3.x -- Sanctum (인증) - -**주요 기능:** -- 테넌트 관리 -- 사용자 관리 -- 권한 관리 (RBAC) -- 메뉴 관리 -- 역할 및 부서 관리 - -**주요 특징:** -- AI 없이 수정 가능한 단순 구조 -- 좌측 사이드바 + 상단 헤더 레이아웃 - -**개발 명령어:** -```bash -php artisan serve # Laravel 서버 -npm run dev # Vite HMR (Tailwind) -``` - -### api/ - REST API - -**기술 스택:** -- Laravel 12 -- PHP 8.4 -- Sanctum (인증) -- l5-swagger 9.0 (API 문서화) - -**주요 기능:** -- RESTful API 엔드포인트 -- Swagger 문서화 -- Multi-tenant 지원 -- 권한 기반 접근 제어 - -**API 구조:** -- **인증**: `/v1/login`, `/v1/logout`, `/v1/signup` -- **사용자**: `/v1/users/*` -- **테넌트**: `/v1/tenants/*` -- **제품**: `/v1/products/*` -- **자재**: `/v1/materials/*` -- **카테고리**: `/v1/categories/*` -- **파일**: `/v1/file/*` -- **디자인**: `/v1/design/*` - -**API 문서:** -- Swagger UI: `http://api.sam.kr/api-docs/index.html` -- JSON Spec: `http://api.sam.kr/docs/api-docs.json` - -### react/ - Next.js 프론트엔드 - -**기술 스택:** -- Next.js 15.5.7 -- React 19.2.1 -- TypeScript 5.x -- Tailwind CSS v4 -- Zustand (상태 관리) -- React Hook Form -- shadcn/ui -- next-intl (i18n) - -**주요 기능:** -- 모던 UI/UX -- Server Components 및 App Router -- 실시간 데이터 동기화 -- 역할 전환 기능 -- 대시보드 -- 다국어 지원 (i18n) - -## Multi-tenant 아키텍처 - -### 데이터 격리 - -- **방식**: `tenant_id` 컬럼 기반 격리 -- **스코프**: BelongsToTenant global scope 자동 적용 -- **모델**: `shared/Models/` 디렉토리의 공통 모델 사용 - -### 테넌트 구조 - -``` -Tenant (회사/조직) - ├── Users (사용자) - ├── Departments (부서) - ├── Roles (역할) - ├── Permissions (권한) - └── Data (비즈니스 데이터) -``` - -### 테넌트 전환 - -- 사용자는 여러 테넌트에 속할 수 있음 (`user_tenants` 테이블) -- 기본 테넌트 설정 가능 -- API: `POST /v1/users/me/tenants/switch` - -## 인증 및 권한 - -### 인증 흐름 - -1. **API Key 인증** (모든 요청) - - 헤더: `X-API-KEY` - - 미들웨어: `auth.apikey` - -2. **사용자 인증** (보호된 라우트) - - 엔드포인트: `POST /v1/login` - - 토큰: Sanctum Bearer Token - - 미들웨어: `auth:sanctum` - -### 권한 시스템 - -**3단계 권한 구조:** -1. **사용자 역할 권한**: User → Role → Permissions -2. **사용자 직접 권한**: User → Permissions -3. **부서 역할 권한**: User → Department → Role → Permissions - -**권한 명명 규칙:** -``` -menu:{menu_id}.{permission_type} -``` - -**권한 타입:** -- `view` - 조회 -- `create` - 생성 -- `update` - 수정 -- `delete` - 삭제 -- `approve` - 승인 -- `export` - 내보내기 -- `manage` - 관리 - -## 데이터베이스 구조 - -### 핵심 테이블 - -**인증 및 권한:** -- `api_keys` - API 키 관리 -- `users` - 사용자 계정 -- `user_tenants` - 사용자-테넌트 관계 -- `permissions` - 권한 정의 -- `roles` - 역할 정의 -- `model_has_permissions/roles` - 권한 할당 - -**멀티테넌트:** -- `tenants` - 테넌트 마스터 -- `tenant_user_profiles` - 테넌트별 사용자 프로필 -- `departments` - 부서 구조 -- `department_user` - 사용자-부서 관계 - -**제품 관리:** -- `categories` - 카테고리 계층 -- `category_fields` - 동적 필드 정의 -- `products` - 제품 카탈로그 -- `product_components` - BOM 관계 -- `materials` - 자재 마스터 - -**디자인 및 제조:** -- `models` - 디자인 모델 -- `model_versions` - 모델 버전 -- `bom_templates` - BOM 템플릿 -- `bom_template_items` - BOM 항목 - -**주문 및 운영:** -- `orders` - 주문/견적 마스터 -- `order_items` - 주문 항목 -- `order_item_components` - 주문 항목 구성 -- `clients` - 고객/벤더 마스터 - -**시스템:** -- `audit_logs` - 감사 로그 (13개월 보관) -- `files` - 다형성 파일 첨부 -- `common_codes` - 공통 코드 - -### 공통 컬럼 패턴 - -모든 테이블에 공통으로 포함: -- `id` - 기본 키 -- `tenant_id` - 테넌트 ID (필수) -- `created_by` - 생성자 ID -- `updated_by` - 수정자 ID -- `deleted_by` - 삭제자 ID -- `created_at`, `updated_at` - 타임스탬프 -- `deleted_at` - Soft Delete - -## 미들웨어 스택 - -**실행 순서:** -1. `ApiRateLimiter` - Rate Limiting -2. `ApiVersionMiddleware` - API 버전 선택 및 폴백 처리 -3. `ApiKeyMiddleware` - API Key 검증 -4. `CheckSwaggerAuth` - Swagger 인증 체크 -5. `CorsMiddleware` - CORS 처리 -6. `CheckPermission` - 권한 검증 -7. `PermMapper` - 권한 매핑 - -## 라우팅 구조 - -### 도메인별 라우트 분리 - -API 라우트는 도메인별로 분리되어 관리됩니다: - -``` -routes/api/ -├── v1/ # v1 API 라우트 (13개 도메인) -│ ├── auth.php # 인증 (login, logout, signup) -│ ├── admin.php # 관리자 기능 -│ ├── users.php # 사용자 관리 -│ ├── tenants.php # 테넌트 관리 -│ ├── hr.php # HR/인사 관리 -│ ├── finance.php # 재무/회계 -│ ├── sales.php # 영업/판매 -│ ├── inventory.php # 재고/품목 -│ ├── production.php # 생산 관리 -│ ├── design.php # 설계/모델 -│ ├── files.php # 파일 관리 -│ ├── boards.php # 게시판 -│ └── common.php # 공통 기능 -├── v2/ # v2 API (필요시 생성) -└── api.php # 라우트 로더 -``` - -### API 버전 관리 - -**ApiVersionMiddleware**가 버전 선택 및 폴백을 처리합니다: - -**버전 지정 방법:** -- `Accept-Version` 헤더 (권장) -- `X-API-Version` 헤더 -- `api_version` 쿼리 파라미터 -- 미지정 시 기본값: `v1` - -**폴백 동작:** -- v2 요청 시 해당 라우트가 v2에 없으면 v1으로 자동 폴백 -- 응답 헤더 `X-API-Version`에 실제 사용 버전 표시 - -### 기본 경로 그룹 - -```php -// routes/api.php - 라우트 로더 -Route::prefix('v1')->middleware(['auth.apikey'])->group(function () { - require __DIR__.'/api/v1/auth.php'; - require __DIR__.'/api/v1/admin.php'; - require __DIR__.'/api/v1/users.php'; - // ... 13개 도메인 파일 로드 -}); - -// v2 라우트 (존재하는 경우) -if (is_dir(__DIR__.'/api/v2')) { - Route::prefix('v2')->middleware(['auth.apikey'])->group(function () { - // v2 전용 라우트 - }); -} -``` - -## 공유 모델 구조 - -`shared/Models/` 디렉토리 구조: -- **Members/** - 사용자 및 테넌트 관리 -- **Products/** - 제품 카탈로그 및 BOM -- **Materials/** - 자재 사양 및 재고 -- **Orders/** - 주문 처리 워크플로우 -- **Tenants/** - 멀티테넌트 설정 -- **Commons/** - 공유 유틸리티 및 공통 데이터 - -## Docker 설정 - -**위치**: `docker/` 디렉토리 - -### 서비스 구성 - -**docker-compose.yml**에 정의된 주요 서비스: - -1. **nginx** - 리버스 프록시 서버 - - 포트: 80 - - 도메인: `api.sam.kr`, `mng.sam.kr`, `admin.sam.kr`, `dev.sam.kr` - - 보안 규칙 적용 (경로 탐색 공격 차단, User-Agent 필터링) - -2. **api** - Laravel 12 API 서버 - - 이미지: `php:8.4-fpm` - - PHP 확장: zip, mysqli, pdo, pdo_mysql, intl - - Supervisor로 nginx + php-fpm 동시 실행 - -3. **mng** - Laravel 12 관리자 패널 - - 이미지: `php:8.4-fpm` - - Pure Blade + Tailwind CSS - - Supervisor로 nginx + php-fpm 동시 실행 - -4. **react** - Next.js 15.5.7 프론트엔드 - - 이미지: `node:20-alpine` - - 포트: 3000 (내부) - - HMR 지원 (WebSocket) - -5. **mysql** - MySQL 8.0 데이터베이스 - - 포트: 3306 - - 데이터베이스: `samdb` - - 사용자: `samuser` / `sampass` - -6. **design** - 디자인 시스템 (Storybook) - - 포트: 6006 - -### 네트워크 구조 - -``` -samnet (bridge network) -├── nginx (리버스 프록시) -├── api (Laravel API) -├── mng (Laravel 관리자) -├── react (Next.js) -├── design (Storybook) -└── mysql (데이터베이스) -``` - -### 도메인 매핑 - -| 도메인 | 대상 서비스 | 포트 | 용도 | -|--------|-----------|------|------| -| `api.sam.kr` | api (Laravel) | 80 | REST API | -| `mng.sam.kr` | mng (Laravel) | 80 | 관리자 패널 | -| `admin.sam.kr` | mng (Laravel) | 80 | 관리자 패널 (별칭) | -| `dev.sam.kr` | react (Next.js) | 3000 | 프론트엔드 | - -### 주요 설정 파일 - -**nginx/nginx.conf** -- 리버스 프록시 설정 -- 보안 규칙 (경로 탐색, User-Agent 필터링) -- WebSocket 지원 (Next.js HMR) - -**api/Dockerfile, mng/Dockerfile** -- PHP 8.4-fpm 기반 -- Composer 2 포함 -- Supervisor 설정 - -**react/Dockerfile** -- Node.js 20 Alpine -- Next.js 15 개발 서버 - -**mysql/init.sql** -- 초기 데이터베이스 설정 - -## 저장소 구조 - -이 프로젝트는 **독립적인 Git 저장소들**로 구성됩니다: - -1. **api/** - REST API 저장소 -2. **mng/** - 관리자 패널 저장소 -3. **react/** - Next.js 프론트엔드 저장소 -4. **docs/** - 기술 문서 저장소 -5. **design/** - 디자인 시스템 저장소 -6. **planning/** - 기획 문서 저장소 - -각 저장소는 독립적으로 운영되며: -- 개별 Git 히스토리 및 브랜치 -- 독립적인 환경 설정 (`.env` 파일) -- 독립적인 의존성 및 빌드 프로세스 - -## 관련 문서 - -- [API 개발 규칙](./api_rules.md) -- [데이터베이스 스키마](./database_schema.md) -- [보안 가이드](./security.md) -- [Git 컨벤션](./git_conventions.md) - ---- - -**최종 업데이트**: 2025-12-26 (admin→mng 전환, Next.js 15.5.7, React 19.2.1 반영) \ No newline at end of file diff --git a/brochure/README.md b/brochure/README.md new file mode 100644 index 0000000..9fc78d2 --- /dev/null +++ b/brochure/README.md @@ -0,0 +1,370 @@ +# SAM 브로셔 버전 관리 + +> **작성일**: 2026-03-01 +> **상태**: 운영 중 + +--- + +## 1. 개요 + +SAM CEO Dashboard 및 ERP/MES 영업 브로셔의 버전별 디자인 변천을 기록한다. +모든 브로셔는 세로형(9:16) HTML로 작성하며, `pptx-skill`(html2pptx.js)로 PPTX 변환한다. + +--- + +## 2. 버전 요약 + +| 버전 | 대상 | 테마 | 배경색 | 주 액센트 | 비고 | +|------|------|------|--------|-----------|------| +| **v1** | 전체 고객 | 다크 | `#0F2439` | `#10B981` (에메랄드) | SAM ERP/MES 범용 | +| **v2** | 경영진 | 다크 | `#0B1929` | `#0EA5E9` (스카이블루) | CEO Dashboard 초판 | +| **v3** | 경영진 | 다크 | `#0B1929` | `#0EA5E9` (스카이블루) | v2 개선, Before/After 추가 | +| **v4** | 경영진 | 라이트 | `#F8FAFC` | `#0EA5E9` (스카이블루) | v3의 밝은 배경 변환 | +| **v5** | 경영진 | 프리미엄 그래디언트 | `#0F172A→#312E81` | `#FBBF24` (골드) | 글래스모피즘 + 골드 | +| **v6** | 경영진 | 코퍼레이트 블루 | `#FFFFFF` | `#2563EB` (블루) | 대기업/공공기관 스타일 | +| **v7** | 경영진 | 웜 그레이 + 틸 | `#FAFAF9` | `#0D9488` (틸) | IT/SaaS 스타일 | +| **v8** | 경영진 | 투톤 스플릿 | `#1E293B` / `#FFFFFF` | `#F97316` (오렌지) | 금융/컨설팅 스타일 | +| **v9** | 경영진 | 미니멀 화이트 | `#FFFFFF` | `#6366F1` (인디고) | Apple/디자인 에이전시 | + +--- + +## 3. 버전별 상세 + +### 3.1 v1 — SAM ERP/MES 범용 브로셔 + +**컨셉**: 중소 제조업 대상 SAM 플랫폼 전체 기능 소개 + +| 항목 | 값 | +|------|------| +| 배경 | `#0F2439` (네이비) | +| 주 액센트 | `#10B981` (에메랄드 그린) | +| 보조 액센트 | `#2E86AB`, `#8B5CF6`, `#E86F2C` | +| 카드 스타일 | 반투명 배경 + 컬러 보더 | +| BI 로고 | `sam_bi_white.png` | + +**앞면 구성**: +- 히어로: "중소 제조업을 위한 ERP/MES 통합 플랫폼" +- 고민 포인트: Excel 과의존, 실시간 가시성, 품질관리, 높은 ERP 비용 +- 효과 지표: 시간 절감 80%, 납기 준수 95%, 추적성 100%, 인사/회계 무료 +- 기술 태그: 클라우드, 모바일 대응, 멀티테넌트 + +**뒷면 구성**: +- 8대 핵심 모듈 (01~08 번호 뱃지): 품목/BOM, 견적/수주, 생산/MES, 출하, 품질, 자재, 인사/회계, 대시보드 +- 확장 기능: 전자서명, 알림톡, AI Lab, QR +- 가격표: 기본 2,000만원 + 월 50만원 +- 도입 프로세스: 인터뷰 → 개발 → 이관 → 교육 + +--- + +### 3.2 v2 — CEO Dashboard 초판 + +**컨셉**: 경영진 타겟, 대시보드 중심 소개. 문제→해결 스토리텔링 + +| 항목 | 값 | +|------|------| +| 배경 | `#0B1929` (짙은 네이비) | +| 주 액센트 | `#0EA5E9` (스카이블루) | +| 보조 액센트 | `#10B981`, `#8B5CF6`, `#F59E0B`, `#EF4444`, `#EC4899` | +| 카드 스타일 | 반투명 다크 카드 | +| BI 로고 | `sam_bi_white.png` | + +**앞면 구성**: +- 히어로: "대표님, 지금 우리 회사 어떻게 돌아가고 있나요?" +- 시간대별 고민: 오전 9시(매출 보고 대기), 오후 2시(수주 취합), 오후 5시(결재 서류) +- 대시보드 Mock UI: KPI 카드 4개 + 매출 추이 차트 + 조직 성과 바 차트 +- 약속 박스: "실시간 KPI 파악" + +**뒷면 구성**: +- 대시보드 7대 기능 (01~07 뱃지) +- 역할별 맞춤 화면: CEO, 관리자, 운영자, 영업자 +- SAM 플랫폼 연동: 견적/수주, 생산, 품질, 재고, 인사/회계 +- 가격표 + 도입 프로세스 + +**v1 대비 차이**: +- 타겟이 전체→경영진으로 좁혀짐 +- 타임라인 기반 문제 제시 (시간대별 고민) +- 대시보드 UI Mock 삽입 +- 역할별 화면 분리 소개 + +--- + +### 3.3 v3 — CEO Dashboard 개선판 (다크) + +**컨셉**: v2 기반 개선. Before/After 인포그래픽 추가, SVG 아이콘 강화 + +| 항목 | 값 | +|------|------| +| 배경 | `#0B1929` (짙은 네이비) | +| 주 액센트 | `#0EA5E9` (스카이블루) | +| 카드 스타일 | 반투명 다크 + 컬러 보더 | +| BI 로고 | `sam_bi_white.png` | + +**v2 대비 개선사항**: +- 1page 통합본 추가 +- Before/After 비교 인포그래픽 도입 +- 핵심 가치 3카드: 즉시 현황 파악, 데이터로 판단, 모바일 승인 +- SVG 인라인 아이콘 전면 적용 (외부 이미지 의존 제거) +- PPTX 텍스트 줄바꿈 방지 패턴 적용 (`white-space: nowrap`, 개별 `

` 분리) + +--- + +### 3.4 v4 — CEO Dashboard 라이트 버전 + +**컨셉**: v3와 동일 콘텐츠, 밝은 배경으로 색상 전환 + +| 항목 | 값 | +|------|------| +| 배경 | `#F8FAFC` (밝은 슬레이트) | +| 주 액센트 | `#0EA5E9` (스카이블루) | +| 제목 텍스트 | `#0F172A` | +| 본문 텍스트 | `#475569` | +| 보조 텍스트 | `#94A3B8` | +| 카드 스타일 | 화이트 + `box-shadow` + `#E2E8F0` 보더 | +| BI 로고 | `sam_bi_black.png` | + +**v3 → v4 색상 변환 규칙**: + +| 요소 | v3 (다크) | v4 (라이트) | +|------|-----------|------------| +| 배경 | `#0B1929` | `#F8FAFC` | +| 카드 | `#111D2E` 반투명 | `#FFFFFF` + shadow | +| 제목 | `#FFFFFF` | `#0F172A` | +| 본문 | `rgba(255,255,255,0.55)` | `#475569` | +| 보조 | `rgba(255,255,255,0.3)` | `#94A3B8` | +| 구분선 | `rgba(14,165,233,0.15)` | `#E2E8F0` | +| 기술 태그 | `rgba(255,255,255,0.03)` | `#F1F5F9` | +| 액센트 | 동일 유지 | 동일 유지 | + +--- + +### 3.5 v5 — Premium Executive Gradient + +**컨셉**: 고급 프리미엄 감성. 네이비→인디고 그래디언트 + 골드 액센트 + 글래스모피즘 + +| 항목 | 값 | +|------|------| +| 배경 | `#0F172A → #1E1B4B → #312E81` (175deg 그래디언트) | +| 주 액센트 | `#FBBF24` (골드/앰버) | +| 보조 액센트 | `#10B981`, `#8B5CF6`, `#EF4444`, `#F59E0B`, `#EC4899` | +| 카드 스타일 | 글래스모피즘 (`rgba(255,255,255,0.05)` + `rgba(255,255,255,0.1)` border) | +| BI 로고 | `sam_bi_white.png` | +| 뱃지 | "EXECUTIVE EDITION" 골드 뱃지 | + +**앞면 구성**: +- 히어로: "대표님의 시간은 보고를 기다리는 데 쓰여선 안 됩니다." +- 잃어버린 시간 카드: 1~2일(매출), 반나절(수주), 30분(결재) — 빨간 톤 +- 골드 전환 구분선: "SAM 도입 후" +- 대시보드 Mock: 골드 차트 라인, 글래스모피즘 카드 +- 약속 박스: 골드 테두리 + +**뒷면 구성**: +- 7대 기능 리스트 (글래스모피즘 카드) +- 역할별 맞춤 화면: CEO(골드), 관리자(그린), 운영자(앰버), 영업자(퍼플) +- 가격표: 골드 강조 +- 도입 프로세스: 골드 화살표 연결 + +**기술 특이사항**: +- body CSS gradient → PPTX 미지원 → Sharp로 PNG 사전 렌더링 +- HTML body는 `#1A1640`(단색 fallback), convert 스크립트에서 `slide.background`로 그래디언트 PNG 덮어쓰기 +- 구분선 gradient도 solid rgba로 변환 (PPTX 호환) + +--- + +### 3.6 v6 — Corporate Blue & White + +**컨셉**: 대기업/공공기관 프레젠테이션 스타일. 정돈된 블루 헤더 바 + 순백색 본문 + +| 항목 | 값 | +|------|------| +| 배경 | `#FFFFFF` (순백) | +| 헤더 바 | `#1E40AF` (로열 블루) | +| 주 액센트 | `#2563EB` (블루) | +| 보조 배경 | `#EFF6FF` (블루-50), `#DBEAFE` (블루-100) | +| 카드 스타일 | 화이트 + `#DBEAFE` 보더 | +| BI 로고 | `sam_bi_white.png` (헤더), `sam_bi_black.png` (본문) | + +**특징**: +- 풀 폭 블루 헤더 바에 흰색 BI 로고 + 뱃지 배치 +- 섹션 라벨은 블루-50 배경 + 로열블루 텍스트 뱃지 +- 대시보드 Mock UI: `#DBEAFE` 보더 카드 +- CTA: 블루 배경 풀 폭 바 + +--- + +### 3.7 v7 — Warm Gray + Teal + +**컨셉**: IT/SaaS 기업 스타일. 따뜻한 그레이 배경 + 틸(Teal) 액센트 + +| 항목 | 값 | +|------|------| +| 배경 | `#FAFAF9` (웜 그레이) | +| 주 액센트 | `#0D9488` (틸) | +| 보조 액센트 | `#10B981`, `#8B5CF6`, `#EF4444`, `#F59E0B`, `#EC4899` | +| 카드 스타일 | 화이트 + `#E7E5E4` 보더 + 미세 그림자 | +| 구분선 | `#D6D3D1` | +| BI 로고 | `sam_bi_black.png` | + +**특징**: +- 부드러운 웜 톤 배경으로 눈의 피로 감소 +- 틸 계열 SVG 아이콘 전면 적용 +- 가벼운 카드 스타일로 정보 구분 +- 타임라인 인포그래픽: 시간대별 고민 (9AM/2PM/5PM) + +--- + +### 3.8 v8 — Two-Tone Navy/White Split + +**컨셉**: 금융/컨설팅 프레젠테이션 스타일. 다크 상단 + 화이트 하단 투톤 분할 + +| 항목 | 값 | +|------|------| +| 상단 배경 | `#1E293B` (슬레이트-800) | +| 하단 배경 | `#FFFFFF` (순백) | +| 주 액센트 | `#F97316` (오렌지) | +| 보조 액센트 | `#FB923C` (오렌지-400) | +| 카드 (다크) | `rgba(255,255,255,0.08)` + `rgba(255,255,255,0.12)` 보더 | +| 카드 (라이트) | 화이트 + `#E2E8F0` 보더 + 컬러 좌측 보더 | +| BI 로고 | `sam_bi_white.png` (다크), `sam_bi_black.png` (라이트) | + +**특징**: +- 앞면 상단: 다크 존에 KPI 카드 + 히어로 메시지 +- 앞면 하단: 화이트 존에 가치 카드 + 기능 그리드 +- 기능 카드에 컬러 좌측 보더 포인트 (오렌지/그린/퍼플/레드) +- 다크 CTA 박스: 하단 풀 폭 다크 배경 + 오렌지 액센트 + +--- + +### 3.9 v9 — Minimal White + Indigo + +**컨셉**: Apple/디자인 에이전시 스타일. 극도의 미니멀리즘 + 인디고 수직 액센트 라인 + +| 항목 | 값 | +|------|------| +| 배경 | `#FFFFFF` (순백) | +| 주 액센트 | `#6366F1` (인디고) | +| 카드 배경 | `#F8FAFC` (거의 투명한 그레이) | +| 카드 보더 | `#F1F5F9` | +| 본문 텍스트 | `#334155` (슬레이트-700) | +| 보조 텍스트 | `#94A3B8` | +| BI 로고 | `sam_bi_black.png` | + +**특징**: +- 좌측 3pt 인디고 수직 액센트 라인 (풀 하이트) +- 타이포그래피 중심 레이아웃 (아이콘 최소화) +- 거의 보이지 않는 카드 구분 (barely-there cards) +- 기능은 텍스트 로우 형태 (인디고 불릿 도트만) +- 가격/프로세스도 텍스트 기반 미니멀 표현 + +--- + +## 4. 폴더 구조 + +``` +docs/brochure/ +├── README.md ← 이 파일 +├── v1/ +│ ├── slides/ +│ │ ├── brochure-2page-front.html +│ │ ├── brochure-2page-back.html +│ │ └── brochure-1page.html +│ ├── convert-1page.cjs +│ ├── convert-2page.cjs +│ ├── sam-brochure-1page.pptx +│ └── sam-brochure-2page.pptx +├── v2/ +│ ├── slides/ +│ │ ├── brochure-dashboard-front.html +│ │ ├── brochure-dashboard-back.html +│ │ └── brochure-dashboard-1page.html +│ ├── convert-1page.cjs +│ ├── convert-2page.cjs +│ ├── sam-brochure-v2-dashboard-1page.pptx +│ └── sam-brochure-v2-dashboard-2page.pptx +├── v3/ +│ ├── slides/ +│ │ ├── brochure-dashboard-front.html +│ │ ├── brochure-dashboard-back.html +│ │ └── brochure-dashboard-1page.html +│ ├── convert-1page.cjs +│ ├── convert-2page.cjs +│ ├── sam-brochure-v3-dashboard-1page.pptx +│ └── sam-brochure-v3-dashboard-2page.pptx +├── v4/ +│ ├── slides/ +│ │ ├── brochure-dashboard-front.html +│ │ ├── brochure-dashboard-back.html +│ │ └── brochure-dashboard-1page.html +│ ├── convert-1page.cjs +│ ├── convert-2page.cjs +│ ├── sam-brochure-v4-dashboard-1page.pptx +│ └── sam-brochure-v4-dashboard-2page.pptx +├── v5/ +│ ├── slides/ +│ │ ├── brochure-dashboard-front.html +│ │ ├── brochure-dashboard-back.html +│ │ └── brochure-dashboard-1page.html +│ ├── convert-1page.cjs ← Sharp 그래디언트 배경 생성 포함 +│ ├── convert-2page.cjs ← Sharp 그래디언트 배경 생성 포함 +│ ├── sam-brochure-v5-dashboard-1page.pptx +│ └── sam-brochure-v5-dashboard-2page.pptx +├── v6/ ← Corporate Blue & White +│ ├── slides/ (front, back, 1page) +│ ├── convert-1page.cjs +│ ├── convert-2page.cjs +│ ├── sam-brochure-v6-dashboard-1page.pptx +│ └── sam-brochure-v6-dashboard-2page.pptx +├── v7/ ← Warm Gray + Teal +│ ├── slides/ (front, back, 1page) +│ ├── convert-1page.cjs +│ ├── convert-2page.cjs +│ ├── sam-brochure-v7-dashboard-1page.pptx +│ └── sam-brochure-v7-dashboard-2page.pptx +├── v8/ ← Two-Tone Navy/White Split +│ ├── slides/ (front, back, 1page) +│ ├── convert-1page.cjs +│ ├── convert-2page.cjs +│ ├── sam-brochure-v8-dashboard-1page.pptx +│ └── sam-brochure-v8-dashboard-2page.pptx +└── v9/ ← Minimal White + Indigo + ├── slides/ (front, back, 1page) + ├── convert-1page.cjs + ├── convert-2page.cjs + ├── sam-brochure-v9-dashboard-1page.pptx + └── sam-brochure-v9-dashboard-2page.pptx +``` + +--- + +## 5. PPTX 변환 방법 + +```bash +# 각 버전 폴더에서 실행 +cd docs/brochure/v5 +node convert-1page.cjs # 1페이지 통합본 +node convert-2page.cjs # 앞면+뒷면 2페이지 +``` + +--- + +## 6. PPTX 변환 시 주의사항 + +### 6.1 텍스트 줄바꿈 방지 + +- 단일행 `

` 태그에 `white-space: nowrap` 필수 +- `
` 멀티라인 `

`는 개별 `

` 태그로 분리 +- `` 포함 텍스트도 개별 `

` 처리 (PPTX 폰트 폭 차이 보정) + +### 6.2 CSS gradient 미지원 + +- html2pptx.js는 CSS `linear-gradient`를 지원하지 않음 +- body gradient → Sharp로 PNG 사전 렌더링 후 `slide.background`에 설정 +- 구분선 gradient → solid `rgba()` 색상으로 변환 + +### 6.3 SVG 처리 + +- 인라인 SVG는 html2pptx가 자동으로 PNG 래스터화 +- SVG 내부 fill 색상은 배경에 맞게 조정 필요 + +--- + +**최종 업데이트**: 2026-03-01 (v6~v9 추가) diff --git a/brochure/v1/convert-1page.cjs b/brochure/v1/convert-1page.cjs new file mode 100644 index 0000000..5252ffa --- /dev/null +++ b/brochure/v1/convert-1page.cjs @@ -0,0 +1,28 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + // 9:16 세로형 (Portrait) + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const htmlFile = path.join(__dirname, 'slides', 'brochure-1page.html'); + console.log('Converting 1-page brochure...'); + + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error: ${err.message}`); + } + + const outputPath = path.join(__dirname, 'sam-brochure-1page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v1/convert-2page.cjs b/brochure/v1/convert-2page.cjs new file mode 100644 index 0000000..d3590f5 --- /dev/null +++ b/brochure/v1/convert-2page.cjs @@ -0,0 +1,32 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + // 9:16 세로형 (Portrait) + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const slidesDir = path.join(__dirname, 'slides'); + const slides = ['brochure-2page-front.html', 'brochure-2page-back.html']; + + for (const file of slides) { + const htmlFile = path.join(slidesDir, file); + console.log(`Converting ${file} ...`); + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error on ${file}: ${err.message}`); + } + } + + const outputPath = path.join(__dirname, 'sam-brochure-2page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v1/sam-brochure-1page.pptx b/brochure/v1/sam-brochure-1page.pptx new file mode 100644 index 0000000..af863d1 Binary files /dev/null and b/brochure/v1/sam-brochure-1page.pptx differ diff --git a/brochure/v1/sam-brochure-2page.pptx b/brochure/v1/sam-brochure-2page.pptx new file mode 100644 index 0000000..26a7357 Binary files /dev/null and b/brochure/v1/sam-brochure-2page.pptx differ diff --git a/brochure/v1/slides/brochure-1page.html b/brochure/v1/slides/brochure-1page.html new file mode 100644 index 0000000..6e54695 --- /dev/null +++ b/brochure/v1/slides/brochure-1page.html @@ -0,0 +1,208 @@ + + + + + + + + +

+ +
+

PRODUCT BROCHURE 2026

+
+ + +
+

SMART AUTOMATION MANAGEMENT

+

중소 제조업을 위한
ERP/MES 통합 플랫폼

+

품목관리, 견적, 수주, 생산, 출하, 품질, 인사/회계까지
제조업의 모든 업무를 하나의 시스템으로 통합합니다.

+
+ + +
+ + +
+

현재 업무 과제

+
+
+

Excel 수작업

+

오류 잦음, 시간 낭비

+
+
+

현황 파악 불가

+

생산/재고 실시간 X

+
+
+

ERP 도입비 부담

+

수천만~수억원

+
+
+
+ + +
+

SAM 핵심 기능

+
+ +
+
+
+
+

01

+
+

견적/수주 자동화

+
+

BOM 전개, 단가 적용, PDF 견적서 자동 생성

+
+
+
+
+

02

+
+

생산관리 (MES)

+
+

바코드/QR 공정추적, 실시간 현황 대시보드

+
+
+ +
+
+
+
+

03

+
+

품질/검사 관리

+
+

수입/공정/출하 3단계 검사, 인증 자동 알림

+
+
+
+
+

04

+
+

자재/재고 추적

+
+

안전재고, LOT 추적, 바코드 입출고 관리

+
+
+ +
+
+
+
+

05

+
+

인사/회계 (무료)

+
+

근태, 급여, 매입매출, 세금계산서 자동 발행

+
+
+
+
+

06

+
+

경영 대시보드

+
+

수주/생산/매출/품질 KPI 실시간 모니터링

+
+
+
+
+ + +
+
+

전자서명

+
+
+

카카오 알림톡

+
+
+

AI 실험실

+
+
+

바로빌 연동

+
+
+ + +
+ + +
+ +
+

도입 기대 효과

+
+
+
+

80%

+

업무 시간 단축

+
+
+

95%

+

납기 준수율

+
+
+
+
+

100%

+

이력 추적성

+
+
+

Free

+

인사/회계 포함

+
+
+
+
+ +
+

투자 비용

+
+

제조업 기본 패키지

+

2,000만원

+

+ 월 50만원 (유지보수)

+
+

품목-견적-수주-생산-출하
인사/회계 무료 포함

+
+
+
+ + +
+
+

클라우드 기반 (설치 불필요)

+
+
+

모바일 대응

+
+
+

Multi-tenant

+
+
+ + +
+
+
+

SAM

+

www.sam.it.kr

+
+
+
+
+
+ + \ No newline at end of file diff --git a/brochure/v1/slides/brochure-2page-back.html b/brochure/v1/slides/brochure-2page-back.html new file mode 100644 index 0000000..fbd68ab --- /dev/null +++ b/brochure/v1/slides/brochure-2page-back.html @@ -0,0 +1,225 @@ + + + + + + + + +
+ +
+

FEATURES & PRICING

+
+ + +
+

SAM 핵심 모듈

+
+ +
+
+

01

+
+

품목/BOM 관리

+

품목 마스터, 다단계 BOM 전개, 단가 관리

+
+ +
+
+

02

+
+

견적/수주 자동화

+

견적서 자동 생성, 수주 전환, PDF 출력

+
+ +
+
+

03

+
+

생산관리 (MES)

+

작업지시, 바코드/QR 공정추적, 실시간 현황

+
+ +
+
+

04

+
+

출하/물류 관리

+

출하 지시, 거래명세서, 배송 추적

+
+ +
+
+

05

+
+

품질/검사 관리

+

수입/공정/출하 검사, 인증 만료 자동 알림

+
+ +
+
+

06

+
+

자재/재고 관리

+

안전재고, 입출고, LOT 추적, 바코드 관리

+
+ +
+
+

07

+
+

인사/회계 (무료)

+

근태, 급여, 매입매출, 세금계산서 자동 발행

+
+ +
+
+

08

+
+

경영 대시보드

+

수주/생산/매출/품질 KPI 실시간 모니터링

+
+
+
+ + +
+ + +
+

확장 기능

+
+
+

전자서명

+

계약/확인서

+
+
+

알림톡

+

카카오 자동발송

+
+
+

AI 실험실

+

음성요약/문서분류

+
+
+

QR 코드

+

설비/장비 점검

+
+
+
+ + +
+ + +
+

투자 비용

+
+ +
+
+

제조업 기본 패키지

+

2,000만원

+

+ 월 50만원 (유지보수)

+
+
+

품목 - 견적 - 수주 - 생산 - 출하
인사/회계 무료 포함

+
+
+ +
+
+

추가 옵션 (선택)

+
+
+

생산공정 추가

+

+500만원

+
+
+

품질관리(인정검사)

+

+2,000만원

+
+
+

사진등록/챗봇/녹음

+

월 10~20만원

+
+
+
+
+
+
+ + +
+ + +
+

도입 프로세스

+
+
+

Step 1

+

1~2주

+

현장 인터뷰

+
+
+

Step 2

+

2~4주

+

맞춤 개발

+
+
+

Step 3

+

1~2주

+

데이터 이관

+
+
+

Step 4

+

1~2주

+

교육/안정화

+
+
+
+ + +
+
+

바로빌 API

+

세금계산서 자동

+
+
+

카카오 알림톡

+

점검/납기 알림

+
+
+

이카운트 연동

+

기존 ERP 동기화

+
+
+ + +
+
+
+

귀사에 최적화된 맞춤 데모를 제공합니다

+
+
+

www.sam.it.kr

+
+
+
+ + +
+

SAM — Smart Automation Management

+
+ + \ No newline at end of file diff --git a/brochure/v1/slides/brochure-2page-front.html b/brochure/v1/slides/brochure-2page-front.html new file mode 100644 index 0000000..ae770d9 --- /dev/null +++ b/brochure/v1/slides/brochure-2page-front.html @@ -0,0 +1,122 @@ + + + + + + + + +
+ +
+

PRODUCT BROCHURE 2026

+
+ + +
+

SMART AUTOMATION MANAGEMENT

+

중소 제조업을 위한
ERP/MES 통합 플랫폼

+

품목관리, 견적, 수주, 생산, 출하, 품질, 인사/회계까지
제조업의 모든 업무를 하나의 시스템으로 통합합니다.

+
+ + +
+ + +
+

이런 고민이 있으신가요?

+
+
+
+

Excel 견적서, 수기 전표로 업무 시간 낭비가 심하다

+
+
+
+

생산 현황을 실시간으로 파악할 수 없다

+
+
+
+

품질/검사 기록이 체계적으로 관리되지 않는다

+
+
+
+

ERP 도입비가 수천만원~수억원으로 부담된다

+
+
+
+ + +
+

SAM이 해결합니다

+

+ SAM은 중소 제조업에 특화된 클라우드 ERP/MES 통합 플랫폼입니다. + 품목/BOM 관리, 견적 자동화, 바코드 생산추적, 품질검사, 인사/회계까지 + 별도 설치 없이 웹 브라우저만으로 모든 업무를 통합 관리합니다. +

+
+ + +
+ + +
+

도입 기대 효과

+
+
+

80%

+

업무 시간 단축

+
+
+

95%

+

납기 준수율

+
+
+

100%

+

이력 추적성

+
+
+

Free

+

인사/회계 포함

+
+
+
+ + +
+
+

클라우드 기반

+

설치 불필요

+
+
+

모바일 대응

+

현장 태블릿/폰

+
+
+

Multi-tenant

+

데이터 완전 격리

+
+
+ + +
+
+
+

SAM

+

www.sam.it.kr

+
+
+

뒷면에서 상세 기능과 가격을 확인하세요

+
+
+
+ + \ No newline at end of file diff --git a/brochure/v2/convert-1page.cjs b/brochure/v2/convert-1page.cjs new file mode 100644 index 0000000..d11c9ee --- /dev/null +++ b/brochure/v2/convert-1page.cjs @@ -0,0 +1,28 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + // 9:16 세로형 (Portrait) + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const htmlFile = path.join(__dirname, 'slides', 'brochure-dashboard-1page.html'); + console.log('Converting CEO Dashboard 1-page brochure...'); + + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error: ${err.message}`); + } + + const outputPath = path.join(__dirname, 'sam-brochure-v2-dashboard-1page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v2/convert-2page.cjs b/brochure/v2/convert-2page.cjs new file mode 100644 index 0000000..7d4aed0 --- /dev/null +++ b/brochure/v2/convert-2page.cjs @@ -0,0 +1,32 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + // 9:16 세로형 (Portrait) + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const slidesDir = path.join(__dirname, 'slides'); + const slides = ['brochure-dashboard-front.html', 'brochure-dashboard-back.html']; + + for (const file of slides) { + const htmlFile = path.join(slidesDir, file); + console.log(`Converting ${file} ...`); + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error on ${file}: ${err.message}`); + } + } + + const outputPath = path.join(__dirname, 'sam-brochure-v2-dashboard-2page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v2/sam-brochure-v2-dashboard-1page.pptx b/brochure/v2/sam-brochure-v2-dashboard-1page.pptx new file mode 100644 index 0000000..929effc Binary files /dev/null and b/brochure/v2/sam-brochure-v2-dashboard-1page.pptx differ diff --git a/brochure/v2/sam-brochure-v2-dashboard-2page.pptx b/brochure/v2/sam-brochure-v2-dashboard-2page.pptx new file mode 100644 index 0000000..dd6039a Binary files /dev/null and b/brochure/v2/sam-brochure-v2-dashboard-2page.pptx differ diff --git a/brochure/v2/slides/brochure-dashboard-1page.html b/brochure/v2/slides/brochure-dashboard-1page.html new file mode 100644 index 0000000..8e1c3cb --- /dev/null +++ b/brochure/v2/slides/brochure-dashboard-1page.html @@ -0,0 +1,259 @@ + + + + + + + + +
+ +
+

CEO DASHBOARD EDITION 2026

+
+ + +
+

EXECUTIVE DASHBOARD

+

대표님, 지금 우리 회사
어떻게 돌아가고 있나요?

+

보고를 기다리지 마세요. SAM 대시보드 하나면
매출, 수주, 조직 실적, 승인 대기까지 한눈에 파악합니다.

+
+ + +
+ + +
+ +
+
+
+
+

SAM CEO Dashboard

+
+ +
+
+

월 매출

+

5.2억

+

+15.3%

+
+
+

수주 잔량

+

127건

+

+8건

+
+
+

납기 준수율

+

96%

+

목표 초과

+
+
+

승인 대기

+

5건

+

즉시 처리

+
+
+ +
+ +
+

월별 매출 추이

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+

조직별 실적

+
+
+
+

영업1팀

+
+
+
+
+
+
+

영업2팀

+
+
+
+
+
+
+

생산팀

+
+
+
+
+
+
+

품질팀

+
+
+
+
+
+
+
+
+ + +
+

대표님이 얻는 것

+
+
+
+
+

1

+
+

즉시 현황 파악

+
+

보고를 기다릴 필요 없이
로그인만으로 전사 현황 확인

+
+
+
+
+

2

+
+

데이터 기반 의사결정

+
+

감이 아닌 숫자로 판단
매출 추이, KPI, 팀 성과 비교

+
+
+
+
+

3

+
+

빠른 승인/결재

+
+

대기 건수를 실시간 알림
모바일에서도 즉시 승인 처리

+
+
+
+ + +
+ + +
+

대시보드 핵심 기능

+
+
+
+
+

실시간 매출/수주 KPI

+
+
+
+

조직 계층별 실적 트리

+
+
+
+
+
+

역할별 수당 현황

+
+
+
+

미승인 건수 실시간 알림

+
+
+
+
+
+

기간별 트렌드 분석

+
+
+
+

수익 시뮬레이터

+
+
+
+
+ + +
+ + +
+ +
+

BEFORE

+
+
+

"매출 얼마야?" → 보고 대기 1~2일

+

"수주 현황?" → Excel 취합 반나절

+

"승인할 것 있어?" → 서류 뒤지기

+

"팀별 실적?" → 각 팀장 개별 보고

+
+
+
+ +
+

AFTER (SAM)

+
+
+

로그인 → 3초만에 전사 현황

+

클릭 한 번 → 실시간 수주 데이터

+

빨간 뱃지 → 즉시 승인 처리

+

트리 구조 → 전 조직 실적 한눈에

+
+
+
+
+ + +
+
+

PC + 모바일

+
+
+

실시간 업데이트

+
+
+

역할별 권한

+
+
+

클라우드 기반

+
+
+

데이터 암호화

+
+
+ + +
+
+
+

SAM

+

www.sam.it.kr

+
+
+
+
+
+ + \ No newline at end of file diff --git a/brochure/v2/slides/brochure-dashboard-back.html b/brochure/v2/slides/brochure-dashboard-back.html new file mode 100644 index 0000000..2f446f0 --- /dev/null +++ b/brochure/v2/slides/brochure-dashboard-back.html @@ -0,0 +1,240 @@ + + + + + + + + +
+ +
+

DASHBOARD FEATURES & PRICING

+
+ + +
+

대시보드 핵심 기능

+
+ +
+
+

01

+
+

실시간 KPI 카드

+

월 매출, 수주 잔량, 납기 준수율, 승인 대기 한눈에

+
+ +
+
+

02

+
+

조직 실적 트리

+

계층 구조로 각 팀/개인 실적 펼쳐보기

+
+ +
+
+

03

+
+

역할별 수당 현황

+

판매자/관리자/협업자 수당 배분 실시간 확인

+
+ +
+
+

04

+
+

승인 대기 알림

+

가입/지급 승인 미처리 건수 빨간 뱃지로 강조

+
+ +
+
+

05

+
+

기간별 트렌드

+

당월/분기/연간 매출 추이 차트, 성장률 비교

+
+ +
+
+

06

+
+

수익 시뮬레이터

+

가상 시나리오로 수당/마진 사전 계산

+
+ +
+
+

07

+
+

모바일 대응

+

이동중에도 스마트폰으로 KPI 확인 및 승인

+
+
+
+ + +
+ + +
+

역할별 맞춤 화면

+
+
+

CEO

+

전사 KPI

+

매출/수주/조직 총괄

+
+
+

관리자

+

팀 실적 관리

+

하위 조직 성과 추적

+
+
+

운영자

+

인력/승인 관리

+

가입/지급 승인 처리

+
+
+

영업자

+

내 실적 조회

+

계약/수당 현황 확인

+
+
+
+ + +
+ + +
+

대시보드 + SAM 통합 플랫폼

+
+
+

견적/수주

+
+
+

생산 (MES)

+
+
+

품질/검사

+
+
+

재고/자재

+
+
+

인사/회계

+
+
+

대시보드에 표시되는 모든 데이터는 SAM ERP/MES 실시간 데이터 기반

+
+ + +
+ + +
+

투자 비용

+
+ +
+
+

대시보드 포함 기본 패키지

+

2,000만원

+

+ 월 50만원 (유지보수)

+
+
+

CEO 대시보드 + 견적/수주 + 생산
인사/회계 무료 포함

+
+
+ +
+
+

추가 옵션 (선택)

+
+
+

생산공정 관리

+

+500만원

+
+
+

품질관리(인정검사)

+

+2,000만원

+
+
+

AI 견적 자동 생성

+

월 10~20만원

+
+
+
+
+
+
+ + +
+ + +
+

도입 프로세스

+
+
+

1

+

1~2주

+

현장 인터뷰

+
+
+

+
+
+

2

+

2~4주

+

맞춤 개발

+
+
+

+
+
+

3

+

1~2주

+

데이터 이관

+
+
+

+
+
+

4

+

1~2주

+

교육/안정화

+
+
+
+ + +
+
+
+

대표님 전용 대시보드를 직접 체험해 보세요

+
+
+

www.sam.it.kr

+
+
+
+ + +
+

SAM — Smart Automation Management

+
+ + \ No newline at end of file diff --git a/brochure/v2/slides/brochure-dashboard-front.html b/brochure/v2/slides/brochure-dashboard-front.html new file mode 100644 index 0000000..ac67529 --- /dev/null +++ b/brochure/v2/slides/brochure-dashboard-front.html @@ -0,0 +1,172 @@ + + + + + + + + +
+ +
+

CEO DASHBOARD EDITION

+
+ + +
+

EXECUTIVE DASHBOARD

+

대표님, 지금 우리 회사
어떻게 돌아가고 있나요?

+

매출이 얼마인지, 수주가 밀려있는지, 승인할 건이 있는지
더 이상 보고를 기다리지 마세요.

+
+ + +
+ + +
+

대표님의 하루

+
+
+

AM 9:00

+

"어제 매출 얼마야?" → 팀장 보고 대기중...

+
+
+

PM 2:00

+

"수주 밀린 거 없어?" → Excel 취합중...

+
+
+

PM 5:00

+

"결재할 것 좀 정리해줘" → 서류 찾는중...

+
+
+
+ + +
+

+

SAM으로 바꾸면

+
+ + +
+ +
+
+
+
+

SAM CEO Dashboard ― 로그인 후 3초

+
+ +
+
+

월 매출

+

5.2억

+

▲ 15.3%

+
+
+

누적 수주

+

127건

+

▲ 8건

+
+
+

납기 준수율

+

96%

+

목표 달성

+
+
+

승인 대기

+

5건

+

즉시 처리

+
+
+ +
+
+

월별 매출 추이

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

조직별 실적

+
+
+
+

영업1팀

+
+
+
+
+
+
+

영업2팀

+
+
+
+
+
+
+

생산팀

+
+
+
+
+
+
+
+
+ + +
+

SAM 대시보드가 드리는 약속

+

+ 로그인 한 번이면 전사 매출, 수주, 조직 실적, 승인 대기 건수를 + 한눈에 파악합니다. 보고를 기다리는 시간을 제로로 만들어 드립니다. +

+
+ + +
+
+

클라우드 기반 (설치 불필요)

+
+
+

모바일 대응

+
+
+

역할별 권한 분리

+
+
+ + +
+
+
+

SAM

+

www.sam.it.kr

+
+
+

뒷면에서 상세 기능을 확인하세요

+
+
+
+ + \ No newline at end of file diff --git a/brochure/v3/convert-1page.cjs b/brochure/v3/convert-1page.cjs new file mode 100644 index 0000000..38f401a --- /dev/null +++ b/brochure/v3/convert-1page.cjs @@ -0,0 +1,27 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const htmlFile = path.join(__dirname, 'slides', 'brochure-dashboard-1page.html'); + console.log('Converting CEO Dashboard v3 1-page brochure...'); + + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error: ${err.message}`); + } + + const outputPath = path.join(__dirname, 'sam-brochure-v3-dashboard-1page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v3/convert-2page.cjs b/brochure/v3/convert-2page.cjs new file mode 100644 index 0000000..ee5132c --- /dev/null +++ b/brochure/v3/convert-2page.cjs @@ -0,0 +1,31 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const slidesDir = path.join(__dirname, 'slides'); + const slides = ['brochure-dashboard-front.html', 'brochure-dashboard-back.html']; + + for (const file of slides) { + const htmlFile = path.join(slidesDir, file); + console.log(`Converting ${file} ...`); + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error on ${file}: ${err.message}`); + } + } + + const outputPath = path.join(__dirname, 'sam-brochure-v3-dashboard-2page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v3/sam-brochure-v3-dashboard-1page.pptx b/brochure/v3/sam-brochure-v3-dashboard-1page.pptx new file mode 100644 index 0000000..307d933 Binary files /dev/null and b/brochure/v3/sam-brochure-v3-dashboard-1page.pptx differ diff --git a/brochure/v3/sam-brochure-v3-dashboard-2page.pptx b/brochure/v3/sam-brochure-v3-dashboard-2page.pptx new file mode 100644 index 0000000..0a97e40 Binary files /dev/null and b/brochure/v3/sam-brochure-v3-dashboard-2page.pptx differ diff --git a/brochure/v3/slides/brochure-dashboard-1page.html b/brochure/v3/slides/brochure-dashboard-1page.html new file mode 100644 index 0000000..f6316e2 --- /dev/null +++ b/brochure/v3/slides/brochure-dashboard-1page.html @@ -0,0 +1,403 @@ + + + + + + + + +
+ +
+

CEO DASHBOARD v3

+
+ + +
+
+

EXECUTIVE DASHBOARD

+

대표님, 우리 회사
지금 어떤 상태인가요?

+

보고 대기 없이, 로그인 한 번이면
전사 현황이 한눈에 들어옵니다.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + +
+ +
+
+
+
+

SAM CEO Dashboard

+
+ +
+ +
+ + + + + + +

5.2억

+

▲ 15.3%

+

월 매출

+
+ +
+ + + + +

127건

+

▲ 8건

+

수주 잔량

+
+ +
+ + + + 96 + +

96%

+

목표 달성

+

납기 준수율

+
+ +
+ + + + + +

5건

+

즉시 처리

+

승인 대기

+
+
+ +
+ +
+

월별 매출 추이

+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + +
+
+
+

영업1팀 38%

+
+
+
+

영업2팀 25%

+
+
+
+

생산팀 22%

+
+
+
+

품질팀 15%

+
+
+
+
+
+ + +
+

대표님이 얻는 것

+
+ +
+ + + + + + + +

즉시 현황 파악

+

로그인 3초면
전사 현황 확인

+
+ +
+ + + + + + + + + + + + +

데이터로 판단

+

감이 아닌 숫자로
KPI/팀 성과 비교

+
+ +
+ + + + + + + + +

모바일 승인

+

이동중에도 즉시
결재/승인 처리

+
+
+
+ + +
+ + +
+

대시보드 핵심 기능

+
+
+ +
+ + + + + +

실시간 매출/수주 KPI

+
+ +
+ + + + + + + + + + + +

조직 계층별 실적 트리

+
+
+
+ +
+ + + + +

역할별 수당 현황

+
+ +
+ + + + 5 + + +

미승인 실시간 알림

+
+
+
+ +
+ + + + +

기간별 트렌드 분석

+
+ +
+ + + + + + + + +

수익 시뮬레이터

+
+
+
+
+ + +
+ + +
+ +
+
+ + + + + +

BEFORE

+
+

매출? → 보고 대기 1~2일

+

수주? → Excel 취합 반나절

+

승인? → 서류 찾기 30분

+

실적? → 각 팀장 개별 보고

+
+ +
+ + + + +
+ +
+
+ + + + +

AFTER (SAM)

+
+

로그인 → 3초 전사 현황

+

클릭 → 실시간 수주 데이터

+

뱃지 → 즉시 승인 처리

+

트리 → 전 조직 한눈에

+
+
+ + +
+
+ + + + +

실시간 업데이트

+
+
+ + + + +

PC + 모바일

+
+
+ + + + + +

역할별 권한

+
+
+ + + + + +

데이터 암호화

+
+
+ + + + + +

클라우드

+
+
+ + +
+
+
+

SAM

+

www.sam.it.kr

+
+
+
+
+
+ + \ No newline at end of file diff --git a/brochure/v3/slides/brochure-dashboard-back.html b/brochure/v3/slides/brochure-dashboard-back.html new file mode 100644 index 0000000..95eb751 --- /dev/null +++ b/brochure/v3/slides/brochure-dashboard-back.html @@ -0,0 +1,371 @@ + + + + + + + + +
+ +
+

FEATURES & PRICING

+
+ + +
+

대시보드 핵심 기능

+
+ +
+ + + + + +
+

실시간 KPI 카드

+
+

매출, 수주, 납기율, 승인 대기

+
+ +
+ + + + + + + + + + + + + + + +
+

조직 실적 트리

+
+

계층별 팀/개인 실적 펼쳐보기

+
+ +
+ + + + +
+

역할별 수당 현황

+
+

판매자/관리자/협업자 배분 확인

+
+ +
+ + + + ! + + +
+

승인 대기 알림

+
+

가입/지급 미처리 빨간 뱃지

+
+ +
+ + + + +
+

기간별 트렌드

+
+

당월/분기/연간 추이 차트

+
+ +
+ + + + + + + + +
+

수익 시뮬레이터

+
+

가상 시나리오 수당/마진 계산

+
+ +
+ + + + + + + + +
+

모바일 대응

+
+

스마트폰으로 KPI 확인/승인

+
+
+
+ + +
+ + +
+

역할별 맞춤 화면

+
+ +
+ + + + + +

CEO

+

전사 KPI 총괄

+
+ +
+ + + + + + +

관리자

+

팀 실적 관리

+
+ +
+ + + + + + + + +

운영자

+

인력/승인 관리

+
+ +
+ + + + + + + +

영업자

+

내 실적 조회

+
+
+
+ + +
+ + +
+

대시보드 + SAM ERP/MES 통합

+
+
+ + + + + + +

견적/수주

+
+
+ + + + + + +

생산 MES

+
+
+ + + + + +

품질/검사

+
+
+ + + + + +

재고/자재

+
+
+ + + + +

인사/회계

+
+
+

대시보드의 모든 데이터는 SAM ERP/MES 실시간 데이터 기반

+
+ + +
+ + +
+

투자 비용

+
+ +
+
+
+ + + + +

대시보드 포함 기본 패키지

+
+

2,000만원

+

+ 월 50만원 (유지보수)

+
+
+

CEO 대시보드 + 견적/수주 + 생산
인사/회계 무료 포함

+
+
+ +
+
+
+ + + + + +

추가 옵션 (선택)

+
+
+
+

생산공정 관리

+

+500만원

+
+
+

품질관리(인정검사)

+

+2,000만원

+
+
+

AI 견적 자동 생성

+

월 10~20만원

+
+
+
+
+
+
+ + +
+ + +
+

도입 프로세스

+
+
+ + + + + +

1~2주

+

현장 인터뷰

+
+ + + +
+ + + + + + + +

2~4주

+

맞춤 개발

+
+ + + +
+ + + + + +

1~2주

+

데이터 이관

+
+ + + +
+ + + + +

1~2주

+

교육/안정화

+
+
+
+ + +
+
+
+ + + + +
+

대표님 전용 대시보드를 직접 체험

+
+
+
+

www.sam.it.kr

+
+
+
+ + +
+

SAM — Smart Automation Management

+
+ + \ No newline at end of file diff --git a/brochure/v3/slides/brochure-dashboard-front.html b/brochure/v3/slides/brochure-dashboard-front.html new file mode 100644 index 0000000..5223cb5 --- /dev/null +++ b/brochure/v3/slides/brochure-dashboard-front.html @@ -0,0 +1,262 @@ + + + + + + + + +
+ +
+

CEO DASHBOARD v3

+
+ + +
+
+

EXECUTIVE DASHBOARD

+

대표님, 우리 회사
지금 어떤 상태인가요?

+

매출, 수주, 조직 실적, 승인 대기
더 이상 보고를 기다리지 마세요.

+
+ +
+ + + + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + +
+
+ + +
+ + +
+

대표님의 하루

+
+ +
+ + + + + 9AM + +
+

"어제 매출 얼마야?" → 팀장 보고 대기중...

+
+
+ +
+ + + + + 2PM + +
+

"수주 밀린 거 없어?" → Excel 취합중...

+
+
+ +
+ + + + + 5PM + +
+

"결재할 것 정리해줘" → 서류 찾는중...

+
+
+
+
+ + +
+ + + +

SAM 도입 후

+
+ + +
+ +
+
+
+
+

SAM CEO Dashboard ― 로그인 후 3초

+
+ +
+
+ + + + + +

5.2억

+

▲ 15.3%

+

월 매출

+
+
+ + + + +

127건

+

▲ 8건

+

누적 수주

+
+
+ + + + +

96%

+

목표 달성

+

납기 준수율

+
+
+ + + + + +

5건

+

즉시 처리

+

승인 대기

+
+
+ +
+
+

월별 매출 추이

+ + + + + + + + + + + + + +
+
+ + + + + + + +
+
+
+

영업1팀

+
+
+
+

영업2팀

+
+
+
+

생산팀

+
+
+
+

품질팀

+
+
+
+
+
+ + +
+
+ + + + +
+

SAM 대시보드가 드리는 약속

+

로그인 한 번이면 전사 매출, 수주, 승인 대기를 한눈에.
보고를 기다리는 시간을 제로로 만들어 드립니다.

+
+
+
+ + +
+
+ +

클라우드 기반

+
+
+ +

PC + 모바일

+
+
+ +

역할별 권한

+
+
+ + +
+
+
+

SAM

+

www.sam.it.kr

+
+
+

뒷면에서 상세 기능을 확인하세요 ▶

+
+
+
+ + \ No newline at end of file diff --git a/brochure/v4/convert-1page.cjs b/brochure/v4/convert-1page.cjs new file mode 100644 index 0000000..e218f62 --- /dev/null +++ b/brochure/v4/convert-1page.cjs @@ -0,0 +1,27 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const htmlFile = path.join(__dirname, 'slides', 'brochure-dashboard-1page.html'); + console.log('Converting CEO Dashboard v4 (Light) 1-page brochure...'); + + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error: ${err.message}`); + } + + const outputPath = path.join(__dirname, 'sam-brochure-v4-dashboard-1page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v4/convert-2page.cjs b/brochure/v4/convert-2page.cjs new file mode 100644 index 0000000..f8c691d --- /dev/null +++ b/brochure/v4/convert-2page.cjs @@ -0,0 +1,31 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const slidesDir = path.join(__dirname, 'slides'); + const slides = ['brochure-dashboard-front.html', 'brochure-dashboard-back.html']; + + for (const file of slides) { + const htmlFile = path.join(slidesDir, file); + console.log(`Converting ${file} ...`); + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error on ${file}: ${err.message}`); + } + } + + const outputPath = path.join(__dirname, 'sam-brochure-v4-dashboard-2page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v4/sam-brochure-v4-dashboard-1page.pptx b/brochure/v4/sam-brochure-v4-dashboard-1page.pptx new file mode 100644 index 0000000..2ec5fe9 Binary files /dev/null and b/brochure/v4/sam-brochure-v4-dashboard-1page.pptx differ diff --git a/brochure/v4/sam-brochure-v4-dashboard-2page.pptx b/brochure/v4/sam-brochure-v4-dashboard-2page.pptx new file mode 100644 index 0000000..84ae7aa Binary files /dev/null and b/brochure/v4/sam-brochure-v4-dashboard-2page.pptx differ diff --git a/brochure/v4/slides/brochure-dashboard-1page.html b/brochure/v4/slides/brochure-dashboard-1page.html new file mode 100644 index 0000000..7920035 --- /dev/null +++ b/brochure/v4/slides/brochure-dashboard-1page.html @@ -0,0 +1,403 @@ + + + + + + + + +
+ +
+

CEO DASHBOARD v4

+
+ + +
+
+

EXECUTIVE DASHBOARD

+

대표님, 우리 회사
지금 어떤 상태인가요?

+

보고 대기 없이, 로그인 한 번이면
전사 현황이 한눈에 들어옵니다.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + +
+ +
+
+
+
+

SAM CEO Dashboard

+
+ +
+ +
+ + + + + + +

5.2억

+

▲ 15.3%

+

월 매출

+
+ +
+ + + + +

127건

+

▲ 8건

+

수주 잔량

+
+ +
+ + + + 96 + +

96%

+

목표 달성

+

납기 준수율

+
+ +
+ + + + + +

5건

+

즉시 처리

+

승인 대기

+
+
+ +
+ +
+

월별 매출 추이

+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + +
+
+
+

영업1팀 38%

+
+
+
+

영업2팀 25%

+
+
+
+

생산팀 22%

+
+
+
+

품질팀 15%

+
+
+
+
+
+ + +
+

대표님이 얻는 것

+
+ +
+ + + + + + + +

즉시 현황 파악

+

로그인 3초면
전사 현황 확인

+
+ +
+ + + + + + + + + + + + +

데이터로 판단

+

감이 아닌 숫자로
KPI/팀 성과 비교

+
+ +
+ + + + + + + + +

모바일 승인

+

이동중에도 즉시
결재/승인 처리

+
+
+
+ + +
+ + +
+

대시보드 핵심 기능

+
+
+ +
+ + + + + +

실시간 매출/수주 KPI

+
+ +
+ + + + + + + + + + + +

조직 계층별 실적 트리

+
+
+
+ +
+ + + + +

역할별 수당 현황

+
+ +
+ + + + 5 + + +

미승인 실시간 알림

+
+
+
+ +
+ + + + +

기간별 트렌드 분석

+
+ +
+ + + + + + + + +

수익 시뮬레이터

+
+
+
+
+ + +
+ + +
+ +
+
+ + + + + +

BEFORE

+
+

매출? → 보고 대기 1~2일

+

수주? → Excel 취합 반나절

+

승인? → 서류 찾기 30분

+

실적? → 각 팀장 개별 보고

+
+ +
+ + + + +
+ +
+
+ + + + +

AFTER (SAM)

+
+

로그인 → 3초 전사 현황

+

클릭 → 실시간 수주 데이터

+

뱃지 → 즉시 승인 처리

+

트리 → 전 조직 한눈에

+
+
+ + +
+
+ + + + +

실시간 업데이트

+
+
+ + + + +

PC + 모바일

+
+
+ + + + + +

역할별 권한

+
+
+ + + + + +

데이터 암호화

+
+
+ + + + + +

클라우드

+
+
+ + +
+
+
+

SAM

+

www.sam.it.kr

+
+
+
+
+
+ + \ No newline at end of file diff --git a/brochure/v4/slides/brochure-dashboard-back.html b/brochure/v4/slides/brochure-dashboard-back.html new file mode 100644 index 0000000..3de9eb6 --- /dev/null +++ b/brochure/v4/slides/brochure-dashboard-back.html @@ -0,0 +1,371 @@ + + + + + + + + +
+ +
+

FEATURES & PRICING

+
+ + +
+

대시보드 핵심 기능

+
+ +
+ + + + + +
+

실시간 KPI 카드

+
+

매출, 수주, 납기율, 승인 대기

+
+ +
+ + + + + + + + + + + + + + + +
+

조직 실적 트리

+
+

계층별 팀/개인 실적 펼쳐보기

+
+ +
+ + + + +
+

역할별 수당 현황

+
+

판매자/관리자/협업자 배분 확인

+
+ +
+ + + + ! + + +
+

승인 대기 알림

+
+

가입/지급 미처리 빨간 뱃지

+
+ +
+ + + + +
+

기간별 트렌드

+
+

당월/분기/연간 추이 차트

+
+ +
+ + + + + + + + +
+

수익 시뮬레이터

+
+

가상 시나리오 수당/마진 계산

+
+ +
+ + + + + + + + +
+

모바일 대응

+
+

스마트폰으로 KPI 확인/승인

+
+
+
+ + +
+ + +
+

역할별 맞춤 화면

+
+ +
+ + + + + +

CEO

+

전사 KPI 총괄

+
+ +
+ + + + + + +

관리자

+

팀 실적 관리

+
+ +
+ + + + + + + + +

운영자

+

인력/승인 관리

+
+ +
+ + + + + + + +

영업자

+

내 실적 조회

+
+
+
+ + +
+ + +
+

대시보드 + SAM ERP/MES 통합

+
+
+ + + + + + +

견적/수주

+
+
+ + + + + + +

생산 MES

+
+
+ + + + + +

품질/검사

+
+
+ + + + + +

재고/자재

+
+
+ + + + +

인사/회계

+
+
+

대시보드의 모든 데이터는 SAM ERP/MES 실시간 데이터 기반

+
+ + +
+ + +
+

투자 비용

+
+ +
+
+
+ + + + +

대시보드 포함 기본 패키지

+
+

2,000만원

+

+ 월 50만원 (유지보수)

+
+
+

CEO 대시보드 + 견적/수주 + 생산
인사/회계 무료 포함

+
+
+ +
+
+
+ + + + + +

추가 옵션 (선택)

+
+
+
+

생산공정 관리

+

+500만원

+
+
+

품질관리(인정검사)

+

+2,000만원

+
+
+

AI 견적 자동 생성

+

월 10~20만원

+
+
+
+
+
+
+ + +
+ + +
+

도입 프로세스

+
+
+ + + + + +

1~2주

+

현장 인터뷰

+
+ + + +
+ + + + + + + +

2~4주

+

맞춤 개발

+
+ + + +
+ + + + + +

1~2주

+

데이터 이관

+
+ + + +
+ + + + +

1~2주

+

교육/안정화

+
+
+
+ + +
+
+
+ + + + +
+

대표님 전용 대시보드를 직접 체험

+
+
+
+

www.sam.it.kr

+
+
+
+ + +
+

SAM — Smart Automation Management

+
+ + \ No newline at end of file diff --git a/brochure/v4/slides/brochure-dashboard-front.html b/brochure/v4/slides/brochure-dashboard-front.html new file mode 100644 index 0000000..98d48c7 --- /dev/null +++ b/brochure/v4/slides/brochure-dashboard-front.html @@ -0,0 +1,260 @@ + + + + + + + + +
+ +
+

CEO DASHBOARD v4

+
+ + +
+
+

EXECUTIVE DASHBOARD

+

대표님, 우리 회사
지금 어떤 상태인가요?

+

매출, 수주, 조직 실적, 승인 대기
더 이상 보고를 기다리지 마세요.

+
+ +
+ + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + +
+
+ + +
+ + +
+

대표님의 하루

+
+ +
+ + + + + 9AM + +
+

"어제 매출 얼마야?" → 팀장 보고 대기중...

+
+
+ +
+ + + + + 2PM + +
+

"수주 밀린 거 없어?" → Excel 취합중...

+
+
+ +
+ + + + + 5PM + +
+

"결재할 것 정리해줘" → 서류 찾는중...

+
+
+
+
+ + +
+ + + +

SAM 도입 후

+
+ + +
+ +
+
+
+
+

SAM CEO Dashboard ― 로그인 후 3초

+
+ +
+
+ + + + + +

5.2억

+

▲ 15.3%

+

월 매출

+
+
+ + + + +

127건

+

▲ 8건

+

누적 수주

+
+
+ + + + +

96%

+

목표 달성

+

납기 준수율

+
+
+ + + + + +

5건

+

즉시 처리

+

승인 대기

+
+
+ +
+
+

월별 매출 추이

+ + + + + + + + + + + + + +
+
+ + + + + + + +
+
+
+

영업1팀

+
+
+
+

영업2팀

+
+
+
+

생산팀

+
+
+
+

품질팀

+
+
+
+
+
+ + +
+
+ + + + +
+

SAM 대시보드가 드리는 약속

+

로그인 한 번이면 전사 매출, 수주, 승인 대기를 한눈에.
보고를 기다리는 시간을 제로로 만들어 드립니다.

+
+
+
+ + +
+
+ +

클라우드 기반

+
+
+ +

PC + 모바일

+
+
+ +

역할별 권한

+
+
+ + +
+
+
+

SAM

+

www.sam.it.kr

+
+
+

뒷면에서 상세 기능을 확인하세요 ▶

+
+
+
+ + \ No newline at end of file diff --git a/brochure/v5/convert-1page.cjs b/brochure/v5/convert-1page.cjs new file mode 100644 index 0000000..840ccc9 --- /dev/null +++ b/brochure/v5/convert-1page.cjs @@ -0,0 +1,52 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); +const sharp = require('sharp'); + +async function generateGradientBg() { + const svgGradient = ` + + + + + + + + + `; + const buf = await sharp(Buffer.from(svgGradient)).png().toBuffer(); + return buf.toString('base64'); +} + +async function main() { + const pres = new PptxGenJS(); + + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + // Pre-generate gradient background PNG + console.log('Generating gradient background...'); + const bgBase64 = await generateGradientBg(); + + const htmlFile = path.join(__dirname, 'slides', 'brochure-dashboard-1page.html'); + console.log('Converting CEO Dashboard v5 (Premium Gradient) 1-page brochure...'); + + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error: ${err.message}`); + } + + // Set gradient background on each slide + for (const slide of pres.slides) { + slide.background = { data: `image/png;base64,${bgBase64}` }; + } + + const outputPath = path.join(__dirname, 'sam-brochure-v5-dashboard-1page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v5/convert-2page.cjs b/brochure/v5/convert-2page.cjs new file mode 100644 index 0000000..7aa1fd0 --- /dev/null +++ b/brochure/v5/convert-2page.cjs @@ -0,0 +1,56 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); +const sharp = require('sharp'); + +async function generateGradientBg() { + const svgGradient = ` + + + + + + + + + `; + const buf = await sharp(Buffer.from(svgGradient)).png().toBuffer(); + return buf.toString('base64'); +} + +async function main() { + const pres = new PptxGenJS(); + + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + // Pre-generate gradient background PNG + console.log('Generating gradient background...'); + const bgBase64 = await generateGradientBg(); + + const slidesDir = path.join(__dirname, 'slides'); + const slides = ['brochure-dashboard-front.html', 'brochure-dashboard-back.html']; + + for (const file of slides) { + const htmlFile = path.join(slidesDir, file); + console.log(`Converting ${file} ...`); + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error on ${file}: ${err.message}`); + } + } + + // Set gradient background on each slide + for (const slide of pres.slides) { + slide.background = { data: `image/png;base64,${bgBase64}` }; + } + + const outputPath = path.join(__dirname, 'sam-brochure-v5-dashboard-2page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v5/sam-brochure-v5-dashboard-1page.pptx b/brochure/v5/sam-brochure-v5-dashboard-1page.pptx new file mode 100644 index 0000000..f6b930e Binary files /dev/null and b/brochure/v5/sam-brochure-v5-dashboard-1page.pptx differ diff --git a/brochure/v5/sam-brochure-v5-dashboard-2page.pptx b/brochure/v5/sam-brochure-v5-dashboard-2page.pptx new file mode 100644 index 0000000..e9f9c95 Binary files /dev/null and b/brochure/v5/sam-brochure-v5-dashboard-2page.pptx differ diff --git a/brochure/v5/slides/brochure-dashboard-1page.html b/brochure/v5/slides/brochure-dashboard-1page.html new file mode 100644 index 0000000..9c1105e --- /dev/null +++ b/brochure/v5/slides/brochure-dashboard-1page.html @@ -0,0 +1,317 @@ + + + + + + + + +
+ +
+
+

EXECUTIVE EDITION

+
+
+ + +
+
+

CEO DASHBOARD

+

대표님의 시간은
보고를 기다리는 데
쓰여선 안 됩니다.

+

로그인 3초. 매출, 수주, 승인까지
모든 경영 현황이 한 화면에.

+
+ +
+ + + + + + + + + + + + + + + + +
+
+ + +
+
+
+

SAM 도입 후

+
+
+
+ + +
+ +
+
+
+
+

SAM CEO Dashboard

+
+ +
+
+

5.2억

+

▲ 15.3%

+

월 매출

+
+
+

127건

+

▲ 8건

+

누적 수주

+
+
+

96%

+

목표 달성

+

납기 준수율

+
+
+

5건

+

즉시 처리

+

승인 대기

+
+
+ +
+
+

월별 매출 추이

+ + + + + + + + + + + + + +
+
+ + + + + + +
+
+
+

영업1팀

+
+
+
+

영업2팀

+
+
+
+

생산팀

+
+
+
+
+
+ + +
+

대표님이 얻는 것

+
+
+ + + + + +

즉시 현황 파악

+

로그인 3초면 전사 확인

+
+
+ + + + + + + + + +

데이터로 판단

+

감이 아닌 KPI 비교

+
+
+ + + + +

모바일 승인

+

이동중 즉시 결재

+
+
+
+ + +
+ + +
+

대시보드 핵심 기능

+
+
+
+ + + + + +

실시간 매출/수주 KPI

+
+
+ + + + + + + + +

조직 계층별 실적 트리

+
+
+
+
+ + + + +

역할별 수당 현황

+
+
+ + + + 5 + +

미승인 실시간 알림

+
+
+
+
+ + + + +

기간별 트렌드 분석

+
+
+ + + + + + + +

수익 시뮬레이터

+
+
+
+
+ + +
+ + +
+ +
+
+ + + + + +

BEFORE

+
+

매출? → 보고 대기 1~2일

+

수주? → Excel 취합 반나절

+

승인? → 서류 찾기 30분

+

실적? → 각 팀장 개별 보고

+
+ +
+ + + + +
+ +
+
+ + + + +

AFTER (SAM)

+
+

로그인 → 3초 전사 현황

+

클릭 → 실시간 수주 데이터

+

뱃지 → 즉시 승인 처리

+

트리 → 전 조직 한눈에

+
+
+ + +
+
+ +

클라우드

+
+
+ +

PC + 모바일

+
+
+ +

역할별 권한

+
+
+ +

데이터 암호화

+
+
+ + +
+
+
+

SAM

+

www.sam.it.kr

+
+
+
+
+
+ + \ No newline at end of file diff --git a/brochure/v5/slides/brochure-dashboard-back.html b/brochure/v5/slides/brochure-dashboard-back.html new file mode 100644 index 0000000..46012b5 --- /dev/null +++ b/brochure/v5/slides/brochure-dashboard-back.html @@ -0,0 +1,309 @@ + + + + + + + + +
+ +
+

FEATURES & PRICING

+
+ + +
+

대시보드 핵심 기능

+
+ +
+ + + + + +
+

실시간 KPI 카드

+
+

매출, 수주, 납기율, 승인 대기

+
+ +
+ + + + + + + + + + + +
+

조직 실적 트리

+
+

계층별 팀/개인 실적 펼쳐보기

+
+ +
+ + + + +
+

역할별 수당 현황

+
+

판매자/관리자/협업자 배분 확인

+
+ +
+ + + + ! + + +
+

승인 대기 알림

+
+

가입/지급 미처리 빨간 뱃지

+
+ +
+ + + + +
+

기간별 트렌드

+
+

당월/분기/연간 추이 차트

+
+ +
+ + + + + + + + +
+

수익 시뮬레이터

+
+

가상 시나리오 수당/마진 계산

+
+ +
+ + + + + + + + +
+

모바일 대응

+
+

스마트폰으로 KPI 확인/승인

+
+
+
+ + +
+ + +
+

역할별 맞춤 화면

+
+
+ + + + + +

CEO

+

전사 KPI 총괄

+
+
+ + + + + + +

관리자

+

팀 실적 관리

+
+
+ + + + + + + + +

운영자

+

인력/승인 관리

+
+
+ + + + + + + +

영업자

+

내 실적 조회

+
+
+
+ + +
+ + +
+

투자 비용

+
+
+
+
+ + + + +

대시보드 포함 기본 패키지

+
+

2,000만원

+

+ 월 50만원 (유지보수)

+
+
+

CEO 대시보드 + 견적/수주 + 생산
인사/회계 무료 포함

+
+
+
+
+
+ + + + + +

추가 옵션 (선택)

+
+
+
+

생산공정 관리

+

+500만원

+
+
+

품질관리(인정검사)

+

+2,000만원

+
+
+

AI 견적 자동 생성

+

월 10~20만원

+
+
+
+
+
+
+ + +
+ + +
+

도입 프로세스

+
+
+ + + + + +

1~2주

+

현장 인터뷰

+
+ + + +
+ + + + + + + +

2~4주

+

맞춤 개발

+
+ + + +
+ + + + + +

1~2주

+

데이터 이관

+
+ + + +
+ + + + +

1~2주

+

교육/안정화

+
+
+
+ + +
+
+
+ + + + +
+

대표님 전용 대시보드를 직접 체험

+
+
+
+

www.sam.it.kr

+
+
+
+ + +
+

SAM — Smart Automation Management

+
+ + \ No newline at end of file diff --git a/brochure/v5/slides/brochure-dashboard-front.html b/brochure/v5/slides/brochure-dashboard-front.html new file mode 100644 index 0000000..013a249 --- /dev/null +++ b/brochure/v5/slides/brochure-dashboard-front.html @@ -0,0 +1,216 @@ + + + + + + + + +
+ +
+
+

EXECUTIVE EDITION

+
+
+ + +
+

CEO DASHBOARD

+

대표님의 시간은
보고를 기다리는 데
쓰여선 안 됩니다.

+

로그인 3초. 매출, 수주, 승인 대기까지
모든 경영 현황이 한 화면에.

+
+ + +
+
+
+ + + + +

1~2일

+

매출 보고 대기

+
+
+ + + + + + +

반나절

+

Excel 수주 취합

+
+
+ + + + +

30분

+

결재 서류 찾기

+
+
+

매일 반복되는 비효율, SAM이 제로로 만듭니다.

+
+ + +
+
+
+

SAM 도입 후

+
+
+
+ + +
+ +
+
+
+
+

SAM CEO Dashboard

+
+ +
+
+ + + + + +

5.2억

+

▲ 15.3%

+

월 매출

+
+
+ + + + +

127건

+

▲ 8건

+

누적 수주

+
+
+ + + + +

96%

+

목표 달성

+

납기 준수율

+
+
+ + + + + +

5건

+

즉시 처리

+

승인 대기

+
+
+ +
+
+

월별 매출 추이

+ + + + + + + + + + + + + +
+
+ + + + + + + +
+
+
+

영업1팀

+
+
+
+

영업2팀

+
+
+
+

생산팀

+
+
+
+

품질팀

+
+
+
+
+
+ + +
+
+ + + + +
+

대표님께 드리는 약속

+

보고를 기다리는 시간을 제로로.
의사결정에만 집중하실 수 있도록.

+
+
+
+ + +
+
+ +

클라우드 기반

+
+
+ +

PC + 모바일

+
+
+ +

역할별 권한

+
+
+ + +
+
+
+

SAM

+

www.sam.it.kr

+
+
+

뒷면에서 상세 기능을 확인하세요 ▶

+
+
+
+ + \ No newline at end of file diff --git a/brochure/v6/convert-1page.cjs b/brochure/v6/convert-1page.cjs new file mode 100644 index 0000000..99a9664 --- /dev/null +++ b/brochure/v6/convert-1page.cjs @@ -0,0 +1,27 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const htmlFile = path.join(__dirname, 'slides', 'brochure-dashboard-1page.html'); + console.log('Converting CEO Dashboard v6 (Corporate Blue & White) 1-page brochure...'); + + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error: ${err.message}`); + } + + const outputPath = path.join(__dirname, 'sam-brochure-v6-dashboard-1page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v6/convert-2page.cjs b/brochure/v6/convert-2page.cjs new file mode 100644 index 0000000..604c5be --- /dev/null +++ b/brochure/v6/convert-2page.cjs @@ -0,0 +1,31 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const slidesDir = path.join(__dirname, 'slides'); + const slides = ['brochure-dashboard-front.html', 'brochure-dashboard-back.html']; + + for (const file of slides) { + const htmlFile = path.join(slidesDir, file); + console.log(`Converting ${file} ...`); + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error on ${file}: ${err.message}`); + } + } + + const outputPath = path.join(__dirname, 'sam-brochure-v6-dashboard-2page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v6/sam-brochure-v6-dashboard-1page.pptx b/brochure/v6/sam-brochure-v6-dashboard-1page.pptx new file mode 100644 index 0000000..0fbb21d Binary files /dev/null and b/brochure/v6/sam-brochure-v6-dashboard-1page.pptx differ diff --git a/brochure/v6/sam-brochure-v6-dashboard-2page.pptx b/brochure/v6/sam-brochure-v6-dashboard-2page.pptx new file mode 100644 index 0000000..406787c Binary files /dev/null and b/brochure/v6/sam-brochure-v6-dashboard-2page.pptx differ diff --git a/brochure/v6/slides/brochure-dashboard-1page.html b/brochure/v6/slides/brochure-dashboard-1page.html new file mode 100644 index 0000000..4afb7db --- /dev/null +++ b/brochure/v6/slides/brochure-dashboard-1page.html @@ -0,0 +1,372 @@ + + + + + + + + +
+ +
+
+

CEO DASHBOARD

+
+
+ + +
+ + +
+
+

EXECUTIVE DASHBOARD

+

대표님, 우리 회사
지금 어떤 상태인가요?

+

보고 대기 없이, 로그인 한 번이면

+

전사 현황이 한눈에 들어옵니다.

+
+
+ + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + +
+ +
+
+
+
+

SAM CEO Dashboard

+
+ +
+
+ + + + + + +

5.2억

+

▲ 15.3%

+

월 매출

+
+
+ + + + +

127건

+

▲ 8건

+

수주 잔량

+
+
+ + + + 96 + +

96%

+

목표 달성

+

납기 준수율

+
+
+ + + + + +

5건

+

즉시 처리

+

승인 대기

+
+
+ +
+
+

월별 매출 추이

+ + + + + + + + + +
+
+ + + + + + + +
+
+
+

영업1팀 38%

+
+
+
+

영업2팀 25%

+
+
+
+

생산팀 22%

+
+
+
+

품질팀 15%

+
+
+
+
+
+ + +
+
+

대표님이 얻는 것

+
+
+
+ + + + + + +

즉시 현황 파악

+

로그인 3초면
전사 현황 확인

+
+
+ + + + + + + + + + +

데이터로 판단

+

감이 아닌 숫자로
KPI/팀 성과 비교

+
+
+ + + + + + +

모바일 승인

+

이동중에도 즉시
결재/승인 처리

+
+
+
+ + +
+ + +
+
+

대시보드 핵심 기능

+
+
+
+
+ + + + + +

실시간 매출/수주 KPI

+
+
+ + + + + + + + + + + +

조직 계층별 실적 트리

+
+
+
+
+ + + + +

역할별 수당 현황

+
+
+ + + + 5 + + +

미승인 실시간 알림

+
+
+
+
+ + + + +

기간별 트렌드 분석

+
+
+ + + + + + + + +

수익 시뮬레이터

+
+
+
+
+ + +
+ + +
+
+
+ + + + + +

BEFORE

+
+

매출? → 보고 대기 1~2일

+

수주? → Excel 취합 반나절

+

승인? → 서류 찾기 30분

+

실적? → 각 팀장 개별 보고

+
+
+ + + + +
+
+
+ + + + +

AFTER (SAM)

+
+

로그인 → 3초 전사 현황

+

클릭 → 실시간 수주 데이터

+

뱃지 → 즉시 승인 처리

+

트리 → 전 조직 한눈에

+
+
+ + +
+
+ + + + +

실시간 업데이트

+
+
+ + + + +

PC + 모바일

+
+
+ + + + + +

역할별 권한

+
+
+ + + + + +

데이터 암호화

+
+
+ + + + + +

클라우드

+
+
+ + +
+
+
+

SAM

+

www.sam.it.kr

+
+
+
+
+
+ +
+ + \ No newline at end of file diff --git a/brochure/v6/slides/brochure-dashboard-back.html b/brochure/v6/slides/brochure-dashboard-back.html new file mode 100644 index 0000000..6cd9c34 --- /dev/null +++ b/brochure/v6/slides/brochure-dashboard-back.html @@ -0,0 +1,335 @@ + + + + + + + + +
+ +
+
+

FEATURES & PRICING

+
+
+ + +
+ + +
+
+

대시보드 핵심 기능

+
+
+ +
+ + + + + +
+

실시간 KPI 카드

+
+

매출, 수주, 납기율, 승인 대기

+
+ +
+ + + + + + + + + + + + + + + +
+

조직 실적 트리

+
+

계층별 팀/개인 실적 펼쳐보기

+
+ +
+ + + + +
+

역할별 수당 현황

+
+

판매자/관리자/협업자 배분 확인

+
+ +
+ + + + ! + + +
+

승인 대기 알림

+
+

가입/지급 미처리 빨간 뱃지

+
+ +
+ + + + +
+

기간별 트렌드

+
+

당월/분기/연간 추이 차트

+
+ +
+ + + + + + + + +
+

수익 시뮬레이터

+
+

가상 시나리오 수당/마진 계산

+
+ +
+ + + + + + + + +
+

모바일 대응

+
+

스마트폰으로 KPI 확인/승인

+
+
+
+ + +
+ + +
+
+

역할별 맞춤 화면

+
+
+ +
+ + + + + +

CEO

+

전사 KPI 총괄

+
+ +
+ + + + + + +

관리자

+

팀 실적 관리

+
+ +
+ + + + + + + + +

운영자

+

인력/승인 관리

+
+ +
+ + + + + + + +

영업자

+

내 실적 조회

+
+
+
+ + +
+ + +
+
+

투자 비용

+
+
+ +
+
+
+ + + + +

대시보드 포함 기본 패키지

+
+

2,000만원

+

+ 월 50만원 (유지보수)

+
+
+

CEO 대시보드 + 견적/수주 + 생산

+

인사/회계 무료 포함

+
+
+ +
+
+
+ + + + + +

추가 옵션 (선택)

+
+
+
+

생산공정 관리

+

+500만원

+
+
+

품질관리(인정검사)

+

+2,000만원

+
+
+

AI 견적 자동 생성

+

월 10~20만원

+
+
+
+
+
+
+ + +
+ + +
+
+

도입 프로세스

+
+
+
+ + + + + +

1~2주

+

현장 인터뷰

+
+ + + +
+ + + + + + + +

2~4주

+

맞춤 개발

+
+ + + +
+ + + + + +

1~2주

+

데이터 이관

+
+ + + +
+ + + + +

1~2주

+

교육/안정화

+
+
+
+ + +
+
+
+ + + + +
+

대표님 전용 대시보드를 직접 체험

+
+
+
+

www.sam.it.kr

+
+
+
+ + +
+

SAM — Smart Automation Management

+
+ +
+ + \ No newline at end of file diff --git a/brochure/v6/slides/brochure-dashboard-front.html b/brochure/v6/slides/brochure-dashboard-front.html new file mode 100644 index 0000000..d21776b --- /dev/null +++ b/brochure/v6/slides/brochure-dashboard-front.html @@ -0,0 +1,231 @@ + + + + + + + + +
+ +
+
+

CEO DASHBOARD

+
+
+ + +
+ + +
+
+

EXECUTIVE DASHBOARD

+

대표님, 우리 회사
지금 어떤 상태인가요?

+

매출, 수주, 조직 실적, 승인 대기

+

더 이상 보고를 기다리지 마세요.

+
+ +
+ + + + + + + + + + + + + 5 + + + + +
+
+ + +
+ + +
+ +
+
+
+
+

SAM CEO Dashboard ― 로그인 후 3초

+
+ +
+
+ + + + + +

5.2억

+

▲ 15.3%

+

월 매출

+
+
+ + + + +

127건

+

▲ 8건

+

누적 수주

+
+
+ + + + +

96%

+

목표 달성

+

납기 준수율

+
+
+ + + + + +

5건

+

즉시 처리

+

승인 대기

+
+
+ +
+
+

월별 매출 추이

+ + + + + + + +
+
+ + + + + + + +
+
+
+

영업1팀

+
+
+
+

영업2팀

+
+
+
+

생산팀

+
+
+
+

품질팀

+
+
+
+
+
+ + +
+
+

대표님이 얻는 것

+
+
+ +
+ + + + + + +

즉시 현황 파악

+

로그인 3초면
전사 현황 확인

+
+ +
+ + + + + + + + + + +

데이터로 판단

+

감이 아닌 숫자로
KPI/팀 성과 비교

+
+ +
+ + + + + + +

모바일 승인

+

이동중에도 즉시
결재/승인 처리

+
+
+
+ + +
+
+ +

클라우드 기반

+
+
+ +

PC + 모바일

+
+
+ +

역할별 권한

+
+
+ + +
+
+
+

SAM

+

www.sam.it.kr

+
+
+

뒷면에서 상세 기능을 확인하세요 ▶

+
+
+
+ +
+ + \ No newline at end of file diff --git a/brochure/v7/convert-1page.cjs b/brochure/v7/convert-1page.cjs new file mode 100644 index 0000000..723bfce --- /dev/null +++ b/brochure/v7/convert-1page.cjs @@ -0,0 +1,27 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const htmlFile = path.join(__dirname, 'slides', 'brochure-dashboard-1page.html'); + console.log('Converting CEO Dashboard v7 (Warm Gray + Teal) 1-page brochure...'); + + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error: ${err.message}`); + } + + const outputPath = path.join(__dirname, 'sam-brochure-v7-dashboard-1page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v7/convert-2page.cjs b/brochure/v7/convert-2page.cjs new file mode 100644 index 0000000..bf9d100 --- /dev/null +++ b/brochure/v7/convert-2page.cjs @@ -0,0 +1,31 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const slidesDir = path.join(__dirname, 'slides'); + const slides = ['brochure-dashboard-front.html', 'brochure-dashboard-back.html']; + + for (const file of slides) { + const htmlFile = path.join(slidesDir, file); + console.log(`Converting ${file} ...`); + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error on ${file}: ${err.message}`); + } + } + + const outputPath = path.join(__dirname, 'sam-brochure-v7-dashboard-2page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v7/sam-brochure-v7-dashboard-1page.pptx b/brochure/v7/sam-brochure-v7-dashboard-1page.pptx new file mode 100644 index 0000000..3fb887d Binary files /dev/null and b/brochure/v7/sam-brochure-v7-dashboard-1page.pptx differ diff --git a/brochure/v7/sam-brochure-v7-dashboard-2page.pptx b/brochure/v7/sam-brochure-v7-dashboard-2page.pptx new file mode 100644 index 0000000..9f37b2f Binary files /dev/null and b/brochure/v7/sam-brochure-v7-dashboard-2page.pptx differ diff --git a/brochure/v7/slides/brochure-dashboard-1page.html b/brochure/v7/slides/brochure-dashboard-1page.html new file mode 100644 index 0000000..ccba1ba --- /dev/null +++ b/brochure/v7/slides/brochure-dashboard-1page.html @@ -0,0 +1,374 @@ + + + + + + + + +
+ +
+

CEO DASHBOARD v7

+
+ + +
+
+

EXECUTIVE DASHBOARD

+

대표님, 우리 회사
지금 어떤 상태인가요?

+

보고 대기 없이, 로그인 한 번이면
전사 현황이 한눈에 들어옵니다.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + +
+ +
+
+
+
+

SAM CEO Dashboard

+
+ +
+ +
+ + + + + + +

5.2억

+

▲ 15.3%

+

월 매출

+
+ +
+ + + + +

127건

+

▲ 8건

+

수주 잔량

+
+ +
+ + + + 96 + +

96%

+

목표 달성

+

납기 준수율

+
+ +
+ + + + + +

5건

+

즉시 처리

+

승인 대기

+
+
+ +
+ +
+

월별 매출 추이

+ + + + + + + + + +
+ +
+ + + + + + + +
+
+
+

영업1팀 38%

+
+
+
+

영업2팀 25%

+
+
+
+

생산팀 22%

+
+
+
+

품질팀 15%

+
+
+
+
+
+ + +
+

대표님이 얻는 것

+
+
+ + + + + + +

즉시 현황 파악

+

로그인 3초면
전사 현황 확인

+
+
+ + + + + + + + + + +

데이터로 판단

+

감이 아닌 숫자로
KPI/팀 성과 비교

+
+
+ + + + + + +

모바일 승인

+

이동중에도 즉시
결재/승인 처리

+
+
+
+ + +
+ + +
+

대시보드 핵심 기능

+
+
+
+ + + + + +

실시간 매출/수주 KPI

+
+
+ + + + + + + + + + + +

조직 계층별 실적 트리

+
+
+
+
+ + + + +

역할별 수당 현황

+
+
+ + + + 5 + + +

미승인 실시간 알림

+
+
+
+
+ + + + +

기간별 트렌드 분석

+
+
+ + + + + + + + +

수익 시뮬레이터

+
+
+
+
+ + +
+ + +
+ +
+
+ + + + + +

BEFORE

+
+

매출? 보고 대기 1~2일

+

수주? Excel 취합 반나절

+

승인? 서류 찾기 30분

+

실적? 각 팀장 개별 보고

+
+ +
+ + + + +
+ +
+
+ + + + +

AFTER (SAM)

+
+

로그인 3초 전사 현황

+

클릭 실시간 수주 데이터

+

뱃지 즉시 승인 처리

+

트리 전 조직 한눈에

+
+
+ + +
+
+ + + + +

실시간 업데이트

+
+
+ + + + +

PC + 모바일

+
+
+ + + + + +

역할별 권한

+
+
+ + + + + +

데이터 암호화

+
+
+ + + + + +

클라우드

+
+
+ + +
+
+
+

SAM

+

www.sam.it.kr

+
+
+
+
+
+ + \ No newline at end of file diff --git a/brochure/v7/slides/brochure-dashboard-back.html b/brochure/v7/slides/brochure-dashboard-back.html new file mode 100644 index 0000000..aab44bf --- /dev/null +++ b/brochure/v7/slides/brochure-dashboard-back.html @@ -0,0 +1,371 @@ + + + + + + + + +
+ +
+

FEATURES & PRICING

+
+ + +
+

대시보드 핵심 기능

+
+ +
+ + + + + +
+

실시간 KPI 카드

+
+

매출, 수주, 납기율, 승인 대기

+
+ +
+ + + + + + + + + + + + + + + +
+

조직 실적 트리

+
+

계층별 팀/개인 실적 펼쳐보기

+
+ +
+ + + + +
+

역할별 수당 현황

+
+

판매자/관리자/협업자 배분 확인

+
+ +
+ + + + ! + + +
+

승인 대기 알림

+
+

가입/지급 미처리 빨간 뱃지

+
+ +
+ + + + +
+

기간별 트렌드

+
+

당월/분기/연간 추이 차트

+
+ +
+ + + + + + + + +
+

수익 시뮬레이터

+
+

가상 시나리오 수당/마진 계산

+
+ +
+ + + + + + + + +
+

모바일 대응

+
+

스마트폰으로 KPI 확인/승인

+
+
+
+ + +
+ + +
+

역할별 맞춤 화면

+
+ +
+ + + + + +

CEO

+

전사 KPI 총괄

+
+ +
+ + + + + + +

관리자

+

팀 실적 관리

+
+ +
+ + + + + + + + +

운영자

+

인력/승인 관리

+
+ +
+ + + + + + + +

영업자

+

내 실적 조회

+
+
+
+ + +
+ + +
+

대시보드 + SAM ERP/MES 통합

+
+
+ + + + + + +

견적/수주

+
+
+ + + + + + +

생산 MES

+
+
+ + + + + +

품질/검사

+
+
+ + + + + +

재고/자재

+
+
+ + + + +

인사/회계

+
+
+

대시보드의 모든 데이터는 SAM ERP/MES 실시간 데이터 기반

+
+ + +
+ + +
+

투자 비용

+
+ +
+
+
+ + + + +

대시보드 포함 기본 패키지

+
+

2,000만원

+

+ 월 50만원 (유지보수)

+
+
+

CEO 대시보드 + 견적/수주 + 생산
인사/회계 무료 포함

+
+
+ +
+
+
+ + + + + +

추가 옵션 (선택)

+
+
+
+

생산공정 관리

+

+500만원

+
+
+

품질관리(인정검사)

+

+2,000만원

+
+
+

AI 견적 자동 생성

+

월 10~20만원

+
+
+
+
+
+
+ + +
+ + +
+

도입 프로세스

+
+
+ + + + + +

1~2주

+

현장 인터뷰

+
+ + + +
+ + + + + + + +

2~4주

+

맞춤 개발

+
+ + + +
+ + + + + +

1~2주

+

데이터 이관

+
+ + + +
+ + + + +

1~2주

+

교육/안정화

+
+
+
+ + +
+
+
+ + + + +
+

대표님 전용 대시보드를 직접 체험

+
+
+
+

www.sam.it.kr

+
+
+
+ + +
+

SAM — Smart Automation Management

+
+ + \ No newline at end of file diff --git a/brochure/v7/slides/brochure-dashboard-front.html b/brochure/v7/slides/brochure-dashboard-front.html new file mode 100644 index 0000000..8d72199 --- /dev/null +++ b/brochure/v7/slides/brochure-dashboard-front.html @@ -0,0 +1,278 @@ + + + + + + + + +
+ +
+

CEO DASHBOARD v7

+
+ + +
+
+

EXECUTIVE DASHBOARD

+

대표님, 우리 회사
지금 어떤 상태인가요?

+

매출, 수주, 조직 실적, 승인 대기
더 이상 보고를 기다리지 마세요.

+
+ +
+ + + + + + + + + + + + + + + + + + 5 + + + + + +
+
+ + +
+ + +
+

대표님의 하루

+
+ +
+ + + + + 9AM + +
+

"어제 매출 얼마야?" 팀장 보고 대기중...

+
+
+ +
+ + + + + 2PM + +
+

"수주 밀린 거 없어?" Excel 취합중...

+
+
+ +
+ + + + + 5PM + +
+

"결재할 것 정리해줘" 서류 찾는중...

+
+
+
+
+ + +
+ + + +

SAM 도입 후

+
+ + +
+ +
+
+
+
+

SAM CEO Dashboard --- 로그인 후 3초

+
+ +
+
+ + + + + +

5.2억

+

▲ 15.3%

+

월 매출

+
+
+ + + + +

127건

+

▲ 8건

+

누적 수주

+
+
+ + + + +

96%

+

목표 달성

+

납기 준수율

+
+
+ + + + + +

5건

+

즉시 처리

+

승인 대기

+
+
+ +
+
+

월별 매출 추이

+ + + + + + + +
+
+ + + + + + + +
+
+
+

영업1팀

+
+
+
+

영업2팀

+
+
+
+

생산팀

+
+
+
+

품질팀

+
+
+
+
+
+ + +
+

대표님이 얻는 것

+
+ +
+ + + + + + +

즉시 현황 파악

+

로그인 3초면
전사 현황 확인

+
+ +
+ + + + + + + + + + +

데이터로 판단

+

감이 아닌 숫자로
KPI/팀 성과 비교

+
+ +
+ + + + + + +

모바일 승인

+

이동중에도 즉시
결재/승인 처리

+
+
+
+ + +
+
+ +

클라우드 기반

+
+
+ +

PC + 모바일

+
+
+ +

역할별 권한

+
+
+ + +
+
+
+

SAM

+

www.sam.it.kr

+
+
+

뒷면에서 상세 기능을 확인하세요 ▶

+
+
+
+ + \ No newline at end of file diff --git a/brochure/v8/convert-1page.cjs b/brochure/v8/convert-1page.cjs new file mode 100644 index 0000000..aa5af35 --- /dev/null +++ b/brochure/v8/convert-1page.cjs @@ -0,0 +1,27 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const htmlFile = path.join(__dirname, 'slides', 'brochure-dashboard-1page.html'); + console.log('Converting CEO Dashboard v8 (Two-Tone Split) 1-page brochure...'); + + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error: ${err.message}`); + } + + const outputPath = path.join(__dirname, 'sam-brochure-v8-dashboard-1page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v8/convert-2page.cjs b/brochure/v8/convert-2page.cjs new file mode 100644 index 0000000..1b887e1 --- /dev/null +++ b/brochure/v8/convert-2page.cjs @@ -0,0 +1,31 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const slidesDir = path.join(__dirname, 'slides'); + const slides = ['brochure-dashboard-front.html', 'brochure-dashboard-back.html']; + + for (const file of slides) { + const htmlFile = path.join(slidesDir, file); + console.log(`Converting ${file} ...`); + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error on ${file}: ${err.message}`); + } + } + + const outputPath = path.join(__dirname, 'sam-brochure-v8-dashboard-2page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v8/sam-brochure-v8-dashboard-1page.pptx b/brochure/v8/sam-brochure-v8-dashboard-1page.pptx new file mode 100644 index 0000000..4f20645 Binary files /dev/null and b/brochure/v8/sam-brochure-v8-dashboard-1page.pptx differ diff --git a/brochure/v8/sam-brochure-v8-dashboard-2page.pptx b/brochure/v8/sam-brochure-v8-dashboard-2page.pptx new file mode 100644 index 0000000..f149d83 Binary files /dev/null and b/brochure/v8/sam-brochure-v8-dashboard-2page.pptx differ diff --git a/brochure/v8/slides/brochure-dashboard-1page.html b/brochure/v8/slides/brochure-dashboard-1page.html new file mode 100644 index 0000000..bbbec34 --- /dev/null +++ b/brochure/v8/slides/brochure-dashboard-1page.html @@ -0,0 +1,236 @@ + + + + + + + + +
+ +
+ +
+
+

EXECUTIVE DASHBOARD

+
+
+ + +
+

대표님, 우리 회사

+

지금 어떤 상태인가요?

+

보고 대기 없이, 로그인 한 번이면 전사 현황이 한눈에.

+
+ + +
+
+ + + + + +

5.2억

+

▲ 15.3%

+

월 매출

+
+
+ + + + +

127건

+

▲ 8건

+

누적 수주

+
+
+ + + + +

96%

+

목표 달성

+

납기 준수율

+
+
+ + + + + +

5건

+

즉시 처리

+

승인 대기

+
+
+
+ + +
+ + +
+

대표님이 얻는 것

+
+
+

즉시 현황 파악

+

로그인 3초면

+

전사 현황 확인

+
+
+

데이터로 판단

+

감이 아닌 숫자로

+

KPI/팀 성과 비교

+
+
+

모바일 승인

+

이동중에도 즉시

+

결재/승인 처리

+
+
+
+ + +
+ + +
+

대시보드 핵심 기능

+
+
+ + + + + +

실시간 KPI 카드

+

매출, 수주, 납기율, 승인

+
+
+ + + + + + + + +

조직 실적 트리

+

계층별 팀/개인 실적

+
+
+ + + + +

역할별 수당 현황

+

판매자/관리자/협업자

+
+
+ + + + ! + +

승인 대기 알림

+

미처리 빨간 뱃지

+
+
+ + + + +

기간별 트렌드

+

당월/분기/연간 추이

+
+
+ + + + + + + +

수익 시뮬레이터

+

가상 시나리오 계산

+
+
+ + + + + + + + +

모바일 대응

+

스마트폰 KPI/승인

+
+
+
+ + +
+ + +
+

투자 비용

+
+
+

기본 패키지

+

2,000만원

+

+ 월 50만원 (유지보수)

+
+
+

추가 옵션 (선택)

+
+

생산공정 관리

+

+500만원

+
+
+

품질관리(인정검사)

+

+2,000만원

+
+
+

AI 견적 자동 생성

+

월 10~20만원

+
+
+
+
+ + +
+
+
+ + + + +
+

대표님 전용 대시보드를 직접 체험

+
+
+
+

www.sam.it.kr

+
+
+
+ + +
+

SAM — Smart Automation Management

+
+
+ + \ No newline at end of file diff --git a/brochure/v8/slides/brochure-dashboard-back.html b/brochure/v8/slides/brochure-dashboard-back.html new file mode 100644 index 0000000..aafa592 --- /dev/null +++ b/brochure/v8/slides/brochure-dashboard-back.html @@ -0,0 +1,318 @@ + + + + + + + + +
+ +
+
+

FEATURES & PRICING

+
+
+ + +
+

대시보드 핵심 기능

+
+ +
+ + + + + +
+

실시간 KPI 카드

+
+

매출, 수주, 납기율, 승인 대기

+
+ +
+ + + + + + + + + + + +
+

조직 실적 트리

+
+

계층별 팀/개인 실적 펼쳐보기

+
+ +
+ + + + +
+

역할별 수당 현황

+
+

판매자/관리자/협업자 배분 확인

+
+ +
+ + + + ! + + +
+

승인 대기 알림

+
+

가입/지급 미처리 빨간 뱃지

+
+ +
+ + + + +
+

기간별 트렌드

+
+

당월/분기/연간 추이 차트

+
+ +
+ + + + + + + + +
+

수익 시뮬레이터

+
+

가상 시나리오 수당/마진 계산

+
+ +
+ + + + + + + + +
+

모바일 대응

+
+

스마트폰으로 KPI 확인/승인

+
+
+
+ + +
+ + +
+

역할별 맞춤 화면

+
+ +
+ + + + + +

CEO

+

전사 KPI 총괄

+
+ +
+ + + + + + +

관리자

+

팀 실적 관리

+
+ +
+ + + + + + + + +

운영자

+

인력/승인 관리

+
+ +
+ + + + + + + +

영업자

+

내 실적 조회

+
+
+
+ + +
+ + +
+

투자 비용

+
+ +
+
+
+ + + + +

대시보드 포함 기본 패키지

+
+

2,000만원

+

+ 월 50만원 (유지보수)

+
+
+

CEO 대시보드 + 견적/수주 + 생산

+

인사/회계 무료 포함

+
+
+ +
+
+
+ + + + + +

추가 옵션 (선택)

+
+
+
+

생산공정 관리

+

+500만원

+
+
+

품질관리(인정검사)

+

+2,000만원

+
+
+

AI 견적 자동 생성

+

월 10~20만원

+
+
+
+
+
+
+ + +
+ + +
+

도입 프로세스

+
+
+ + + + + +

1~2주

+

현장 인터뷰

+
+ + + +
+ + + + + + + +

2~4주

+

맞춤 개발

+
+ + + +
+ + + + + +

1~2주

+

데이터 이관

+
+ + + +
+ + + + +

1~2주

+

교육/안정화

+
+
+
+ + +
+
+
+ + + + +
+

대표님 전용 대시보드를 직접 체험

+
+
+
+

www.sam.it.kr

+
+
+
+ + +
+

SAM — Smart Automation Management

+
+ + \ No newline at end of file diff --git a/brochure/v8/slides/brochure-dashboard-front.html b/brochure/v8/slides/brochure-dashboard-front.html new file mode 100644 index 0000000..ff7f738 --- /dev/null +++ b/brochure/v8/slides/brochure-dashboard-front.html @@ -0,0 +1,281 @@ + + + + + + + + +
+ +
+ +
+
+

EXECUTIVE DASHBOARD

+
+
+ + +
+

대표님, 우리 회사

+

지금 어떤 상태인가요?

+

매출, 수주, 조직 실적, 승인 대기

+

더 이상 보고를 기다리지 마세요.

+
+ + +
+ +
+ + + + + +

5.2억

+

▲ 15.3%

+

월 매출

+
+ +
+ + + + +

127건

+

▲ 8건

+

누적 수주

+
+ +
+ + + + +

96%

+

목표 달성

+

납기 준수율

+
+ +
+ + + + + +

5건

+

즉시 처리

+

승인 대기

+
+
+
+ + +
+ + +
+

대표님이 얻는 것

+
+ +
+ + + + + + +

즉시 현황 파악

+

로그인 3초면

+

전사 현황 확인

+
+ +
+ + + + + + + + + +

데이터로 판단

+

감이 아닌 숫자로

+

KPI/팀 성과 비교

+
+ +
+ + + + + + +

모바일 승인

+

이동중에도 즉시

+

결재/승인 처리

+
+
+
+ + +
+ + +
+ +
+
+ + + + + +

BEFORE

+
+

매출? → 보고 대기 1~2일

+

수주? → Excel 취합 반나절

+

승인? → 서류 찾기 30분

+

실적? → 각 팀장 개별 보고

+
+ +
+ + + + +
+ +
+
+ + + + +

AFTER (SAM)

+
+

로그인 3초 → 전사 현황

+

클릭 한 번 → 실시간 수주

+

뱃지 터치 → 즉시 승인

+

트리 펼침 → 전 조직 한눈에

+
+
+ + +
+ + +
+

대시보드 핵심 기능

+
+
+
+ + + + + +

실시간 매출/수주 KPI

+
+
+ + + + + + + + + + + +

조직 계층별 실적 트리

+
+
+
+
+ + + + +

역할별 수당 현황

+
+
+ + + + 5 + + +

미승인 실시간 알림

+
+
+
+
+ + + + +

기간별 트렌드 분석

+
+
+ + + + + + + + +

수익 시뮬레이터

+
+
+
+
+ + +
+
+ +

클라우드 기반

+
+
+ +

PC + 모바일

+
+
+ +

역할별 권한

+
+
+ +

데이터 암호화

+
+
+ + +
+
+
+

SAM

+

www.sam.it.kr

+
+
+

뒷면에서 상세 기능을 확인하세요 ▶

+
+
+
+
+ + \ No newline at end of file diff --git a/brochure/v9/convert-1page.cjs b/brochure/v9/convert-1page.cjs new file mode 100644 index 0000000..9846c6f --- /dev/null +++ b/brochure/v9/convert-1page.cjs @@ -0,0 +1,27 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const htmlFile = path.join(__dirname, 'slides', 'brochure-dashboard-1page.html'); + console.log('Converting CEO Dashboard v9 (Minimal White + Indigo) 1-page brochure...'); + + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error: ${err.message}`); + } + + const outputPath = path.join(__dirname, 'sam-brochure-v9-dashboard-1page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v9/convert-2page.cjs b/brochure/v9/convert-2page.cjs new file mode 100644 index 0000000..a635175 --- /dev/null +++ b/brochure/v9/convert-2page.cjs @@ -0,0 +1,31 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); +const html2pptx = require(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/html2pptx.js')); + +async function main() { + const pres = new PptxGenJS(); + + pres.defineLayout({ name: 'PORTRAIT_9x16', width: 5.625, height: 10 }); + pres.layout = 'PORTRAIT_9x16'; + + const slidesDir = path.join(__dirname, 'slides'); + const slides = ['brochure-dashboard-front.html', 'brochure-dashboard-back.html']; + + for (const file of slides) { + const htmlFile = path.join(slidesDir, file); + console.log(`Converting ${file} ...`); + try { + await html2pptx(htmlFile, pres); + } catch (err) { + console.error(`Error on ${file}: ${err.message}`); + } + } + + const outputPath = path.join(__dirname, 'sam-brochure-v9-dashboard-2page.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log(`\nPPTX created: ${outputPath}`); +} + +main().catch(console.error); diff --git a/brochure/v9/sam-brochure-v9-dashboard-1page.pptx b/brochure/v9/sam-brochure-v9-dashboard-1page.pptx new file mode 100644 index 0000000..1b7de30 Binary files /dev/null and b/brochure/v9/sam-brochure-v9-dashboard-1page.pptx differ diff --git a/brochure/v9/sam-brochure-v9-dashboard-2page.pptx b/brochure/v9/sam-brochure-v9-dashboard-2page.pptx new file mode 100644 index 0000000..2a61715 Binary files /dev/null and b/brochure/v9/sam-brochure-v9-dashboard-2page.pptx differ diff --git a/brochure/v9/slides/brochure-dashboard-1page.html b/brochure/v9/slides/brochure-dashboard-1page.html new file mode 100644 index 0000000..3b707b6 --- /dev/null +++ b/brochure/v9/slides/brochure-dashboard-1page.html @@ -0,0 +1,264 @@ + + + + + + + + +
+ + +
+ +
+

v9

+
+ + +
+

EXECUTIVE DASHBOARD

+

대표님, 우리 회사

+

지금 어떤 상태인가요?

+

보고 대기 없이, 로그인 한 번이면 전사 현황이 한눈에.

+
+ + +
+ + +
+ +
+
+
+
+

SAM CEO Dashboard

+
+ +
+
+

5.2억

+

+15.3%

+

월 매출

+
+
+

127건

+

+8건

+

누적 수주

+
+
+

96%

+

목표 달성

+

납기 준수율

+
+
+

5건

+

즉시 처리

+

승인 대기

+
+
+ +
+
+

월별 매출 추이

+ + + + + +
+
+ + + + + + + +
+
+
+

영업1팀

+
+
+
+

영업2팀

+
+
+
+

생산팀

+
+
+
+

품질팀

+
+
+
+
+
+ + +
+
+ + + + +

즉시 현황 파악

+

3초면 전사 현황

+
+
+ + + + + +

데이터로 판단

+

KPI/팀 성과 비교

+
+
+ + + + +

모바일 승인

+

즉시 결재 처리

+
+
+ + +
+ + +
+

핵심 기능

+
+
+
+

실시간 KPI 카드

+
+
+
+

조직 실적 트리

+
+
+
+

역할별 수당 현황

+
+
+
+

승인 대기 알림

+
+
+
+

기간별 트렌드

+
+
+
+

수익 시뮬레이터

+
+
+
+

모바일 대응

+
+
+
+ + +
+ + +
+

역할별 맞춤 화면

+
+
+

CEO

+

전사 KPI

+
+
+

관리자

+

팀 실적

+
+
+

운영자

+

인력/승인

+
+
+

영업자

+

내 실적

+
+
+
+ + +
+ + +
+

투자 비용

+
+

2,000만원

+

+ 월 50만원 (유지보수)

+
+

CEO 대시보드 + 견적/수주 + 생산 + 인사/회계 포함

+
+ + +
+

도입 프로세스

+
+
+

01

+

현장 인터뷰

+
+ + + +
+

02

+

맞춤 개발

+
+ + + +
+

03

+

데이터 이관

+
+ + + +
+

04

+

교육/안정화

+
+
+
+ + +
+
+
+

대표님 전용 대시보드를 직접 체험

+
+
+

www.sam.it.kr

+
+
+
+
+

SAM

+
+ + \ No newline at end of file diff --git a/brochure/v9/slides/brochure-dashboard-back.html b/brochure/v9/slides/brochure-dashboard-back.html new file mode 100644 index 0000000..6bd4f11 --- /dev/null +++ b/brochure/v9/slides/brochure-dashboard-back.html @@ -0,0 +1,227 @@ + + + + + + + + +
+ + +
+ +
+

FEATURES & PRICING

+
+ + +
+

대시보드 핵심 기능

+
+ +
+
+

실시간 KPI 카드

+

매출, 수주, 납기율, 승인 대기

+
+ +
+
+

조직 실적 트리

+

계층별 팀/개인 실적 펼쳐보기

+
+ +
+
+

역할별 수당 현황

+

판매자/관리자/협업자 배분 확인

+
+ +
+
+

승인 대기 알림

+

가입/지급 미처리 빨간 뱃지

+
+ +
+
+

기간별 트렌드

+

당월/분기/연간 추이 차트

+
+ +
+
+

수익 시뮬레이터

+

가상 시나리오 수당/마진 계산

+
+ +
+
+

모바일 대응

+

스마트폰으로 KPI 확인/승인

+
+
+
+ + +
+ + +
+

역할별 맞춤 화면

+
+ +
+ + + + + +

CEO

+

전사 KPI 총괄

+
+ +
+ + + + + + +

관리자

+

팀 실적 관리

+
+ +
+ + + + + + + + +

운영자

+

인력/승인 관리

+
+ +
+ + + + + + + +

영업자

+

내 실적 조회

+
+
+
+ + +
+ + +
+

투자 비용

+
+ +
+

대시보드 포함 기본 패키지

+

2,000만원

+

+ 월 50만원 (유지보수)

+
+

CEO 대시보드 + 견적/수주 + 생산

+

인사/회계 무료 포함

+
+
+ +
+

추가 옵션 (선택)

+
+
+

생산공정 관리

+

+500만원

+
+
+

품질관리(인정검사)

+

+2,000만원

+
+
+

AI 견적 자동 생성

+

월 10~20만원

+
+
+
+
+
+ + +
+ + +
+

도입 프로세스

+
+
+

01

+

현장 인터뷰

+

1~2주

+
+ + + +
+

02

+

맞춤 개발

+

2~4주

+
+ + + +
+

03

+

데이터 이관

+

1~2주

+
+ + + +
+

04

+

교육/안정화

+

1~2주

+
+
+
+ + +
+
+
+

대표님 전용 대시보드를 직접 체험

+
+
+

www.sam.it.kr

+
+
+
+ + +
+

SAM

+
+ + \ No newline at end of file diff --git a/brochure/v9/slides/brochure-dashboard-front.html b/brochure/v9/slides/brochure-dashboard-front.html new file mode 100644 index 0000000..87a7f93 --- /dev/null +++ b/brochure/v9/slides/brochure-dashboard-front.html @@ -0,0 +1,181 @@ + + + + + + + + +
+ + +
+ +
+

v9

+
+ + +
+

EXECUTIVE DASHBOARD

+

대표님, 우리 회사

+

지금 어떤 상태인가요?

+

매출, 수주, 조직 실적, 승인 대기

+

더 이상 보고를 기다리지 마세요.

+
+ + +
+ + +
+ +
+
+
+
+

SAM CEO Dashboard

+
+ +
+ +
+ + + + + +

5.2억

+

+15.3%

+

월 매출

+
+ +
+ + + + +

127건

+

+8건

+

누적 수주

+
+ +
+ + + + +

96%

+

목표 달성

+

납기 준수율

+
+ +
+ + + + + +

5건

+

즉시 처리

+

승인 대기

+
+
+ +
+ +
+

월별 매출 추이

+ + + + + + +
+ +
+ + + + + + + +
+
+
+

영업1팀

+
+
+
+

영업2팀

+
+
+
+

생산팀

+
+
+
+

품질팀

+
+
+
+
+
+ + +
+ +
+ + + + +

즉시 현황 파악

+

로그인 3초면

+

전사 현황 확인

+
+ +
+ + + + + +

데이터로 판단

+

감이 아닌 숫자로

+

KPI/팀 성과 비교

+
+ +
+ + + + +

모바일 승인

+

이동중에도 즉시

+

결재/승인 처리

+
+
+ + +
+
+

SAM

+

www.sam.it.kr

+
+

뒷면에서 상세 기능을 확인하세요

+
+ + \ No newline at end of file diff --git a/TODO.md b/dev/TODO.md similarity index 100% rename from TODO.md rename to dev/TODO.md diff --git a/changes/20250108_order_management_phase1.md b/dev/changes/20250108_order_management_phase1.md similarity index 98% rename from changes/20250108_order_management_phase1.md rename to dev/changes/20250108_order_management_phase1.md index 8aec091..40b5f7d 100644 --- a/changes/20250108_order_management_phase1.md +++ b/dev/changes/20250108_order_management_phase1.md @@ -90,5 +90,5 @@ CANCELLED → DRAFT (복구 가능) - Swagger UI에서 API 테스트 가능: http://api.sam.kr/api-docs/index.html ## 🔗 관련 문서 -- 계획 문서: `docs/plans/order-management-plan.md` +- 계획 문서: `docs/dev_plans/order-management-plan.md` - 참고 패턴: `app/Services/WorkOrderService.php`, `app/Http/Controllers/Api/V1/WorkOrderController.php` diff --git a/changes/20251111_1450_admin_tenant_selector.md b/dev/changes/20251111_admin_tenant_selector.md similarity index 98% rename from changes/20251111_1450_admin_tenant_selector.md rename to dev/changes/20251111_admin_tenant_selector.md index 35d4e6a..9ddacc9 100644 --- a/changes/20251111_1450_admin_tenant_selector.md +++ b/dev/changes/20251111_admin_tenant_selector.md @@ -211,7 +211,7 @@ class ProductResource extends Resource ## 🔗 관련 문서 -- 이전 작업: `/Users/hskwon/Works/@KD_SAM/SAM/docs/changes/20251111_1354_admin_users_improvement.md` +- 이전 작업: `docs/changes/20251111_admin_users_improvement.md` - CLAUDE.md: `/Users/hskwon/Works/@KD_SAM/SAM/CLAUDE.md` --- diff --git a/changes/20251111_1354_admin_users_improvement.md b/dev/changes/20251111_admin_users_improvement.md similarity index 100% rename from changes/20251111_1354_admin_users_improvement.md rename to dev/changes/20251111_admin_users_improvement.md diff --git a/changes/2025-12-15_items-api-files-fix.md b/dev/changes/20251215_items-api-files-fix.md similarity index 100% rename from changes/2025-12-15_items-api-files-fix.md rename to dev/changes/20251215_items-api-files-fix.md diff --git a/changes/20251225_employee_user_linkage.md b/dev/changes/20251225_employee_user_linkage.md similarity index 97% rename from changes/20251225_employee_user_linkage.md rename to dev/changes/20251225_employee_user_linkage.md index 3612ffd..b4987e6 100644 --- a/changes/20251225_employee_user_linkage.md +++ b/dev/changes/20251225_employee_user_linkage.md @@ -75,4 +75,4 @@ public function revokeAccount(int $id): TenantUserProfile - 기존 사원 데이터에 영향 없음 ## 🔗 관련 문서 -- docs/plans/employee-user-linkage-plan.md +- docs/dev_plans/employee-user-linkage-plan.md diff --git a/changes/20251230_1430_react_fcm_push_notification.md b/dev/changes/20251230_react_fcm_push_notification.md similarity index 97% rename from changes/20251230_1430_react_fcm_push_notification.md rename to dev/changes/20251230_react_fcm_push_notification.md index 8b3429c..0f02bed 100644 --- a/changes/20251230_1430_react_fcm_push_notification.md +++ b/dev/changes/20251230_react_fcm_push_notification.md @@ -2,7 +2,7 @@ **날짜:** 2025-12-30 14:30 **작업자:** Claude Code -**관련 문서:** docs/plans/react-fcm-push-notification-plan.md +**관련 문서:** docs/dev_plans/react-fcm-push-notification-plan.md ## 📋 변경 개요 diff --git a/changes/20260102_quote_bom_calculation_api.md b/dev/changes/20260102_quote_bom_calculation_api.md similarity index 98% rename from changes/20260102_quote_bom_calculation_api.md rename to dev/changes/20260102_quote_bom_calculation_api.md index 7b1c632..856302d 100644 --- a/changes/20260102_quote_bom_calculation_api.md +++ b/dev/changes/20260102_quote_bom_calculation_api.md @@ -94,7 +94,7 @@ Route::post('/calculate/bom', [QuoteController::class, 'calculateBom'])->name('v - 기존 API에 영향 없음 (신규 엔드포인트 추가) ## 🔗 관련 문서 -- 계획 문서: `docs/plans/quote-calculation-api-plan.md` +- 계획 문서: `docs/dev_plans/quote-calculation-api-plan.md` - FormulaEvaluatorService: `api/app/Services/Quote/FormulaEvaluatorService.php` ## 📊 API 사용 예시 diff --git a/changes/20260109_handover_report_api_integration.md b/dev/changes/20260109_handover_report_api_integration.md similarity index 96% rename from changes/20260109_handover_report_api_integration.md rename to dev/changes/20260109_handover_report_api_integration.md index 63c9186..30f5510 100644 --- a/changes/20260109_handover_report_api_integration.md +++ b/dev/changes/20260109_handover_report_api_integration.md @@ -13,7 +13,7 @@ | 파일 | 변경 내용 | |------|----------| | `react/src/components/business/construction/handover-report/actions.ts` | Mock → API 완전 변환 | -| `docs/plans/sub/handover-report-plan.md` | 진행 상태 업데이트 | +| `docs/dev_plans/sub/handover-report-plan.md` | 진행 상태 업데이트 | ## 🔧 상세 변경 사항 diff --git a/changes/20260122_card_transaction_dashboard_api.md b/dev/changes/20260122_card_transaction_dashboard_api.md similarity index 94% rename from changes/20260122_card_transaction_dashboard_api.md rename to dev/changes/20260122_card_transaction_dashboard_api.md index 2c2224d..6838f82 100644 --- a/changes/20260122_card_transaction_dashboard_api.md +++ b/dev/changes/20260122_card_transaction_dashboard_api.md @@ -2,7 +2,7 @@ **날짜:** 2026-01-22 **작업자:** Claude Code -**계획 문서:** docs/plans/card-management-section-plan.md +**계획 문서:** docs/dev_plans/card-management-section-plan.md **Phase:** 1.1 카드 거래 대시보드 API 개발 ## 📋 변경 개요 @@ -71,5 +71,5 @@ Route::get('/dashboard', [CardTransactionController::class, 'dashboard']) 특이사항 없음 (DB 스키마 변경 없음) ## 🔗 관련 문서 -- 계획 문서: `docs/plans/card-management-section-plan.md` +- 계획 문서: `docs/dev_plans/card-management-section-plan.md` - 기존 API 문서: `api/app/Swagger/v1/CardTransactionApi.php` \ No newline at end of file diff --git a/changes/20260122_loan_dashboard_api.md b/dev/changes/20260122_loan_dashboard_api.md similarity index 93% rename from changes/20260122_loan_dashboard_api.md rename to dev/changes/20260122_loan_dashboard_api.md index 9346a1c..957e54b 100644 --- a/changes/20260122_loan_dashboard_api.md +++ b/dev/changes/20260122_loan_dashboard_api.md @@ -2,7 +2,7 @@ **날짜:** 2026-01-22 **작업자:** Claude Code -**계획 문서:** docs/plans/card-management-section-plan.md +**계획 문서:** docs/dev_plans/card-management-section-plan.md **Phase:** 1.2 가지급금 대시보드 API 개발 ## 📋 변경 개요 @@ -78,6 +78,6 @@ Route::get('/dashboard', [LoanController::class, 'dashboard']) 특이사항 없음 (DB 스키마 변경 없음) ## 🔗 관련 문서 -- 계획 문서: `docs/plans/card-management-section-plan.md` +- 계획 문서: `docs/dev_plans/card-management-section-plan.md` - Phase 1.1 변경: `docs/changes/20260122_card_transaction_dashboard_api.md` - 기존 API 문서: `api/app/Swagger/v1/LoanApi.php` \ No newline at end of file diff --git a/changes/20260122_tax_simulation_api.md b/dev/changes/20260122_tax_simulation_api.md similarity index 95% rename from changes/20260122_tax_simulation_api.md rename to dev/changes/20260122_tax_simulation_api.md index ee32165..d38b4d2 100644 --- a/changes/20260122_tax_simulation_api.md +++ b/dev/changes/20260122_tax_simulation_api.md @@ -2,7 +2,7 @@ **날짜:** 2026-01-22 **작업자:** Claude Code -**계획 문서:** docs/plans/card-management-section-plan.md +**계획 문서:** docs/dev_plans/card-management-section-plan.md **Phase:** 1.3 세금 시뮬레이션 API 개발 ## 📋 변경 개요 @@ -98,7 +98,7 @@ Route::get('/tax-simulation', [LoanController::class, 'taxSimulation']) 특이사항 없음 (DB 스키마 변경 없음) ## 🔗 관련 문서 -- 계획 문서: `docs/plans/card-management-section-plan.md` +- 계획 문서: `docs/dev_plans/card-management-section-plan.md` - Phase 1.1 변경: `docs/changes/20260122_card_transaction_dashboard_api.md` - Phase 1.2 변경: `docs/changes/20260122_loan_dashboard_api.md` - 기존 API 문서: `api/app/Swagger/v1/LoanApi.php` \ No newline at end of file diff --git a/changes/20260126_quote_v2_test_detail_api.md b/dev/changes/20260126_quote_v2_test_detail_api.md similarity index 96% rename from changes/20260126_quote_v2_test_detail_api.md rename to dev/changes/20260126_quote_v2_test_detail_api.md index 47aae94..bab482e 100644 --- a/changes/20260126_quote_v2_test_detail_api.md +++ b/dev/changes/20260126_quote_v2_test_detail_api.md @@ -2,7 +2,7 @@ **날짜:** 2026-01-26 **작업자:** Claude Code -**관련 계획:** docs/plans/quote-management-url-migration-plan.md (Step 1.3, 1.4) +**관련 계획:** docs/dev_plans/quote-management-url-migration-plan.md (Step 1.3, 1.4) ## 📋 변경 개요 V2 견적 상세/수정 테스트 페이지(test/[id])에서 Mock 데이터를 실제 API 연동으로 변경 @@ -135,7 +135,7 @@ const handleSave = useCallback(async (data: QuoteFormDataV2, saveType: "temporar - [ ] Step 2.3: 기존 V1 페이지 처리 결정 ## 🔗 관련 문서 -- 계획 문서: `docs/plans/quote-management-url-migration-plan.md` +- 계획 문서: `docs/dev_plans/quote-management-url-migration-plan.md` - Step 1.1 변경 내역: `docs/changes/20260126_quote_v2_transform_functions.md` - Step 1.2 변경 내역: `docs/changes/20260126_quote_v2_test_new_api.md` - V2 컴포넌트: `react/src/components/quotes/QuoteRegistrationV2.tsx` \ No newline at end of file diff --git a/changes/20260126_quote_v2_test_new_api.md b/dev/changes/20260126_quote_v2_test_new_api.md similarity index 93% rename from changes/20260126_quote_v2_test_new_api.md rename to dev/changes/20260126_quote_v2_test_new_api.md index c4ad522..05e50c2 100644 --- a/changes/20260126_quote_v2_test_new_api.md +++ b/dev/changes/20260126_quote_v2_test_new_api.md @@ -2,7 +2,7 @@ **날짜:** 2026-01-26 **작업자:** Claude Code -**관련 계획:** docs/plans/quote-management-url-migration-plan.md (Step 1.2) +**관련 계획:** docs/dev_plans/quote-management-url-migration-plan.md (Step 1.2) ## 📋 변경 개요 V2 견적 등록 테스트 페이지(test-new)에서 Mock 저장을 실제 API 연동으로 변경 @@ -76,6 +76,6 @@ const handleSave = useCallback(async (data: QuoteFormDataV2, saveType: 'temporar - [ ] test/[id] 수정 API 연동 (updateQuote) ## 🔗 관련 문서 -- 계획 문서: `docs/plans/quote-management-url-migration-plan.md` +- 계획 문서: `docs/dev_plans/quote-management-url-migration-plan.md` - Step 1.1 변경 내역: `docs/changes/20260126_quote_v2_transform_functions.md` - V2 컴포넌트: `react/src/components/quotes/QuoteRegistrationV2.tsx` \ No newline at end of file diff --git a/changes/20260126_quote_v2_transform_functions.md b/dev/changes/20260126_quote_v2_transform_functions.md similarity index 94% rename from changes/20260126_quote_v2_transform_functions.md rename to dev/changes/20260126_quote_v2_transform_functions.md index 35cc720..3341285 100644 --- a/changes/20260126_quote_v2_transform_functions.md +++ b/dev/changes/20260126_quote_v2_transform_functions.md @@ -2,7 +2,7 @@ **날짜:** 2026-01-26 **작업자:** Claude Code -**관련 계획:** docs/plans/quote-management-url-migration-plan.md (Step 1.1) +**관련 계획:** docs/dev_plans/quote-management-url-migration-plan.md (Step 1.1) ## 📋 변경 개요 V2 견적 컴포넌트(QuoteRegistrationV2)에서 사용할 데이터 변환 함수 구현 @@ -82,5 +82,5 @@ API 응답을 V2 폼 데이터로 변환 - [ ] test/[id] 수정 API 연동 (updateQuote) ## 🔗 관련 문서 -- 계획 문서: `docs/plans/quote-management-url-migration-plan.md` +- 계획 문서: `docs/dev_plans/quote-management-url-migration-plan.md` - V2 컴포넌트: `react/src/components/quotes/QuoteRegistrationV2.tsx` \ No newline at end of file diff --git a/changes/20260126_quote_v2_writer_auth_fix.md b/dev/changes/20260126_quote_v2_writer_auth_fix.md similarity index 90% rename from changes/20260126_quote_v2_writer_auth_fix.md rename to dev/changes/20260126_quote_v2_writer_auth_fix.md index be09b11..a1ae2b5 100644 --- a/changes/20260126_quote_v2_writer_auth_fix.md +++ b/dev/changes/20260126_quote_v2_writer_auth_fix.md @@ -2,7 +2,7 @@ **날짜:** 2026-01-26 **작업자:** Claude Code -**관련 계획:** docs/plans/quote-management-url-migration-plan.md (Phase 1 버그 수정) +**관련 계획:** docs/dev_plans/quote-management-url-migration-plan.md (Phase 1 버그 수정) ## 📋 변경 개요 V2 견적 등록 컴포넌트에서 작성자 필드가 "드미트리"로 하드코딩된 버그 수정 @@ -72,5 +72,5 @@ useEffect(() => { 3. **edit/view 모드**: initialData의 writer 값 유지 (덮어쓰지 않음) ## 🔗 관련 문서 -- 계획 문서: `docs/plans/quote-management-url-migration-plan.md` +- 계획 문서: `docs/dev_plans/quote-management-url-migration-plan.md` - AuthContext: `react/src/contexts/AuthContext.tsx` \ No newline at end of file diff --git a/changes/20260128_document_management_phase1_1.md b/dev/changes/20260128_document_management_phase1_1.md similarity index 96% rename from changes/20260128_document_management_phase1_1.md rename to dev/changes/20260128_document_management_phase1_1.md index 3e8431b..375dffc 100644 --- a/changes/20260128_document_management_phase1_1.md +++ b/dev/changes/20260128_document_management_phase1_1.md @@ -98,7 +98,7 @@ ## 🔗 관련 문서 -- 계획 문서: `docs/plans/document-management-system-plan.md` +- 계획 문서: `docs/dev_plans/document-management-system-plan.md` - 다음 작업: Phase 1.2 - 모델 생성 (Document, DocumentApproval, DocumentData, DocumentAttachment) ## ⚠️ 배포 시 주의사항 diff --git a/changes/20260128_document_management_phase1_5.md b/dev/changes/20260128_document_management_phase1_5.md similarity index 96% rename from changes/20260128_document_management_phase1_5.md rename to dev/changes/20260128_document_management_phase1_5.md index 779ded9..b923407 100644 --- a/changes/20260128_document_management_phase1_5.md +++ b/dev/changes/20260128_document_management_phase1_5.md @@ -56,4 +56,4 @@ ## 🔗 관련 문서 - Phase 1.1: 마이그레이션 (`20260128_document_management_phase1_1.md`) - Phase 1.2: 모델 생성 (별도 문서 없음, 커밋 참조) -- 계획 문서: `docs/plans/document-management-system-plan.md` \ No newline at end of file +- 계획 문서: `docs/dev_plans/document-management-system-plan.md` \ No newline at end of file diff --git a/changes/20260128_kd_items_migration_phase1.md b/dev/changes/20260128_kd_items_migration_phase1.md similarity index 95% rename from changes/20260128_kd_items_migration_phase1.md rename to dev/changes/20260128_kd_items_migration_phase1.md index a5db013..2147df0 100644 --- a/changes/20260128_kd_items_migration_phase1.md +++ b/dev/changes/20260128_kd_items_migration_phase1.md @@ -2,7 +2,7 @@ **날짜:** 2026-01-28 **작업자:** Claude Code -**관련 문서:** docs/plans/kd-items-migration-plan.md +**관련 문서:** docs/dev_plans/kd-items-migration-plan.md ## 📋 변경 개요 diff --git a/changes/20260128_kd_items_migration_phase3.md b/dev/changes/20260128_kd_items_migration_phase3.md similarity index 94% rename from changes/20260128_kd_items_migration_phase3.md rename to dev/changes/20260128_kd_items_migration_phase3.md index 6d0d3ca..1e5da6c 100644 --- a/changes/20260128_kd_items_migration_phase3.md +++ b/dev/changes/20260128_kd_items_migration_phase3.md @@ -2,7 +2,7 @@ **날짜:** 2026-01-28 **작업자:** Claude Code -**관련 문서:** docs/plans/kd-items-migration-plan.md +**관련 문서:** docs/dev_plans/kd-items-migration-plan.md ## 📋 변경 개요 @@ -13,7 +13,7 @@ | 파일 | 설명 | |------|------| | `api/database/seeders/Kyungdong/KyungdongItemSeeder.php` | Phase 3.1, 3.2 메서드 추가 | -| `docs/plans/kd-items-migration-plan.md` | Phase 3 완료 상태 업데이트 | +| `docs/dev_plans/kd-items-migration-plan.md` | Phase 3 완료 상태 업데이트 | ## 🔧 상세 변경 사항 diff --git a/changes/20260205_sus_inspection_template.md b/dev/changes/20260205_sus_inspection_template.md similarity index 92% rename from changes/20260205_sus_inspection_template.md rename to dev/changes/20260205_sus_inspection_template.md index 9d0bd4a..3d55595 100644 --- a/changes/20260205_sus_inspection_template.md +++ b/dev/changes/20260205_sus_inspection_template.md @@ -2,7 +2,7 @@ **날짜:** 2026-02-05 **작업자:** Claude Code -**관련 계획:** docs/plans/incoming-inspection-templates-plan.md +**관련 계획:** docs/dev_plans/incoming-inspection-templates-plan.md ## 📋 변경 개요 5130 레거시 수입검사 양식 전환 작업 - Phase 1 완료 @@ -18,7 +18,7 @@ - `document_template_columns` - 84건 INSERT (7개 컬럼 × 12개 템플릿 19-30) ### 문서 변경 -- `docs/plans/incoming-inspection-templates-plan.md` - 진행 상태 업데이트 +- `docs/dev_plans/incoming-inspection-templates-plan.md` - 진행 상태 업데이트 ## 🔧 상세 변경 사항 @@ -102,5 +102,5 @@ 4. React resolve API 테스트 ## 🔗 관련 문서 -- 계획 문서: `docs/plans/incoming-inspection-templates-plan.md` +- 계획 문서: `docs/dev_plans/incoming-inspection-templates-plan.md` - 레거시 참조: `5130/instock/i_SUSplate.php` \ No newline at end of file diff --git a/data/analysis/bom-item-mapping-analysis.md b/dev/data/analysis/bom-item-mapping-analysis.md similarity index 99% rename from data/analysis/bom-item-mapping-analysis.md rename to dev/data/analysis/bom-item-mapping-analysis.md index bd056ec..2d9c98d 100644 --- a/data/analysis/bom-item-mapping-analysis.md +++ b/dev/data/analysis/bom-item-mapping-analysis.md @@ -209,4 +209,4 @@ BOM 산출 로직에서 단가를 가져오는 5130 테이블: | `api/app/Services/Quote/QuoteCalculationService.php` | 자동산출 실행 | | `api/app/Models/Items/Item.php` | Items 모델 | | `docs/features/quotes/README.md` | 견적 시스템 문서 | -| `docs/plans/bom-item-mapping-plan.md` | 후속 작업 계획 | \ No newline at end of file +| `docs/dev_plans/bom-item-mapping-plan.md` | 후속 작업 계획 | \ No newline at end of file diff --git a/data/analysis/item-db-analysis.md b/dev/data/analysis/item-db-analysis.md similarity index 100% rename from data/analysis/item-db-analysis.md rename to dev/data/analysis/item-db-analysis.md diff --git a/data/견적/견적관리 목록/개별삭제.png b/dev/data/견적/견적관리 목록/개별삭제.png similarity index 100% rename from data/견적/견적관리 목록/개별삭제.png rename to dev/data/견적/견적관리 목록/개별삭제.png diff --git a/data/견적/견적관리 목록/견적관리_목록.png b/dev/data/견적/견적관리 목록/견적관리_목록.png similarity index 100% rename from data/견적/견적관리 목록/견적관리_목록.png rename to dev/data/견적/견적관리 목록/견적관리_목록.png diff --git a/data/견적/견적관리 목록/견적관리_목록_상태별 탭 처리.png b/dev/data/견적/견적관리 목록/견적관리_목록_상태별 탭 처리.png similarity index 100% rename from data/견적/견적관리 목록/견적관리_목록_상태별 탭 처리.png rename to dev/data/견적/견적관리 목록/견적관리_목록_상태별 탭 처리.png diff --git a/data/견적/견적관리 목록/견적관리_목록_테이블 수정모드-1.png b/dev/data/견적/견적관리 목록/견적관리_목록_테이블 수정모드-1.png similarity index 100% rename from data/견적/견적관리 목록/견적관리_목록_테이블 수정모드-1.png rename to dev/data/견적/견적관리 목록/견적관리_목록_테이블 수정모드-1.png diff --git a/data/견적/견적관리 목록/견적관리_목록_테이블 수정모드.png b/dev/data/견적/견적관리 목록/견적관리_목록_테이블 수정모드.png similarity index 100% rename from data/견적/견적관리 목록/견적관리_목록_테이블 수정모드.png rename to dev/data/견적/견적관리 목록/견적관리_목록_테이블 수정모드.png diff --git a/data/견적/견적관리 목록/일괄삭제.png b/dev/data/견적/견적관리 목록/일괄삭제.png similarity index 100% rename from data/견적/견적관리 목록/일괄삭제.png rename to dev/data/견적/견적관리 목록/일괄삭제.png diff --git a/data/견적/견적관리 목록/해상도보다 테이블이 더 넓을 시 하단 스크롤바 적용.png b/dev/data/견적/견적관리 목록/해상도보다 테이블이 더 넓을 시 하단 스크롤바 적용.png similarity index 100% rename from data/견적/견적관리 목록/해상도보다 테이블이 더 넓을 시 하단 스크롤바 적용.png rename to dev/data/견적/견적관리 목록/해상도보다 테이블이 더 넓을 시 하단 스크롤바 적용.png diff --git a/data/견적/견적관리_수정 (3컬럼).png b/dev/data/견적/견적관리_수정 (3컬럼).png similarity index 100% rename from data/견적/견적관리_수정 (3컬럼).png rename to dev/data/견적/견적관리_수정 (3컬럼).png diff --git a/data/견적/견적관리목록/거래처 선택.png b/dev/data/견적/견적관리목록/거래처 선택.png similarity index 100% rename from data/견적/견적관리목록/거래처 선택.png rename to dev/data/견적/견적관리목록/거래처 선택.png diff --git a/data/견적/견적관리목록/견적등록 (3컬럼).png b/dev/data/견적/견적관리목록/견적등록 (3컬럼).png similarity index 100% rename from data/견적/견적관리목록/견적등록 (3컬럼).png rename to dev/data/견적/견적관리목록/견적등록 (3컬럼).png diff --git a/data/견적/견적관리목록/다중 견적 산출 시.png b/dev/data/견적/견적관리목록/다중 견적 산출 시.png similarity index 100% rename from data/견적/견적관리목록/다중 견적 산출 시.png rename to dev/data/견적/견적관리목록/다중 견적 산출 시.png diff --git a/data/견적/견적관리목록/자동 산출 결과 리스트.png b/dev/data/견적/견적관리목록/자동 산출 결과 리스트.png similarity index 100% rename from data/견적/견적관리목록/자동 산출 결과 리스트.png rename to dev/data/견적/견적관리목록/자동 산출 결과 리스트.png diff --git a/data/견적/견적관리목록/자동 산출 결과 리스트_삭제.png b/dev/data/견적/견적관리목록/자동 산출 결과 리스트_삭제.png similarity index 100% rename from data/견적/견적관리목록/자동 산출 결과 리스트_삭제.png rename to dev/data/견적/견적관리목록/자동 산출 결과 리스트_삭제.png diff --git a/data/견적/견적관리목록/필수 항목 벨리데이션 체크.png b/dev/data/견적/견적관리목록/필수 항목 벨리데이션 체크.png similarity index 100% rename from data/견적/견적관리목록/필수 항목 벨리데이션 체크.png rename to dev/data/견적/견적관리목록/필수 항목 벨리데이션 체크.png diff --git a/data/견적/견적관리목록/현장명 선택.png b/dev/data/견적/견적관리목록/현장명 선택.png similarity index 100% rename from data/견적/견적관리목록/현장명 선택.png rename to dev/data/견적/견적관리목록/현장명 선택.png diff --git a/data/견적/견적산출_Flow.pdf b/dev/data/견적/견적산출_Flow.pdf similarity index 100% rename from data/견적/견적산출_Flow.pdf rename to dev/data/견적/견적산출_Flow.pdf diff --git a/data/견적/견적상세/MES Solution Website Structure 251127.png b/dev/data/견적/견적상세/MES Solution Website Structure 251127.png similarity index 100% rename from data/견적/견적상세/MES Solution Website Structure 251127.png rename to dev/data/견적/견적상세/MES Solution Website Structure 251127.png diff --git a/data/견적/견적상세/MES Solution Website Structure 251148.png b/dev/data/견적/견적상세/MES Solution Website Structure 251148.png similarity index 100% rename from data/견적/견적상세/MES Solution Website Structure 251148.png rename to dev/data/견적/견적상세/MES Solution Website Structure 251148.png diff --git a/data/견적/견적상세/견적관리_상세 (3컬럼)-1.png b/dev/data/견적/견적상세/견적관리_상세 (3컬럼)-1.png similarity index 100% rename from data/견적/견적상세/견적관리_상세 (3컬럼)-1.png rename to dev/data/견적/견적상세/견적관리_상세 (3컬럼)-1.png diff --git a/data/견적/견적상세/견적관리_상세 (3컬럼).png b/dev/data/견적/견적상세/견적관리_상세 (3컬럼).png similarity index 100% rename from data/견적/견적상세/견적관리_상세 (3컬럼).png rename to dev/data/견적/견적상세/견적관리_상세 (3컬럼).png diff --git a/data/견적/견적상세/견적산출내역서-1.png b/dev/data/견적/견적상세/견적산출내역서-1.png similarity index 100% rename from data/견적/견적상세/견적산출내역서-1.png rename to dev/data/견적/견적상세/견적산출내역서-1.png diff --git a/data/견적/견적상세/견적산출내역서.png b/dev/data/견적/견적상세/견적산출내역서.png similarity index 100% rename from data/견적/견적상세/견적산출내역서.png rename to dev/data/견적/견적상세/견적산출내역서.png diff --git a/data/견적/견적상세/견적서.png b/dev/data/견적/견적상세/견적서.png similarity index 100% rename from data/견적/견적상세/견적서.png rename to dev/data/견적/견적상세/견적서.png diff --git a/data/견적/견적수식관리/MES Solution Website Structure 251129.png b/dev/data/견적/견적수식관리/MES Solution Website Structure 251129.png similarity index 100% rename from data/견적/견적수식관리/MES Solution Website Structure 251129.png rename to dev/data/견적/견적수식관리/MES Solution Website Structure 251129.png diff --git a/data/견적/견적수식관리/결과 출력 방식.png b/dev/data/견적/견적수식관리/결과 출력 방식.png similarity index 100% rename from data/견적/견적수식관리/결과 출력 방식.png rename to dev/data/견적/견적수식관리/결과 출력 방식.png diff --git a/data/견적/견적수식관리/계산식_변수.png b/dev/data/견적/견적수식관리/계산식_변수.png similarity index 100% rename from data/견적/견적수식관리/계산식_변수.png rename to dev/data/견적/견적수식관리/계산식_변수.png diff --git a/data/견적/견적수식관리/계산식_품목-1.png b/dev/data/견적/견적수식관리/계산식_품목-1.png similarity index 100% rename from data/견적/견적수식관리/계산식_품목-1.png rename to dev/data/견적/견적수식관리/계산식_품목-1.png diff --git a/data/견적/견적수식관리/계산식_품목-2.png b/dev/data/견적/견적수식관리/계산식_품목-2.png similarity index 100% rename from data/견적/견적수식관리/계산식_품목-2.png rename to dev/data/견적/견적수식관리/계산식_품목-2.png diff --git a/data/견적/견적수식관리/계산식_품목-3.png b/dev/data/견적/견적수식관리/계산식_품목-3.png similarity index 100% rename from data/견적/견적수식관리/계산식_품목-3.png rename to dev/data/견적/견적수식관리/계산식_품목-3.png diff --git a/data/견적/견적수식관리/계산식_품목-4.png b/dev/data/견적/견적수식관리/계산식_품목-4.png similarity index 100% rename from data/견적/견적수식관리/계산식_품목-4.png rename to dev/data/견적/견적수식관리/계산식_품목-4.png diff --git a/data/견적/견적수식관리/계산식_품목.png b/dev/data/견적/견적수식관리/계산식_품목.png similarity index 100% rename from data/견적/견적수식관리/계산식_품목.png rename to dev/data/견적/견적수식관리/계산식_품목.png diff --git a/data/견적/견적수식관리/기준정보_견적수식관리_품목수식관리 섹션.png b/dev/data/견적/견적수식관리/기준정보_견적수식관리_품목수식관리 섹션.png similarity index 100% rename from data/견적/견적수식관리/기준정보_견적수식관리_품목수식관리 섹션.png rename to dev/data/견적/견적수식관리/기준정보_견적수식관리_품목수식관리 섹션.png diff --git a/data/견적/견적수식관리/기준정보_견적수식관리_품목수식관리 섹션_카테고리 수정.png b/dev/data/견적/견적수식관리/기준정보_견적수식관리_품목수식관리 섹션_카테고리 수정.png similarity index 100% rename from data/견적/견적수식관리/기준정보_견적수식관리_품목수식관리 섹션_카테고리 수정.png rename to dev/data/견적/견적수식관리/기준정보_견적수식관리_품목수식관리 섹션_카테고리 수정.png diff --git a/data/견적/견적수식관리/수식 수정-1.png b/dev/data/견적/견적수식관리/수식 수정-1.png similarity index 100% rename from data/견적/견적수식관리/수식 수정-1.png rename to dev/data/견적/견적수식관리/수식 수정-1.png diff --git a/data/견적/견적수식관리/수식 수정-2.png b/dev/data/견적/견적수식관리/수식 수정-2.png similarity index 100% rename from data/견적/견적수식관리/수식 수정-2.png rename to dev/data/견적/견적수식관리/수식 수정-2.png diff --git a/data/견적/견적수식관리/수식 수정.png b/dev/data/견적/견적수식관리/수식 수정.png similarity index 100% rename from data/견적/견적수식관리/수식 수정.png rename to dev/data/견적/견적수식관리/수식 수정.png diff --git a/data/견적/견적수식관리/수식 카테고리 목록.png b/dev/data/견적/견적수식관리/수식 카테고리 목록.png similarity index 100% rename from data/견적/견적수식관리/수식 카테고리 목록.png rename to dev/data/견적/견적수식관리/수식 카테고리 목록.png diff --git a/data/견적/견적수식관리/수식추가.png b/dev/data/견적/견적수식관리/수식추가.png similarity index 100% rename from data/견적/견적수식관리/수식추가.png rename to dev/data/견적/견적수식관리/수식추가.png diff --git a/data/견적/견적수식관리/입력값.png b/dev/data/견적/견적수식관리/입력값.png similarity index 100% rename from data/견적/견적수식관리/입력값.png rename to dev/data/견적/견적수식관리/입력값.png diff --git a/data/견적/견적수식관리/카테고리 추가.png b/dev/data/견적/견적수식관리/카테고리 추가.png similarity index 100% rename from data/견적/견적수식관리/카테고리 추가.png rename to dev/data/견적/견적수식관리/카테고리 추가.png diff --git a/data/견적/견적시스템_분석문서.md b/dev/data/견적/견적시스템_분석문서.md similarity index 100% rename from data/견적/견적시스템_분석문서.md rename to dev/data/견적/견적시스템_분석문서.md diff --git a/data/견적/기준정보_견적수식관리/MES Solution Website Structure 251129.png b/dev/data/견적/기준정보_견적수식관리/MES Solution Website Structure 251129.png similarity index 100% rename from data/견적/기준정보_견적수식관리/MES Solution Website Structure 251129.png rename to dev/data/견적/기준정보_견적수식관리/MES Solution Website Structure 251129.png diff --git a/data/견적/기준정보_견적수식관리/결과 출력 방식.png b/dev/data/견적/기준정보_견적수식관리/결과 출력 방식.png similarity index 100% rename from data/견적/기준정보_견적수식관리/결과 출력 방식.png rename to dev/data/견적/기준정보_견적수식관리/결과 출력 방식.png diff --git a/data/견적/기준정보_견적수식관리/계산식_변수.png b/dev/data/견적/기준정보_견적수식관리/계산식_변수.png similarity index 100% rename from data/견적/기준정보_견적수식관리/계산식_변수.png rename to dev/data/견적/기준정보_견적수식관리/계산식_변수.png diff --git a/data/견적/기준정보_견적수식관리/계산식_품목-1.png b/dev/data/견적/기준정보_견적수식관리/계산식_품목-1.png similarity index 100% rename from data/견적/기준정보_견적수식관리/계산식_품목-1.png rename to dev/data/견적/기준정보_견적수식관리/계산식_품목-1.png diff --git a/data/견적/기준정보_견적수식관리/계산식_품목-2.png b/dev/data/견적/기준정보_견적수식관리/계산식_품목-2.png similarity index 100% rename from data/견적/기준정보_견적수식관리/계산식_품목-2.png rename to dev/data/견적/기준정보_견적수식관리/계산식_품목-2.png diff --git a/data/견적/기준정보_견적수식관리/계산식_품목-3.png b/dev/data/견적/기준정보_견적수식관리/계산식_품목-3.png similarity index 100% rename from data/견적/기준정보_견적수식관리/계산식_품목-3.png rename to dev/data/견적/기준정보_견적수식관리/계산식_품목-3.png diff --git a/data/견적/기준정보_견적수식관리/계산식_품목-4.png b/dev/data/견적/기준정보_견적수식관리/계산식_품목-4.png similarity index 100% rename from data/견적/기준정보_견적수식관리/계산식_품목-4.png rename to dev/data/견적/기준정보_견적수식관리/계산식_품목-4.png diff --git a/data/견적/기준정보_견적수식관리/계산식_품목.png b/dev/data/견적/기준정보_견적수식관리/계산식_품목.png similarity index 100% rename from data/견적/기준정보_견적수식관리/계산식_품목.png rename to dev/data/견적/기준정보_견적수식관리/계산식_품목.png diff --git a/data/견적/기준정보_견적수식관리/기준정보_견적수식관리_품목수식관리 섹션.png b/dev/data/견적/기준정보_견적수식관리/기준정보_견적수식관리_품목수식관리 섹션.png similarity index 100% rename from data/견적/기준정보_견적수식관리/기준정보_견적수식관리_품목수식관리 섹션.png rename to dev/data/견적/기준정보_견적수식관리/기준정보_견적수식관리_품목수식관리 섹션.png diff --git a/data/견적/기준정보_견적수식관리/기준정보_견적수식관리_품목수식관리 섹션_카테고리 수정.png b/dev/data/견적/기준정보_견적수식관리/기준정보_견적수식관리_품목수식관리 섹션_카테고리 수정.png similarity index 100% rename from data/견적/기준정보_견적수식관리/기준정보_견적수식관리_품목수식관리 섹션_카테고리 수정.png rename to dev/data/견적/기준정보_견적수식관리/기준정보_견적수식관리_품목수식관리 섹션_카테고리 수정.png diff --git a/data/견적/기준정보_견적수식관리/수식 수정-1.png b/dev/data/견적/기준정보_견적수식관리/수식 수정-1.png similarity index 100% rename from data/견적/기준정보_견적수식관리/수식 수정-1.png rename to dev/data/견적/기준정보_견적수식관리/수식 수정-1.png diff --git a/data/견적/기준정보_견적수식관리/수식 수정-2.png b/dev/data/견적/기준정보_견적수식관리/수식 수정-2.png similarity index 100% rename from data/견적/기준정보_견적수식관리/수식 수정-2.png rename to dev/data/견적/기준정보_견적수식관리/수식 수정-2.png diff --git a/data/견적/기준정보_견적수식관리/수식 수정.png b/dev/data/견적/기준정보_견적수식관리/수식 수정.png similarity index 100% rename from data/견적/기준정보_견적수식관리/수식 수정.png rename to dev/data/견적/기준정보_견적수식관리/수식 수정.png diff --git a/data/견적/기준정보_견적수식관리/수식 카테고리 목록.png b/dev/data/견적/기준정보_견적수식관리/수식 카테고리 목록.png similarity index 100% rename from data/견적/기준정보_견적수식관리/수식 카테고리 목록.png rename to dev/data/견적/기준정보_견적수식관리/수식 카테고리 목록.png diff --git a/data/견적/기준정보_견적수식관리/수식추가.png b/dev/data/견적/기준정보_견적수식관리/수식추가.png similarity index 100% rename from data/견적/기준정보_견적수식관리/수식추가.png rename to dev/data/견적/기준정보_견적수식관리/수식추가.png diff --git a/data/견적/기준정보_견적수식관리/입력값.png b/dev/data/견적/기준정보_견적수식관리/입력값.png similarity index 100% rename from data/견적/기준정보_견적수식관리/입력값.png rename to dev/data/견적/기준정보_견적수식관리/입력값.png diff --git a/data/견적/기준정보_견적수식관리/카테고리 추가.png b/dev/data/견적/기준정보_견적수식관리/카테고리 추가.png similarity index 100% rename from data/견적/기준정보_견적수식관리/카테고리 추가.png rename to dev/data/견적/기준정보_견적수식관리/카테고리 추가.png diff --git a/data/견적/단가분류관리/MES Solution Website Structure 251131.png b/dev/data/견적/단가분류관리/MES Solution Website Structure 251131.png similarity index 100% rename from data/견적/단가분류관리/MES Solution Website Structure 251131.png rename to dev/data/견적/단가분류관리/MES Solution Website Structure 251131.png diff --git a/data/견적/단가분류관리/MES Solution Website Structure 251132.png b/dev/data/견적/단가분류관리/MES Solution Website Structure 251132.png similarity index 100% rename from data/견적/단가분류관리/MES Solution Website Structure 251132.png rename to dev/data/견적/단가분류관리/MES Solution Website Structure 251132.png diff --git a/data/견적/단가분류관리/MES Solution Website Structure 251133.png b/dev/data/견적/단가분류관리/MES Solution Website Structure 251133.png similarity index 100% rename from data/견적/단가분류관리/MES Solution Website Structure 251133.png rename to dev/data/견적/단가분류관리/MES Solution Website Structure 251133.png diff --git a/data/견적/단가분류관리/기준정보_견적수식관리_단가계산분류관리섹션.png b/dev/data/견적/단가분류관리/기준정보_견적수식관리_단가계산분류관리섹션.png similarity index 100% rename from data/견적/단가분류관리/기준정보_견적수식관리_단가계산분류관리섹션.png rename to dev/data/견적/단가분류관리/기준정보_견적수식관리_단가계산분류관리섹션.png diff --git a/data/견적/단가수식관리/AppContent.png b/dev/data/견적/단가수식관리/AppContent.png similarity index 100% rename from data/견적/단가수식관리/AppContent.png rename to dev/data/견적/단가수식관리/AppContent.png diff --git a/data/견적/단가수식관리/MES Solution Website Structure 251137.png b/dev/data/견적/단가수식관리/MES Solution Website Structure 251137.png similarity index 100% rename from data/견적/단가수식관리/MES Solution Website Structure 251137.png rename to dev/data/견적/단가수식관리/MES Solution Website Structure 251137.png diff --git a/data/견적/단가수식관리/MES Solution Website Structure 251138.png b/dev/data/견적/단가수식관리/MES Solution Website Structure 251138.png similarity index 100% rename from data/견적/단가수식관리/MES Solution Website Structure 251138.png rename to dev/data/견적/단가수식관리/MES Solution Website Structure 251138.png diff --git a/data/견적/단가수식관리/MES Solution Website Structure 251139.png b/dev/data/견적/단가수식관리/MES Solution Website Structure 251139.png similarity index 100% rename from data/견적/단가수식관리/MES Solution Website Structure 251139.png rename to dev/data/견적/단가수식관리/MES Solution Website Structure 251139.png diff --git a/data/견적/단가수식관리/MES Solution Website Structure 251140.png b/dev/data/견적/단가수식관리/MES Solution Website Structure 251140.png similarity index 100% rename from data/견적/단가수식관리/MES Solution Website Structure 251140.png rename to dev/data/견적/단가수식관리/MES Solution Website Structure 251140.png diff --git a/data/견적/단가수식관리/Primitive.div.png b/dev/data/견적/단가수식관리/Primitive.div.png similarity index 100% rename from data/견적/단가수식관리/Primitive.div.png rename to dev/data/견적/단가수식관리/Primitive.div.png diff --git a/data/견적/번호기준관리/MES Solution Website Structure 251128.png b/dev/data/견적/번호기준관리/MES Solution Website Structure 251128.png similarity index 100% rename from data/견적/번호기준관리/MES Solution Website Structure 251128.png rename to dev/data/견적/번호기준관리/MES Solution Website Structure 251128.png diff --git a/data/견적/번호기준관리/기준정보_번호기준관리_목록.png b/dev/data/견적/번호기준관리/기준정보_번호기준관리_목록.png similarity index 100% rename from data/견적/번호기준관리/기준정보_번호기준관리_목록.png rename to dev/data/견적/번호기준관리/기준정보_번호기준관리_목록.png diff --git a/data/견적/번호기준관리/기준정보_번호기준관리_상세.png b/dev/data/견적/번호기준관리/기준정보_번호기준관리_상세.png similarity index 100% rename from data/견적/번호기준관리/기준정보_번호기준관리_상세.png rename to dev/data/견적/번호기준관리/기준정보_번호기준관리_상세.png diff --git a/deploys/item-master-data-deploy-20260203.sql b/dev/deploys/item-master-data-deploy-20260203.sql similarity index 100% rename from deploys/item-master-data-deploy-20260203.sql rename to dev/deploys/item-master-data-deploy-20260203.sql diff --git a/deploys/item-naehwasil-update-20260212.sql b/dev/deploys/item-naehwasil-update-20260212.sql similarity index 100% rename from deploys/item-naehwasil-update-20260212.sql rename to dev/deploys/item-naehwasil-update-20260212.sql diff --git a/deploys/ops-manual/01-server-overview.md b/dev/deploys/ops-manual/01-server-overview.md similarity index 94% rename from deploys/ops-manual/01-server-overview.md rename to dev/deploys/ops-manual/01-server-overview.md index 752081a..324c64a 100644 --- a/deploys/ops-manual/01-server-overview.md +++ b/dev/deploys/ops-manual/01-server-overview.md @@ -132,7 +132,7 @@ | SSH 별칭 | sam-cicd | | OS | Ubuntu 24.04.4 LTS | | Kernel | 6.8.0-41-generic | -| CPU | 2 vCPU | +| CPU | 4 vCPU | | RAM | 8GB (Swap 4GB) | | Disk | 98GB (사용 15GB / 여유 79GB) | | 사용자 | hskwon (SSH 키 인증, sudo NOPASSWD) | @@ -222,7 +222,7 @@ |--------|------|------| | Nginx | 80/443 | active | | Apache | 8080 | active (레거시) | -| MySQL 8.0 | 3306 (localhost) | active | +| MySQL 8.4 | 3306 (localhost) | active | | Gitea | 3000 | active | | Next.js (PM2) | 3001 | active | | fail2ban | - | active | @@ -322,4 +322,22 @@ | API | api.sam.it.kr | stage-api.sam.it.kr | api.codebridge-x.com | | Admin | mng.codebridge-x.com | - | admin.codebridge-x.com | | Sales | sales.codebridge-x.com | - | salesdev.codebridge-x.com | -| Landing | codebridge-x.com | - | - | \ No newline at end of file +| Landing | codebridge-x.com | - | - | + +### 타이틀 접두사 (환경 구분) + +브라우저 탭에서 환경을 즉시 구분할 수 있도록 타이틀에 접두사를 표시한다. + +| 환경 | 접두사 | 예시 | +|------|--------|------| +| 로컬 | `[L]` | `[L]SAM_MNG` | +| 개발 | `[D]` | `[D]SAM_SYSTEM` | +| 운영 | 없음 | `SAM_SYSTEM` | + +**설정 위치:** + +| 프로젝트 | 방식 | 설정 파일 | +|---------|------|----------| +| mng | `.env`의 `APP_NAME`에 접두사 포함 | 로컬: `mng/.env`, 개발: `/home/webservice/mng/.env` | +| api | `.env`의 `APP_NAME`에 접두사 포함 | 로컬: `api/.env`, 개발: `/home/webservice/api/.env` | +| react | 코드에서 `NEXT_PUBLIC_APP_ENV` 값으로 자동 판별 | CI/CD: `/var/lib/jenkins/env-files/react/.env.develop` | \ No newline at end of file diff --git a/deploys/ops-manual/02-daily-operations.md b/dev/deploys/ops-manual/02-daily-operations.md similarity index 85% rename from deploys/ops-manual/02-daily-operations.md rename to dev/deploys/ops-manual/02-daily-operations.md index b6712d6..3c24a43 100644 --- a/deploys/ops-manual/02-daily-operations.md +++ b/dev/deploys/ops-manual/02-daily-operations.md @@ -30,6 +30,24 @@ sudo systemctl status gitea --- +## [운영] .env 파일 편집 시 주의사항 + +> **경고:** `vi`로 `.env`를 편집하면 권한이 `600`으로 변경되어 서비스 장애가 발생할 수 있습니다. + +```bash +# 편집 전 권한 확인 +ls -la /home/webservice/api/shared/.env # 640(-rw-r-----)이어야 함 + +# 편집 후 반드시 권한 확인 및 복원 +chmod 640 /home/webservice/api/shared/.env +chmod 640 /home/webservice/mng/shared/.env +``` + +이를 방지하려면 `~/.vimrc`에 `set backupcopy=yes`가 설정되어 있어야 합니다. +자세한 내용: [09-security.md - .env 파일 보안](./09-security.md) + +--- + ## 시스템 리소스 모니터링 양쪽 서버 공통 명령어: @@ -95,8 +113,8 @@ sudo tail -f /var/log/php8.4-fpm.log # API 로그 sudo tail -f /home/webservice/api/shared/storage/logs/laravel.log -# Admin(MNG) 로그 -sudo tail -f /home/webservice/mng/shared/storage/logs/laravel.log +# Admin(MNG) 로그 — storage/logs가 shared 심링크가 아니므로 current 경로 사용 +sudo tail -f /home/webservice/mng/current/storage/logs/laravel.log # API Stage 로그 sudo tail -f /home/webservice/api-stage/shared/storage/logs/laravel.log diff --git a/deploys/ops-manual/03-service-prod.md b/dev/deploys/ops-manual/03-service-prod.md similarity index 70% rename from deploys/ops-manual/03-service-prod.md rename to dev/deploys/ops-manual/03-service-prod.md index 4503ea2..965cebc 100644 --- a/deploys/ops-manual/03-service-prod.md +++ b/dev/deploys/ops-manual/03-service-prod.md @@ -158,7 +158,13 @@ redis-cli ttl "키이름" # TTL 확인 redis-cli flushall # 전체 삭제 (주의: 세션도 삭제됨) ``` -**용도:** Laravel 캐시, 세션, 큐 (QUEUE_CONNECTION=redis) +**용도:** + +| 기능 | 드라이버 | .env 설정 | +|------|---------|----------| +| 캐시 | Redis | CACHE_STORE=redis | +| 세션 | Database | SESSION_DRIVER=database | +| 큐 | Redis | Supervisor에서 `queue:work redis` 명시 | --- @@ -271,4 +277,105 @@ sudo ufw allow from IP주소 to any port 포트번호 # 규칙 추가 sudo ufw delete 번호 # 규칙 삭제 (번호 기반) sudo ufw disable # 비활성화 (비상시만) sudo ufw enable # 활성화 -``` \ No newline at end of file +``` + +--- + +## LibreOffice (문서 변환) + +API 서버에서 문서 변환(Excel→PDF 등)에 사용. 헤드리스 모드로 동작. + +**버전:** 24.2.7.2 (개발/운영 동일) + +**명령어:** + +```bash +libreoffice --version # 버전 확인 +libreoffice --headless --convert-to pdf input.xlsx # CLI 변환 테스트 +``` + +**설치 패키지:** + +```bash +sudo apt-get install -y libreoffice-core libreoffice-writer libreoffice-calc libreoffice-impress +``` + +--- + +## 폰트 + +LibreOffice 문서 변환 시 폰트가 없으면 글자가 깨지므로 개발/운영 서버 동일하게 설치 필수. + +**설치된 한글 폰트:** + +| 폰트 | 설치 방식 | 경로 | +|------|----------|------| +| **Pretendard** (9 웨이트) | 수동 설치 (OTF) | `/usr/local/share/fonts/Pretendard-*.otf` | +| **Nanum** (고딕/명조/스퀘어/손글씨 등) | apt (`fonts-nanum`, `fonts-nanum-extra`) | `/usr/share/fonts/truetype/nanum/` | +| **Noto CJK** (Sans/Serif) | apt (`fonts-noto-cjk`) | `/usr/share/fonts/opentype/noto/` | + +**폰트 관리 명령어:** + +```bash +fc-list :lang=ko family | sort -u # 설치된 한글 폰트 목록 +fc-list | grep -i pretendard # Pretendard 설치 확인 +sudo fc-cache -fv # 폰트 캐시 갱신 (새 폰트 추가 후 필수) +``` + +**새 폰트 추가 시:** + +```bash +# 1. OTF/TTF 파일을 /usr/local/share/fonts/ 에 복사 +sudo cp *.otf /usr/local/share/fonts/ + +# 2. 폰트 캐시 갱신 +sudo fc-cache -fv + +# 3. 확인 +fc-list | grep -i "폰트이름" +``` + +> **주의:** 개발서버에 폰트를 추가하면 운영서버에도 동일하게 설치해야 변환 결과가 일치한다. + +--- + +## SMTP (메일 발송) + +Gmail SMTP를 통해 메일 발송. Google 앱 비밀번호 사용 (2단계 인증 필요). + +**프로젝트별 SMTP 설정:** + +| 항목 | api | mng | +|------|-----|-----| +| MAIL_HOST | smtp.gmail.com | smtp.gmail.com | +| MAIL_PORT | 587 | 587 | +| MAIL_USERNAME | shine1324@gmail.com | admin@codebridge-x.com | +| MAIL_FROM_ADDRESS | shine1324@gmail.com | develop@codebridge-x.com | +| MAIL_FROM_NAME | ${APP_NAME} | (주)코드브릿지엑스 | +| MAIL_ENCRYPTION | tls | tls | + +> **주의:** 개발/운영 서버의 MAIL_PASSWORD(앱 비밀번호)는 반드시 동일하게 유지. +> Google 앱 비밀번호를 재발급하면 모든 서버에 동일하게 반영해야 한다. + +**설정 파일 위치:** + +| 프로젝트 | 운영 | 개발 | +|---------|------|------| +| api | `/home/webservice/api/shared/.env` | `/home/webservice/api/.env` | +| mng | `/home/webservice/mng/shared/.env` | `/home/webservice/mng/.env` | + +**변경 후 반영:** + +```bash +# api +cd /home/webservice/api/current && php artisan config:cache + +# mng +cd /home/webservice/mng/current && php artisan config:cache +``` + +**트러블슈팅:** + +- `535 Username and Password not accepted` → 앱 비밀번호 만료 또는 불일치. 개발서버 값과 비교 후 동기화 +- `Connection refused` → 방화벽에서 587 포트 아웃바운드 차단 여부 확인 +- Google 앱 비밀번호 발급: Google 계정 → 보안 → 2단계 인증 → 앱 비밀번호 \ No newline at end of file diff --git a/deploys/ops-manual/04-service-cicd.md b/dev/deploys/ops-manual/04-service-cicd.md similarity index 100% rename from deploys/ops-manual/04-service-cicd.md rename to dev/deploys/ops-manual/04-service-cicd.md diff --git a/deploys/ops-manual/05-deployment.md b/dev/deploys/ops-manual/05-deployment.md similarity index 87% rename from deploys/ops-manual/05-deployment.md rename to dev/deploys/ops-manual/05-deployment.md index e9582dc..eb9d2ab 100644 --- a/deploys/ops-manual/05-deployment.md +++ b/dev/deploys/ops-manual/05-deployment.md @@ -22,6 +22,13 @@ | sam-manage | Laravel Admin 배포 | main | 운영 (직접) | | sam-sales | 레거시 PHP 배포 | main | 운영 (직접) | +### Slack 알림 채널 + +| 채널 | 용도 | 알림 내용 | +|------|------|----------| +| `#product_infra` | 빌드/배포 상태 | 빌드 시작, 배포 성공/실패 | +| `#product_deploy` | 운영 배포 승인 | Stage 배포 완료 후 승인 대기 알림 (Jenkins 승인 링크 포함) | + ### 2-Branch 전략 (develop + main) > **stage 브랜치 없음.** main 브랜치 push 시 Stage 자동 배포 → Jenkins 승인 → Production 배포. @@ -35,7 +42,12 @@ 1. 개발자가 develop → main 머지 후 push 2. post-receive hook → CI/CD Gitea 자동 push 3. Jenkins 빌드 → Stage 자동 배포 -4. Jenkins UI에서 **승인 클릭** → Production 배포 (24시간 타임아웃) +4. `#product_deploy` Slack 채널에 승인 대기 알림 전송 +5. Jenkins UI에서 **승인 클릭** → Production 배포 (24시간 타임아웃) + +> **동시 빌드 방지:** 모든 파이프라인에 `disableConcurrentBuilds()` 적용. +> 같은 프로젝트에서 빌드가 동시에 2개 이상 돌지 않음. +> 승인 대기 중 새 push 시 → 기존 빌드 Abort 후 새 빌드 자동 시작. **main 브랜치 배포 흐름 (mng/sales):** 1. 개발자가 main push → hook → CI/CD Gitea → Jenkins → Production 직접 배포 @@ -141,6 +153,8 @@ Repository Settings → Webhooks → Add Webhook (Gitea) │ │ │ │ ├─ Stage 자동 배포 (react: .env.stage 빌드) │ │ │ │ +│ ├─ 📢 #product_deploy Slack 알림 (승인 링크 포함) │ +│ │ │ │ ├─ ⏸️ 승인 대기 (24시간 타임아웃) │ │ │ https://ci.sam.it.kr 에서 "운영 배포 진행" 클릭 │ │ │ │ @@ -183,11 +197,13 @@ CI/CD Gitea push -> Webhook -> Jenkins **환경변수 파일 (CI/CD 서버):** /var/lib/jenkins/env-files/react/ -| 파일 | API URL | Frontend URL | -|------|---------|-------------| -| .env.develop | https://api.codebridge-x.com | https://dev.codebridge-x.com | -| .env.stage | https://stage-api.sam.it.kr | https://stage.sam.it.kr | -| .env.main | https://api.sam.it.kr | https://sam.it.kr | +| 파일 | API URL | Frontend URL | APP_ENV | DEV_TOOLBAR | +|------|---------|-------------|---------|-------------| +| .env.develop | https://api.codebridge-x.com | https://dev.codebridge-x.com | development | - | +| .env.stage | https://stage-api.sam.it.kr | https://stage.sam.it.kr | staging | - | +| .env.main | https://api.sam.it.kr | https://sam.it.kr | production | false | + +> `NEXT_PUBLIC_APP_ENV` 값으로 타이틀 접두사 결정: `development` → `[D]`, `local` → `[L]`, 그 외 → 없음 **rsync 주의:** trailing slash 사용 금지: `.next` (O), `.next/` (X) @@ -199,6 +215,10 @@ CI/CD Gitea push -> Webhook -> Jenkins pipeline { agent any + options { + disableConcurrentBuilds() + } + environment { DEPLOY_USER = 'hskwon' RELEASE_ID = new Date().format('yyyyMMdd_HHmmss') @@ -207,9 +227,12 @@ pipeline { stages { stage('Checkout') { steps { - slackSend channel: '#product_infra', color: '#439FE0', tokenCredentialId: 'slack-token', - message: "🚀 *react* 빌드 시작 (`${env.BRANCH_NAME}`)\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" checkout scm + script { + env.GIT_COMMIT_MSG = sh(script: "git log -1 --pretty=format:'%s'", returnStdout: true).trim() + } + slackSend channel: '#product_infra', color: '#439FE0', tokenCredentialId: 'slack-token', + message: "🚀 *react* 빌드 시작 (`${env.BRANCH_NAME}`)\n${env.GIT_COMMIT_MSG}\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" } } @@ -218,10 +241,10 @@ pipeline { script { if (env.BRANCH_NAME == 'main') { // main: Stage 빌드 먼저 (승인 후 Production 재빌드) - sh "cp /var/lib/jenkins/env-files/react/.env.stage .env.local" + sh "cp /var/lib/jenkins/env-files/react/.env.stage .env.production" } else { def envFile = "/var/lib/jenkins/env-files/react/.env.${env.BRANCH_NAME}" - sh "cp ${envFile} .env.local" + sh "cp ${envFile} .env.production" } } } @@ -245,7 +268,7 @@ pipeline { --exclude='.git' --exclude='.env*' --exclude='ecosystem.config.*' \ .next package.json next.config.ts public node_modules \ ${DEPLOY_USER}@114.203.209.83:/home/webservice/react/ - scp .env.local ${DEPLOY_USER}@114.203.209.83:/home/webservice/react/.env.local + scp .env.production ${DEPLOY_USER}@114.203.209.83:/home/webservice/react/.env.production ssh ${DEPLOY_USER}@114.203.209.83 'cd /home/webservice/react && pm2 restart sam-react' """ } @@ -262,7 +285,7 @@ pipeline { rsync -az --delete \ .next package.json next.config.ts public node_modules \ ${DEPLOY_USER}@211.117.60.189:/home/webservice/react-stage/releases/${RELEASE_ID}/ - scp .env.local ${DEPLOY_USER}@211.117.60.189:/home/webservice/react-stage/releases/${RELEASE_ID}/.env.local + scp .env.production ${DEPLOY_USER}@211.117.60.189:/home/webservice/react-stage/releases/${RELEASE_ID}/.env.production ssh ${DEPLOY_USER}@211.117.60.189 ' ln -sfn /home/webservice/react-stage/releases/${RELEASE_ID} /home/webservice/react-stage/current && cd /home/webservice && pm2 reload sam-front-stage 2>/dev/null || pm2 start react-stage/current/node_modules/.bin/next --name sam-front-stage -- start -p 3100 && @@ -277,6 +300,8 @@ pipeline { stage('Production Approval') { when { branch 'main' } steps { + slackSend channel: '#product_deploy', color: '#FF9800', tokenCredentialId: 'slack-token', + message: "🔔 *react* 운영 배포 승인 대기 중\n${env.GIT_COMMIT_MSG}\nStage: https://stage.sam.it.kr\n<${env.BUILD_URL}input|승인하러 가기>" timeout(time: 24, unit: 'HOURS') { input message: 'Stage 확인 후 운영 배포를 진행하시겠습니까?\nStage: https://stage.sam.it.kr', ok: '운영 배포 진행' @@ -288,7 +313,7 @@ pipeline { stage('Rebuild for Production') { when { branch 'main' } steps { - sh "cp /var/lib/jenkins/env-files/react/.env.main .env.local" + sh "cp /var/lib/jenkins/env-files/react/.env.main .env.production" sh 'npm run build' } } @@ -303,7 +328,7 @@ pipeline { rsync -az --delete \ .next package.json next.config.ts public node_modules \ ${DEPLOY_USER}@211.117.60.189:/home/webservice/react/releases/${RELEASE_ID}/ - scp .env.local ${DEPLOY_USER}@211.117.60.189:/home/webservice/react/releases/${RELEASE_ID}/.env.local + scp .env.production ${DEPLOY_USER}@211.117.60.189:/home/webservice/react/releases/${RELEASE_ID}/.env.production ssh ${DEPLOY_USER}@211.117.60.189 ' ln -sfn /home/webservice/react/releases/${RELEASE_ID} /home/webservice/react/current && cd /home/webservice && pm2 reload sam-front && @@ -318,11 +343,11 @@ pipeline { post { success { slackSend channel: '#product_infra', color: 'good', tokenCredentialId: 'slack-token', - message: "✅ *react* 배포 성공 (`${env.BRANCH_NAME}`)\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" + message: "✅ *react* 배포 성공 (`${env.BRANCH_NAME}`)\n${env.GIT_COMMIT_MSG}\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" } failure { slackSend channel: '#product_infra', color: 'danger', tokenCredentialId: 'slack-token', - message: "❌ *react* 배포 실패 (`${env.BRANCH_NAME}`)\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" + message: "❌ *react* 배포 실패 (`${env.BRANCH_NAME}`)\n${env.GIT_COMMIT_MSG}\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" } } } @@ -332,6 +357,10 @@ pipeline { > Stage(.env.stage)와 Production(.env.main)에서 별도 빌드가 필요하다. > main 빌드 시 Stage용으로 먼저 빌드 → 승인 후 Production용으로 재빌드. +> **환경파일:** Jenkins는 CI/CD 서버의 env-files를 `.env.production`으로 복사하여 빌드한다. +> Next.js 우선순위: `.env.local` > `.env.production` > `.env` +> 따라서 서버에 `.env.local`이 있으면 `.env.production`을 덮어쓰므로 `.env.local`은 사용하지 않는다. + ### PM2 수동 재시작 ```bash @@ -372,6 +401,10 @@ CI/CD Gitea push -> Webhook -> Jenkins pipeline { agent any + options { + disableConcurrentBuilds() + } + environment { DEPLOY_USER = 'hskwon' RELEASE_ID = new Date().format('yyyyMMdd_HHmmss') @@ -380,9 +413,12 @@ pipeline { stages { stage('Checkout') { steps { - slackSend channel: '#product_infra', color: '#439FE0', tokenCredentialId: 'slack-token', - message: "🚀 *api* 빌드 시작 (`${env.BRANCH_NAME}`)\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" checkout scm + script { + env.GIT_COMMIT_MSG = sh(script: "git log -1 --pretty=format:'%s'", returnStdout: true).trim() + } + slackSend channel: '#product_infra', color: '#439FE0', tokenCredentialId: 'slack-token', + message: "🚀 *api* 빌드 시작 (`${env.BRANCH_NAME}`)\n${env.GIT_COMMIT_MSG}\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" } } @@ -421,6 +457,8 @@ pipeline { stage('Production Approval') { when { branch 'main' } steps { + slackSend channel: '#product_deploy', color: '#FF9800', tokenCredentialId: 'slack-token', + message: "🔔 *api* 운영 배포 승인 대기 중\n${env.GIT_COMMIT_MSG}\nStage API: https://stage-api.sam.it.kr\n<${env.BUILD_URL}input|승인하러 가기>" timeout(time: 24, unit: 'HOURS') { input message: 'Stage 확인 후 운영 배포를 진행하시겠습니까?\nStage API: https://stage-api.sam.it.kr', ok: '운영 배포 진행' @@ -466,11 +504,11 @@ pipeline { post { success { slackSend channel: '#product_infra', color: 'good', tokenCredentialId: 'slack-token', - message: "✅ *api* 배포 성공 (`${env.BRANCH_NAME}`)\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" + message: "✅ *api* 배포 성공 (`${env.BRANCH_NAME}`)\n${env.GIT_COMMIT_MSG}\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" } failure { slackSend channel: '#product_infra', color: 'danger', tokenCredentialId: 'slack-token', - message: "❌ *api* 배포 실패 (`${env.BRANCH_NAME}`)\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" + message: "❌ *api* 배포 실패 (`${env.BRANCH_NAME}`)\n${env.GIT_COMMIT_MSG}\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" script { if (env.BRANCH_NAME == 'main') { sshagent(credentials: ['deploy-ssh-key']) { @@ -571,12 +609,21 @@ ls -1dt */ | tail -n +4 | xargs rm -rf 2>/dev/null || true API와 동일한 releases/shared 구조. 차이점: npm build 추가, Queue Worker 재시작 불필요. +> **참고: storage/logs 심링크 (2026-02-26 변경)** +> MNG는 storage/logs를 shared로 심링크하여 배포 간 로그를 영속 보존한다. +> 이전에는 `mkdir`로 릴리즈 디렉토리에 생성하여 배포마다 로그가 유실되었음. +> 변경: `ln -sfn /home/webservice/mng/shared/storage/logs storage/logs` + ### Jenkinsfile (mng/Jenkinsfile) ```groovy pipeline { agent any + options { + disableConcurrentBuilds() + } + environment { DEPLOY_USER = 'hskwon' RELEASE_ID = new Date().format('yyyyMMdd_HHmmss') @@ -585,9 +632,12 @@ pipeline { stages { stage('Checkout') { steps { - slackSend channel: '#product_infra', color: '#439FE0', tokenCredentialId: 'slack-token', - message: "🚀 *mng* 빌드 시작 (`${env.BRANCH_NAME}`)\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" checkout scm + script { + env.GIT_COMMIT_MSG = sh(script: "git log -1 --pretty=format:'%s'", returnStdout: true).trim() + } + slackSend channel: '#product_infra', color: '#439FE0', tokenCredentialId: 'slack-token', + message: "🚀 *mng* 빌드 시작 (`${env.BRANCH_NAME}`)\n${env.GIT_COMMIT_MSG}\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" } } @@ -606,9 +656,10 @@ pipeline { . ${DEPLOY_USER}@211.117.60.189:/home/webservice/mng/releases/${RELEASE_ID}/ ssh ${DEPLOY_USER}@211.117.60.189 ' cd /home/webservice/mng/releases/${RELEASE_ID} && - mkdir -p bootstrap/cache storage/framework/{views,cache/data,sessions} storage/logs && + mkdir -p bootstrap/cache storage/framework/{views,cache/data,sessions} && ln -sfn /home/webservice/mng/shared/.env .env && ln -sfn /home/webservice/mng/shared/storage/app storage/app && + ln -sfn /home/webservice/mng/shared/storage/logs storage/logs && composer install --no-dev --optimize-autoloader --no-interaction && npm install --prefer-offline && npm run build && @@ -631,11 +682,11 @@ pipeline { post { success { slackSend channel: '#product_infra', color: 'good', tokenCredentialId: 'slack-token', - message: "✅ *mng* 배포 성공 (`${env.BRANCH_NAME}`)\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" + message: "✅ *mng* 배포 성공 (`${env.BRANCH_NAME}`)\n${env.GIT_COMMIT_MSG}\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" } failure { slackSend channel: '#product_infra', color: 'danger', tokenCredentialId: 'slack-token', - message: "❌ *mng* 배포 실패 (`${env.BRANCH_NAME}`)\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" + message: "❌ *mng* 배포 실패 (`${env.BRANCH_NAME}`)\n${env.GIT_COMMIT_MSG}\n<${env.BUILD_URL}|빌드 #${env.BUILD_NUMBER}>" script { if (env.BRANCH_NAME == 'main') { sshagent(credentials: ['deploy-ssh-key']) { @@ -663,11 +714,12 @@ RELEASE_ID=$(date +%Y%m%d_%H%M%S) cd /home/webservice/mng/releases git clone --depth 1 --branch main https://git.sam.it.kr/SamProject/sam-manage.git $RELEASE_ID -ln -sfn /home/webservice/mng/shared/storage /home/webservice/mng/releases/$RELEASE_ID/storage ln -sfn /home/webservice/mng/shared/.env /home/webservice/mng/releases/$RELEASE_ID/.env +ln -sfn /home/webservice/mng/shared/storage/app /home/webservice/mng/releases/$RELEASE_ID/storage/app +ln -sfn /home/webservice/mng/shared/storage/logs /home/webservice/mng/releases/$RELEASE_ID/storage/logs cd /home/webservice/mng/releases/$RELEASE_ID -mkdir -p bootstrap/cache storage/framework/{views,cache/data,sessions} storage/logs +mkdir -p bootstrap/cache storage/framework/{views,cache/data,sessions} composer install --no-dev --optimize-autoloader --no-interaction # Vite 빌드 (Blade + Tailwind) @@ -807,7 +859,7 @@ ssh sam-prod " cd /tmp git clone --depth 1 --branch main https://git.sam.it.kr/SamProject/sam-react-prod.git react-build cd react-build -cp /var/lib/jenkins/env-files/react/.env.main .env.local +cp /var/lib/jenkins/env-files/react/.env.main .env.production npm install --prefer-offline npm run build @@ -818,7 +870,7 @@ ssh sam-prod "mkdir -p /home/webservice/react/releases/${RELEASE_ID}" rsync -az --delete \ .next package.json next.config.ts public node_modules \ hskwon@211.117.60.189:/home/webservice/react/releases/${RELEASE_ID}/ -scp .env.local hskwon@211.117.60.189:/home/webservice/react/releases/${RELEASE_ID}/.env.local +scp .env.production hskwon@211.117.60.189:/home/webservice/react/releases/${RELEASE_ID}/.env.production # 심링크 전환 및 PM2 재시작 ssh sam-prod " @@ -866,6 +918,7 @@ sudo supervisorctl status # 에러 로그 sudo tail -20 /var/log/nginx/api.sam.it.kr.error.log sudo tail -20 /home/webservice/api/shared/storage/logs/laravel.log +sudo tail -20 /home/webservice/mng/shared/storage/logs/laravel.log # HTTP 응답 확인 curl -sI https://api.sam.it.kr diff --git a/deploys/ops-manual/06-database.md b/dev/deploys/ops-manual/06-database.md similarity index 100% rename from deploys/ops-manual/06-database.md rename to dev/deploys/ops-manual/06-database.md diff --git a/deploys/ops-manual/07-monitoring.md b/dev/deploys/ops-manual/07-monitoring.md similarity index 87% rename from deploys/ops-manual/07-monitoring.md rename to dev/deploys/ops-manual/07-monitoring.md index 8a01bea..d68182c 100644 --- a/deploys/ops-manual/07-monitoring.md +++ b/dev/deploys/ops-manual/07-monitoring.md @@ -8,12 +8,14 @@ ``` 운영서버 (node_exporter:9100) --스크래핑--> CI/CD (Prometheus:9090) --> Grafana:3100 +개발서버 (node_exporter:9100) --스크래핑--> CI/CD (Prometheus:9090) --> Grafana:3100 CI/CD (node_exporter:9100) --스크래핑--> CI/CD (Prometheus:9090) --> Grafana:3100 ``` - **Grafana 대시보드:** https://monitor.sam.it.kr - **Prometheus 쿼리:** CI/CD 서버에서 http://localhost:9090 - **운영서버 메트릭:** 운영서버에서 http://localhost:9100/metrics +- **개발서버 메트릭:** 개발서버에서 http://localhost:9100/metrics --- @@ -38,25 +40,39 @@ scrape_configs: - targets: ['localhost:9100'] labels: server: 'cicd' + + - job_name: 'sam-dev' + static_configs: + - targets: ['114.203.209.83:9100'] + labels: + server: 'development' ``` ### 스크래핑 대상 추가 ```bash -# 1. 설정 파일 편집 +# 1. 대상 서버에 node_exporter 설치 (미설치 시) +# 바이너리: https://github.com/prometheus/node_exporter/releases +# 서비스: /etc/systemd/system/node_exporter.service +# 포트: 9100 (기본) + +# 2. 대상 서버 방화벽에서 CI/CD IP 허용 +sudo ufw allow from 110.10.147.46 to any port 9100 comment 'Prometheus scraping from CI/CD' + +# 3. CI/CD 서버에서 설정 파일 편집 sudo vim /etc/prometheus/prometheus.yml -# 2. 새 대상 추가 예시 -# - job_name: 'sam-dev' +# 4. 새 대상 추가 예시 +# - job_name: 'sam-new' # static_configs: -# - targets: ['114.203.209.83:9100'] +# - targets: ['<서버IP>:9100'] # labels: -# server: 'development' +# server: '<환경명>' -# 3. 문법 검사 +# 5. 문법 검사 promtool check config /etc/prometheus/prometheus.yml -# 4. 서비스 리로드 +# 6. 서비스 리로드 sudo systemctl restart prometheus ``` diff --git a/deploys/ops-manual/08-troubleshooting.md b/dev/deploys/ops-manual/08-troubleshooting.md similarity index 51% rename from deploys/ops-manual/08-troubleshooting.md rename to dev/deploys/ops-manual/08-troubleshooting.md index 5c64847..37ca169 100644 --- a/deploys/ops-manual/08-troubleshooting.md +++ b/dev/deploys/ops-manual/08-troubleshooting.md @@ -102,6 +102,91 @@ sudo mysql -e "SET GLOBAL max_connections = 150;" --- +### [개발] MySQL 8.4 인증 플러그인 오류 + +**증상:** `SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client` + +**원인:** MySQL 8.4에서 `mysql_native_password` 플러그인이 기본 비활성화됨. 레거시 PHP(5130 등)의 mysqlnd가 `caching_sha2_password`를 지원하지 못함. + +**조치:** + +```bash +# 1. mysqld.cnf에 플러그인 활성화 추가 +sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf +# [mysqld] 섹션에 추가: +# mysql_native_password=ON + +# 2. MySQL 재시작 +sudo systemctl restart mysql + +# 3. 레거시 PHP용 계정 인증 방식 변경 +mysql -u debian-sys-maint -p'비밀번호' -e " +ALTER USER '계정'@'localhost' IDENTIFIED WITH mysql_native_password BY '비밀번호'; +FLUSH PRIVILEGES;" +``` + +**실제 사례 (2026-02-25):** + +1. 5130 레거시 사이트 로그인 시 2054 에러 발생 +2. `/etc/mysql/mysql.conf.d/mysqld.cnf`에 `mysql_native_password=ON` 추가 후 MySQL 재시작 +3. `codebridge`, `pro`, `chandj` 계정을 `mysql_native_password`로 변경하여 해결 + +**참고:** debian-sys-maint 비밀번호는 `/etc/mysql/debian.cnf`에서 확인 가능. + +--- + +### .env 권한 오류로 전체 500 에러 (API + MNG) + +**증상:** api.sam.it.kr, mng.sam.it.kr 모든 요청에서 500 에러. PHP-FPM, Redis, MySQL 모두 정상. + +**원인:** `.env` 파일 권한이 `600`(`-rw-------`)으로 변경되어 PHP-FPM(`www-data`)이 읽지 못함. 모든 환경변수가 null이 되면서 `DB_CONNECTION`, `CACHE_STORE` 등이 기본값(SQLite)로 fallback. + +**주요 발생 원인:** +- `vi`로 `.env` 편집 시 파일이 재생성되면서 umask에 따라 `600`으로 변경됨 +- 배포 스크립트에서 권한 미설정 + +**진단:** + +```bash +# 1. .env 권한 확인 (640이어야 정상) +ls -la /home/webservice/api/shared/.env +ls -la /home/webservice/mng/shared/.env + +# 2. www-data로 읽기 테스트 +sudo -u www-data cat /home/webservice/api/shared/.env | head -1 +# "Permission denied" → 권한 문제 확인 + +# 3. artisan으로 config 확인 (CLI는 sudo로 정상 작동) +sudo php /home/webservice/api/current/artisan config:show cache +# default가 database/file이면 .env 미반영 상태 +``` + +**조치:** + +```bash +sudo chmod 640 /home/webservice/api/shared/.env +sudo chmod 640 /home/webservice/mng/shared/.env +``` + +**예방:** +- 서버 계정 `~/.vimrc`에 `set backupcopy=yes` 추가 (vi 편집 시 권한 유지) +- 배포 스크립트에 `chmod 640` 포함 +- 자세한 내용: 09-security.md "[운영] .env 파일 보안" 참조 + +**실제 사례 (2026-03-03):** + +1. `.env`에서 `GEMINI_MODEL` 값을 `vi`로 변경 +2. `vi`가 파일을 재생성하면서 권한 `600`으로 변경 +3. PHP-FPM(`www-data`)이 `.env` 읽기 실패 → 모든 env 값 null +4. `CACHE_STORE=null` → 기본값 `database` → SQLite 연결 시도 → 500 에러 +5. `chmod 640`으로 권한 복원하여 즉시 해결 + +**진단 포인트:** +- CLI(`artisan tinker`)에서는 정상인데 웹만 500 → **파일 권한 문제 의심** +- Laravel 로그에 기록이 없으면 **로그 파일 쓰기 권한도 확인** + +--- + ### Redis 메모리 부족 **증상:** "OOM command not allowed" 메시지. @@ -258,6 +343,186 @@ sudo chmod -R 775 /home/webservice/api/current/bootstrap/cache --- +### MNG 500 에러 (storage/logs 권한 + SOAP) + +**증상:** mng.codebridge-x.com 특정 페이지에서 500 에러. Laravel 로그에 기록 없음. + +**배경:** 2026-02-26 이후 MNG `storage/logs`는 shared로 심링크됨. 이전에는 릴리즈 디렉토리에 직접 생성되어 배포마다 로그가 유실되었음. + +**진단 순서:** + +```bash +# 1. 로그 심링크 확인 +ls -la /home/webservice/mng/current/storage/logs +# → shared/storage/logs 심링크인지 확인 + +# 2. 로그 파일 소유자 확인 +ls -la /home/webservice/mng/shared/storage/logs/laravel.log + +# 3. nginx 접근 로그에서 500 확인 +sudo tail -20 /var/log/nginx/mng.codebridge-x.com.access.log | grep " 500 " +``` + +**조치:** + +```bash +# 로그 심링크가 아닌 경우 (이전 배포 방식) +rm -rf /home/webservice/mng/current/storage/logs +ln -sfn /home/webservice/mng/shared/storage/logs /home/webservice/mng/current/storage/logs + +# shared 로그 권한 수정 +sudo chown www-data:webservice /home/webservice/mng/shared/storage/logs/ +sudo chown www-data:webservice /home/webservice/mng/shared/storage/logs/laravel.log + +# 로그 확인 +cat /home/webservice/mng/shared/storage/logs/laravel.log +``` + +**실제 사례 (2026-02-25):** + +1. 최초 증상: `Table 'sam.cache' doesn't exist` → `CACHE_STORE=database`였으나 cache 테이블 미존재 +2. 해결: `.env`에서 `CACHE_STORE=redis`로 변경 + `php artisan config:cache` +3. 여전히 500 → 로그 파일 권한 문제로 에러 미기록 → 권한 수정 후 실제 에러 확인 +4. 실제 원인: `Class "SoapClient" not found` → `php8.4-soap` 미설치 +5. 최종 해결: `sudo apt install php8.4-soap && sudo systemctl restart php8.4-fpm` + +**교훈:** +- MNG 로그는 `shared/storage/logs/`에 있음 (2026-02-26~) +- 500 에러인데 로그가 비어있으면 **심링크 여부 → 파일 권한** 순서로 확인 +- PHP 확장 누락은 artisan tinker로 확인 가능: `php artisan tinker --execute="new SoapClient('test');"` + +--- + +### MNG 전자계약(E-Sign) PDF 서명 합성 오류 + +**증상:** 전자계약 완료 후 다운로드한 PDF에 서명/도장/텍스트가 적용되지 않음. DB에서 `signed_file_path`가 null. + +**진단:** + +```bash +# 1. 완료됐지만 signed_file_path 없는 계약 확인 +cd /home/webservice/mng/current && php artisan tinker --execute=" +\$contracts = App\Models\ESign\EsignContract::withoutGlobalScopes() + ->where('status', 'completed')->whereNull('signed_file_path') + ->get(['id','tenant_id','status','completed_at']); +echo \$contracts->toJson(JSON_PRETTY_PRINT); +" + +# 2. 서명 이미지 파일 존재 확인 +sudo ls -la /home/webservice/mng/shared/storage/app/private/esign/*/signatures/ + +# 3. signed 디렉토리 존재 및 권한 확인 +ls -la /home/webservice/mng/shared/storage/app/private/esign/*/signed/ + +# 4. 로그 확인 +grep -i "서명\|esign\|pdf" /home/webservice/mng/shared/storage/logs/laravel.log | tail -20 + +# 5. 한글 폰트 확인 +ls -la /usr/share/fonts/truetype/nanum/NanumGothic.ttf +``` + +**조치 (수동 PDF 재합성):** + +```bash +cd /home/webservice/mng/current && sudo -u www-data php artisan tinker --execute=" +try { + \$contract = App\Models\ESign\EsignContract::withoutGlobalScopes()->find(<계약ID>); + \$pdfService = new App\Services\ESign\PdfSignatureService; + \$result = \$pdfService->mergeSignatures(\$contract); + echo 'SUCCESS: ' . \$result; +} catch (\Throwable \$e) { + echo 'ERROR: ' . \$e->getMessage(); +} +" +``` + +**주의:** 반드시 `sudo -u www-data`로 실행해야 서명 이미지 파일 접근 가능. + +**주요 원인 및 해결:** + +| 원인 | 진단 방법 | 해결 | +|------|----------|------| +| `signed/` 디렉토리 미존재 | `ls esign/*/signed/` | `sudo -u www-data mkdir -p esign/{tenant_id}/signed` | +| `signatures/` 권한 부족 | `stat esign/*/signatures/` | `sudo chmod 2775 esign/*/signatures/` | +| 로그 유실로 에러 추적 불가 | `ls -la current/storage/logs` | `storage/logs` → shared 심링크 확인 | +| 한글 폰트 미설치 | `ls /usr/share/fonts/truetype/nanum/` | `sudo apt install fonts-nanum` | +| FPDI/TCPDF 미설치 | `composer show setasign/fpdi` | `composer install` | +| TCPDF 폰트 정의 파일 오류 | 아래 "TCPDF 폰트 정의 파일 오류" 참고 | `registerKoreanFont()` 코드 수정 | + +**esign 디렉토리 권한 기준:** + +```bash +# 모든 esign 하위 디렉토리: www-data:webservice 2775 +sudo chown -R www-data:webservice /home/webservice/mng/shared/storage/app/private/esign/ +sudo chmod -R 2775 /home/webservice/mng/shared/storage/app/private/esign/ +``` + +**실제 사례 (2026-02-26):** + +1. 계약 #17이 `completed`인데 `signed_file_path`가 null +2. 원인: `signatures/` 디렉토리 권한 `2700` (www-data만 접근 가능), `signed/` 디렉토리 미존재 +3. 추가 원인: `storage/logs`가 릴리즈 디렉토리에 있어 이전 배포 로그 유실 +4. 조치: 권한 `2775`로 수정 + `sudo -u www-data`로 수동 재합성 + storage/logs 심링크 적용 +5. 결과: 409KB signed PDF 생성 (원본 265KB + 서명 이미지 144KB) + +--- + +### TCPDF 폰트 정의 파일 오류 (font definition file) + +**증상:** 전자계약 서명 페이지에서 `TCPDF ERROR: Could not include font definition file: pretendard` (또는 `nanumgothic`) 오류. + +**근본 원인:** + +운영 환경에서 `vendor/tecnickcom/tcpdf/fonts/` 디렉토리가 배포 사용자(`hskwon`) 소유이므로 PHP-FPM(`www-data`)이 쓰기 불가. +`TCPDF_FONTS::addTTFfont()`는 폰트 캐시 파일(.php, .z, .ctg.z)을 **생성만** 하고, +`$pdf->SetFont('폰트명')`은 `K_PATH_FONTS`(vendor 경로)에서 **찾기만** 해서 경로 불일치 발생. + +개발서버는 `vendor/` 권한이 `2775 pro:develop`이라 PHP가 직접 쓸 수 있어 문제없음. + +**진단:** + +```bash +# 폰트 캐시 존재 확인 (storage에 있으나 vendor에 없는 상태) +ls -la /home/webservice/mng/shared/storage/app/private/fonts/ +ls /home/webservice/mng/current/vendor/tecnickcom/tcpdf/fonts/pretendard* 2>/dev/null + +# vendor fonts 소유자 확인 +stat -c "%U:%G %a" /home/webservice/mng/current/vendor/tecnickcom/tcpdf/fonts/ + +# 에러 로그 확인 +grep -i "font definition\|Could not include" /home/webservice/mng/shared/storage/logs/laravel.log +``` + +**영구 해결 (코드 수정 - 2026-02-26 적용):** + +`PdfSignatureService.php`에서 `registerKoreanFont(Fpdi $pdf)` 메서드로 분리하여: +1. 폰트 캐시를 `storage/app/private/fonts/`에 생성 (vendor 의존 제거) +2. `$pdf->AddFont('pretendard', '', $fontDefFile)` — PDF 인스턴스에 **전체 경로로 등록** +3. 이후 `SetFont('pretendard')`가 이미 등록된 폰트를 사용하므로 K_PATH_FONTS 미참조 + +**긴급 임시 조치 (코드 수정 전):** + +```bash +# vendor 폰트 디렉토리 권한 변경 (배포 시마다 초기화됨) +sudo chown -R www-data:webservice /home/webservice/mng/current/vendor/tecnickcom/tcpdf/fonts/ +sudo chmod -R 775 /home/webservice/mng/current/vendor/tecnickcom/tcpdf/fonts/ + +# 기존 캐시 삭제 (코드 수정 후 새 경로로 재생성) +sudo rm -f /home/webservice/mng/shared/storage/app/private/fonts/pretendard.* +sudo rm -f /home/webservice/mng/shared/storage/app/private/fonts/nanumgothic.* +``` + +**개발 vs 운영 환경 차이:** + +| 항목 | 개발 서버 | 운영 서버 | +|------|----------|----------| +| vendor/ 소유자 | `pro:develop` (2775) | `hskwon:hskwon` (배포 사용자) | +| www-data vendor 쓰기 | ✅ 가능 | ❌ 불가 | +| 폰트 캐시 위치 | vendor 내부 (기본) | storage/app/private/fonts/ | +| `addTTFfont()` 결과 | vendor에 캐시 생성 → SetFont 성공 | storage에 캐시 생성 → SetFont 실패 (경로 불일치) | + +--- + ## 공통 장애 ### 디스크 공간 부족 diff --git a/deploys/ops-manual/09-security.md b/dev/deploys/ops-manual/09-security.md similarity index 82% rename from deploys/ops-manual/09-security.md rename to dev/deploys/ops-manual/09-security.md index 5038eb8..bd227b5 100644 --- a/deploys/ops-manual/09-security.md +++ b/dev/deploys/ops-manual/09-security.md @@ -168,18 +168,37 @@ sudo systemctl restart fail2ban ## [운영] .env 파일 보안 +> **주의:** `.env` 권한은 반드시 `640` (`-rw-r-----`)이어야 합니다. +> PHP-FPM은 `www-data` 사용자(webservice 그룹)로 실행되므로 그룹 읽기 권한이 필요합니다. +> `600`으로 설정하면 PHP-FPM이 .env를 읽지 못해 **전체 서비스 500 에러**가 발생합니다. +> (실제 장애 사례: 2026-03-03, 08-troubleshooting.md 참조) + ```bash -# 권한 확인 (600이어야 함) +# 권한 확인 (640이어야 함 — 소유자 rw + 그룹 r) ls -la /home/webservice/api/shared/.env ls -la /home/webservice/mng/shared/.env ls -la /home/webservice/sales/.env # 권한 수정 -chmod 600 /home/webservice/api/shared/.env -chmod 600 /home/webservice/mng/shared/.env -chmod 600 /home/webservice/sales/.env +chmod 640 /home/webservice/api/shared/.env +chmod 640 /home/webservice/mng/shared/.env +chmod 640 /home/webservice/sales/.env ``` +### vi 편집 시 권한 변경 방지 + +`vi`로 파일을 편집하면 새 파일로 교체되면서 권한이 `600`으로 초기화될 수 있습니다. +이를 방지하기 위해 서버 계정의 `~/.vimrc`에 아래 설정을 추가합니다: + +```bash +# 원본 파일에 직접 덮어쓰기 (권한 유지) +echo "set backupcopy=yes" >> ~/.vimrc +``` + +**적용 현황 (2026-03-03):** +- sam-prod: hskwon, pro 계정 적용 완료 +- sam-cicd: hskwon, pro 계정 적용 완료 + --- ## [운영] Redis 보안 diff --git a/deploys/ops-manual/10-backup-recovery.md b/dev/deploys/ops-manual/10-backup-recovery.md similarity index 71% rename from deploys/ops-manual/10-backup-recovery.md rename to dev/deploys/ops-manual/10-backup-recovery.md index 0db6f33..cd47e4b 100644 --- a/deploys/ops-manual/10-backup-recovery.md +++ b/dev/deploys/ops-manual/10-backup-recovery.md @@ -265,6 +265,8 @@ gunzip -c /path/to/sam_stat_production_YYYYMMDD_HHMMSS.sql.gz | mysql -ucodebrid CREATE USER 'sam_backup'@'110.10.147.46' IDENTIFIED BY '<백업용_비밀번호>'; GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON sam.* TO 'sam_backup'@'110.10.147.46'; GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON sam_stat.* TO 'sam_backup'@'110.10.147.46'; +GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON codebridge.* TO 'sam_backup'@'110.10.147.46'; +GRANT REPLICATION SLAVE ON *.* TO 'sam_backup'@'110.10.147.46'; FLUSH PRIVILEGES; ``` @@ -273,11 +275,139 @@ UFW에서 CI/CD IP의 MySQL 접근이 허용되어 있어야 합니다: ```bash # 운영 서버 UFW 규칙 확인 sudo ufw status | grep 3306 -# → 110.10.147.46 ALLOW (CI/CD 백업용) +# → 110.10.147.46 ALLOW (CI/CD 백업/리플리케이션용) ``` --- +## [CI/CD] MySQL 리플리케이션 (운영 → CI/CD) + +### 개요 + +운영 DB의 변경사항을 실시간으로 CI/CD 서버에 동기화합니다. binlog 기반 리플리케이션으로 변경분만 전송되어 네트워크/디스크 부하가 최소화됩니다. + +| 항목 | 값 | +|------|-----| +| 방식 | **MySQL Replication** (Source → Replica) | +| Source (운영) | 211.117.60.189, server-id=1 | +| Replica (CI/CD) | 110.10.147.46, server-id=2 | +| 인증 | `sam_backup@110.10.147.46` (REPLICATION SLAVE) | +| 대상 DB | **sam**, **sam_stat**, **codebridge** | +| 제외 DB | gitea (CI/CD 자체 DB, 리플리케이션 영향 없음) | +| 동기화 | 실시간 (Seconds_Behind_Source ≈ 0) | +| CI/CD MySQL | **read_only=OFF** (Gitea DB 쓰기 필요, replicate-do-db로 대상 DB 제한) | + +### 아키텍처 + +``` +[운영 서버 211.117.60.189] [CI/CD 서버 110.10.147.46] + MySQL (Source, server-id=1) MySQL (Replica, server-id=2) + ┌─────────┐ ┌─────────┐ + │ sam │ ── binlog ──────────▶ │ sam │ (read-only) + │ sam_stat│ ── binlog ──────────▶ │ sam_stat│ (read-only) + │codebridge│── binlog ──────────▶ │codebridge│(read-only) + └─────────┘ ├─────────┤ + │ gitea │ (독립, read-write) + └─────────┘ +``` + +### CI/CD MySQL 설정 + +```ini +# /etc/mysql/mysql.conf.d/sam-tuning.cnf (리플리케이션 관련 부분) +[mysqld] +server-id = 2 +relay-log = /var/log/mysql/mysql-relay-bin +# read-only = 1 # Gitea DB 쓰기 필요하여 비활성화 (replicate-do-db로 대상 제한) +replicate-do-db = sam +replicate-do-db = sam_stat +replicate-do-db = codebridge +``` + +### 리플리케이션 상태 확인 + +```bash +# CI/CD 서버(sam-cicd)에서 실행 +mysql -u hskwon -p -e "SHOW REPLICA STATUS\G" | grep -E 'IO_Running|SQL_Running|Behind|Error' + +# 정상 상태: +# Replica_IO_Running: Yes +# Replica_SQL_Running: Yes +# Seconds_Behind_Source: 0 +# Last_IO_Error: (빈 값) +# Last_SQL_Error: (빈 값) +``` + +### 리플리케이션 장애 복구 + +#### IO 스레드 중단 시 + +```bash +# 에러 확인 +mysql -u hskwon -p -e "SHOW REPLICA STATUS\G" | grep -E 'IO_Running|IO_Error' + +# 네트워크 문제: 자동 재연결 (Connect_Retry=60, 10회 시도) +# 인증 문제: 운영 서버 sam_backup 유저 확인 +# 수동 재시작 +mysql -u hskwon -p -e "STOP REPLICA IO_THREAD; START REPLICA IO_THREAD;" +``` + +#### SQL 스레드 에러 시 + +```bash +# 에러 확인 +mysql -u hskwon -p -e "SHOW REPLICA STATUS\G" | grep -E 'SQL_Running|SQL_Error' + +# 특정 에러 건너뛰기 (주의: 데이터 불일치 가능) +mysql -u hskwon -p -e "SET GLOBAL SQL_REPLICA_SKIP_COUNTER = 1; START REPLICA;" +``` + +#### 전체 재구축 (데이터 불일치 심각 시) + +```bash +# 1. CI/CD 리플리케이션 중지 +mysql -u hskwon -p -e "STOP REPLICA;" + +# 2. 운영에서 새 덤프 생성 +ssh sam-prod "mysqldump -u hskwon -p --databases sam sam_stat codebridge \ + --source-data=1 --single-transaction --routines --triggers --events \ + --set-gtid-purged=OFF | gzip > /tmp/repl_rebuild.sql.gz" + +# 3. CI/CD로 전송 +scp sam-prod:/tmp/repl_rebuild.sql.gz /tmp/ + +# 4. CI/CD에서 임포트 +zcat /tmp/repl_rebuild.sql.gz | mysql -u hskwon -p + +# 5. 덤프 헤더에서 binlog position 확인 +zcat /tmp/repl_rebuild.sql.gz | head -30 | grep "CHANGE" + +# 6. 리플리케이션 재설정 (position 값은 위 결과로 교체) +mysql -u hskwon -p << 'SQL' +CHANGE REPLICATION SOURCE TO + SOURCE_HOST='211.117.60.189', + SOURCE_USER='sam_backup', + SOURCE_PASSWORD='<백업용_비밀번호>', + SOURCE_LOG_FILE='binlog.XXXXXX', + SOURCE_LOG_POS=XXXXXXXXX, + GET_SOURCE_PUBLIC_KEY=1; +START REPLICA; +SQL + +# 7. 임시 파일 정리 +ssh sam-prod "rm -f /tmp/repl_rebuild.sql.gz" +rm -f /tmp/repl_rebuild.sql.gz +``` + +### 주의사항 + +- CI/CD MySQL은 `read_only=OFF` (Gitea가 같은 MySQL 사용하여 쓰기 필요) → **CI/CD에서 sam/sam_stat/codebridge DB에 직접 쓰기 금지** (replicate-do-db 필터로 리플리케이션 대상만 제한) +- `replicate-do-db` 필터로 gitea DB는 리플리케이션 영향 없음 +- 운영 서버 MySQL 8.4는 `caching_sha2_password` 사용 → 리플리케이션 설정 시 `GET_SOURCE_PUBLIC_KEY=1` 필수 +- binlog 보존 기간(`binlog_expire_logs_seconds`) 내에 리플리케이션 장애를 복구해야 함, 초과 시 전체 재구축 필요 + +--- + ## [운영] sam → sam_stage 동기화 Stage 환경(stage-api.sam.it.kr)은 `sam_stage` DB를 사용합니다. 운영 `sam` DB와 **자동 동기화는 없으며**, 필요 시 수동으로 동기화합니다. @@ -343,15 +473,16 @@ cd /home/webservice/api-stage/current && php artisan config:cache && php artisan 1. OS 기본 셋팅 (UFW, 스왑, 타임존) 2. MySQL 설치 + Gitea DB 복원 -3. Java 설치 -4. Gitea 설치 + 설정/저장소 복원 -5. Jenkins 설치 + jobs/credentials/env-files/SSH 키 복원 -6. Nginx 설치 + 사이트 설정 + SSL 인증서 발급 -7. Prometheus + node_exporter 설치 + 설정 복원 -8. Grafana 설치 + 대시보드 임포트 -9. fail2ban 설치 -10. Webhook 연결 확인 -11. 전체 서비스 동작 검증 +3. **MySQL 리플리케이션 설정** (sam-tuning.cnf 복원, 운영 DB 덤프 임포트, CHANGE REPLICATION SOURCE) +4. Java 설치 +5. Gitea 설치 + 설정/저장소 복원 +6. Jenkins 설치 + jobs/credentials/env-files/SSH 키 복원 +7. Nginx 설치 + 사이트 설정 + SSL 인증서 발급 +8. Prometheus + node_exporter 설치 + 설정 복원 +9. Grafana 설치 + 대시보드 임포트 +10. fail2ban 설치 +11. Webhook 연결 확인 +12. 전체 서비스 동작 검증 (리플리케이션 상태 포함) 상세: [서버 설치 가이드](./11-server-setup.md) @@ -484,6 +615,10 @@ for t in data['data']['activeTargets']: # MySQL 상태 mysql -e "SHOW GLOBAL STATUS LIKE 'Uptime';" + +# MySQL 리플리케이션 상태 +mysql -u hskwon -p -e "SHOW REPLICA STATUS\G" | grep -E 'IO_Running|SQL_Running|Behind|Error' +# → IO_Running: Yes, SQL_Running: Yes, Seconds_Behind: 0 ``` **자동 시작 확인:** diff --git a/deploys/ops-manual/11-server-setup.md b/dev/deploys/ops-manual/11-server-setup.md similarity index 93% rename from deploys/ops-manual/11-server-setup.md rename to dev/deploys/ops-manual/11-server-setup.md index 4ad9a7f..f51b731 100644 --- a/deploys/ops-manual/11-server-setup.md +++ b/dev/deploys/ops-manual/11-server-setup.md @@ -197,7 +197,7 @@ sudo apt update sudo apt install -y \ php8.4-fpm php8.4-mysql php8.4-mbstring php8.4-xml \ php8.4-curl php8.4-zip php8.4-gd php8.4-bcmath \ - php8.4-intl php8.4-redis php8.4-opcache + php8.4-intl php8.4-redis php8.4-opcache php8.4-soap curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer @@ -1188,7 +1188,7 @@ done | OS | Ubuntu 24.04.2 | Ubuntu 24.04 (kernel 6.8.0-100) | | CPU/RAM | 2C / 3.8GB (스왑 없음) | 2C / 8GB + 스왑 4GB | | PHP | 8.4.15 (+ 5.6, 7.3) | 8.4.18 | -| MySQL | **8.0.45** | **8.4.8** | +| MySQL | **8.4.8** | **8.4.8** | | Node.js | 22.17.1 | 22.17.1 | | Nginx | 1.24.0 | 1.24.0 | | Redis | - | 7.0.15 (512mb) | @@ -1197,3 +1197,78 @@ done | Supervisor | - | queue worker ×2 | | UFW | **비활성** | 활성 | | fail2ban | - | ✅ | + +--- + +## [개발] PM2 설정 + +개발서버는 ecosystem.config.js 없이 PM2 CLI로 직접 관리합니다. + +```bash +# 실행 (포트 3001, Gitea가 3000 사용) +cd /home/webservice/react && pm2 start npm --name sam-react -- start -- -p 3001 + +# 재부팅 자동 시작 등록 +pm2 save +sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u hskwon --hp /home/hskwon +``` + +| 이름 | 모드 | 포트 | 비고 | +|------|------|------|------| +| sam-react | fork | 3001 | Gitea가 3000 사용, Jenkins 배포 시 자동 restart | + +--- + +## [개발] MySQL 8.0 → 8.4 업그레이드 절차 + +Ubuntu 24.04 APT 기본은 MySQL 8.0입니다. 8.4로 업그레이드하는 절차: + +### 사전 준비 + +```bash +# 1. DB 백업 +DB_PASS=$(grep DB_PASSWORD /home/webservice/mng/.env | head -1 | cut -d= -f2) +for db in sam chandj sam_stat; do + mysqldump -ucodebridge -p$DB_PASS --no-tablespaces --skip-triggers --skip-routines $db | gzip > /tmp/${db}_backup.sql.gz +done + +# 2. 인증 방식 변환 (mysql_native_password → caching_sha2_password) +# 8.4에서 mysql_native_password가 deprecated +mysql -u debian-sys-maint -p'' -e " + ALTER USER 'codebridge'@'localhost' IDENTIFIED WITH caching_sha2_password BY '<비밀번호>'; + ALTER USER 'chandj'@'localhost' IDENTIFIED WITH caching_sha2_password BY '<비밀번호>'; + FLUSH PRIVILEGES;" +``` + +> debian-sys-maint 비밀번호: `/etc/mysql/debian.cnf` 참조 + +### 업그레이드 실행 + +```bash +# 3. MySQL 중지 +sudo systemctl stop mysql + +# 4. MySQL APT 레포 추가 +wget -q https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb -O /tmp/mysql-apt-config.deb +sudo DEBIAN_FRONTEND=noninteractive dpkg -i /tmp/mysql-apt-config.deb + +# 5. 레포를 8.4-lts로 변경 +sudo sed -i 's/mysql-8.0/mysql-8.4-lts/g' /etc/apt/sources.list.d/mysql.list +sudo apt-get update + +# 6. 업그레이드 (기존 설정 유지) +sudo DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::="--force-confold" mysql-server mysql-client + +# 7. 시작 및 확인 +sudo systemctl start mysql +mysql --version # → 8.4.x 확인 +``` + +### GPG 키 만료 시 + +MySQL APT 레포의 GPG 키가 만료된 경우: + +```bash +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B7B3B788A8D3785C +# 또는 allow-insecure 임시 허용 후 설치 +``` diff --git a/deploys/ops-manual/README.md b/dev/deploys/ops-manual/README.md similarity index 100% rename from deploys/ops-manual/README.md rename to dev/deploys/ops-manual/README.md diff --git a/plans/5130-to-mng-migration-plan.md b/dev/dev_plans/5130-to-mng-migration-plan.md similarity index 100% rename from plans/5130-to-mng-migration-plan.md rename to dev/dev_plans/5130-to-mng-migration-plan.md diff --git a/dev/dev_plans/GUIDE.md b/dev/dev_plans/GUIDE.md new file mode 100644 index 0000000..d27d34f --- /dev/null +++ b/dev/dev_plans/GUIDE.md @@ -0,0 +1,127 @@ +# docs/dev_plans 문서 가이드 (최소 원칙) + +> **작성일**: 2026-02-26 +> **상태**: 최소 원칙 (정리 완료 후 보강 예정) +> **참조**: `docs/INDEX.md`, `CLAUDE.md`에 링크 예정 + +--- + +## 1. 파일 명명 규칙 + +``` +[도메인]-[기능]-plan.md + +예시: + bending-preproduction-stock-plan.md + quote-order-sync-improvement-plan.md + document-system-work-log-plan.md +``` + +- 영문 소문자, 하이픈(`-`) 구분 +- 접미사 `-plan.md` 고정 +- 도메인 접두사 통일: + +| 도메인 | 접두사 | 예시 | +|--------|--------|------| +| 견적 | `quote-` | quote-calculation-api-plan.md | +| 수주 | `order-` | order-location-management-plan.md | +| 품목/BOM | `item-`, `bom-` | item-master-data-alignment-plan.md | +| 절곡/생산 | `bending-` | bending-preproduction-stock-plan.md | +| 문서/서식 | `document-` | document-system-master-plan.md | +| 관리자(mng) | `mng-` | mng-menu-system-plan.md | +| 시스템/인프라 | `db-`, `tenant-` | db-backup-system-plan.md | +| 프론트엔드 | `react-` | react-api-integration-plan.md | +| 마이그레이션 | `[출처]-migration-` | kd-orders-migration-plan.md | + +> 도메인 분류는 정리 완료 후 실제 남은 문서 기반으로 확정 예정 + +--- + +## 2. 문서 필수 섹션 + +| 섹션 | 필수 | 내용 | +|------|:----:|------| +| **목적** (상단 1줄) | ✅ | 왜 이 작업이 필요한가 | +| **현재 진행 상태** | ✅ | 마지막 완료 작업, 다음 작업, 진행률 | +| **대상 범위** | ✅ | Phase별 작업 항목 테이블 | +| **변경 이력** | ✅ | 날짜 + 변경 내용 | +| 참고 문서 | ⚪ | 관련 문서 링크 | +| 검증 결과 | ⚪ | 완료 시 작성 | + +--- + +## 3. 상태 표기법 + +### 문서 상태 (인덱스용) + +| 표기 | 의미 | +|------|------| +| 🟡 진행중 | 현재 작업중 | +| ⚪ 대기 | 미착수 / 선행조건 대기 | +| ✅ 완료 | 개발 완료 | + +### 항목 상태 (문서 내부용) + +| 표기 | 의미 | +|------|------| +| ⏳ | 대기 | +| 🔄 | 진행중 | +| ✅ | 완료 | +| ⚠️ | 컨펌 필요 | + +### 진행률 표기 + +``` +완료/전체 (%) +예: 5/8 (63%) +``` + +--- + +## 4. 문서 생명주기 + +``` +생성 (PLANNED) ← 개발 계획 수립 + ↓ 착수 +진행 (ACTIVE) ← 인덱스에 노출, 진행 상태 추적 + ↓ 개발 완료 +완료 (COMPLETED) ← 인덱스에서 완료 표기 + ↓ docs/ 구조화 시 +정식 문서에 반영 ← plan의 설계 결정/구현 상세를 docs/ 정식 문서로 이관 +``` + +- **plan 문서**: 개발 계획 수립 및 진행 추적 용도 +- **완료 후**: 유용한 내용(설계 결정, 구현 상세)은 `docs/` 정식 문서에 반영 +- **plan 파일 보관/삭제**: `docs/` 구조화 시 확정 + +--- + +## 5. 폴더 구조 + +``` +docs/dev_plans/ +├── GUIDE.md ← 이 가이드 +├── index_plans.md ← ACTIVE + PLANNED 문서 인덱스 +├── [도메인]-*-plan.md ← 현행 계획 문서 +├── archive/ +│ └── HISTORY.md ← 완료 작업 요약 (기능별 섹션) +├── flow-tests/ ← JSON 테스트 케이스 (별도 관리) +└── SAM_ERP_Storyboard*/ ← 디자인 참조 (별도 관리) +``` + +--- + +## 6. 인덱스 관리 + +- 문서 생성/삭제 시 `index_plans.md` **동시 업데이트** +- **ACTIVE + PLANNED** 문서만 인덱스에 포함 +- 도메인별 섹션으로 그룹핑 +- 각 문서의 상태/진행률 표기 + +--- + +> **TODO (정리 완료 후 보강)** +> - 도메인 분류 체계 확정 (실제 남은 문서 기반) +> - 문서 간 관계 규칙 (상위/하위, 참조 관계) +> - 인덱스 관리 주기 및 방법 +> - docs/ 전체 구조와의 연계 정책 \ No newline at end of file diff --git a/dev/dev_plans/SAM_ERP_Storyboard_D1.4.md b/dev/dev_plans/SAM_ERP_Storyboard_D1.4.md new file mode 100644 index 0000000..35bb6cf --- /dev/null +++ b/dev/dev_plans/SAM_ERP_Storyboard_D1.4.md @@ -0,0 +1,1150 @@ +# SAM ERP 스토리보드 D1.4 + +> **작성일**: 2026-01-16 +> **버전**: D1.4 +> **상태**: 프론트 작성 +> **문서 ID**: SAM_ERP +> **원본**: `SAM_ERP_Storyboard_D1.4_260116.pdf` (167페이지) + +--- + +## 1. 문서 이력 (Document History) + +| 날짜 | 버전 | 주요 내용 | 상세 내용 | +|------|------|----------|----------| +| 2025-12-01 | D0.6 | 프론트 초안 | PC ERP - 인사관리 & 전자결재 작성 | +| 2025-12-01 | D0.7 | 프론트 작성 | PC ERP - 인사관리 & 전자결재 피드백 반영 | +| 2025-12-16 | D0.8 | 프론트 작성 | PC ERP - 회계 & 보고서 작성. 목록화면 기간 설정 영역 추가, GPS 출퇴근 추가, 급여관리/상세 삭제, 회계관리 추가, 출퇴근관리 추가, 카드/계좌관리 및 보고서 추가 | +| 2025-12-18 | D1.0 | 프론트 작성 | PC ERP - 구독 & 고객센터 작성. 게시판 추가, 악성채권 추심관리 상세 추가, 팝업관리/게시판관리/알림설정 추가, 계정정보/회사정보/구독관리/결제내역/고객센터 추가 | +| 2025-12-22 | D1.1 | 프론트 작성 | 카드 내역 관리 수정 | +| 2025-12-31 | D1.2 | 프론트 작성 | 알림 소리 설정 추가, 접대비 현황 수정 | +| 2026-01-07 | D1.3 | 프론트 작성 | 보고서 정보를 대시보드로 이동, SAM AI 채팅 버튼 추가, 화면 추가 다수, 항목 설정 버튼 추가 | +| 2026-01-16 | D1.4 | 프론트 작성 | 오늘의 이슈/현황판 화면 수정, 현황판 영역 및 3번 추가, 계정과목명 변경 (p99,100,104,106,108,123) | + +--- + +## 2. 메뉴 구조 (Menu Structure) + +``` +SAM +├── 로그인 / 회원가입 +├── 대시보드 +├── MES +│ ├── 판매관리 +│ ├── 구매관리 +│ ├── 발주관리 +│ ├── 공사관리 +│ ├── 생산관리 +│ ├── 품질관리 +│ ├── 자재관리 +│ ├── 장비관리 +│ └── 차량관리 +├── ERP +│ ├── 인사관리 +│ │ ├── 부서관리 +│ │ ├── 사원관리 +│ │ ├── 근태관리 +│ │ └── 휴가관리 +│ ├── 전자결재 +│ │ ├── 기안함 +│ │ ├── 결재함 +│ │ └── 참조함 +│ ├── 게시판 +│ ├── 회계관리 +│ │ ├── 거래처관리 +│ │ ├── 매출관리 +│ │ ├── 매입관리 +│ │ ├── 입금관리 +│ │ ├── 출금관리 +│ │ ├── 어음관리 +│ │ ├── 거래처원장 +│ │ ├── 일일 일보 +│ │ ├── 지출 예상 내역서 +│ │ ├── 미수금 현황 +│ │ ├── 악성채권 추심관리 +│ │ ├── 입출금 계좌 조회 +│ │ └── 카드 내역 관리 +│ ├── 기준정보 +│ │ ├── 직급관리 +│ │ ├── 직책관리 +│ │ ├── 권한관리 +│ │ ├── 근무관리 +│ │ ├── 출퇴근관리 +│ │ ├── 휴가관리 +│ │ ├── 카드관리 +│ │ ├── 계좌관리 +│ │ ├── 팝업관리 +│ │ ├── 게시판관리 +│ │ └── 알림설정 +│ └── 보고서 및 분석 +├── 계정정보 +├── 회사정보 +├── 구독관리 +├── 결제내역 +└── 고객센터 + ├── 공지사항 + ├── 이벤트 + ├── FAQ + └── 1:1 문의 +``` + +--- + +## 3. 공통 요소 + +### 3.1 제스처/인터랙션 + +| Type | 설명 | 적용 | +|------|------|------| +| Tap | 일정영역을 사용자가 터치 | Yes | +| Touch & Hold | 화면을 터치한 후 계속 누르고 있는 상태 | No | +| Double Tap | 일정영역을 두 번 터치 | No | +| Drag & Drop | 터치 혹은 홀드 상태에서 오브젝트를 이동하여 원하는 위치에 배치 | Yes | +| Scroll Up/Down | 위/아래로 스크롤 | Yes | +| Swipe Left/Right | 좌/우로 스와이프 | Yes | +| Pinch Zoom in/out | 오브젝트 또는 화면을 확대/축소 | Yes | + +### 3.2 반응형 웹 브레이크 포인트 + +| 구분 | 크기 | +|------|------| +| 모바일 | < 640px (기본) | +| 태블릿 | 768px ~ 1023px (md) | +| 데스크탑 | 1024px+ (lg) | +| 대형 모니터 | 1280px+ (xl) | + +### 3.3 화면 템플릿 + +- **A**: Status bar - 안테나, 통화, 배터리 등 시스템 OS 관리 영역 +- **B**: Browser 영역 - 브라우저 기능 영역 +- **C**: Title 영역 - 텍스트 또는 기능 버튼, 기본 가운데 정렬 +- **D**: Content 영역 - 컨텐츠 내용 표시, 길어질 경우 스크롤 +- **E**: Browser bar 영역 - 브라우저 유틸 바 영역 +- **F**: Keypad 영역 - 키보드 입력할 때 활성화 + +### 3.4 메시지 유형 + +| Type | 설명 | +|------|------| +| 알림 Alert | 사용자에게 상황을 알려주기 위한 팝업 (확인 버튼) | +| 확인 Alert | 사용자에게 확인이 필요할 경우 제공 (취소/확인 버튼) | +| 토스트 메시지 | 단순 Notify, 2~3초 후 Fade out | + +### 3.5 셀렉트 박스 + +- **기본**: 클릭 시 하단에 종류 목록 표시, 목록 중 하나만 선택 +- **다중 선택**: 복수 선택 가능, 전체 선택/해제 토글, 첫번째 항목명 + 추가 수 표시 +- **검색**: 검색어 입력 후 엔터 또는 검색 아이콘 클릭 시 검색 결과 표시 +- **검색 & 다중 선택**: 검색 + 복수 선택 기능 결합 + +### 3.6 가이드 메시지 + +- 긍정일 경우: 녹색 +- 부정일 경우: 붉은색 +- 입력 필드 하단 또는 Alert에 표시 + +### 3.7 공지 팝업 + +- 대상: 전체 또는 설정 부서 +- 설정 기간동안 대상에게 팝업 표시 +- "1일간 이 창을 열지 않음" 체크박스 (자정 기준) + +--- + +## 4. GNB, LNB, 푸터 (p9) + +### 4.1 GNB (Global Navigation Bar) + +| 번호 | 요소 | 설명 | +|------|------|------| +| 1 | 알림 버튼 | 클릭 시 알림 팝업 표시 | +| 2 | 개인 정보 버튼 | 디폴트 이미지, 이름, 직급 표시. 클릭 시 마이페이지 팝업 | +| 3 | 회사 로고 | 회사정보 화면에서 등록한 로고 표시, 회사 변경 시 해당 로고 변경 | +| 4 | 메뉴 영역 | 하위 메뉴 있을 경우 하단에 표시, 없을 경우 해당 화면으로 이동 | +| 5 | MES 메뉴 영역 | 영업관리, 판매관리, 구매관리 등 MES 메뉴 영역 | +| 6 | 푸터 영역 | 모든 화면 하단 공통 표시 | +| 7 | SAM AI 채팅 버튼 | 클릭 시 SAM AI 채팅 팝업 표시 | + +### 4.2 알림 팝업 (p10) + +- 각 디폴트 썸네일, 종류(공지사항, 안내), 제목/내용, 전송일시 표시 +- 클릭 시 해당 상세 화면으로 이동 +- 최신순 10개까지 표시 +- New 아이콘: 새 알림일 경우 표시, 클릭 시 사라짐 +- 붉은 점 아이콘: 새 알림이 있을 경우 표시, 모두 클릭 시 사라짐 + +### 4.3 마이페이지 팝업 (p11) + +| 번호 | 요소 | 설명 | +|------|------|------| +| 1 | 계정 아이디 | 이메일 표시 | +| 2 | 회사 셀렉트 박스 | 해당 계정이 생성한 회사(테넌트) 목록 표시, 등록순 정렬, 한 회사만 소유 시 숨김 | +| 3 | 로그아웃 버튼 | "정말 로그아웃하시겠습니까?" 확인 Alert | + +--- + +## 5. 운영 (영업) + +### 5.1 가입 및 로그인 플로우 + +``` +영업사원 → 사업자등록번호 입력 → 조회 + ├── 미등록 → 회사정보 등록 → 가입 신청 완료 + └── 등록됨 → 알림 Alert + +관리자(매니저) → 승인/거절 + ├── 승인 → 이메일로 URL 발송 → 약관 동의 → 비밀번호 설정 → SAM 로그인 + └── 거절 → 거절 알림 +``` + +### 5.2 운영 로그인 (p17) + +| 번호 | 요소 | 설명 | +|------|------|------| +| 1 | 아이디 인풋박스 | 테넌트 생성자: 이메일, 사용자: 이메일 또는 아이디 | +| 2 | 비밀번호 인풋박스 | 마지막 글자 제외 마스킹 처리 | +| 2-2 | 열람 버튼 | 열람/숨김 토글, 디폴트 숨김 | +| 3 | 자동 로그인 체크박스 | 체크 시 로그아웃 전까지 세션 유지 | +| 4 | 로그인 버튼 | 유효할 경우 사업자등록번호 조회 화면으로 이동 | + +**아이디 가이드 메시지:** + +| 상황 | 메시지 | +|------|--------| +| 필수 정보 미입력 | "필수 정보입니다." | +| 4글자 미만 | "이메일은 4자 이상 가능합니다." | +| 이메일 형식 유효하지 않음 | "이메일 주소를 다시 확인해주세요." | + +**비밀번호 가이드 메시지:** + +| 상황 | 메시지 | +|------|--------| +| 필수 정보 미입력 | "필수 정보입니다." | +| 8자 미만 | "8자 이상으로 만들어주세요." | +| 영문+숫자+특수문자 조합 아님 | "영문, 숫자, 특수문자를 모두 조합하여 구성해주세요. 단, `' ; -- < ( ) \ /` 보안상 사용 불가" | + +### 5.3 사업자등록번호 조회 (p18) + +| 번호 | 요소 | 설명 | +|------|------|------| +| 1 | 제조 데모 | 클릭 시 제조 데모 화면으로 이동 | +| 2 | 시공 데모 | 클릭 시 시공 데모 화면으로 이동 | +| 3 | 사업자등록번호 인풋박스 | 숫자만 가능, 10자리 | +| 4 | 다음 버튼 | 바로빌 조회 후: 휴폐업 시 알림, 사용가능+등록됨 시 알림, 사용가능+미등록 시 회사정보 등록 이동 | + +### 5.4 회사정보 등록 (p19) + +**회사(테넌트) 상태:** + +| 상태 | 설명 | +|------|------| +| 신청 | 신청 완료 상태 | +| 승인 | 계약 완료 및 계약금 50% 입금, 이메일로 URL 발송, 최초 로그인 시 ERP만 표시 | +| 거절 | 영업사원이 직접 거절 내용 전달 | +| 운영 | 프로그램 설정 완료, 잔금 50% 입금 및 인도, 당월 말일까지 무료, 익월부터 구독료 청구 | +| 만료 | 기간 종료, 종료일~3일동안 연장 결제 없음, 영업사원에게 알림, 서비스에 경고 배너 | +| 해지 대기 | 90일 대기 단계 | +| 해지 | 서비스 해지, 복구 불가 | +| 제재 | 서비스 이용 불가 | +| 탈퇴 | 로그인 불가, 복구 불가 | + +**등록 필드:** +- 회사 로고 (750x250px, 10MB 이하 PNG/JPEG/GIF) +- 회사명, 대표자명, 업태, 업종 +- 주소 (우편번호 찾기) +- 이메일(아이디), 세금계산서 이메일 +- 담당자명, 담당자 연락처 +- 사업자등록증 (파일 첨부) + +### 5.5 가입 신청 완료 (p20) + +- 가입 신청 완료 안내 문구 표시 +- 가입 신청 취소 버튼: "가입 신청 취소 시 등록한 모든 정보가 삭제됩니다." 확인 Alert + +### 5.6 가입 신청 승인 이메일 (p21) + +- 계정 활성화 버튼: 약관 동의 화면으로 이동 +- 지원, 블로그 버튼: 운영 노션 링크로 이동 + +### 5.7 약관 동의 (p22) + +- 필수 약관: 서비스 이용약관, 개인정보 취급방침, 기타 약관 +- 선택 약관: 마케팅 정보 수신 동의 (이메일, SMS) +- "약관에 동의합니다" 버튼: 모든 필수 약관 동의 시 활성화 → 비밀번호 설정 화면 이동 +- "전체 약관에 동의합니다" 버튼: 모든 필수+선택 약관 동의 처리 → 비밀번호 설정 화면 이동 + +### 5.8 비밀번호 설정 (p23) + +- 최소 8자 이상 영문+숫자+특수문자 조합 +- 비밀번호 확인 +- 계정 활성화 버튼: 로그인 화면으로 이동 + +--- + +## 6. GPS 출퇴근 + +### 6.1 출퇴근하기 (p25) + +| 번호 | 요소 | 설명 | +|------|------|------| +| 1 | 출퇴근 버튼 | GPS 출퇴근 사용 시에만 표시, 모바일일 경우에만 활성화 | +| 2 | 출퇴근 허용 반경 | 기준 좌표로부터의 허용 반경을 원형으로 표시 | +| 3 | 현재 위치 버튼 | 현재 위치를 지도 중심으로 표시 | +| 4-6 | 지도 컨트롤 | 확대(+), 축소(-), 슬라이드바 | +| 7 | 개인 정보 영역 | 프로필 이미지, 이름, 부서명, 직급명 | +| 8 | 현재 시각 | HH:MM:SS | +| 9 | 출근하기 버튼 | 위치 미설정 시 알림, 반경 초과 시 알림, 반경 이내 시 출근 기록 저장 | + +### 6.2 출근/퇴근 완료 (p26-27) + +- 출근/퇴근 완료 아이콘 이미지 표시 +- 완료 정보: 시:분:초, 일자(요일) +- 출근/퇴근 좌표의 본사/현장명 표시 +- 확인 버튼: 대시보드로 이동 + +### 6.3 현장등록 - 위치 정보 설정 (p28) + +- 위도/경도 입력 +- 주소 또는 경위도 값으로 설정 +- 각 현장의 GPS 중심값으로 설정 + +--- + +## 7. 대시보드 + +### 7.1 로그인 (p30) + +- 운영 로그인과 동일 구조 +- 로그인 버튼 클릭 시 대시보드 화면으로 이동 + +### 7.2 대시보드 메인 (p31-36) + +#### 7.2.1 오늘의 이슈 (p31) + +| 번호 | 요소 | 설명 | +|------|------|------| +| 1 | 항목 설정 버튼 | 항목 설정_대시보드 팝업 표시 | +| 2 | 오늘의 이슈 영역 | 당일 이슈 발생 시 알림, 즉시 승인/보류 처리 가능 | +| 3 | 필터 셀렉트 박스 | 전체, 수주 성공, 추심 이슈, 적정 재고, 결재 요청, 세금 신고, 신규 업체 등록, 근태, 발주 완료 | +| 4 | 이슈 목록 | 클릭 시 해당 상세 화면으로 이동, 화면 가로 길이에 따라 4/3/2/1열 표시 | +| 5 | 승인/반려 버튼 | 해당 건에 대해 즉시 승인/반려 처리 | +| 6 | 일일 일보 정보 | 현금성 자산 합계, 외국환(USD) 합계, 입금 합계, 출금 합계 | +| 7 | AI 리포트 | 핵심 키워드 강조 표시 (빨간색: 경고, 주황: 주의, 녹색: 긍정, 파랑: 양호) | + +**이슈 케이스:** +- 신규 업체 등록 +- 결근 등 근태 이벤트 +- 재고 미달 알림 +- 채권 추심 등록, 상태 변경 +- 발주, 수주 등록 +- 지출결의서 등 전자결재 상신 +- 세금 신고 알림 + +#### 7.2.2 현황판 (p32) + +- 수주, 채권 추심, 안전 재고, 세금 신고, 신규 업체 등록, 연차, 발주, 결재 요청 +- 경고 상태일 경우 해당 영역에 색상 하이라이트 +- 클릭 시 해당 상세 화면으로 이동 + +#### 7.2.3 당월 예상 지출 내역 (p32-33) + +- 매입, 카드, 발행어음, 총 예상 지출 합계 (전월 대비 %) +- AI 분석 메시지 (예상 지출 증감 원인 분석) + +#### 7.2.4 카드/가지급금 관리 (p33) + +**가지급금 정의:** +- 법인카드(지출결의서) 미정리 +- 접대비 불인정 +- 증빙미비 +- 업무관련성 소명 불가 (주말/심야 카드 사용, 불인정 가맹점) +- 대표자 개인 대여 +- 가지급금 인정이자 4.6% + +| 번호 | 요소 | 설명 | +|------|------|------| +| 1 | 매입 정보 | 클릭 시 당월 매입 상세 팝업 | +| 2 | 카드 정보 | 클릭 시 당월 카드 상세 팝업 | +| 3 | 발행어음 정보 | 클릭 시 당월 발행어음 상세 팝업 | +| 4 | 총 예상 지출 합계 | 클릭 시 당월 지출 예상 상세 팝업 | +| 5 | 가지급금 | 클릭 시 가지급금 상세 팝업 | +| 6 | 법인세 예상 가중 | 클릭 시 법인세 예상 가중 상세 팝업 | +| 7 | 대표자 종합세 예상 가중 | 클릭 시 대표자 종합소득세 예상 가중 상세 팝업 | + +#### 7.2.5 접대비 현황 (p33-34) + +- 매출, 접대비 총 한도, 접대비 잔여한도, 접대비 사용금액 +- AI 분석 메시지 (한도 대비 사용률, 초과 경고, 거래처 정보 누락 등) + +#### 7.2.6 복리후생비 현황 (p34) + +- 당해년도 한도, 기간별 한도/잔여/사용금액 +- AI 분석 (1인당 월 복리후생비, 식대 비과세 한도 초과 등) + +#### 7.2.7 미수금 현황 (p34) + +- 누적 미수금, 당월 미수금 +- 미수금 상위 회사 1, 2위 표시 +- AI 분석 (장기 미수금 경고, 리스크 분산 필요 등) + +#### 7.2.8 채권추심 현황 (p35) + +- 누적 악성채권, 추심중, 법적조치, 회수완료 +- 세금계산서 미발행 건수 +- AI 분석 (지급명령 신청 상태, 대손 처리 검토 등) + +#### 7.2.9 부가세 현황 (p35-36) + +- 매출세액, 매입세액, 예상 납부세액 +- AI 분석 (예상 환급세액/납부세액, 전기 대비 증감 분석) + +#### 7.2.10 캘린더 (p36) + +| 번호 | 요소 | 설명 | +|------|------|------| +| 1 | 이번주 + 좌우 화살표 | 이전월/다음월 스케줄 표시 | +| 2 | 캘린더 탭 | 주, 월 (디폴트: 월) | +| 3 | 부서 필터 | 전체, 부서, 개인 | +| 4 | 업무 필터 (다중선택) | 전체, 일정, 발주, 시공, 수주 성공, 추심 이슈 등 | +| 5 | 일정 영역 | [부서/이름] 제목 형태, 클릭 시 상세 이동 | +| 5-1 | 이슈 영역 | [구분] 제목 형태, 클릭 시 상세 이동 | +| 6 | 일자 영역 | 당일 외곽선 하이라이트, 지난 일자 색상 구분 | +| 7 | +N 버튼 | 해당 일자에 스케줄 2건 초과 시 초과건 숫자 표시 | +| 8 | 일정 목록 영역 | 선택된 일자의 일정 목록 | +| 9 | 일정 등록 버튼 | 일정 상세 팝업 표시 | + +### 7.3 일정 상세 팝업 (p37) + +- 부서 셀렉트 박스 (검색) +- 기간 영역: 기간 설정 달력 팝업 +- 시간 체크박스: 미설정 시 종일, 설정 시 시간 범위 활성화 +- 색상 선택 + +### 7.4 항목 설정_대시보드 팝업 (p38-39) + +**ON/OFF 설정 항목:** +- 오늘의 이슈: 수주, 채권 추심, 안전 재고, 세금 신고, 신규 업체 등록, 연차, 지각, 결근, 발주, 결재 요청 +- 현황판 (오늘의 이슈 항목 정보와 연동) +- 당월 예상 지출 내역, 카드/가지급금 관리, 일일 일보 +- 접대비 현황, 복리후생비 현황, 미수금 현황, 미수금 상위 회사 현황 +- 채권추심 현황, 부가세 현황, 캘린더 + +**접대비 한도 관리:** +- 기간 구분: 연간, 반기, 분기, 월 (총 한도를 분할 계산) +- 기업 구분: 일반법인, 중소기업 + +**복리후생비 한도 관리:** +- 계산 방식: 직원당 정액 금액 방식 / 연봉 총액 X 비율 방식 + +**중소기업 판단 기준표:** + +| 조건 | 기준 | 충족 요건 | +|------|------|----------| +| 매출액 | 업종별 상이 | 업종별 기준 금액 이하 | +| 자산총액 | 5,000억원 | 미만 | +| 독립성 | 소유/경영 | 대기업 계열 아님 | + +**접대비 기본한도:** + +| 판정 | 조건 | 접대비 기본한도 | +|------|------|---------------| +| 중소기업 | 3가지 모두 충족 | 3,600만원 | +| 일반법인 | 하나라도 미충족 | 1,200만원 | + +### 7.5 당월 매입 상세 팝업 (p40) + +- 자재 유형별 구매 비율 차트 (원자재/부자재/포장재) +- 월별 매입 추이 차트 +- 일별 매입 내역 테이블: 매입일, 거래처, 매입금액, 매입유형 +- 필터: 매입유형 (원재료매입, 부재료매입, 상품매입, 외주가공비, 소모품비 등) +- 정렬: 최신순, 등록순, 금액순 + +### 7.6 당월 카드 상세 팝업 (p41) + +- 사용자별 카드 사용 비율 차트 +- 월별 카드 사용 추이 차트 +- 일별 카드 사용 내역: 카드명, 사용자, 사용일시, 가맹점명, 사용금액, 사용유형 +- 미정리 건수 표시 + +### 7.7 당월 발행어음 상세 팝업 (p42) + +- 월별 발행어음 추이 차트 +- 당월 거래처별 발행어음 차트 +- 상태: 보관중, 만기임박(만기일 7일 전), 만기 경과, 결제완료, 부도 + +### 7.8 당월 지출 예상 상세 팝업 (p43) + +- 당월 지출 예상 금액, 전월 대비, 총 계좌 잔액 +- 당월 지출 승인 내역서: 예상 지급일, 항목, 지출금액, 거래처, 계좌 +- 지출 합계, 계좌 잔액, 최종 차액 + +### 7.9 가지급금 상세 팝업 (p44) + +- 가지급금, 인정이자 4.6%, 미설정 건수 +- 내역: 발생일시, 대상, 구분(카드/계좌), 금액, 상태, 내용 +- AI 분류 기준: 미정리, 불인정 가맹점, 접대비 불인정, 주말/심야 카드 사용 + +### 7.10 법인세 예상 가중 상세 팝업 (p45) + +**법인세 과세표준 (2024년 기준):** + +| 과세표준 | 세율 | 누진공제 | +|---------|------|---------| +| 2억원 이하 | 9% | - | +| 2억 초과 ~ 200억 이하 | 19% | 2,000만원 | +| 200억 초과 ~ 3,000억 이하 | 21% | 42,000만원 | +| 3,000억 초과 | 24% | 942,000만원 | + +- 접대비 초과 금액 + 가지급금 인정이자 반영/미반영 비교 +- 과세표준 계산: 당기순이익 + 손금불산입 - 손금산입 + +### 7.11 대표자 종합소득세 예상 가중 상세 팝업 (p46) + +**종합소득세 과세표준 (2024년 기준):** + +| 과세표준 | 세율 | 누진공제 | +|---------|------|---------| +| 1,400만원 이하 | 6% | - | +| 1,400만 초과 ~ 5,000만 이하 | 15% | 126만원 | +| 5,000만 초과 ~ 8,800만 이하 | 24% | 576만원 | +| 8,800만 초과 ~ 1.5억 이하 | 35% | 1,544만원 | +| 1.5억 초과 ~ 3억 이하 | 38% | 1,994만원 | +| 3억 초과 ~ 5억 이하 | 40% | 2,594만원 | +| 5억 초과 ~ 10억 이하 | 42% | 3,594만원 | +| 10억 초과 | 45% | 6,594만원 | + +- 인정이자가 상여로 처리, 종합소득세/지방소득세/4대보험 차액 표시 + +### 7.12 당해 매출 상세 팝업 (p47) + +- 월별 매출 추이 차트, 당해년도 거래처별 매출 차트 +- 매출유형: 제품 매출, 상품 매출, 부품 매출, 용역 매출, 공사 매출, 임대 수익, 기타 매출 + +### 7.13 접대비 상세 팝업 (p48-49) + +**접대비 손금한도 계산:** + +| 법인 유형 | 연간 기본한도 | 월 환산 | +|----------|-------------|--------| +| 일반법인 | 12,000,000원 | 1,000,000원 | +| 중소기업 | 36,000,000원 | 3,000,000원 | + +**수입금액별 추가한도:** + +| 수입금액 구간 | 추가한도 계산식 | +|-------------|--------------| +| 100억원 이하 | 수입금액 x 0.2% | +| 100억 초과 ~ 500억 이하 | 2,000만원 + (수입금액 - 100억) x 0.1% | +| 500억원 초과 | 6,000만원 + (수입금액 - 500억) x 0.03% | + +### 7.14 복리후생비 상세 팝업 (p50-51) + +- 항목별 사용 비율 차트 (식대, 건강검진 등) +- 계산 방식: 직원당 정액 금액 / 연봉 총액 비율 + +**법정 외 복리후생비 예시:** + +| 항목 | 금액(원) | 비고 | +|------|---------|------| +| 식대 (비과세) | 200,000 | 1인당 월 20만원 | +| 교통비/차량유지비 | 100,000 | 1인당 월 10만원 | +| 경조사비 | 50,000 | 1인당 월 5만원 적립 | +| 건강검진비 | 30,000 | 연 1회 기준 월 환산 | +| 교육훈련비 | 80,000 | 1인당 월 8만원 | +| 복지포인트/기타 | 100,000 | 1인당 월 10만원 | + +### 7.15 예상 납부세액 상세 팝업 (p52) + +- 매출세액, 매입세액, 경감/공제세액 +- 세금계산서 미발행/미수취 내역 + +### 7.16 가지급금 인정이자 계산 (p54) + +**계산 공식 (법인세법 기준):** +- 경과일수 = 정산일 - 지급일 +- 일이자율 = 연이자율 / 365 +- 인정이자 = 가지급금 x 일이자율 x 경과일수 +- 정산차액 = 가지급금 총액 - 실사용 총액 + +**계산 예시 (2024년 기준, 인정이자율 4.6%):** + +| 항목 | 금액 | 계산식 | +|------|------|--------| +| 가지급금 잔액 | 15,200,000원 | - | +| 인정이자 | 699,200원 | 잔액 x 0.046 | +| 법인세 추가 (19%) | 132,848원 | 인정이자 x 0.19 | +| 대표자 소득세 추가 (35%) | 244,720원 | 인정이자 x 0.35 | +| 대표자 지방소득세 (10%) | 24,472원 | - | +| 총 세금 부담 | 402,040원 | - | + +--- + +## 8. 인사관리 + +### 8.1 부서관리 (p57-58) + +| 번호 | 요소 | 설명 | +|------|------|------| +| 1 | 전체 선택 체크박스 | 전체 선택/해제 토글 | +| 3 | 추가 버튼 | 선택한 부서의 하위 부서 일괄 생성 (관리 권한 필요) | +| 4 | 삭제 버튼 | 삭제된 부서의 인원은 회사(기본) 인원으로 변경 | +| 5/6 | 축소/확대 버튼 | 하위 부서 숨김/표시 토글 | +| 7 | 추가 버튼 | 부서 추가 팝업 표시 | +| 8 | 수정 버튼 | 부서 수정 팝업 표시 | +| 9 | 삭제 버튼 | 개별 부서 삭제 | + +### 8.2 사원관리 (p59) + +**상단 정보:** +- 재직 인원, 휴직 인원, 퇴직 인원, 평균근속년수 + +| 번호 | 요소 | 설명 | +|------|------|------| +| 1 | 기간 설정 | 입사일 기준, 당해년도/전전월/전월/당월/어제/오늘 | +| 2 | CSV 일괄 등록 | CSV 일괄 등록 화면으로 이동 | +| 3 | 사원 등록 | 사원 상세 화면으로 이동 | +| 4 | 사용자 초대 | 사용자 초대 팝업 표시 | +| 5 | 필터 | 전체, 사용자 아이디 보유/미보유, 재직, 휴직, 퇴직 | +| 6 | 정렬 | 직급순, 입사일순, 부서순, 이름순 | + +**목록 항목:** 사원코드, 부서, 직책, 이름, 직급, 휴대폰, 이메일, 입사일, 상태, 사용자 아이디, 권한 + +### 8.3 사원 상세 (p60-63) + +**사원 정보 (필수):** +- 주민등록번호, 이름, 휴대폰, 이메일 +- 급여계좌 (은행, 계좌, 예금주), 연봉 + +**사용자 정보 (필수):** +- 아이디 (이메일 또는 아이디), 비밀번호 +- 권한 (권한관리 목록), 상태 (정상, 제재, 중지) + +**사원 상세 (선택 - 항목 설정으로 관리):** +- 프로필 사진, 사원코드, 성별, 주소 + +**인사 정보 (선택):** +- 고용 형태: 정규직, 계약직, 파견직, 용역직, 시간제 근로자 +- 직급: 사원, 대리, 과장, 차장, 부장, 이사, 상무, 전무, 부사장, 사장, 회장 +- 상태: 재직, 병가휴직, 육아휴직, 개인사정휴직, 무급휴직, 퇴사, 해고, 권고사직, 계약만료, 정년퇴직 +- 부서 (검색), 직책 +- 출근 위치, 퇴근 위치 (본사, 현장 목록 중 선택) +- 퇴사일, 퇴사 사유 + +### 8.4 사용자 초대 팝업 (p64-65) + +**초대 프로세스:** +1. 초대 이메일 발송 +2. 약관 동의 (아이디를 이메일로 사용) +3. 비밀번호 설정 +4. 로그인 + +- 이메일 주소 기준 사원 정보가 있을 경우 매핑하여 사용자 등록 +- 사용자 아이디는 다른 테넌트와 중복 가능 + +### 8.5 CSV 일괄 등록 (p66-67) + +- 양식 다운로드 → 파일 선택 (CSV 50MB 이하) → 파일 변환 → 정보 등록 영역에 표시 → 체크 항목 등록 + +### 8.6 근태관리 (p68-69) + +- 관리 권한이 있으면 모든 사원 편집 가능, 없으면 본인만 +- 근태관리 자동 설정 시: 모든 사원 정시 출퇴근 기록, 예외사항만 작성 + +**상단 정보:** 정시 출근, 지각, 결근, 휴가 + +**근태 정보 팝업:** +- 사원 (검색 & 다중 선택), 기준일 (다중 선택 가능) +- 출근/퇴근 시간, 야간 연장 시간, 주말 연장 시간 + +### 8.7 휴가관리 (p70-73) + +**탭:** 휴가 사용 현황, 휴가 부여 현황, 휴가 신청 현황 + +**상단 정보:** 휴가 승인 대기, 연차 인원, 경조사 인원, 연간 연차 사용률 + +**휴가 유형:** 연차, 보상, 경조, 보건, 병가, 반차, 회수(차감) + +**휴가 신청:** +- 잔여 일시 >= 신청 일시: 휴가 신청 완료 +- 잔여 일시 < 신청 일시: "휴가 잔여 일시를 초과했습니다." 알림 + +--- + +## 9. 전자결재 + +### 9.1 기안함 (p75) + +**문서 상태:** +- 임시저장: 문서 작성 중 임시저장 +- 진행: 상신 및 결재자 중 일부 승인 +- 완료: 모든 승인 완료 +- 반려: 결재자 중 한 명이 반려 + +| 번호 | 요소 | 설명 | +|------|------|------| +| 1 | 문서 작성 | 문서 작성 화면으로 이동 | +| 2 | 상신 버튼 | 임시저장 상태만 상신 가능 | +| 3 | 삭제 버튼 | 임시저장 상태만 삭제 가능 | + +### 9.2 문서 작성 (p76-81) + +**문서 유형:** + +#### 9.2.1 품의서 (p76-77) + +- 기본 정보: 작성일, 기안자, 문서유형, 문서번호 +- 결재선: 부서/직책/이름 (검색 & 다중 선택) +- 참조: 부서/직책/이름 (검색 & 다중 선택) +- 품의서 정보: 구매처, 구매처 결제일, 제목, 품의 내역, 품의 사유, 예상 비용 +- 녹음 버튼: 음성 인식 → 텍스트 변환 → 인풋박스에 표시 +- 참고 이미지 첨부 + +#### 9.2.2 지출결의서 (p78-79) + +- 기본 정보: 품의서와 동일 +- 지출 정보: 결제일, 지출 요청일 +- 결제 정보: 카드 (등록된 카드 목록), 총 비용 +- 지출결의서 정보: 적요, 금액, 비고 (행 추가 가능) +- 참고 이미지 첨부 + +#### 9.2.3 지출 예상 내역서 (p80-81) + +- 기본 정보: 품의서와 동일 +- 지출 예상 내역서 정보: 제목 +- 목록: 예상 지급일, 항목, 지출금액, 거래처, 계좌 +- 월별 소계, 지출 합계, 계좌 잔액, 최종 차액 + +### 9.3 결재함 (p82) + +**상태:** +- 결재요청: 결재 요청을 받은 상태 +- 예정: 결재 순번에 의한 대기 +- 완료: 승인 완료 +- 반려: 반려 완료 + +### 9.4 문서 상세 팝업 (p83-85) + +**공통 기능:** 복제(새글), 수정(결재선 누구나 가능), 반려/승인(결재선만), 공유(PDF/이메일/팩스/카카오톡), 인쇄 +- 품의서: 구매처 정보, 품의 내역/사유, 예상 비용 +- 지출결의서: 지출 요청일/결제일, 적요/금액/비고, 법인카드, 총 비용 +- 지출예상내역서: 예상 지급일별 항목/지출금액/거래처/계좌 + +### 9.5 참조함 (p86) + +- 열람/미열람 상태 관리 +- 열람 버튼: 일괄 열람 처리 +- 미열람 버튼: 일괄 미열람 처리 + +--- + +## 10. 게시판 + +### 10.1 게시판 목록 (p88) + +- 게시판 탭: 공지사항, 게시판명, ..., 나의 게시글 +- 기준정보 > 게시판관리에서 설정한 게시판 목록 +- 대상(전사, 부서, 팀)에 따라 소속에 맞는 게시판만 표시 +- 게시글: 번호(상단 노출 아이콘 또는 번호), 제목, 작성자, 등록일, 조회수 + +### 10.2 게시글 상세 (p89-91) + +**등록:** +- 게시판 선택, 상단 노출 (최대 5개, 최신순), 댓글 사용/미사용 +- 제목, 내용, 첨부파일 + +**조회:** +- 본인 작성글만 수정/삭제 버튼 표시 +- 댓글 등록/수정/삭제 (본인 댓글만) + +--- + +## 11. 회계관리 + +### 11.1 회계 관리 플로우 + +``` +매출 흐름: + 거래처 선택 → 매출 등록 → 세금계산서 발행 → 입금 등록 + ├── 전액 입금? → 거래처원장 + └── 미입금 → 미수금 현황 → 연체? → 악성 추심 + +매입 흐름: + 거래처 선택 → 매입 등록 → 세금계산서 수취 → 출금 등록 + ├── 전액 출금? → 거래처원장 + └── 미출금 → 미지급 알림 +``` + +### 11.2 거래처관리 (p94-97) + +**목록 필터:** +- 구분: 전체, 매출, 매입, 매입매출 +- 신용등급: AAA ~ D +- 거래등급: A(우수), B(양호), C(보통), D(주의), E(위험) +- 악성채권: 전체, 악성채권, 정상 + +**거래처 상세:** +- 기본 정보: 거래처명, 거래처 코드, 사업자등록번호, 대표자명, 거래처 유형, 업태, 업종, 주소 +- 연락처: 전화번호, 모바일, 팩스, 이메일 +- 담당자 정보: 시스템 관리자, 담당자명, 담당자 전화 +- 회사 정보: 회사 로고 +- 결제일: 매입 결제일(1~31일/말일), 매출 결제일(1~31일/말일) +- 추가 정보: 신용등급, 거래등급, 세금계산서 이메일, 입금계좌 +- 미수금 표시 (읽기 전용) +- 연체 토글 (ON/OFF, 연체일수 표시) +- 미지급 표시 (읽기 전용) +- 악성채권 토글 (ON/OFF) +- 메모 (일시, 작성자, 내용) + +### 11.3 매출관리 (p99-102) + +**매출 등록:** +- 수주 확정 시 자동 등록 (삭제 불가) +- 별도 매출 시 직접 등록 (삭제 가능) + +**매출유형:** 미설정, 제품 매출, 상품 매출, 부품 매출, 용역 매출, 공사 매출, 임대 수익, 기타 매출 + +**매출 상세:** +- 기본 정보: 거래처명, 매출일, 매출번호, 매출유형 +- 품목 정보: 품목명, 수량, 단가, 공급가액, 부가세, 합계, 적요 +- 세금계산서: 발행 토글 (미발행/발행완료) +- 거래명세서: 발행 토글, 조회 버튼, 발행하기 버튼 (거래처 이메일로 자동 발송) + +### 11.4 매입/출금 플로우 (p103) + +``` +직원: 품의서 작성 → 전자결재 상신 → 승인? + ├── 승인 → 지출예상내역서 → 지급일 가능? + │ ├── Yes → 지출결의서 작성 → 전자결재 상신 → 승인? + │ │ ├── 승인 → 매입 자동 등록 → 출금 상세 등록 + │ │ └── 반려 + │ └── No → 예상 지급일 수정 + └── 반려 +``` + +### 11.5 매입관리 (p104-105) + +**매입 등록:** 지출예상내역서 승인 완료 시 자동 등록 (삭제 불가) + +**매입유형:** 미설정, 원재료매입, 부재료매입, 상품매입, 외주가공비, 소모품비, 수선비, 운반비, 사무용품비, 임차료, 수도광열비, 통신비, 차량유지비, 접대비, 보험료, 기타용역비 + +**매입 상세:** +- 근거 문서(품의서/지출결의서), 예상 비용 표시 +- 매입번호: 문서번호 + 넘버링 조합 +- 출금계좌, 거래처, 매입유형 +- 세금계산서 수취 토글 + +### 11.6 입금관리 (p106-107) + +- 기준정보 > 계좌관리에 등록된 계좌의 자동 입금 내역 수집 +- 바로빌 API 연동 시 실시간 조회 + +**입금유형:** 미설정, 매출대금, 선수금, 가수금, 임대수익, 이자수익, 보증금 반환, 차입금, 자본금, 부가세 환급, 기타 + +### 11.7 출금관리 (p108-109) + +- 기준정보 > 계좌관리에 등록된 계좌의 자동 출금 내역 수집 + +**출금유형:** 미설정, 매입대금, 선급금, 가지급금, 임대료, 이자비용, 보증금 지급, 차입금 상환, 배당금 지급, 부가세 납부, 급여, 4대보험, 세금, 공과금, 경비, 기타 + +### 11.8 어음관리 (p110-111) + +**구분:** 수취, 발행 + +**발행 어음 상태:** 보관중, 만기임박(만기일 7일 전), 만기 경과, 결제완료, 부도 +**수취 어음 상태:** 보관중, 만기임박(만기일 7일 전), 추심의뢰, 추심완료, 추심중, 부도 + +**수취 어음:** +- 거래처원장 상세, 일일 일보, 미수금 현황에 반영 +- 미수금에 대한 약정으로만 표시 +- 추심완료되어 입금 시에만 회계에 반영 + +**발행 어음:** +- 지출예상내역서에 반영 +- 지출에 대한 약정으로만 표시 +- 결제완료되어 출금 시에만 회계에 반영 + +**차수 관리:** 총 금액에 대한 차수로 상환 계획 작성 + +### 11.9 거래처원장 (p112-113) + +- 거래처별 기간별 합계 금액 표시 +- 목록: 거래처명, 이월잔액, 매출, 수금, 잔액, 결제일 + +**거래처원장 상세:** +- 이월잔액, 수취 어음 정보, 거래명세서 정보 +- 하위 전체 품목별 판매금액 표시 +- 세금계산서 미발행 시 붉은색 하이라이트 +- 누계 금액 표시 + +### 11.10 일일 일보 (p114) + +- 어음 및 외상매출채권 현황: 수취어음 거래처명, 금액, 발행일, 만기일 +- 현금성 자산: 계좌별 전월 이월, 수입, 지출, 잔액 +- 외국환(USD) 합계, 현금성 자산 합계 + +### 11.11 지출 예상 내역서 (p115-116) + +- 카드 및 승인/반려 확정 목록은 삭제 불가 +- 예상 지급일: 매입 거래처 등록 시 자동 입력 +- 품의서/지출결의서/발행어음 목록 (클릭 시 상세 이동) +- 거래처 월 지출 목록 (클릭 시 거래처원장 상세 이동) +- 전자결재 버튼: 문서 작성_지출 예상 내역서 화면으로 이동 +- 예상 지급일 변경 팝업 + +### 11.12 미수금 현황 (p117) + +- 거래처별 월별 미수금 현황 (매출/입금/어음/누적 미수금) +- 메모 저장 기능 +- 연체 토글 (거래처 상세와 연동) +- 확대/축소 토글 + +### 11.13 악성채권 추심관리 (p118-121) + +**상태:** 추심중, 법적조치, 회수완료, 대손처리 + +**상세:** +- 기본 정보: 거래처 기본 정보 표시 +- 악성채권 등록 ON/OFF +- 담당자 정보, 연락처 정보 +- 필요 서류: 사업자등록증, 세금계산서, 추가 서류 (파일 첨부) +- 악성 채권 정보: 미수금, 상태, 악성채권 발생일/종료일, 연체일수, 본사 담당자, 메모 +- 수취 어음 현황 (어음관리 화면으로 이동) +- 거래처 미수금 현황 (미수금 현황 화면으로 이동) + +### 11.14 입출금 계좌 조회 (p122) + +- 기준정보 > 계좌관리에 등록된 계좌의 자동 입출금 내역 수집 +- 바로빌 API 연동 시 실시간 조회 +- 목록: 은행명, 계좌명, 거래일시, 구분, 적요, 거래처, 입금자/수취인, 입금, 출금, 잔액, 입출금 유형 + +### 11.15 카드 내역 관리 (p123-124) + +- 기준정보 > 카드관리에 등록된 카드의 자동 사용 내역 수집 +- 사용자는 본인 내역 조회 및 사용유형/적요 작성 가능 + +**사용유형:** 미설정, 복리후생비, 접대비, 여비교통비, 차량유지비, 소모품비, 운반비, 통신비, 도서인쇄비, 교육훈련비, 보험료, 광고선전비, 회비, 지급수수료, 세금과공과, 수선비, 임차료, 잡비 + +--- + +## 12. 기준정보 + +### 12.1 직급관리 (p126) + +- 디폴트: 사원, 대리, 과장, 차장, 부장, 이사, 상무, 전무, 부사장, 사장, 회장 +- 추가, 순서 변경 (드래그 & 드랍), 수정, 삭제 +- 사원 설정된 직급은 모두 변경 후 삭제 가능 + +### 12.2 직책관리 (p127) + +- 디폴트: 없음(기본), 팀장, 파트장, 실장, 부서장, 본부장, 센터장, 매니저, 리더 +- 추가, 순서 변경, 수정, 삭제 + +### 12.3 권한관리 (p129-130) + +- 권한 등록/삭제 +- 권한 상세: 권한명, 상태(공개/숨김) +- 메뉴별 권한 설정: 조회, 생성, 수정, 삭제, 승인, 내보내기, 관리 + +### 12.4 근무관리 (p131) + +- 고용 형태: 정규직, 계약직, 파견직, 용역직, 시간제 근로자 +- 주간 근무일: 월~일 체크박스 +- 출근/퇴근 시간 설정 +- 법정 주당 기준 근로시간 (40시간), 주당 연장 근로시간 (12시간) +- 휴게 시작/종료 시간 설정 + +### 12.5 출퇴근관리 (p132) + +**GPS 출퇴근:** +- 사용/미사용 설정 +- 연동 부서 (검색 & 다중 선택) +- 출퇴근 허용 반경: 50M, 100M, 300M, 500M + +**자동 출퇴근:** +- 사용/미사용 설정 +- 연동 부서 + +### 12.6 휴가관리 (p133) + +- 기준: 회계연도 / 입사일 +- 기준일: 월/일 설정 (회계연도 선택 시) + +**기본 연차 설정:** +- 1년간 출근율 80% 이상: 15일 +- 3년 이상 근속 시 2년에 1일 추가 (최대 25일) +- 1년 미만 또는 출근율 80% 미만: 1개월 개근 시 1일씩 (최대 11일) + +### 12.7 카드관리 (p134-135) + +- 카드사 코드, 카드 인증 정보, 비밀번호를 바로빌 API에 전달하여 자동 수집 +- 카드 상세: 카드번호, 카드사, 카드명, 카드 비밀번호 앞 2자리, 유효기간 +- 사용자 정보: 부서/이름/직책 +- 상태: 사용, 정지 (정지 시 자동 조회 중단) + +### 12.8 계좌관리 (p136-138) + +- 계좌 인증 정보, 비밀번호를 바로빌 API에 전달하여 자동 수집 +- 해당 테넌트는 은행에서 빠른 조회 서비스 사전 등록 필수 +- 계좌 상세: 계좌번호, 은행, 계좌명, 계좌 비밀번호, 예금주 +- 상태: 사용, 정지 (정지 시 자동 조회 중지) + +### 12.9 팝업관리 (p139-140) + +- 목록: 대상, 제목, 상태, 작성자, 등록일, 기간 +- 팝업 상세: 대상(전사/부서), 제목, 내용, 기간, 상태(사용함/사용안함) +- 사용함이어도 기간이 아닐 경우 팝업 미노출 + +### 12.10 게시판관리 (p141-142) + +- 모든 테넌트 디폴트: 공지사항, 나의 게시글 (수정/삭제 불가) +- 게시판 등록: 대상(전사/부서), 게시판명, 상태(사용함/사용안함) + +### 12.11 알림설정 (p143-149) + +**전체/개별 ON/OFF 토글** + +**알림 소리 선택:** 기본 알림음, SAM 보이스, ..., 무음 (관리자 등록 음원 목록) +**추가 알림:** 이메일 체크박스 + +**알림 유형:** + +| 카테고리 | 알림 항목 | +|---------|----------| +| 공지 알림 | 공지사항 알림, 이벤트 알림 | +| 거래처 알림 | 일정 알림, 부가세 신고 알림, 종합소득세 신고 알림, 신규 업체 등록 알림, 신용등급 등록 알림 | +| 근태 알림 | 연차 알림, 출근 알림, 지각 알림, 결근 알림 | +| 수주/발주 알림 | 수주 알림, 발주 알림 | +| 전자결재 알림 | 결재요청 알림, 기안>승인 알림, 기안>반려 알림, 기안>완료 알림 | +| 생산 알림 | 안전재고 알림, 생산완료 알림 | + +**항목 설정_알림 팝업:** 개별 알림 ON/OFF 토글 + +--- + +## 13. 보고서 및 분석 (p150-151) + +- TBD (추후 확정) +- 업체별 신용평가 및 보고서 검색 +- 업체별 보고서 및 분석 상세 제공 + +--- + +## 14. 계정정보/회사정보/구독관리/결제내역/고객센터 + +### 14.1 계정정보 (p153) + +- 아이디(이메일), 권한, 상태 +- 비밀번호 변경 버튼 +- 프로필 사진 (250x250px) +- 약관 동의 정보 (동의일시, 철회일시) +- 탈퇴 버튼: 테넌트 마스터가 아닐 경우에만 (모든 테넌트 + SAM 탈퇴) +- 사용중지 버튼: 테넌트 마스터가 아닐 경우에만 (해당 테넌트 사용중지) + +### 14.2 회사정보 (p154-155) + +- 테넌트 마스터에게만 표시 +- 회사 추가 버튼 +- 회사 정보: 운영(영업)에서 입력된 정보 표시, 수정 가능 +- 결제 계좌 정보: SAM 관리자가 등록 (효성 CMS 실물 계약서 기반) + +### 14.3 회사 추가 팝업 (p156) + +- 사업자등록번호 입력 (숫자 10자리) +- 바로빌 조회: 휴폐업 → 알림, 등록됨 → 알림, 미등록 → 매니저에게 알림 발송 + +### 14.4 구독관리 (p157) + +- 테넌트 마스터에게만 표시 +- 구독 정보: 플랜명, 최근/다음 결제일시, 구독금액 +- 사용량: 사용자 수, 저장 공간, AI API 호출 +- 자료 내보내기 버튼 +- 서비스 해지 버튼: "모든 데이터가 삭제되며 복구할 수 없습니다." 확인 Alert + +### 14.5 결제내역 (p158) + +- 테넌트 마스터에게만 표시 +- 목록: 결제일, 구독명, 결제 수단, 구독 기간, 금액, 거래명세서 + +### 14.6 고객센터 - 공지사항 (p159-160) + +- SAM 공지사항 +- 목록: 번호, 제목, 작성자, 등록일, 조회수 +- 상세: 제목, 작성자, 등록일시, 내용, 첨부파일 + +### 14.7 고객센터 - 이벤트 (p161-162) + +- 탭: 진행중인 이벤트, 종료된 이벤트 +- 목록: 번호, 제목, 작성자, 기간, 조회수 + +### 14.8 고객센터 - FAQ (p163) + +- 탭: 전체, 카테고리별 +- 질문 클릭 시 답변 영역 열림/닫힘 토글 + +### 14.9 고객센터 - 1:1 문의 (p164-167) + +- 문의 등록: 상담분류(문의하기/신고하기/건의사항/서비스 오류), 제목, 내용, 첨부파일 +- 문의 상세: 문의 내용 + 답변 내용 +- 수정 버튼: 답변완료 후 비활성화 +- 댓글 등록/조회 + +--- + +## 15. 참조 테이블 + +### 15.1 매출유형 목록 + +| 코드 | 매출유형명 | +|------|----------| +| - | 미설정 | +| 1 | 제품 매출 | +| 2 | 상품 매출 | +| 3 | 부품 매출 | +| 4 | 용역 매출 | +| 5 | 공사 매출 | +| 6 | 임대 수익 | +| 7 | 기타 매출 | + +### 15.2 매입유형 목록 + +| 코드 | 매입유형명 | +|------|----------| +| - | 미설정 | +| 1 | 원재료매입 | +| 2 | 부재료매입 | +| 3 | 상품매입 | +| 4 | 외주가공비 | +| 5 | 소모품비 | +| 6 | 수선비 | +| 7 | 운반비 | +| 8 | 사무용품비 | +| 9 | 임차료 | +| 10 | 수도광열비 | +| 11 | 통신비 | +| 12 | 차량유지비 | +| 13 | 접대비 | +| 14 | 보험료 | +| 15 | 기타용역비 | + +### 15.3 입금유형 목록 + +매출대금, 선수금, 가수금, 임대수익, 이자수익, 보증금 반환, 차입금, 자본금, 부가세 환급, 기타, 미설정 + +### 15.4 출금유형 목록 + +매입대금, 선급금, 가지급금, 임대료, 이자비용, 보증금 지급, 차입금 상환, 배당금 지급, 부가세 납부, 급여, 4대보험, 세금, 공과금, 경비, 기타, 미설정 + +### 15.5 카드 사용유형 목록 + +미설정, 복리후생비, 접대비, 여비교통비, 차량유지비, 소모품비, 운반비, 통신비, 도서인쇄비, 교육훈련비, 보험료, 광고선전비, 회비, 지급수수료, 세금과공과, 수선비, 임차료, 잡비 + +--- + +## 관련 문서 + +- SAM 프로젝트 개요: `/home/aweso/sam/docs/SAM_PROJECT_OVERVIEW_FOR_AI.md` +- 원본 PDF: `/home/aweso/sam/docs/dev_plans/SAM_ERP_Storyboard_D1.4_260116.pdf` + +--- + +**최종 업데이트**: 2026-01-16 (D1.4) diff --git a/dev/dev_plans/SAM_ERP_Storyboard_D1.4_260116.md b/dev/dev_plans/SAM_ERP_Storyboard_D1.4_260116.md new file mode 100644 index 0000000..b94396e --- /dev/null +++ b/dev/dev_plans/SAM_ERP_Storyboard_D1.4_260116.md @@ -0,0 +1,3049 @@ +# SAM ERP 스토리보드 + +> **버전**: D1.4 +> **날짜**: 2026.01.16 +> **프로젝트**: SAM_ERP +> **제작**: CODE-BRIDGE X + +--- + +## Document History + +| Date | Version | Main Contents | Detailed Contents | +|------|---------|---------------|-------------------| +| 2025.12.01 | D0.6 | 프론트 초안 | 프론트 PC - ERP - 인사관리&전자결재 작성 | +| 2025.12.01 | D0.7 | 프론트 작성 | 프론트 PC - ERP - 인사관리&전자결재 피드백 반영 | +| 2025.12.16 | D0.8 | 프론트 작성 | 프론트 PC - ERP - 회계&보고서 작성. 변경: 목록화면 기간 설정 추가, GPS 출퇴근 추가, 회계관리 추가, 카드/계좌관리 및 보고서 추가 등 | +| 2025.12.18 | D1.0 | 프론트 작성 | 프론트 PC - ERP - 구독&고객센터 작성. 변경: 게시판 추가, 악성채권 추심관리 상세 추가, 팝업관리/게시판관리/알림설정 추가, 계정정보/회사정보/구독관리/결제내역/고객센터 추가 | +| 2025.12.22 | D1.1 | 프론트 작성 | 97p 카드 내역 관리 수정 | +| 2025.12.31 | D1.2 | 프론트 작성 | 116-120p 알림 소리 설정 추가, 123p 접대비 현황 수정 | +| 2026.01.07 | D1.3 | 프론트 작성 | 150p 보고서->대시보드 이동, 31p/34-51p 화면 추가, 116p 누적 미수금/메모 추가, 142p 항목 설정 버튼 추가, 147-148p 화면 추가 | +| 2026.01.16 | D1.4 | 프론트 작성 | 31-32p 오늘의 이슈/현황판 수정, 36p 5-1번 추가, 38p 현황판/3번 추가, 99/100/104/106/108/123p 계정과목명 변경 | + +--- + +## Menu Structure + +**ERP 메뉴:** +- 운영 (로그인, 회사정보, 계정정보, 구독관리, 결제내역, 고객센터) +- 대시보드 +- 인사관리 (부서관리, 사원관리, 근태관리, 휴가관리) +- 전자결재 (기안함, 결재함, 참조함) +- 게시판 +- 회계관리 (거래처관리, 매출관리, 매입관리, 입금관리, 출금관리, 어음관리, 거래처원장, 일일 일보, 지출 예상 내역서, 미수금 현황, 악성채권 추심관리, 입출금 계좌 조회, 카드 내역 관리) +- 기준정보 (직급관리, 직책관리, 권한관리, 출퇴근관리, 팝업관리, 게시판관리, 알림설정, 계좌관리, 카드관리) +- 보고서 및 분석 + +**MES 메뉴:** +- 판매관리, 구매관리, 생산관리, 품질관리, 자재관리, 장비관리, 차량관리 +- 발주관리, 공사관리 + +--- + +--- + +# 공통 + + +## 페이지 5 - Interaction (제스처/마크) + +| Type | Description | Apply | +|------|-------------|-------| +| Tap | 일정영역을 사용자가 터치합니다. | Yes | +| Touch & Hold | 화면을 터치한 후 계속 누르고 있는 상태입니다. 해당영역 혹은 개체가 홀드 됩니다. | No | +| Double Tap | 일정영역을 두 번 터치합니다. 두 번 터치 시 액션이 실행됩니다. | No | +| Drag & Drop | 터치 혹은 홀드 상태에서 오브젝트를 이동하여 원하는 위치에 배치시킵니다. | Yes | +| Scroll Up | 아래에서 위로 누르는 동작을 유지하면서 이동하였다가 뗍니다. | Yes | +| Scroll Down | 위에서 아래로 누르는 동작을 유지하면서 이동하였다가 뗍니다. | Yes | +| Swipe Left | 오른쪽에서 왼쪽으로 누르는 동작을 유지하면서 이동하였다가 뗍니다. | Yes | +| Swipe Right | 왼쪽에서 오른쪽으로 누르는 동작을 유지하면서 이동하였다가 뗍니다. | Yes | +| Pinch Zoom out | 오브젝트 또는 화면을 축소합니다. | Yes | +| Pinch Zoom in | 오브젝트 혹은 화면을 확대합니다. | Yes | + + +## 페이지 6 - Responsive Web + +- **PC Web**: Contents + Footer +- **Mobile Web**: Contents + Footer + +**브레이크 포인트:** +- 모바일: < 640px (기본) +- 태블릿: 768px ~ 1023px (md) +- 데스크탑: 1024px+ (lg) +- 대형 모니터: 1280px+ (xl) + + +## 페이지 7 - Screen Template + +| 영역 | 설명 | +|------|------| +| A - Status bar | 안테나, 통화, 배터리 등 시스템 OS 관리 영역. 모든 페이지 상단에 존재 | +| B - Browser 영역 | 브라우저 기능 영역 | +| C - Title 영역 | 텍스트 또는 기능 버튼으로 구현됨. 텍스트는 기본 가운데 정렬 | +| D - Content 영역 | 컨텐츠 내용 표시. 컨텐츠 길이가 길어질 경우 스크롤 제공 | +| E - Browser bar 영역 | 브라우저 유틸 바 영역 | +| F - Keypad 영역 | 키보드 입력할 때 활성화. 모든 페이지 위에 덮어쓰기 구현 | + + +## 페이지 8 - 메시지 유형 + +| Type | Description | +|------|-------------| +| 알림 Alert | 사용자에게 상황을 알려주기 위한 팝업 | +| 확인 Alert | 사용자에게 확인이 필요할 경우 제공되는 팝업 | +| 토스트 메시지 | 단순 Notify (2~3)초 후 페이지 내에서 Fade out | + + +## 페이지 9 - GNB, LNB, 푸터 +**버전**: D1.3 | **경로**: `-` + +**Description:** + +1. 알림 버튼 + - 클릭: 알림 팝업 표시 +2. 개인 정보 버튼 + - 항목: 디폴트 이미지, 이름, 직급 + - 클릭: 마이페이지 팝업 표시 +3. 회사 로고 + - 회사정보 화면에서 등록한 로고 표시 + - 회사 변경 선택 시 해당 로고 변경 +4. 메뉴 영역 + - 메뉴 클릭: + 1) 하위 메뉴 있을 경우 + : 하위 메뉴 하단에 표시 + 2) 하위 메뉴 없을 경우 + : 해당 메뉴 화면으로 이동 + - 목록 길 경우 해당 영역 내 스크롤 처리 +5. MES 메뉴 영역 + - 영업관리, 판매관리, 구매관리 등 해당하는 + MES 메뉴 영역 표시 +6. 푸터 영역 + - 모든 화면 하단 공통 표시 +7. SAM AI 채팅 버튼 + - 클릭: SAM AI 채팅 팝업 표시 + + +## 페이지 10 - 알림 팝업 +**버전**: D1.3 | **경로**: `메인> 알림 팝업` + +**Description:** + +1. 알림 목록 + - 항목: 각 디폴트 썸네일, 종류(공지사항, 안 + 내), 제목/내용, 전송일시 표시 + - 클릭: 해당 상세 화면으로 이동 + - 최신순 10개까지 표시 +2. New 아이콘 + - 새 알림일 경우 New 아이콘 표시 + - 해당 알림 클릭 시 사라짐 +2-1. 붉은 점 아이콘 + - 새 알림이 있을 경우 표시 + - 해당 알림 모두 클릭 시 사라짐 + + +## 페이지 11 - 마이페이지 팝업 +**버전**: D1.3 | **경로**: `메인> 마이페이지 팝업` + +**Description:** + +1. 계정 아이디 (이메일) 표시 +2. 회사 셀렉트 박스 + - 종류: 회사명, 회사명, … (해당 계정이 생성 + 한 회사(테넌트) 목록 표시) + - 정렬: 등록순 + - 한 회사만 소유중일 경우에는 해당 영역 +3. 로그아웃 버튼 + - 클릭: “정말 로그아웃하시겠습니까?” 로그 + 아웃 확인 Alert 표시, 확인 버튼 클릭시 로 + 그아웃 처리 + + +## 페이지 12 - - +**버전**: D1.3 | **경로**: `-` + +**Description:** + +1. 셀렉트 박스 + - 클릭: 하단에 종류 목록 표시 +2. 종류 목록 + - 목록 중 하나만 선택 가능 +3. 다중 선택 셀렉트 박스 + - 선택된 첫번째 항목명 + 추가 수 표시 + - 텍스트 영역 부족할 경우 ‘항목..+3’ 형태 + 로 표시 +4. 다중 선택 종류 목록 + - 목록 중 복수 선택 가능 + - 전체 선택 시 전체 선택/해제 토글 +5. 검색 영역 + - 검색어 입력 후 엔터 또는 검색 아이콘 클 + 릭 시 (5-1) 형태로 표시되며 (5-2) 영역에 + 검색 결과 표시 +5-3. 삭제 버튼 + - 클릭: 검색어 삭제 처리, 전체 종류 목록 + 표시 + + +## 페이지 13 - - +**버전**: D1.3 | **경로**: `-` + +**Description:** + +*. 상황에 따라 입력 필드 하단 또는 Alert에 + 가이드 메시지 표시 +1. 가이드 메시지 표시 위치 + - 긍정일 경우 녹색 + - (1-1) 부정일 경우 붉은색 + 가이드 메시지 표시 + + +## 페이지 14 - - +**버전**: D1.3 | **경로**: `-` + +**Description:** + +*. 공지 팝업 + - 대상: 전체, 설정 부서 + - 내용: 설정 기간동안 대상에게 팝업 표시 +1. 팝업 내용 영역 + - 이미지, 텍스트 +2. 1일간 이 창을 열지 않음 체크박스 + - 클릭: 체크 설정/해제 토글 + - 디폴트: 체크 해제 상태 + - 체크 설정 시 1일 동안 팝업 미표시 (자정 + 기준) + + +--- + +# 운영 (영업) + + +### Flowchart – 가입및 로그인 +**페이지**: 16 + +- 운영 로그인 +- 영업사원 + - [Yes] + - [No] +- 이메일로 URL 발송 +- 자료 확인 +- 사업자번호 +- 조회? +- 고객사 +- 가입 신청 완료 +- 사업자등록번호 입력 +- 관리자 +- 승인? +- 거절 알림 +- 약관 동의 +- SAM 로그인 +- 테넌트 추가? +- 테넌트 추가 알림 +- 비밀번호 설정 +- 사업자등록번호 입력 +- 실물 계약 서류 및 +- 필요 서류 전달 +- 계약금 50% +- 입금 확인 +- 매니저 + +## 페이지 17 - 로그인 +**버전**: D1.3 | **경로**: `운영 로그인` + +**Description:** + +1. 아이디 인풋박스 + - 테넌트 생성자일 경우 이메일, + 사용자일 경우 이메일 또는 아이디 + - (1-1) 상황별 가이드 메시지 +2. 비밀번호 인풋박스 + - 입력 시 마지막 글자 제외 후 마스킹 처리 + - (2-1) 상황별 가이드 메시지 +2-2. 열람 버튼 + - 클릭: 열람/숨김 토글 + - 디폴트: 숨김 상태 + - 열람 상태일 시 (2) 영역 마스킹 해제 처리 +3. 자동 로그인 체크박스 + - 클릭: 체크 설정/해제 토글 + - 체크 시 로그아웃 전까지 세션 유지 +4. 로그인 버튼 + - 클릭: 유효할 경우사업자등록번호 조회 + 화면으로 이동 + +| 상황 | 가이드 메시지 | +|------|------------| +| 필수 정보 미 입력 시 | 필수 정보입니다. | +| 4글자 미만 입력 시 | 이메일은 4자 이상 가능합 니다. 이메일 형식에 유효 | +| 하지 않을 경우 | 이메일 주소를 다시 확인해 주세요. | +| 필수 정보 미 입력 시 | 필수 정보입니다. | +| 8자 미만 입력 시 | 8자 이상으로 만들어주세 요. 8영문+숫자+특수문 | +| 자 조합이 아닐 경우 | 영문, 숫자, 특수문자를 모 두 조합하여 구성해주세요. 단, 다음의 특수기호는 보 안상 사용 불가합니다. ' ; - - < ( ) \ / | + + +## 페이지 18 - 사업자등록번호 조회 +**버전**: D1.3 | **경로**: `사업자등록번호 조회` + +**Description:** + +1. 제조 데모 + - 클릭: 제조 데모 화면으로 이동 +2. 시공 데모 + - 클릭: 시공 데모 화면으로 이동 +3. 사업자등록번호 인풋박스 + - 숫자만 가능, 10자리 +4. 다음 버튼 + - 클릭: + 1) 바로빌 사업자등록번호 조회 후 + 사용 불가 경우 + : “휴폐업 상태인 사업자입니다.” + 알림 Alert 표시 + 2) 바로빌 사업자등록번호 조회 후 + 사용 가능한 경우 + [1] 테넌트 등록된 사업자등록번호일 경우, + 테넌트 등록 전이어도 다른 영업사원이 + 등록했을 경우에는 사업자등록번호 + 사용 불가 (어드민에서는 해제 가능) + : “등록된 사업자등록번호 입니다.” + 알림 Alert 표시 + [2] 등록되지 않은 사업자등록번호일 경우 + : 회사정보 등록 화면으로 이동 + + +## 페이지 19 - 등록 +**버전**: D1.3 | **경로**: `사업자등록번호 조회> 회사정보` + +**Description:** + +*. 회사(테넌트) 상태 + - 신청: 신청 완료 상태 + - 승인: 계약 완료 및 계약금 50% 입금, + 이메일로 URL 발송 상태, + 최초 로그인 시 ERP만 표시 + - 거절: 영업사원이 직접 거절 내용 전달 + - 운영: 프로그램 설정 완료, 잔금 50% 입금 + 및 인도, 당월 말일까지는 무료, 익월부터 익 + 월 말일까지 사용하고 구독료 청구 + - 만료: 기간 종료, 종료일~3일동안 연장 결 + 제 없음, 만료와 연체 상태 구분?? 영업사원 + 에게 알림, 서비스에는 경고 배너, + - 해지 대기: 90일 대기?? 단계 필요?? + - 해지: 서비스 해지, 복구 불가?? + - 제재: 서비스 이용 불가, + - 탈퇴: 로그인 불가, 복구 불가?? +1. 회사 로고 이미지 영역 + - 디폴트 이미지 표시 + - 클릭: 파일탐색기 팝업 표시, 10MB 이하의 + PNG, JPEG, GIF 중 하나 선택 가능 +2. 우편번호 찾기 버튼 + - 클릭: 선정한 주소 팝업 표시 +3. 찾기 버튼 + - 클릭: 파일탐색기 팝업 표시, 이미지 또는 + 파일 하나 선택 가능 +4. 이전 버튼 + - 클릭: 사업자등록번호 조회화면으로 이동 +5. 가입 신청 버튼 + - 회사 로고만 선택, 나머지는 필수 정보 + - 클릭: 가입 신청 완료화면으로 이동 + + +## 페이지 20 - 등록> 가입 신청 완료 +**버전**: D1.3 | **경로**: `사업자등록번호 조회> 회사정보` + +**Description:** + +1. 가입 신청 완료 안내 문구 표시 +2. 가입 신청 취소 버튼 + - 클릭: “가입 신청 취소 시 등록한 모든 정 + 보가 삭제됩니다. 정말 가입 신청을 취소하 + 시겠습니까?” 확인 Alert 표시 + + +## 페이지 21 - 가입 신청 승인 성공 이메일 +**버전**: D1.3 | **경로**: `-` + +**Description:** + +1. 계정 활성화 버튼 + - 클릭: 약관 동의화면으로 이동 +2. 지원, 블로그 버튼 + - 클릭: 해당 운영 노션 링크로 이동 + + +## 페이지 22 - 약관 동의 +**버전**: D1.3 | **경로**: `약관 동의` + +**Description:** + +1. 약관 영역 + - 클릭: (1-1) 약관 내용 영역 열림/닫힘 토글 + - 디폴트: 닫힘 +2. 체크박스 + - 클릭: 체크설정/해제 토글 + - 디폴트: 체크 설정 해제 +3. 약관에 동의합니다 버튼 + - 모든 필수 약관 동의 시 버튼 활성화 + - 클릭: 비밀번호 설정화면으로 이동 +4. 약관에 동의합니다 버튼 + - 클릭: 모든 필수, 선택 약관에 동의 처리, + 비밀번호 설정화면으로 이동 + + +## 페이지 23 - 비밀번호 설정 +**버전**: D1.3 | **경로**: `약관 동의> 비밀번호 설정` + +**Description:** + +1. 계정 활성화 버튼 + - 클릭: 로그인 화면으로 이동 + + +--- + +# GPS 출퇴근 + + +## 페이지 25 - 출퇴근하기 +**버전**: D1.3 | **경로**: `마이페이지 팝업` + +**Description:** + +1. 출퇴근 버튼 + - GPS 출퇴근 사용 시에만 표시 + - 모바일일 경우에만 버튼 활성화 + - 클릭: 출퇴근하기 화면으로 이동 +2. 출퇴근 허용 반경 + - 기준 좌표로부터의 출퇴근 허용 반경을 원 + 형으로 표시 (기준정보> 출퇴근관리에서 설 +3. 현재 위치 버튼 + - 클릭: (3-1) 해당 현재 위치를 지도 중심으 + 로 표시 +4. [+] 버튼 + - 클릭: 지도 영역 확대 +5. 확대/축소 슬라이드바 + - 드래그&드랍또는 클릭: 지도 영역 확대/ +6. [-] 버튼 + - 클릭: 지도 영역 축소 +7. 개인 정보 영역 + - 항목: 프로필 이미지, 이름, 부서명, 직급명 +8. 현재 시:분:초 표시 + - HH:MM:SS +9. 출근하기 버튼 + - 클릭: + 1) 출근 위치 미설정 상태일 경우 + : “출근 위치를 설정해주세요.” + 알림 Alert 표시 + 2) 출근 위치 설정 상태일 경우 + [1] 출근 위치 기준 설정 반경 초과일 경우 + : “출근 가능 위치가 아닙니다. + 출근 위치를 확인해주세요.” + 알림 Alert 표시 + [2] GPS 출근 위치 기준 설정 반경 이내 + : 출근하기 화면으로 이동 + (출근 기록 저장) + 메인> 마이페이지 팝업> 출퇴근하 + + +## 페이지 26 - 출근하기 +**버전**: D1.3 | **경로**: `출퇴근하기` + +**Description:** + +1. 퇴근하기 버튼 + - 클릭: + 1) 퇴근 위치 미설정 상태일 경우 + : “퇴근 위치를 설정해주세요.” + 알림 Alert 표시 + 2) 퇴근 위치 설정 상태일 경우 + [1] 퇴근 위치 기준 설정 반경 초과일 경우 + : “퇴근 가능 위치가 아닙니다. + 퇴근 위치를 확인해주세요.” + 알림 Alert 표시 + [2] GPS 퇴근 위치 기준 설정 반경 이내 + : 퇴근하기 화면으로 이동 + (퇴근 기록 저장) +2. 출근 완료 아이콘 이미지 표시 +3. 출근 완료 정보 + - 항목: 출근 완료 문구, 시:분:초, 일자(요일) +4. 출근 좌표의 본사/현장명 표시 +5. 확인 버튼 + - 클릭: 대시보드로 이동 + 카메라> 출퇴근하기> 출근하기 + + +## 페이지 27 - 퇴근하기 +**버전**: D1.3 | **경로**: `출퇴근하기` + +**Description:** + +1. 퇴근 완료 아이콘 이미지 표시 +2. 퇴근 완료 정보 + - 항목: 퇴근 완료 문구, 시:분:초, 일자(요일) +3. 퇴근 좌표의 본사/현장명 표시 +4. 확인 버튼 + - 클릭: 대시보드로 이동 + 카메라> 출퇴근하기> 퇴근하기 + + +## 페이지 28 - 판매관리> 현장등록 +**버전**: D1.3 | **경로**: `현장등록` + +**Description:** + +1. 위치 정보 설정 + - 각 현장의 GPS 중심값으로 설정 + + +--- + +# 대시보드 + + +## 페이지 30 - 로그인 +**버전**: D1.3 | **경로**: `로그인` + +**Description:** + +1. 아이디 인풋박스 + - 테넌트 생성자일 경우 이메일, + 사용자일 경우 이메일 또는 아이디 + - (1-1) 상황별 가이드 메시지 +2. 비밀번호 인풋박스 + - 입력 시 마지막 글자 제외 후 마스킹 처리 + - (2-1) 상황별 가이드 메시지 +2-2. 열람 버튼 + - 클릭: 열람/숨김 토글 + - 디폴트: 숨김 상태 + - 열람 상태일 시 (2) 영역 마스킹 해제 처리 +3. 자동 로그인 체크박스 + - 클릭: 체크 설정/해제 토글 + - 체크 시 로그아웃 전까지 세션 유지 +4. 로그인 버튼 + - 클릭: 유효할 경우대시보드 화면으로 이 + +| 상황 | 가이드 메시지 | +|------|------------| +| 필수 정보 미 입력 시 | 필수 정보입니다. | +| 4글자 미만 입력 시 | 이메일은 4자 이상 가능합 니다. 이메일 형식에 유효 | +| 하지 않을 경우 | 이메일 주소를 다시 확인해 주세요. | +| 필수 정보 미 입력 시 | 필수 정보입니다. | +| 8자 미만 입력 시 | 8자 이상으로 만들어주세 요. 8영문+숫자+특수문 | +| 자 조합이 아닐 경우 | 영문, 숫자, 특수문자를 모 두 조합하여 구성해주세요. 단, 다음의 특수기호는 보 안상 사용 불가합니다. ' ; - - < ( ) \ / | + + +## 페이지 31 - Description +**버전**: D1.3 + +**Description:** + +1. 항목 설정 버튼 + - 클릭: 항목 설정_대시보드 팝업 표시 +2. 오늘의 이슈 영역 + - 당일 이슈 발생 시 알림 처리 + - 목록 길 경우 영역 내 페이지네이션 + - 알림 상태에서 즉시 승인/보류 처리 가능 + - 이슈 케이스 + - 신규 업체 등록 + - 결근 등 근태 이벤트 + - 재고 미달 알림 + - 채권 추심 등록, 상태 변경 + - 발주, 수주 등록 + - 지출결의서 등 전자결재 상신 + - 세금 신고 알림 등 +3. 필터 셀렉트 박스 + - 종류: 전체, 수주 성공, 추심 이슈, 적정 재 + 고, 결재 요청, 세금 신고, 신규 업체 등록, + 근태, 발주 완료 + - 디폴트: 전체 + - 숫자도 함께 표시 (예) 수주 성공 3) +4. 이슈 목록 + - 클릭: 해당 상세 화면으로 이동 + - 화면 가로 길이에 따라 4, 3, 2, 1열로 표시 +5. 승인/반려 버튼 + - 해당 건에 대해 즉시 승인/반려 처리 가능 +6. 일일 일보 정보 목록 + - 클릭: 일일 일보 화면으로 이동 +7. AI 리포트 + - 핵심 키워드 강조 표시 (빨간색: 경고, 주황: + 주의, 녹색: 긍정, 파랑: 양호) + + +## 페이지 32 - Description +**버전**: D1.3 + +**Description:** + +1. 현황 목록 + - 클릭: 해당 상세 화면으로 이동 +2. 경고 하이라이트 + - 경고 상태일 경우 해당 영역에 색상 하이 + 라이트로 표시 + + +## 페이지 33 - Description +**버전**: D1.3 + +**Description:** + +*. 가지급금 + - 법인카드(지출결의서) 미정리, 접대비 불인 + 정, 증빙미비, 업무관련성 소명 불가 (주말/ + 심야 카드 사용, 불인정 가맹점(귀금속, 상품 + 권, 유흥업소)), 대표자 개인 대여 등 + - 가지급금 인정이자 4.6% +1. 매입 정보 영역 + - 클릭: 당월 매입 상세 팝업 표시 +2. 카드 정보 영역 + - 클릭: 당월 카드 상세 팝업 표시 +3. 발행어음 정보 영역 + - 클릭: 당월 발행어음 상세 팝업 표시 +4. 총 예상 지출 합계 영역 + - 클릭: 당월 지출 예상 상세 팝업 표시 +5. 가지급금 영역 + - 클릭: 가지급금 상세 팝업 표시 +6. 법인세 예상 가중 영역 + - 클릭: 법인세 예상 가중 상세 팝업 표시 +7. 대표자 종합세 예상 가중 영역 + - 클릭: 대표자 종합소득세 예상 가중 상세 + 팝업 표시 + + +## 페이지 34 - Description +**버전**: D1.3 + +**Description:** + +1. 매출 영역 + - 클릭: 당해 매출 상세 팝업 표시 +2. 접대비 목록 + - 클릭: 접대비 상세 팝업 표시 +3. 복리후생비 목록 + - 클릭: 복리후생비 상세 팝업 표시 +4. 미수금 현황 목록 + - 클릭: 미수금 현황 화면으로 이동 +5. 미수금 상위 회사 목록 + - 1, 2위 표시 + + +## 페이지 35 - Description +**버전**: D1.3 + +**Description:** + +1. 채권추심 현황 목록 + - 클릭: 악성채권 추심관리 화면으로 이동 +2. 부가세 현황 목록 + - 클릭: 예상 납부세액 상세 팝업 표시 + + +## 페이지 36 - Description +**버전**: D1.3 + +**Description:** + +1. 이번주+좌우 화살표 버튼 + - 좌우 화살표 클릭: 이전월/다음월 스케줄 + 표시 +2. 캘린더 탭 + - 종류: 주, 월 + - 디폴트: 월 + - 주 선택 시 (1) 영역 ‘2025년 12월 2주’ 형 + 태로 표시 +3. 부서 필터 셀렉트 박스 + - 종류: 전체, 부서, 개인 + - 디폴트: 전체 +4. 업무 필터 셀렉트 박스_다중선택 + - 종류: 전체, 일정, 발주, 시공, 수주 성공, 추 + 심 이슈, 적정 재고, 결재 요청, 세금 신고, + 신규 업체 등록, 근태, 발주 완료 + - 디폴트: 전체 +5. 일정 영역 + - 캘린더항목: [부서/이름] 제목 + - 일정 목록 항목: 제목, 부서명, 기간, 시간 + - 클릭: + 1) 일정일 경우 + : 일정 상세 화면으로 이동 + 2) 스케줄일 경우 + : 해당 발주/시공 상세 화면으로 이동 +5-1. 일정 영역_이슈 + - 항목: [구분] 제목 + - 클릭: 해당 상세 화면으로 이동 +6. 일자 영역 + - 당일일 경우 외곽선 하이라이트 표시 + - 지난 일자일 경우 색상으로 구분 표시 + - 당일 선택 시 바탕색상 하이라이트 표시 + - 클릭: (8) 영역에 목록으로 스케줄 표시 +7. +N 버튼 + - 해당 일자에 스케줄이 2건 초과 시 초과건 + 에 대한 숫자 표시 +8. 일정 목록 영역 +9. 일정 등록 버튼 + - 클릭: 일정 상세 팝업 표시 + + +## 페이지 37 - Description +**버전**: D1.3 + +**Description:** + +1. 부서 셀렉트 박스_검색 + - 종류: 전체, 부서 목록 + - 디폴트: 전체 +2. 기간 영역 + - 클릭: 기간 설정 달력 팝업 표시 + - 디폴트: 해당 일자~해당 일자 +3. 체크박스버튼 + - 클릭: 체크 설정/해제 토글 + - 디폴트: 미설정 상태 + - 미설정 상태일 경우 종일 체크 + - 설정 상태일 경우 (4) 영역 활성화 +4. 시간 영역 + - 클릭: 시간 범위 피커 팝업 표시 + - 디폴트: 09:00~10:00 + + +## 페이지 38 - ON +**버전**: D1.3 | **경로**: `-` + +**Description:** + +1. 전체 설정 ON/OFF 버튼 + - 클릭: 설정 ON/OFF 토글 + - 디폴트: 설정 OFF 상태 +2. 개별 설정 ON/OFF 버튼 + - 클릭: 설정 ON/OFF 토글 + - 디폴트: 설정 OFF 상태 +3. 현황판의 항목 정보는 오늘의 이슈 항목 정 + 보와 연동 처리 + + +## 페이지 39 - Description +**버전**: D1.3 + +**Description:** + +1. 접대비 한도 관리 셀렉트 박스 + - 종류: 연간, 반기, 분기, 월 + - 디폴트: 연간 + - 선택 값으로 총 한도를 분할해서 계산 + : 연간, 상반기, 하반기, 1~4분기, 1~12월 +1-1. 기업 구분 셀렉트 박스 + - 종류: 일반법인, 중소기업 + - 디폴트: 일반법인 +1-2. 기업 구분 방법 영역 + - 클릭: 확대/축소 토글 + - 디폴트: 축소 상태 +2. 복리후생비 한도 관리 셀렉트 박스 + - 종류: 연간, 반기, 분기, 월 + - 디폴트: 연간 + - 선택 값으로 총 한도를 분할해서 계산 + : 연간, 상반기, 하반기, 1~4분기, 1~12월 +3. 계산 방식 셀렉트 박스 + - 종류: 직원당 정액 금액 방식, 연봉 총액 X + 비율 방식 + - 디폴트: 직원당 정액 금액 방식 +4. 직원당 정액 금액/월 인풋박스 + - (3) 직원당 정액 금액 방식일 경우에만 표 +5. 비율 인풋박스 + - (3) 연봉 총액 X 비율 방식일 경우에만 표 +6. 연간 복리후생비 표시 + - 계산된 연간 복리후생비 표시 + + +## 페이지 40 - Description +**버전**: D1.3 + +**Description:** + +1. 매입유형 필터 셀렉트 박스_다중 선택 + - 종류: 전체, 원재료매입, 부재료매입, 상품 + 매입, 외주가공비, 소모품비, 수선비, 운반비, + 사무용품비, 임차료, 수도광열비, 통신비, 차 + 량유지비, 접대비, 보험료, 기타용역비, 미설 + 정 + - 디폴트: 전체 +2. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 금액 높은순, 금액 + 낮은순 + - 디폴트: 최신순 + + +## 페이지 41 - Description +**버전**: D1.3 + +**Description:** + +1. 사용자 필터 셀렉트 박스_검색&다중 선택 + - 종류: 전체, 사용자명 목록 + - 디폴트: 전체 +2. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 금액 높은순, 금액 + 낮은순 + - 디폴트: 최신순 + + +## 페이지 42 - Description +**버전**: D1.3 + +**Description:** + +1. 거래처 필터 셀렉트 박스_검색&다중 선택 + - 종류: 전체, 거래처 목록 + - 디폴트: 전체 +2. 상태 필터 셀렉트 박스_검색 + - 종류: 전체, 보관중, 만기임박(만기일 7일 + 전), 만기 경과, 결제완료, 부도 + - 디폴트: 전체 +3. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 금액 높은순, 금액 + 낮은순 + - 디폴트: 최신순 + + +## 페이지 43 - Description +**버전**: D1.3 + +**Description:** + +1. 거래처 필터 셀렉트 박스_검색&다중 선택 + - 종류: 전체, 거래처 목록 + - 디폴트: 전체 +2. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순 + - 디폴트: 최신순 + + +## 페이지 44 - Description +**버전**: D1.3 + +**Description:** + +1. 대상 필터 셀렉트 박스_검색&다중 선택 + - 종류: 전체, 대상 목록 + - 디폴트: 전체 +2. 구분 필터 셀렉트 박스_검색&다중 선택 + - 종류: 전체, 카드명, 계좌명 + - 디폴트: 전체 +3. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 금액 높은순, 금액 + 낮은순 + - 디폴트: 최신순 +4. 가지급금 분류 기준 + - 법인카드(지출결의서) 미정리, 접대비 불인 + 정, 증빙미비, 업무관련성 소명 불가 (주말/ + 심야 카드 사용, 불인정 가맹점(귀금속, 상품 + 권, 유흥업소)), 대표자 개인 대여 등 + - AI 분류 + + +## 페이지 45 - Description +**버전**: D1.3 + +**Description:** + +1. 접대비 초과 금액 및 가지급금 인정이자가 + 정리된 법인세 영역 + - 접대비 초과 금액 및 가지급금 인정이자를 + 0으로 계산한 값 표시 +2. 차액 표시 +*. 계산 + - 과세표준 계산 = 당기순이익+손금불산입- + 손금산입 + - 접대비 한도 초과 금액은 손금불산입 + - 인정이자 전액 손금불산입 + + +## 페이지 46 - 4대 보험 -1,000,000원 +**버전**: D1.3 | **경로**: `-` + +**Description:** + +1. 가지급금 인정이자가 정리된 종합소득세 영 + 역 + - 가지급금 인정이자를 0으로 계산한 값 표 +2. 차액 표시 +*. 계산 + - 과세표준 = 근로소득 + 상여 + - 인정이자가 상여로 처리 + + +## 페이지 47 - Description +**버전**: D1.3 + +**Description:** + +1. 매출유형 필터 셀렉트 박스_다중 선택 + - 종류: 전체, 제품 매출, 상품 매출, 부품 매 + 출, 용역 매출, 공사 매출, 임대 수익, 기타 + 매출, 미설정 + - 디폴트: 전체 +2. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 금액 높은순, 금액 + 낮은순 + - 디폴트: 최신순 + + +## 페이지 48 - {1사분기} 접대비 초과 금액 +**버전**: D1.3 | **경로**: `-` + +**Description:** + +1. 당해년도 기준 접대비 계산 정보 목록 +2. 설정 기준 접대비 계산 정보 목록 +3. 사용자 필터 셀렉트 박스_검색&다중 선택 + - 종류: 전체, 사용자명 목록 + - 디폴트: 전체 +4. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 금액 높은순, 금액 + 낮은순 + - 디폴트: 최신순 + + +## 페이지 49 - Description +**버전**: D1.3 + +**Description:** + +1. 접대비 기본한도 계산 + - 회사 정보> 기업 구분 정보 항목에서 결정 +2. 수입금액별 추가한도 계산 + - 당해 매출 기준 계산 +3. 접대비 현황 + - 연간 한도를 항목 설정 기준으로 구분 표 + + +## 페이지 50 - {1사분기} 복리후생비 초과 금액 +**버전**: D1.3 | **경로**: `-` + +**Description:** + +1. 당해년도 기준 복리후생비 계산 정보 목록 +2. 설정 기준 복리후생비 계산 정보 목록 +3. 사용자 필터 셀렉트 박스_검색&다중 선택 + - 종류: 전체, 사용자명 목록 + - 디폴트: 전체 +4. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 금액 높은순, 금액 + 낮은순 + - 디폴트: 최신순 + + +## 페이지 51 - Description +**버전**: D1.3 + +**Description:** + +1. 복리후생비 계산 + - 연봉 총액 비율 방식일 경우(1-1) 형태로 + 표시 +2. 복리후생비 현황 + - 연간 한도를 항목 설정 기준으로 구분 표 + + +## 페이지 52 - Description +**버전**: D1.3 + +**Description:** + +1. 년도 셀렉트 박스 + - 종류: 2026년 + - 디폴트: 2026년 +2. 분기 셀렉트 박스 + - 종류: 전체, 1사분기, 2사분기, 3사분기, 4 + 사분기 + - 디폴트: 전체 + - (1), (2)에 해당하는 정보로 화면의 모든 정 +3. 구분 필터 셀렉트 박스 + - 종류: 전체, 매출, 매입 + - 디폴트: 전체 +4. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 금액 높은순, 금액 + 낮은순 + - 디폴트: 최신순 + + +## 페이지 53 - Description +**버전**: D1.3 + + +## 페이지 54 - Description +**버전**: D1.3 + + +## 페이지 55 - Description +**버전**: D1.3 + + +--- + +# 인사관리 + + +## 페이지 57 - 부서관리 +**버전**: D1.3 | **경로**: `인사관리> 부서관리` + +**Description:** + +1. 전체 선택 체크박스 + - 클릭: 전체 선택설정/해제 토글 + - 디폴트: 설정 해제 상태 +2. 개별 선택 체크박스 + - 클릭: 개별 선택설정/해제 토글 + - 디폴트: 설정 해제 상태 +3. 추가 버튼 + - 관리 권한이 없을 경우 숨김 + - 클릭: 선택한 부서의 하위 부서 일괄 생성 +4. 삭제 버튼 + - 관리 권한이 없을 경우 숨김 + - 클릭: “선택한 부서 N개를 삭제하시겠습니 + 까?” 확인 Alert 표시, 확인 선택 시 삭제된 + 부서의 인원은 회사(기본) 인원으로 변경 +5. 축소 버튼 + - 클릭: (6) 확대 버튼으로 변경, 하위 부서 + 숨김 처리 +6. 확대 버튼 + - 클릭: (5) 축소 버튼으로 변경, 하위 부서 + 표시 처리 +7. 추가 버튼 + - 관리 권한이 없을 경우 숨김 + - 클릭: 부서 추가 팝업 표시 +8. 수정 버튼 + - 관리 권한이 없을 경우 숨김 + - 클릭: 부서 수정 팝업 표시 +9. 삭제 버튼 + - 관리 권한이 없을 경우 숨김 + - 클릭: “{부서명} 부서를 삭제하시겠습니까?” + 확인 Alert 표시, 확인 선택 시 삭제된 부서 + 의 인원은 회사(기본) 인원으로 변경 + + +## 페이지 58 - 부서 추가 팝업, 부서 수정 팝업 +**버전**: D1.3 | **경로**: `인사관리> 부서관리` + +**Description:** + +1. 부서명 인풋박스 + - 기존 부서명 표시, 수정 가능 + + +## 페이지 59 - 사원관리 +**버전**: D1.3 | **경로**: `인사관리> 사원관리` + +**Description:** + +1. 기간 설정 영역 + - 입사일 기준 +1-1. 기간 설정 버튼 영역 + - 종류: 당해년도, 전전월, 전월, 당월, 어제, + 오늘 + - 클릭: 해당 기간이 (1) 영역에 설정되며 화 + 면 전체에 적용 처리 +2. CSV 일괄 등록 버튼 + - 클릭: CSV 일괄 등록화면으로 이동 +3. 사원 등록 버튼 + - 클릭: 사원 상세화면으로 이동 +4. 사용자 초대 버튼 + - 클릭: 사용자 초대 팝업표시 +5. 필터 셀렉트 박스 + - 종류: 전체, 사용자 아이디 보유, 사용자 아 + 이디 미보유, 재직, 휴직, 퇴직 + - 디폴트: 전체 +6. 정렬 셀렉트 박스 + - 종류: 직급순, 입사일 최신순, 입사일 등록 + 순, 부서 오름차순, 부서 내림차순, 이름 오 + 름차순, 이름 내림차순 +7. 수정 버튼 + - 클릭: 사원 상세 화면으로 이동 + + +## 페이지 60 - 사원 상세 +**버전**: D1.3 | **경로**: `인사관리> 사원관리> 사원 상세` + +**Description:** + +*. 사원 상세 + - 사원 정보와 사용자 정보를 함께 관리 + - 둘 중 하나만 있어도 등록 가능 +1. 항목 설정 버튼 + - 사원 상세 및 인사 정보 (선택 정보) 설정 + - 클릭: 항목 설정 팝업 표시 +2. 등록 버튼 + - 최초 등록 시에는 등록 버튼 + - 정보 입력 후에는삭제, 수정 버튼으로 표 +3. 사원 정보 영역 + - 사원 정보 등록 시 필수 정보 +4. 사용자 정보 영역 + - 사용자 정보 등록 시 필수 정보 +5. 권한 셀렉트 박스_검색 + - 종류: 권한관리의 목록 표시 +6. 상태 셀렉트 박스 + - 종류: 정상, 제재, 중지 + - 제재 상태인 경우 로그아웃 처리, 로그인 + 시 “제재중인 아이디입니다.” 팝업 + + +## 페이지 61 - 항목 설정 팝업 +**버전**: D1.3 | **경로**: `인사관리> 사원관리> 사원 상세>` + +**Description:** + +1. 전체 설정 ON/OFF 버튼 + - 클릭: 설정 ON/OFF 토글 + - 디폴트: 설정 OFF 상태 +2. 개별 설정 ON/OFF 버튼 + - 클릭: 설정 ON/OFF 토글 + - 디폴트: 설정 OFF 상태 + + +## 페이지 62 - 사원 상세 +**버전**: D1.3 | **경로**: `인사관리> 사원관리> 사원 상세` + +**Description:** + +1. 사원 상세 영역(선택 정보) + + +## 페이지 63 - 사원 상세 +**버전**: D1.3 | **경로**: `인사관리> 사원관리> 사원 상세` + +**Description:** + +*. 인사 정보 영역(선택 정보) +1. 고용 형태 셀렉트 박스 + - 종류: 정규직, 계약직, 파견직, 용역직, 시간 + 제 근로자 + - 디폴트: 정규직 +2. 직급 셀렉트 박스 + - 종류: 사원, 대리, 과장, 차장, 부장, 이사, + 상무, 전무, 부사장, 사장, 회장 (직급관리 화 + 면에서 설정) +3. 상태 셀렉트 박스 + - 종류: 재직, 병가휴직, 육아휴직, 개인사정 + 휴직, 무급휴직, 퇴사, 해고, 권고사직, 계약 + 만료, 정년퇴직 +4. 부서 셀렉트 박스_검색 + - 종류: 회사명, 부서명, 부서명(부서관리 화 + 면에서 설정) +5. 직책 셀렉트 박스 + - 종류: 없음, 팀장, 파트장, 실장, 부서장, 본 + 부장, 센터장, 매니저, 리더 (직책관리 화면 + 에서 설정) + - 부서별 직책 하나 선택 가능 +6. 추가 버튼 + - 부서, 직책 셀렉트 박스 영역 하단에 추가 +7. 삭제 버튼 + - 클릭: “{부서명} {직책명}을 삭제하시겠습니 + 까?” 확인 Alert 표시 +8. 출근 위치 셀렉트 박스_검색 + - 종류: 본사, 현장 목록 + - 출근 체크 시 해당 위치 좌표 기준으로 설 + 정된 {거리} m 내에서 가능 +9. 퇴근 위치 셀렉트 박스_검색 + - 종류: 본사, 현장 목록 + - 퇴근 체크 시 위치 좌표 기준으로 설정된 + {거리} m 내에서 가능 + + +## 페이지 64 - 팝업 +**버전**: D1.3 | **경로**: `인사관리> 사원관리> 사용자 초대` + +**Description:** + +*. 사용자 초대 프로세스 + - 초대 이메일로 발송→약관 동의 (아이디 + 를 이메일로 사용) →비밀번호 설정 →로 + 그인 + - 이메일 주소 기준 사원 정보가 있을 경우 + 에는 매핑하여 사용자 등록 처리, 없을 경우 + 에는 사용자에만 등록하고 나머지 사원 정 + 보는 직접 입력 필요 + - 사용자 아이디는 다른 테넌트와는 중복 + 가능 (사용자가 여러 테넌트에 등록 가능) +1. 초대할 이메일 주소 인풋박스 + - ‘,’로구분하여 여러 주소 입력 가능 +2. 권한 셀렉트 박스_검색 + - 종류: 권한관리의 목록 표시 +3. 초대 메시지 인풋박스 +4. 초대 버튼 + - 클릭: 사용자 초대 이메일 발송 + + +## 페이지 65 - 사용자 초대 메일 +**버전**: D1.3 | **경로**: `-` + +**Description:** + +1. 초대 메시지 내용 + - 등록한 초대 메시지 표시 +2. 회사 초대 수락 버튼 + - 클릭: 약관 동의 화면으로 이동 + + +## 페이지 66 - 록 +**버전**: D1.3 | **경로**: `인사관리> 사원관리> CSV 일괄 등` + +**Description:** + +1. 양식 다운로드 버튼 + - 클릭: 등록된 양식 CSV 다운로드 +2. 파일 선택 버튼 + - 클릭: 파일 탐색기 팝업, CSV 1개만 등록 +3. 파일 변환 버튼 + - 클릭: CSV 데이터를 (3-1) 정보 등록 영역 + 에 변환값 표시 +3-1. 정보 등록 영역 + - 범위: 사원 상세 화면의 전체 항목 + + +## 페이지 67 - Description +**버전**: D1.3 + +**Description:** + +1. 파일명 버튼 + - 클릭: 파일 다운로드 처리 +2. 전체/개별 체크박스 + - 클릭: 체크박스 설정/해제 토글 + - 디폴트: 전체 설정 상태 +3. 등록 버튼 + - 파일변환 완료& (2) 체크 설정 항목 있을 + 경우에만 버튼 활성화 + - 클릭: “{3}개의 정보를 정말 등록하시겠습 + 니까?” 확인 Alert 표시, 확인 클릭 시 (2) 체 + 크된 정보만 등록 처리, “정보 등록이 완료 + 되었습니다.” 알림 Alert 표시 + + +## 페이지 68 - 근태관리 +**버전**: D1.3 | **경로**: `인사관리> 근태관리` + +**Description:** + +*. 근태관리 + - 관리 권한이 있는 경우에만 모든 선택 가 + 능 + - 관리 권한이 없을 경우 본인의 정보만 선 + 택 및 편집 가능 + - 근태관리 자동 설정 시: 모든 사원이 정시 + 출퇴근한 것으로 기록, 예외사항일 경우 작 +1. 근태 등록 버튼 + - 클릭: 근태 정보 팝업 표시 +2. 사유 등록 버튼 + - 클릭: 사유 정보 팝업 표시 +3. 필터 셀렉트 박스 + - 종류: 전체, 정시 출근, 지각, 결근, 휴가, 출 + 장, 외근, 연장근무 + - 디폴트: 전체 +4. 정렬 셀렉트 박스 + - 종류: 직급순, 부서 오름차순, 부서 내림차 + 순, 이름 오름차순, 이름 내림차순 +5. 수정 버튼 + - 클릭: 근태 정보 팝업 표시 +6. 사유명 버튼 + - 클릭: 사유 정보 팝업 표시 + + +## 페이지 69 - 팝업, 사유 정보 팝업 +**버전**: D1.3 | **경로**: `인사관리> 근태관리> 근태 정보` + +**Description:** + +1. 사원 셀렉트 박스_검색&다중 선택 + - 항목: 부서명, 직급명, 사원명 표시 + - 종류: 모든 사원 목록 + - 권한이 없을 경우 자신만 선택 가능 +2. 기준일 설정 영역 + - 클릭: 달력 팝업 표시 + - 일자 다중 선택 가능 + - 디폴트: 당일 +3. 야간 연장 시간 설정 영역 + - 주당 연장 근로 시간에서주말 연장 시간 + 을 차감한 이내에만 설정 가능 +4. 주말 연장 시간 설정 영역 + - 주당 연장 근로 시간에서야간 연장 시간 + 을 차감한 이내에만 설정 가능 +5. 내용 인풋박스 + + +## 페이지 70 - 휴가관리 +**버전**: D1.3 | **경로**: `인사관리> 휴가관리` + +**Description:** + +1. 휴가관리 탭 + - 종류: 휴가 사용 현황, 휴가 부여 현황, 휴 + 가 신청 현황 + - 디폴트: 휴가 사용 현황 +2. 사원 셀렉트 박스_검색&다중 선택 + - 항목: 부서명, 직급명, 사원명 표시 + - 종류: 전체, 모든 사원 목록 + - 디폴트: 전체 +3. 정렬 셀렉트 박스 + - 종류: 직급순, 부서 오름차순, 부서 내림차 + 순, 이름 오름차순, 이름 내림차순 + + +## 페이지 71 - 휴가관리_휴가 부여 현황 +**버전**: D1.3 | **경로**: `인사관리> 휴가관리` + +**Description:** + +1. 부여 등록 버튼 + - 관리 권한이 없을 경우 숨김 + - 클릭: 휴가 부여 팝업 표시 +2. 부여 버튼 + - 관리 권한이 없을 경우 숨김 + - 클릭: 휴가 부여 팝업 표시 + + +## 페이지 72 - 휴가관리_휴가 신청 현황 +**버전**: D1.3 | **경로**: `인사관리> 휴가관리` + +**Description:** + +1. 휴가 신청 버튼 + - 클릭: 휴가 신청 팝업 표시 +2. 승인 버튼 + - 관리 권한이 없을 경우 숨김 + - 클릭: “정말 {1}건을 승인하시겠습니까?” + 확인 Alert 표시, 확인 버튼 클릭 시 “승인이 + 완료되었습니다.” 알림 Alert 표시 +3. 거절 버튼 + - 관리 권한이 없을 경우 숨김 + - 클릭: “정말 {1}건을 거절하시겠습니까?” + 확인 Alert 표시, 확인 버튼 클릭 시 “거절이 + 완료되었습니다.” 알림 Alert 표시 + + +## 페이지 73 - 팝업, 휴가 신청 팝업 +**버전**: D1.3 | **경로**: `인사관리> 휴가관리> 휴가 부여` + +**Description:** + +1. 유형 셀렉트 박스 + - 종류: 연차, 보상, 경조, 보건, 병가, 반차, + 회수 (차감) + - 디폴트: 연차 + - 회수 선택 시에는 설정 일시만큼 차감 +2. 사유 인풋박스 +3. 부여 버튼 + - 클릭: 휴가 부여 목록 최상단에 추가 +4. 휴가 잔여 일시 표시 +5. 유형 셀렉트 박스 + - 종류: 연차, 보상, 경조, 보건, 병가, 반차 + - 디폴트: 연차 + - 반차 선택 시에는 시간으로 변경 +6. 기간 설정 영역 + - 클릭: 기간 설정 팝업 표시 + - 디폴트: 당일 + - (5) 반차 선택 시 + 1) 기간→시간 으로 변경 + 2) 기간 설정 →시간 셀렉트 박스로 변경 + - 종류: 1시간~7시간 +7. 신청 버튼 + - 클릭: + 1) 잔여 일시 >= 신청 일시 (사용 가능) + : “휴가 신청 완료되었습니다.” + 알림 Alert 표시, + 휴가 신청 목록 최상단에 표시 + 2) 잔여 일시 < 신청 일시 (사용 불가능) + : “휴가 잔여 일시를 초과했습니다.” + 알림 Alert 표시 + + +--- + +# 전자결재 + + +## 페이지 75 - 기안함 +**버전**: D1.3 | **경로**: `전자결재> 기안함` + +**Description:** + +*. 문서 상태 + - 임시저장: 문서 작성 중 임시저장 상태 + - 진행: 상신 및 결재자 중 일부 승인된 상태 + - 완료: 모든 승인 완료 상태 + - 반려: 결재자중 한 명이 반려한 상태 +1. 문서 작성 버튼 + - 클릭: 문서 작성 화면으로 이동 +2. 상신 버튼 + - 클릭: + 1) 임시저장 상태일 경우 + : “정말 {1}건을 상신 처리하시겠습니까?” 확 + 인 Alert 표시 + 2) 임시저장 상태가 아닐 경우 + : “임시저장 상태만 상신이 가능합니다.” 알 + 림 Alert 표시 +3. 삭제 버튼 + - 클릭: + 1) 임시저장 상태일 경우 + : “정말 {1}건을 삭제 처리하시겠습니까?” 확 + 인 Alert 표시 + 2) 임시저장 상태가 아닐 경우 + : “임시저장 상태만 삭제가 가능합니다.” 알 + 림 Alert 표시 +4. 필터 셀렉트 박스 + - 종류: 전체, 임시저장, 진행, 완료, 반려 + - 디폴트: 전체 +5. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순 + - 디폴트: 최신순 +6. 수정 버튼 + - 클릭: + 1) 임시저장 상태일 경우: 문서 작성 화면으 + 로 이동 + 2) 임시저장 상태가 아닐 경우 + : 문서 상세 팝업 표시 + + +## 페이지 76 - 문서 작성_품의서 +**버전**: D1.3 | **경로**: `전자결재> 기안함> 문서 작성` + +**Description:** + +1. 상세 버튼 + - 클릭: 문서 상세 팝업표시 +2. 문서 유형 셀렉트 박스_검색 + - 종류: 품의서, 지출결의서, 지출 예상 내역 + 서 + - 디폴트: 품의서 + - 선택한 문서 유형의 화면으로 변경 표시 +3. 결재자 셀렉트 박스_검색&다중 선택 + - 항목: 부서명, 직책명, 사원명 표시 + - 종류: 전체, 모든 사원 목록 + - 디폴트: 전체 +4. 참조자 셀렉트 박스_검색&다중 선택 + - 항목: 부서명, 직책명, 사원명 표시 + - 종류: 전체, 모든 사원 목록 + - 디폴트: 전체 + + +## 페이지 77 - 문서 작성_품의서 +**버전**: D1.3 | **경로**: `전자결재> 기안함> 문서 작성` + +**Description:** + +1. 녹음 버튼 + - 클릭: 마이크 사용 가능할 경우에만 버튼 + 활성화 + - 클릭: 녹음 중지 버튼으로 변경, 인식된 음 + 성 내용을 텍스트로 변경하여 (1-1) 인풋박 + 스 영역에 표시 + + +## 페이지 78 - 문서 작성_지출결의서 +**버전**: D1.3 | **경로**: `전자결재> 기안함> 문서 작성` + +**Description:** + +1. 문서 유형 셀렉트 박스_검색 + - 종류: 품의서, 지출결의서, 지출 예상 내역 + 서 + - 디폴트: 품의서 + - 선택한 문서 유형의 화면으로 변경 표시 + + +## 페이지 79 - 문서 작성_지출결의서 +**버전**: D1.3 | **경로**: `전자결재> 기안함> 문서 작성` + +**Description:** + +1. 카드 셀렉트 박스 + - 종류: 등록된 카드 목록 + - 디폴트: 첫번째 카드 +2. 총 비용 정보 영역 + - 지출결의서 정보의 금액 합계 표시 + + +## 페이지 80 - 문서 작성_지출 예상 내역서 +**버전**: D1.3 | **경로**: `전자결재> 기안함> 문서 작성` + +**Description:** + +1. 문서 유형 셀렉트 박스_검색 + - 종류: 품의서, 지출결의서, 지출 예상 내역 + + +## 페이지 81 - 문서 작성_지출 예상 내역서 +**버전**: D1.3 | **경로**: `전자결재> 기안함> 문서 작성` + +**Description:** + +1. 지출 예상 내역서 목록 + - 체크 설정/해제 표시 + 1) 지출 예상 내역서 화면에서 왔을 경우 + : 설정했던 체크 상태 유지 + 2) 문서 작성 화면에서 설정했을 경우 + : 모든 체크 항목 설정된 상태 + + +## 페이지 82 - 결재함 +**버전**: D1.3 | **경로**: `전자결재> 결재함` + +**Description:** + +*. 상태 + - 진행 하위 상태 + - 예정: 결재 순번에 의한 대기 + - 결재요청: 결재 요청을 받은 상태 +1. 승인 버튼 + - 클릭: “정말 {1}건을 승인하시겠습니까?” + 확인 Alert 표시, 확인 버튼 클릭 시 “승인이 + 완료되었습니다.” 알림 Alert 표시 +2. 반려 버튼 + - 클릭: “정말 {1}건을 반려하시겠습니까?” + 확인 Alert 표시, 확인 버튼 클릭 시 “반려가 + 완료되었습니다.” 알림 Alert 표시 +3. 필터 셀렉트 박스 + - 종류: 전체, 결재 요청, 예정, 완료, 반려 + - 디폴트: 전체 + - 1/3 완료: 결재선 승인 진행도에 따라 표시 +4. 수정 버튼 + - 클릭: 문서 상세 팝업 표시 + + +## 페이지 83 - 업 +**버전**: D1.3 | **경로**: `전자결재> 결재함> 문서 상세 팝` + +**Description:** + +1. 복제 버튼 + - 클릭: 문서 작성 화면으로 이동 (새글) +2. 수정 버튼 + - 결재선 중에서는 누구나 수정 가능 + - 클릭: 해당 문서 작성 화면으로 이동 +3. 반려 버튼 + - 결재선 아닐 경우 숨김 + - 클릭: “정말 반려하시겠습니까?” 확인 + Alert 표시 +4. 승인 버튼 + - 결재선 아닐 경우 숨김 + - 클릭: “정말 승인하시겠습니까?” 확인 + Alert 표시 +5. 공유 버튼 + - 클릭: (5-1) 팝업 표시 +6. 결재선 영역 + - 승인/반려 시 해당 아이콘 표시 +7. 품의서 정보 표시 + + +## 페이지 84 - 업 +**버전**: D1.3 | **경로**: `전자결재> 결재함> 문서 상세 팝` + +**Description:** + +1. 지출결의서 정보 표시 + + +## 페이지 85 - 업 +**버전**: D1.3 | **경로**: `전자결재> 결재함> 문서 상세 팝` + +**Description:** + +1. 지출 예상 내역서 정보 표시 + 결 + 재 + 예상 지급일 + 항목 + 지출금액 + 거래처 + 계좌 + 2025-11-12 + 품의 사유… + 1,000,000 + 회사명 + 국민 1234 홍길동 + 2025-11-12 + 적요 내용 + 1,000,000 + 회사명 + 국민 1234 홍길동 + 2025-11-12 + 품의 사유… + 1,000,000 + 회사명 + 국민 1234 홍길동 + 2025-11-12 + 적요 내용 + 1,000,000 + 회사명 + 국민 1234 홍길동 + 2025/11 계 + 4,000,000 + 2025-12-12 + 거래처명 12월분 + 1,000,000 + 회사명 + 국민 1234 홍길동 + 2025-12-12 + 품의 사유… + 1,000,000 + 회사명 + 국민 1234 홍길동 + 2025/12 계 + 2,000,000 + 지출 합계 . + 6,000,000 + 계좌 잔액 . + 10,000,000 + 최종 차액 . + 4,000,000 + + +## 페이지 86 - 참조함 +**버전**: D1.3 | **경로**: `전자결재> 참조함` + +**Description:** + +1. 열람 버튼 + - 클릭: “정말 {1}건을 열람 처리하시겠습니 + 까?” 확인 Alert 표시, 확인 버튼 클릭 시 “열 + 람 처리가 완료되었습니다.” 알림 Alert 표시 +2. 미열람 버튼 + - 클릭: “정말 {1}건을 미열람 처리하시겠습 + 니까?” 확인 Alert 표시, 확인 버튼 클릭 시 + “미열람 처리가 완료되었습니다.” 알림 Alert + 표시 +3. 필터 셀렉트 박스 + - 종류: 전체, 열람, 미열람 + - 디폴트: 전체 + + +--- + +# 게시판 + + +## 페이지 88 - Description +**버전**: D1.3 + +**Description:** + +1. 게시글 등록 버튼 + - 클릭: 게시글 상세_등록 화면으로 이동 +2. 게시판 탭 + - 종류: 공지사항, 게시판명, …, 나의 게시글 + (기준정보> 게시판관리 화면에서 설정한 + 게시판 목록) + - 디폴트: 공지사항 + - 대상(전사, 부서, 팀)에 따라 소속에 맞는 + 게시판만 표시 +3. 게시글 정보 영역 + - 항목: 번호(상단 노출 아이콘 또는 번호), + 제목, 작성자, 등록일, 조회수 + - 클릭: 게시글 상세 화면으로 이동 + + +## 페이지 89 - 게시글 상세_등록 +**버전**: D1.3 | **경로**: `게시판> 게시글 상세` + +**Description:** + +1. 게시판 셀렉트 박스 + - 종류: 공지사항, 게시판명, … + (운영 관리_게시판 관리 화면에서 설정한 + 게시판 목록) + - 디폴트: 공지사항 + - 대상(전사, 부서, 팀)에 따라 소속에 맞는 + 게시판만 표시 +2. 상단 노출 라디오 버튼 + - 종류: 사용함, 사용안함 + - 디폴트: 사용안함 + - 사용함 설정 시 해당 게시판 화면에서 최 + 상단에 위치 + - 상단 노출 + 1) 최대 5개까지 설정 가능 + - 초과 시 “상단 노출은 5개까지 + 설정 가능합니다.” 알림 Alert 표시 + 2) 최신순 정렬 + 3) 일반 공지(상단 공지 사용안함) 보다 + 상단에 표시 +3. 댓글 라디오 버튼 + - 종류: 사용함, 사용안함 + - 디폴트: 사용함 + - 사용함 설정 시 게시글 상세 화면에서 댓 + 글 영역 표시 + + +## 페이지 90 - 게시글 상세 +**버전**: D1.3 | **경로**: `게시판> 게시글 상세` + +**Description:** + +1. 삭제/수정 버튼 영역 + - 본인이 작성한 글일 경우에만 표시 +2. 댓글 등록 영역 + - 게시글 작성 화면에서 댓글 사용함 설정 + 시에만 표시 + + +## 페이지 91 - 게시글 상세 +**버전**: D1.3 | **경로**: `게시판> 게시글 상세` + +**Description:** + +1. 댓글 정보 영역 + - 항목: 프로필 이미지, 부서명 이름 직책, 댓 + 글 내용, 등록일시 표시 +2. 수정 버튼 + - 본인이 작성한 댓글일 경우에만 표시 + - 클릭: (2-1) 인풋박스에 기존 댓글 내용 입 + 력 상태로 변경, 수정 가능 +3. 삭제 버튼 + - 본인이 작성한 댓글일 경우에만 표시 + - 클릭: “정말 삭제하시겠습니까?” 확인 + Alert 표시, 확인 클릭 시 삭제 처리 + + +--- + +# 회계관리 + + +### Flowchart – 회계 관리 +**페이지**: 93 + +- 거래처 선택 +- 매출 + - [Yes] + - [No] +- 거래처 선택 +- 입금 +- 매입 +- 출금 +- 추심 +- 매출 등록 +- 매입 등록 +- 세금계산서 발행 +- 세금계산서 수취 +- 입금 등록 +- 출금 등록 +- 장부/보고서 +- 전액 입금? +- 어음 수취? +- 전액 출금? +- 어음 발행? +- 거래처원장 +- 바로빌 API 자동 등록 예정 +- 미수금 현황 +- 악성 추심 +- 미지급 알림 +- 조회 +- 입출금 계좌 조회 +- 카드 내역 관리 +- 악성추심? +- 연체? +- 지출 예상 내역서 +- 일일 일보 + +## 페이지 94 - 거래처관리 +**버전**: D1.3 | **경로**: `회계관리> 거래처관리` + +**Description:** + +1. 삭제 버튼 + - 관리 권한이 없을 경우 숨김 + - 클릭: "선택한 거래처 N개를 삭제하시겠습 + 니까?" 확인 Alert 표시 +2. 구분 필터 셀렉트 박스 + - 종류: 전체, 매출, 매입, 매입매출 + - 디폴트: 전체 +3. 신용등급 필터 셀렉트 박스 + - 종류: 전체, AAA, AA, A, BBB, BB, B, CCC, + CC, C, D + - 디폴트: 전체 +4. 거래등급 필터 셀렉트 박스 + - 종류: 전체, A(우수), B(양호), C(보통), D(주 + 의), E(위험) + - 디폴트: 전체 +5. 악성채권 필터 셀렉트 박스 + - 종류: 전체, 악성채권, 정상 + - 디폴트: 전체 +6. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 거래처명 오름차순, + 거래처명 내림차순, 미수금 높은순, 미수금 + 낮은순 + - 디폴트: 최신순 + + +## 페이지 95 - 세 +**버전**: D1.3 | **경로**: `회계관리> 거래처관리> 거래처 상` + +**Description:** + +*. 회계_거래처 정보 + - 판매, 구매 등의 거래처 등록 정보가 모두 + 표시 + - 회계에 필요한 거래처 정보도 추가로 표시 +1. 삭제 버튼 + - 클릭: "{거래처명}을 삭제하시겠습니까?" + 확인 Alert 표시, 확인 클릭 시 거래처관리 + 목록 화면으로 이동 +2. 수정 버튼 + - 클릭: 정말 수정하시겠습니까?” 확인 Alert + 표시, 확인 클릭 시 “수정이 완료되었습니다.” + 알림 Alert 표시 + + +## 페이지 96 - 세 +**버전**: D1.3 | **경로**: `회계관리> 거래처관리> 거래처 상` + +**Description:** + +1. 회사 로고 이미지 영역 + - 클릭: 파일탐색기 팝업 표시 + - 750 X 250px, 10MB 이하의 PNG, JPEG, + GIF 중 하나 선택 가능 +2. 매입 결제일 셀렉트 박스 + - 종류: 1일~31일, 말일 + - 디폴트: 10일 + - 거래처 유형이 '매입' 또는 '매입매출'일 경 + 우 표시 +3. 매출 결제일 셀렉트 박스 + - 종류: 1일~31일, 말일 + - 디폴트: 15일 + - 거래처 유형이 '매출' 또는 '매입매출'일 경 + 우 표시 + + +## 페이지 97 - Description +**버전**: D1.3 + +**Description:** + +1. 신용등급 인풋박스 + - 외부 신용평가 등급 표시 + - 예: AAA, AA, A, BBB, BB, B, CCC, CC, C, D +2. 거래등급 셀렉트 박스 + - 종류: A(우수), B(양호), C(보통), D(주의), + E(위험) + - 디폴트: A(우수) + - 자사 기준 거래처 평가 등급 +3. 미수금 표시 영역 + - 해당 거래처의 현재 미수금 합계 표시 + - 읽기 전용 +4. 연체 토글 + - ON: 연체 상태로 표시, 연체일수 표시 + - OFF: 정상 상태 + - 미수금 현황에서 연체 설정과 연동 + - (4-1) 연체 등록 이후부터 경과일 표시 +5. 미지급 표시 영역 + - 해당 거래처에 대한 미지급금 합계 표시 + - 읽기 전용 +6. 악성채권 토글 + - ON: 악성채권으로 등록, 악성채권 추심관 + 리 목록에 표시 + - OFF: 정상 상태 + - 디폴트: OFF + - 악성채권 추심관리에서 설정과 연동 + - (6-1) 악성채권의 상태 표시 + + +### Flowchart – 매출 / 입금 +**페이지**: 98 + +- 수주 확정 +- 직원 + - [Yes] + - [No] +- 경리 +- 세금계산서 발행 +- 매출 자동 등록 +- 거래명세서 발행 +- 결정권자 +- 미수금 현황 +- 수금일 변경? +- 바로빌 등자동화 예정 +- 입금 상세 등록 +- 연체? +- 연체 관리 +- 악성채권? +- 악성채권 관리 +- 입금 예정일 +- 입금 완료? +- 별도 매출 +- 매출 수동 등록 + +## 페이지 99 - 매출관리 +**버전**: D1.3 | **경로**: `회계관리> 매출관리` + +**Description:** + +*. 매출 등록 + - 수주 확정 시 매출 자동 등록 (삭제 불가) + - 별도 매출 시 매출 직접 등록 +1. 매출 등록 버튼 + - 클릭: 매출 상세_직접 등록화면으로 이동 + - 수주 연동 없는 별도 매출 발생 시 사용 +2. 매출유형명 셀렉트 박스_검색 + - 종류: 미설정, 제품 매출, 상품 매출, 부품 + 매출, 용역 매출, 공사 매출, 임대 수익, 기타 + 매출 + - 디폴트: 미설정 +2-1. 저장 버튼 + - 클릭: “N개의 매출유형을 {매출유형명}으 + 로 모두 변경하시겠습니까?” 확인 Alert 표 +3. 거래처 필터 셀렉트 박스_검색&다중 선택 + - 종류: 전체, 거래처 목록 + - 디폴트: 전체 +4. 매출유형 필터 셀렉트 박스_다중 선택 + - 종류: 전체, 제품 매출, 상품 매출, 부품 매 + 출, 용역 매출, 공사 매출, 임대 수익, 기타 + 매출, 미설정 + - 디폴트: 전체 +5. 발행여부 필터 셀렉트 박스_다중 선택 + - 종류: 전체, 세금계산서 미발행, 거래명세 + 서 미발행 + - 디폴트: 전체 +6. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 금액 높은순, 금액 + 낮은순 + - 디폴트: 최신순 +7. 매출번호 + - 형식: 로트번호 + 현장명 + 넘버링 조합 + - 견적서/수주 정보 참조하여 자동 생성 + + +## 페이지 100 - 매출 상세 +**버전**: D1.3 | **경로**: `회계관리> 매출관리> 매출 상세` + +**Description:** + +1. 매출유형명 셀렉트 박스_검색 + - 종류: 미설정, 제품 매출, 상품 매출, 부품 + 매출, 용역 매출, 공사 매출, 임대 수익, 기타 + 매출 + - 디폴트: 제품 매출 + + +## 페이지 101 - 매출 상세 +**버전**: D1.3 | **경로**: `회계관리> 매출관리> 매출 상세` + +**Description:** + +1. 세금계산서 발행 토글 버튼 + - 클릭: 미발행/발행완료 토글 + - 세금계산서 수동 발행 후 발행 상태로 변 +2. 거래명세서 발행 토글 버튼 + - 클릭: 미발행/발행완료 토글 + - (4) 거래명세서 발행하기 버튼 클릭 후 발 + 행 상태로 자동 변경 +3. 거래명세서 조회 버튼 + - 클릭: 문서 상세_거래명세서 팝업 표시 +4. 거래명세서 발행하기 버튼 + - 클릭: 해당 거래명세서를 거래처 이메일로 + 자동 발송 처리, “거래명세서가 + abc@email.com으로 발송되었습니다.” 알림 + Alert 표시 + + +## 페이지 102 - 매출 상세_직접 등록 +**버전**: D1.3 | **경로**: `회계관리> 매출관리> 매출 상세` + +**Description:** + +*. 매출 상세 + - 별도 매출 시 매출 직접 등록 (삭제 가능) + - 별도 매출: 용역 매출, 공사 매출, 임대 수 + 익, 기타 매출 +1. 매출번호 + - 자동 채번 + + +### Flowchart – 매입 / 출금 +**페이지**: 103 + +- 품의서 작성 +- 직원 + - [Yes] + - [No] +- 경리 +- 전자결재 상신 +- 결정권자 +- 지출예상내역서 +- 지급일 가능? +- 승인? +- 예상 지급일 수정 +- 반려 +- 완료 +- 지출결의서 작성 +- 전자결재 상신 +- 매입 상세 작성 +- 지출결의서? +- 출금 +- 출금 상세 등록 +- 승인? +- 매입 자동 등록 + +## 페이지 104 - 매입관리 +**버전**: D1.3 | **경로**: `회계관리> 매입관리` + +**Description:** + +*. 매입 등록 + - 지출예상내역서 승인 완료 시 매입 자동 + 등록 (삭제 불가) +1. 매입유형명 셀렉트 박스_검색 + - 종류: 미설정, 원재료매입, 부재료매입, 상 + 품매입, 외주가공비, 소모품비, 수선비, 운반 + 비, 사무용품비, 임차료, 수도광열비, 통신비, + 차량유지비, 접대비, 보험료, 기타용역비 + - 디폴트: 미설정 +1-1. 저장 버튼 + - 클릭: “N개의 매입유형을 {매입유형명}으 + 로 모두 변경하시겠습니까?” 확인 Alert 표 +2. 거래처 필터 셀렉트 박스_검색&다중 선택 + - 종류: 전체, 거래처 목록 + - 디폴트: 전체 +3. 매입유형 필터 셀렉트 박스_다중 선택 + - 종류: 전체, 원재료매입, 부재료매입, 상품 + 매입, 외주가공비, 소모품비, 수선비, 운반비, + 사무용품비, 임차료, 수도광열비, 통신비, 차 + 량유지비, 접대비, 보험료, 기타용역비, 미설 + 정 + - 디폴트: 전체 +4. 발행여부 필터 셀렉트 박스_다중 선택 + - 종류: 전체, 세금계산서 미수취 + - 디폴트: 전체 +5. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 금액 높은순, 금액 + 낮은순 + - 디폴트: 최신순 +6. 매입번호 + - 형식: 품의서/지출결의서 문서번호 + 넘버 + 링 조합 + - 품의서/지출결의서 정보 참조하여 자동 생 + + +## 페이지 105 - 매입 상세 +**버전**: D1.3 | **경로**: `회계관리> 매입관리> 매입 상세` + +**Description:** + +1. 근거 문서명 + - 품의서 또는 지출결의서 +2. 열람 버튼 + - 클릭: 해당 문서 상세 팝업 표시 +3. 예상 비용 표시 + - 품의서/지출결의서 예상/총 비용 표시 +4. 매입번호 + - 형식: 품의서/지출결의서 문서번호 + 넘버 + 링 조합 + - 품의서/지출결의서 정보 참조하여 자동 생 +5. 출금계좌 셀렉트 박스 + - 종류: 등록한 계좌 정보 목록 + - 항목: 은행명+ 계좌 번호 마지막 4자리 + +6. 거래처 셀렉트 박스_검색 + - 종류: 거래처 목록 +7. 매입 유형 셀렉트 박스 + - 종류: 원재료매입, 부재료매입, 상품매입, + 외주가공비, 소모품비, 수선비, 운반비, 사무 + 용품비, 임차료, 수도광열비, 통신비, 차량유 + 지비, 접대비, 보험료, 기타용역비, 미설정 +8. 세금계산서 수취 토글 버튼 + - 클릭: 미수취/수취완료 토글 + - 세금계산서 수취 완료 후 완료 상태로 변 + + +## 페이지 106 - 입금관리 +**버전**: D1.3 | **경로**: `회계관리> 입금관리` + +**Description:** + +*. 입금 관리 + - 기준 정보> 계좌 관리에 등록된 계좌의 자 + 동 입금 내역 수집 +1. 입금유형명 셀렉트 박스_검색 + - 종류: 미설정, 매출대금, 선수금, 가수금, 임 + 대수익, 이자수익, 보증금 반환, 차입금, 자본 + 금, 부가세 환급, 기타 + - 디폴트: 미설정 +1-1. 저장 버튼 + - 클릭: “N개의 입금 유형을 {입금유형명}으 + 로 모두 변경하시겠습니까?” 확인 Alert 표 +2. 거래처 필터 셀렉트 박스_검색&다중 선택 + - 종류: 전체, 거래처 목록 + - 디폴트: 전체 +3. 입금유형 필터 셀렉트 박스_검색&다중 선 + 택 + - 종류: 전체, 매출대금, 선수금, 가수금, 임대 + 수익, 이자수익, 보증금 반환, 차입금, 자본금, + 부가세 환급, 기타, 미설정 + - 디폴트: 전체 +4. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 금액 높은순, 금액 + 낮은순 + - 디폴트: 최신순 +5. 새로고침 버튼 + - 클릭: 은행 계좌 입금 내역 최신 데이터 조 + 회 + - 바로빌 API 연동 시 실시간 조회 + + +## 페이지 107 - 입금 상세 +**버전**: D1.3 | **경로**: `회계관리> 입금관리> 입금 상세` + +**Description:** + +1. 거래처 셀렉트 박스_검색 + - 종류: 거래처 목록 +2. 입금 유형 셀렉트 박스 + - 종류: 매출대금, 선수금, 가수금, 임대수익, + 이자수익, 보증금 반환, 차입금, 자본금, 부가 + 세 환급, 기타, 미설정 + + +## 페이지 108 - 출금관리 +**버전**: D1.3 | **경로**: `회계관리> 출금관리` + +**Description:** + +*. 출금 관리 + - 기준 정보> 계좌 관리에 등록된 계좌의 자 + 동 출금 내역 수집 +1. 출금유형명 셀렉트 박스_검색 + - 종류: 미설정, 매입대금, 선급금, 가지급금, + 임대료, 이자비용, 보증금 지급, 차입금 상환, + 배당금 지급, 부가세 납부, 급여, 4대보험, 세 + 금, 공과금, 경비, 기타 + - 디폴트: 미설정 +1-1. 저장 버튼 + - 클릭: “N개의 출금 유형을 {출금유형명}으 + 로 모두 변경하시겠습니까?” 확인 Alert 표 +2. 거래처 필터 셀렉트 박스_검색&다중 선택 + - 종류: 전체, 거래처 목록 + - 디폴트: 전체 +3. 출금유형 필터 셀렉트 박스_검색&다중 선 + 택 + - 종류: 전체, 매입대금, 선급금, 가지급금, 임 + 대료, 이자비용, 보증금 지급, 차입금 상환, + 배당금 지급, 부가세 납부, 급여, 4대보험, 세 + 금, 공과금, 경비, 기타, 미설정 + - 디폴트: 전체 +4. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 금액 높은순, 금액 + 낮은순 + - 디폴트: 최신순 + + +## 페이지 109 - 출금 상세 +**버전**: D1.3 | **경로**: `회계관리> 출금관리> 출금 상세` + +**Description:** + +1. 거래처 셀렉트 박스_검색 + - 종류: 거래처 목록 +2. 출금 유형 셀렉트 박스 + - 종류: 매입대금, 선급금, 가지급금, 임대료, + 이자비용, 보증금 지급, 차입금 상환, 배당금 + 지급, 부가세 납부, 급여, 4대보험, 세금, 공 + 과금, 경비, 기타, 미설정 + + +## 페이지 110 - 어음관리 +**버전**: D1.3 | **경로**: `회계관리> 어음관리` + +**Description:** + +1. 어음 등록 버튼 + - 클릭: 어음 상세 화면으로 이동 +2. 상태 셀렉트 박스_검색 + - (3) 구분 종류에 따라 종류 표시 + - 발행 어음 종류: 보관중, 만기임박(만기일 + 7일 전), 만기 경과, 결제완료, 부도 + - 수취 어음 종류: 보관중, 만기임박(만기일 + 7일 전), 추심의뢰, 추심완료, 추심중, 부도 +2-1. 저장 버튼 + - 클릭: “N개의 상태를 {상태명}으로 모두 변 + 경하시겠습니까?” 확인 Alert 표시 +3. 구분 라디오 버튼 + - 종류: 수취, 발행 + - 디폴트: 수취 +4. 거래처 필터 셀렉트 박스_검색&다중 선택 + - 종류: 전체, 거래처 목록 + - 디폴트: 전체 +5. 상태 필터 셀렉트 박스_검색 + - (3) 구분 종류에 따라 종류 표시 + - 발행 어음 종류: 전체, 보관중, 만기임박(만 + 기일 7일 전), 만기 경과, 결제완료, 부도 + - 수취 어음 종류: 전체, 보관중, 만기임박(만 + 기일 7일 전), 추심의뢰, 추심완료, 추심중, +6. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 금액 높은순, 금액 + 낮은순 + - 디폴트: 최신순 + + +## 페이지 111 - 어음 상세 +**버전**: D1.3 | **경로**: `회계관리> 어음관리> 어음 상세` + +**Description:** + +*. 수취 어음 + - 거래처원장 상세, 일일 일보, 미수금 현황 + 에 반영 + - 미수금에 대한 약정으로만 표시 + - 추심완료되어 입금 시에만 회계에 반영 +*. 발행 어음 + - 지출예상내역서에 반영 + - 지출에 대한 약정으로만 표시 + - 결제완료되어 출금 시에만 회계에 반영 +1. 어음번호 + - 실물어음번호 또는 금융결제원에서 부여 + 하는 전자어음번호 등록 +2. 구분 셀렉트 박스 + - 종류: 수취, 발행 + - 디폴트: 수취 +3. 상태 셀렉트 박스 + - (2) 설정에 따른 종류 표시 + - 발행 어음 종류: 보관중, 만기임박(만기일 + 7일 전), 만기 경과, 결제완료, 부도 + - 수취 어음 종류: 보관중, 만기임박(만기일 + 7일 전), 추심의뢰, 추심완료, 추심중, 부도 +4. 차수 관리 + - 총 금액에 대한 차수로 상환 계획 작성 + + +## 페이지 112 - 거래처원장 +**버전**: D1.3 | **경로**: `회계관리> 거래처원장` + +**Description:** + +1. 거래처원장 목록 + - 거래처별 기간별 합계 금액 표시 + - 클릭: 거래처원장 상세 화면으로 이동 + + +## 페이지 113 - 장 상세 +**버전**: D1.3 | **경로**: `회계관리> 거래처원장> 거래처원` + +**Description:** + +1. 이월잔액 표시 +2. 수취 어음 정보 표시 + - 클릭: 해당 어음 상세 화면으로 이동 +3. 거래명세서 정보 표시 + - 클릭: 문서 상세_거래명세서 팝업 표시 +4. 거래명세서 하위 전체 품목별 판매금액 표 + 시 + - 세금계산서 미발행 상태일 경우 붉은색 하 + 이라이트 표시 +5. 누계 금액 표시 + + +## 페이지 114 - 일일 일보 +**버전**: D1.3 | **경로**: `회계관리> 일일 일보` + +**Description:** + +1. (수취어음) + 거래처명 + 어음번호 표시 +2. 당일의 외국환 및 현금성 자산 내역 표시 + - 전체 계좌 내역 표시 + + +## 페이지 115 - 지출 예상 내역서 +**버전**: D1.3 | **경로**: `회계관리> 지출 예상 내역서` + +**Description:** + +*. 지출 예상 내역서 + - 카드 및 승인/반려가 확정된 목록은 삭제 +1. 예상 지급일 변경 버튼 + - 클릭: 예상 지급일 변경 팝업 표시 +2. 전자결재 버튼 + - 클릭: 문서 작성_지출 예상 내역서 화면으 + 로 이동 +3. 거래처 필터 셀렉트 박스_검색&다중 선택 + - 종류: 전체, 거래처 목록 + - 디폴트: 전체 +4. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순 + - 디폴트: 최신순 +5. 예상 지급일 + - 매입 거래처 등록 시 자동 입력 + - 그 외 거래처는 입력값 반영 +6. 품의서/지출결의서/발행어음 목록 + - 클릭: 해당 문서/어음 상세 화면으로 이동 +7. 거래처 월 지출 목록 + - 클릭: 해당 거래처원장 상세화면으로 이 + + +--- + +# 기준정보 + + +## 페이지 117 - 미수금 현황 +**버전**: D1.3 | **경로**: `회계관리> 미수금 현황` + +**Description:** + +1. 수취 어음 등록 시 표시 + - 회계에는 미반영 +2. 메모 인풋박스 + - 입력 후 저장 버튼으로 저장 +3. 연체 토글 + - ON: 연체 상태로 표시, 연체일수 시작 + - OFF: 정상 상태 + - 거래처 상세에서 연체 설정과 연동 +4. 확대 버튼 + - 클릭: 확대/축소 토글 + - 디폴트: 축소 상태 + + +## 페이지 118 - 악성채권 추심관리 +**버전**: D1.3 | **경로**: `회계관리> 악성채권 추심관리` + +**Description:** + +1. 거래처 필터 셀렉트 박스_검색&다중 선택 + - 종류: 전체, 거래처 목록 + - 디폴트: 전체 +2. 상태 셀렉트 박스 + - 종류: 전체, 추심중, 법적조치, 회수완료, 대 + 손처리 + - 디폴트: 전체 + - 추심중: 악성채권 설정 시 디폴트 상태 +3. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순 + - 디폴트: 최신순 + + +## 페이지 119 - 성채권 추심관리 상세 +**버전**: D1.3 | **경로**: `회계관리> 악성채권 추심관리> 악` + +**Description:** + +1. 추심 대상 업체 정보 표시 + + +## 페이지 120 - 악성채권 추심관리 상세 +**버전**: D1.3 | **경로**: `-` + +**Description:** + +1. 찾기 버튼 + - 클릭: 파일탐색기 팝업 표시 + abc.pdf + + +## 페이지 121 - 악성채권 추심관리 상세 +**버전**: D1.3 | **경로**: `-` + +**Description:** + +1. 상태 셀렉트 박스 + - 종류: 추심중, 법적조치, 회수완료, 대손처 +2. 본사 담당자 셀렉트 박스_검색 + - 항목: 부서명 이름 직급명 연락처 + - 종류: 사원 목록 +3. 수취 어음 현황 버튼 + - 클릭: 어음관리 화면으로 이동 (해당 거래 + 처의 수취 어음으로 필터링된 상태) +4. 거래처 미수금 현황 버튼 + - 클릭: 미수금 현황 화면으로 이동 (해당 거 + 래처에 하이라이트 표시) + abc.pdf + abc.pdf + 거래처 미수금 현황 + + +## 페이지 122 - 입출금 계좌 조회 +**버전**: D1.3 | **경로**: `회계관리> 입출금 계좌 조회` + +**Description:** + +*. 입출금 계좌 조회 + - 기준 정보> 계좌 관리에 등록된 계좌의 자 + 동 입출금 내역 수집 +1. 새로고침 버튼 + - 클릭: 은행 계좌 입출금 내역 최신 데이터 + 조회 + - 바로빌 API 연동 시 실시간 조회 +2. 구분 필터 셀렉트 박스 + - 종류: 전체, 출금, 입금 + - 디폴트: 전체 +3. 계정과목 필터 셀렉트 박스_검색&다중 선 + 택 + - (2) 선택에 따른 계정과목 목록 표시 + - 입금 종류: 전체, 매출대금, 선수금, 가수금, + 임대수익, 이자수익, 보증금 반환, 차입금, 자 + 본금, 부가세 환급, 기타, 미설정 + - 출금 종류: 전체, 매입대금, 선급금, 가지급 + 금, 임대료, 이자비용, 보증금 지급, 차입금 + 상환, 배당금 지급, 부가세 납부, 급여, 4대보 + 험, 세금, 공과금, 경비, 기타, 미설정 + - 디폴트: 전체 +4. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 금액순 + - 디폴트: 최신순 +5. 수정 버튼 + - 클릭: 해당 입금/출금 상세 화면으로 이동 + + +## 페이지 123 - 카드 내역 관리 +**버전**: D1.3 | **경로**: `회계관리> 카드 내역 관리` + +**Description:** + +*. 카드 내역 관리 + - 기준 정보> 카드 관리에 등록된 카드의 자 + 동 사용 내역 수집 + - 사용자의 경우 본인의 내역 조회 및 사용 + 유형/적요 작성 가능 +1. 카드명 필터 셀렉트 박스 + - 종류: 전체, 카드명 목록 + - 디폴트: 전체 +2. 정렬 셀렉트 박스 + - 종류: 최신순, 등록순, 금액 높은순, 금액 + 낮은순 + - 디폴트: 최신순 +3. 사용유형 셀렉트 박스 + - 종류: 미설정, 복리후생비, 접대비, 여비교 + 통비, 차량유지비, 소모품비, 운반비, 통신비, + 도서인쇄비, 교육훈련비, 보험료, 광고선전 + 비, 회비, 지급수수료, 세금과공과, 수선비, + 임차료, 잡비 + - 디폴트: 미설정 + + +## 페이지 124 - 내역 상세 +**버전**: D1.3 | **경로**: `회계관리> 카드 내역 관리> 카드` + +**Description:** + +1. 적요 인풋박스 +2. 사용유형 셀렉트 박스 + - 종류: 미설정, 복리후생비, 접대비, 여비교 + 통비, 차량유지비, 소모품비, 운반비, 통신비, + 도서인쇄비, 교육훈련비, 보험료, 광고선전 + 비, 회비, 지급수수료, 세금과공과, 수선비, + 임차료, 잡비 + + +--- + +# 보고서 및 분석 + + +## 페이지 126 - 직급관리 +**버전**: D1.3 | **경로**: `기준정보> 직급관리` + +**Description:** + +1. 직급 인풋박스 +2. 추가 버튼 + - 클릭: (2-1) 직급목록 최하단에 표시 +2-1. 직급 + - 디폴트: 사원, 대리, 과장, 차장, 부장, 이사, + 상무, 전무, 부사장, 사장, 회장 +3. 순서 변경 버튼 + - 드래그&드랍: 해당 위치로 순서 변경 +4. 수정 버튼 + - 클릭: 직급 수정 팝업 표시 +5. 삭제 버튼 + - 클릭: + 1) 해당 직급으로 사원 설정된 경우 + : “{직급명}을 사용하고 있는 사원이 + 있습니다. 모두 변경 후 삭제가 + 가능합니다.” 알림 Alert 표시 + 2) 해당 직급으로 사원 미설정된 경우 + : “정말 삭제하시겠습니까?” 확인 Alert + 표시, 확인 클릭시 “삭제가 + 완료되었습니다.” 알림 Alert 표시 + + +## 페이지 127 - 직책관리 +**버전**: D1.3 | **경로**: `기준정보> 직책관리` + +**Description:** + +1. 직책 인풋박스 +2. 추가 버튼 + - 클릭: (2-1) 직책목록 최하단에 표시 +2-1. 직책 + - 디폴트: 없음(기본), 팀장, 파트장, 실장, 부 + 서장, 본부장, 센터장, 매니저, 리더 +3. 순서 변경 버튼 + - 드래그&드랍: 해당 위치로 순서 변경 +4. 수정 버튼 + - 클릭: 직책 수정 팝업 표시 +5. 삭제 버튼 + - 클릭: + 1) 해당 직책으로 사원 설정된 경우 + : “{직책명}을 사용하고 있는 사원이 + 있습니다. 모두 변경 후 삭제가 + 가능합니다.” 알림 Alert 표시 + 2) 해당 직책으로 사원 미설정된 경우 + : “정말 삭제하시겠습니까?” 확인 Alert + 표시, 확인 클릭시 “삭제가 + 완료되었습니다.” 알림 Alert 표시 + + +## 페이지 128 - 직급 수정 팝업, 직책 수정 팝업 +**버전**: D1.3 | **경로**: `기준정보> 직급관리, 직책관리>` + +**Description:** + +1. 직급명 인풋박스 + - 기존 직급명 표시, 수정 가능 +2. 직책명 인풋박스 + - 기존 직책명 표시, 수정 가능 + + +## 페이지 129 - 권한관리 +**버전**: D1.3 | **경로**: `기준정보> 권한관리` + +**Description:** + +1. 권한 등록 버튼 + - 클릭: 권한 상세 화면으로 이동 +2. 수정 버튼 + - 클릭: 권한 상세 화면으로 이동 + + +## 페이지 130 - 권한 상세 +**버전**: D1.3 | **경로**: `기준정보> 권한관리> 권한 상세` + +**Description:** + +1. 권한명 인풋박스 +2. 상태 셀렉트 박스 + - 종류: 공개, 숨김 +3. 메뉴 목록 + - 상위 및 하위 메뉴 목록 표시 + - 각 메뉴의 관리 목록 모두 설정 가능 + + +## 페이지 131 - 근무관리 +**버전**: D1.3 | **경로**: `기준정보> 근무관리` + +**Description:** + +1. 고용 형태 셀렉트 박스 + - 종류: 정규직, 계약직, 파견직, 용역직, 시간 + 제 근로자 + - 디폴트: 정규직 +2. 주간 근무일 체크박스 + - 체크 시 해당 요일은 근무일 +3. 출근 시간 설정 영역 +4. 퇴근 시간 설정 영역 +5. 법정 주당 기준 근로시간 표시 +6. 법정 주당 연장 근로시간 표시 +7. 휴게 시작 시간 설정 영역 +8. 휴게 종료 시간 설정 영역 + + +## 페이지 132 - 출퇴근관리 +**버전**: D1.3 | **경로**: `기준정보> 출퇴근관리` + +**Description:** + +*. 출퇴근관리 + - GPS 출퇴근과 자동 출퇴근은 독립적으로 + 설정 가능 + - 자동 출퇴근 기능은 정시 출퇴근 처리를 +1. GPS 출퇴근 셀렉트 박스 + - 종류: GPS 출퇴근을 사용합니다, GPS 출퇴 + 근을 사용하지 않습니다. + - 디폴트: GPS 출퇴근을 사용하지 않습니다 + - GPS 미사용 선택 시 (2) 연동 부서, (3) 출 + 퇴근 허용 반경비활성화 +2. 연동 부서 셀렉트 박스_검색&다중 선택 + - 종류: 전체, 부서명 목록 + - 디폴트: 전체 +3. 출퇴근 허용 반경 셀렉트 박스 + - 종류: 50M, 100M, 300M, 500M + - 디폴트: 100M + - 본사 또는 현장 GPS 좌표 기준으로 설정 + 된 반경 내에서만 출퇴근 기록 가능 + - 반경 외 위치에서 출퇴근 시도 시 오류 메 + 시지 표시 +4. 자동 출퇴근 셀렉트 박스 + - 종류: 자동 출퇴근을 사용합니다, 자동 출 + 퇴근을 사용하지 않습니다 + - 디폴트: 자동 출퇴근을 사용합니다. + - 자동 출퇴근 사용 시 (4-1) 연동 부서 셀렉 + 트 박스 활성화 + + +## 페이지 133 - 휴가관리 +**버전**: D1.3 | **경로**: `기준정보> 휴가관리` + +**Description:** + +1. 기준 셀렉트 박스 + - 종류: 회계연도, 입사일 + - 디폴트: 회계연도 + - 입사일 선택 시 (2) 영역 비활성화 + - 기본 연차 설정 반영 +2. 기준일 월/일 설정 영역 +*. 기본 연차 설정 + - 1년간 출근율 80%이상이면 15일 + - 3년 이상 근속 시 2년에 1일 추가 (최대 + 25일) 자동 부여 + - 1년 미만 또는 출근율 80% 미만일 경우 1 + 개월 개근 시 1일씩 연차 발생 (최대 11일) + - 입사일+1년+1일 시점: 전년도 출근율 + 80% 이상이면 15일 부여, 이후 2년에 1일 + 가산 (최대 25일) + - 입사일→회계연도 기준으로 전환할 때는 + 취업규칙 변경, 노사 의견수렴, 전환 시 중복 + ·누락 연차 정산(입사일 기준 vs 회계연도 기 + 준 비교 후 부족분 보전)을 반드시 검토 필 + + +## 페이지 134 - 카드관리 +**버전**: D1.3 | **경로**: `기준정보> 카드관리` + +**Description:** + +*. 카드관리 + - 카드사 코드, 카드 인증 정보, 비밀번호를 + 바로빌 API에 전달하여 카드 내역 자동 수집 + - 연동 성공 시 해당 카드의 사용 내역이 자 + 동으로 시스템에 반영됨 +1. 카드 등록 버튼 + - 클릭: 카드 상세 화면으로 이동 (등록 화면) +2. 삭제 버튼 + - 클릭: “선택하신 N개의 카드를 정말 삭제 + 하시겠습니까?" 확인 팝업 표시 + - 확인 시 해당 카드 삭제 처리 + - 삭제된 카드의 과거 사용 내역은 보존 +3. 수정 버튼 + - 클릭: 카드 상세 화면으로 이동 +4. 삭제 버튼 + - 클릭: “카드를 정말 삭제하시겠습니까?" 확 + 인 팝업 표시 + - 확인 시 해당 카드 삭제 처리 + - 삭제된 카드의 과거 사용 내역은 보존 + + +## 페이지 135 - 카드 상세 +**버전**: D1.3 | **경로**: `기준정보> 카드관리> 카드 상세` + +**Description:** + +1. 카드 비밀번호 앞 2자리 인풋박스 + - 입력 시 마스킹 처리 +2. 상태 셀렉트 박스 + - 종류: 사용, 정지 + - 정지 시 해당 카드의 자동 조회 중단 +3. 사용자 정보 셀렉트 박스_검색 + - 종류: 부서명 / 이름/ 직책 + - 선택 시 해당 카드의 사용자로 설정 + + +## 페이지 136 - 계좌관리 +**버전**: D1.3 | **경로**: `기준정보> 계좌관리` + +**Description:** + +*. 계좌관리 + - 계좌 인증 정보, 비밀번호(빠른 조회 서비 + 스)를 바로빌 API에 전달하여 계좌 내역 자 + 동 수집 + - 연동 성공 시 해당 계좌의 사용 내역이 자 + 동으로 시스템에 반영됨 + - 해당 테넌트는 은행에서 빠른 조회 서비스 + 를 사전 등록 필수 +1. 계좌 등록 버튼 + - 클릭: 계좌 상세 화면으로 이동 (등록 화면) +2. 삭제 버튼 + - 클릭: “선택하신 N개의 계좌를 정말 삭제 + 하시겠습니까?" 확인 팝업 표시 + - 확인 시 해당 계좌 삭제 처리 + - 삭제된 계좌의 과거 사용 내역은 보존 +3. 수정 버튼 + - 클릭: 계좌 상세 화면으로 이동 +4. 삭제 버튼 + - 클릭: “계좌를 정말 삭제하시겠습니까?" 확 + 인 팝업 표시 + - 확인 시 해당 계좌 삭제 처리 + - 삭제된 계좌의 과거 사용 내역은 보존 + + +## 페이지 137 - 계좌 상세 +**버전**: D1.3 | **경로**: `기준정보> 계좌관리> 계좌 상세` + +**Description:** + +1. 계좌 비밀번호 (빠른 조회 서비스) 인풋박스 + - 입력 시 마스킹 처리 +2. 상태 셀렉트 박스 + - 종류: 사용, 정지 + - 정지 시 해당 계좌의 자동 조회 중지 + + +## 페이지 138 - 계좌 상세 +**버전**: D1.3 | **경로**: `기준정보> 계좌관리> 계좌 상세` + +**Description:** + +1. 계좌 비밀번호 (빠른 조회 서비스) 인풋박스 + - 입력 시 마스킹 처리 +2. 상태 셀렉트 박스 + - 종류: 사용, 정지 + - 정지 시 해당 계좌의 자동 조회 중지 + + +## 페이지 139 - 팝업관리 +**버전**: D1.3 | **경로**: `기준정보> 팝업관리` + +**Description:** + +1. 팝업 등록 버튼 + - 클릭: 팝업 상세 화면으로 이동 + + +## 페이지 140 - 팝업 상세 +**버전**: D1.3 | **경로**: `기준정보> 팝업관리> 팝업 상세` + +**Description:** + +1. 대상 셀렉트 박스 + - 종류: 전사, 부서명, … + - 디폴트: 전사 +2. 기간 설정 영역 + - 노출 기간 설정 + - (3) 사용함 상태여도 해당 기간이 아닐 경 + 우 팝업 미노출 +3. 상태 라디오 버튼 + - 종류: 사용함, 사용안함 + - 디폴트: 사용안함 + + +## 페이지 141 - 게시판관리 +**버전**: D1.3 | **경로**: `기준정보> 게시판관리` + +**Description:** + +1. 게시판관리 + - 모든 테넌트 디폴트: 공지사항, 나의 게시 + 글 (수정, 삭제 불가) +2. 게시판 등록 버튼 + - 클릭: 게시판관리 상세 화면으로 이동 + + +## 페이지 142 - 리 상세 +**버전**: D1.3 | **경로**: `기준정보> 게시판관리> 게시판관` + +**Description:** + +1. 대상 셀렉트 박스 + - 종류: 전사, 부서명, … + - 디폴트: 전사 + 게시판 정보 * + 전사 ▼ + 대상 + 등록 + 게시판명을 입력해주세요 + 게시판명 + 2025-09-09 12:20 + + +## 페이지 143 - 알림설정 +**버전**: D1.3 | **경로**: `기준정보> 알림설정` + +**Description:** + +1. 전체 알림 설정 버튼 + - 클릭: ON/OFF 토글 + - 디폴트: OFF 상태 +2. 개별 알림 설정 버튼 + - 클릭: ON/OFF 토글 + - 디폴트: OFF 상태 +3. 알림 소리 선택 셀렉트 박스 + - 종류: 기본 알림음, SAM 보이스, …, 무음 + (샘 관리자에 등록된 음원목록) +3-1. 미리듣기 버튼 + - 클릭: 해당 음원 재생/일시정지 토글 +4. 하위 알림 설정 체크박스 + - 클릭: 체크 설정/해제토글 + - 디폴트: 해제 +5. 항목 설정 버튼 + - 클릭: 항목 설정_알림 팝업 표시 + 공지 알림 +  이메일 + 공지사항 알림 + 알림설정 + 알림 설정을 관리합니다 + 저장 + - 근무관리 + + +## 페이지 144 - - +**버전**: D1.3 + +**Description:** + +1. 유형별 알림 설정 영역 + - 근무관리 + 거래처 알림 + 신규 업체 등록 알림 + 기준정보> 알림설정 + 알림설정 + + +## 페이지 145 - - +**버전**: D1.3 + +**Description:** + +1. 유형별 알림 설정 영역 + - 근무관리 + 기준정보> 알림설정 + 알림설정 + + +## 페이지 146 - 알림설정 +**버전**: D1.3 | **경로**: `-` + +**Description:** + +1. 유형별 알림 설정 영역 + + +## 페이지 147 - 알림설정 +**버전**: D1.3 | **경로**: `-` + +**Description:** + +1. 유형별 알림 설정 영역 + + +## 페이지 148 - ON +**버전**: D1.3 | **경로**: `-` + +**Description:** + +1. 전체 설정 ON/OFF 버튼 + - 클릭: 설정 ON/OFF 토글 + - 디폴트: 설정 OFF 상태 +2. 개별 설정 ON/OFF 버튼 + - 클릭: 설정 ON/OFF 토글 + - 디폴트: 설정 OFF 상태 + + +## 페이지 149 - ON +**버전**: D1.3 | **경로**: `-` + +**Description:** + +1. 전체 설정 ON/OFF 버튼 + - 클릭: 설정 ON/OFF 토글 + - 디폴트: 설정 OFF 상태 +2. 개별 설정 ON/OFF 버튼 + - 클릭: 설정 ON/OFF 토글 + - 디폴트: 설정 OFF 상태 + + +--- + +# 계정정보 + + +## 페이지 151 - - +**버전**: D1.3 + +**Description:** + +1. 업체별 신용평가 및 보고서 검색? +2. 업체별 보고서 및 분석 상세 제공? + + +--- + +# 회사정보 + + +## 페이지 153 - Description +**버전**: D1.3 + +**Description:** + +1. 탈퇴 버튼 + - 테넌트 마스터가 아닐 경우에만 버튼 활성 + 화 + - 클릭: “정말 탈퇴하시겠습니까?” 확인 + Alert 표시, 확인 버튼 클릭 시 탈퇴 처리 (모 + 든 테넌트에서 탈퇴처리, SAM 탈퇴 처리) +2. 사용중지 버튼 + - 테넌트 마스터가 아닐 경우에만 버튼 활성 + 화 + - 클릭: “정말 사용중지하시겠습니까?” 확인 + Alert 표시, 확인 버튼 클릭 시 사용중지 처 + 리 (해당 테넌트의 사용중지처리) +3. 변경 버튼 + - 클릭: 비밀번호 설정화면으로 이동 + + +## 페이지 154 - Description +**버전**: D1.3 + +**Description:** + +*. - 테넌트 마스터에게만 표시 +1. 회사 추가 + - 클릭: 회사 추가 팝업표시 +2. 회사 정보 + - 운영(영업)에서 입력된 정보 표시, 수정 가 + + +--- + +# 구독관리 + + +## 페이지 156 - 회사 추가 팝업 +**버전**: D1.3 | **경로**: `회사정보> 회사 추가 팝업` + +**Description:** + +1. 사업자등록번호 인풋박스 + - 숫자만 가능, 10자리 +2. 다음 버튼 + - 클릭: + 1) 바로빌 사업자등록번호 조회 후 + 사용 불가 경우 + : “휴폐업 상태인 사업자입니다.” + 알림 Alert 표시 + 2) 바로빌 사업자등록번호 조회 후 + 사용 가능한 경우 + [1] 테넌트 등록된 사업자등록번호일 경우, + 테넌트 등록 전이어도 다른 영업사원이 + 등록했을 경우에는 사업자등록번호 + 사용 불가 (어드민에서는 해제 가능) + : “등록된 사업자등록번호 입니다.” + 알림 Alert 표시 + [2] 등록되지 않은 사업자등록번호일 경우 + : “매니저에게 회사 추가 신청 알림을 + 발송했습니다. 연락을 기다려주세요.” + 알림 Alert 표시, 매니저에게 알림 처리 + + +## 페이지 157 - Description +**버전**: D1.3 + +**Description:** + +*. - 테넌트 마스터에게만 표시 +1. 자료 내보내기 버튼 + - 클릭: 자료 다운로드 처리 +2. 서비스 해지 버튼 + - 클릭: “모든 데이터가 삭제되며 복구할 수 + 없습니다. 정말 서비스를 해지하시겠습니 + 까?” 확인 Alert 표시, 확인 버튼 클릭 시 서 + 비스 해지 처리 +3. 구독 정보 영역 + - 월 구독 형태 + - 각 용량 한도는 추후 확정 + + +## 페이지 158 - Description +**버전**: D1.3 + +**Description:** + +*. - 테넌트 마스터에게만 표시 +1. 결제내역 표시 + - 최신순 정렬 +2. 거래명세서 버튼 + - 클릭: 문서 상세_거래명세서 팝업 표시 + + +## 페이지 159 - 공지사항 +**버전**: D1.3 | **경로**: `고객센터> 공지사항` + +**Description:** + +*. SAM 공지사항 +1. 게시글 정보 영역 + - 항목: 번호(상단 노출 아이콘 또는 번호), + 제목, 작성자, 등록일, 조회수 + - 클릭: 게시글 상세 화면으로 이동 + + +## 페이지 160 - 세 +**버전**: D1.3 | **경로**: `고객센터> 공지사항> 공지사항 상` + +**Description:** + +*. SAM 공지사항 + + +--- + +# 고객센터 + + +## 페이지 162 - 이벤트 상세 +**버전**: D1.3 | **경로**: `고객센터> 이벤트> 이벤트 상세` + +**Description:** + +*. SAM 이벤트 + + +## 페이지 163 - FAQ +**버전**: D1.3 | **경로**: `고객센터> FAQ` + +**Description:** + +*. SAM FAQ +1. FAQ 탭 + - 종류: 전체, 카테고리명, … + - 디폴트: 전체 +2. FAQ 목록 + - 디폴트: 답변 영역 닫힘 + - 클릭: 답변 영역 열림/닫힘 토글 +3. 답변 영역 + - 클릭: 답변 닫힘 + + +## 페이지 164 - 1:1 문의 +**버전**: D1.3 | **경로**: `고객센터> 1:1 문의` + +**Description:** + +1. 문의 등록 버튼 + - 클릭: 1:1 문의 상세_등록 화면으로 이동 +2. 상담분류 필터 셀렉트 박스 + - 종류: 전체, 문의하기, 신고하기, 건의사항, + 서비스 오류 + - 디폴트: 전체 +3. 상태 필터 셀렉트 박스 + - 종류: 전체, 답변대기, 답변완료 + - 디폴트: 전체 + + +## 페이지 165 - 세 +**버전**: D1.3 | **경로**: `고객센터> 1:1 문의> 1:1 문의 상` + +**Description:** + +1. 상담분류 셀렉트 박스 + - 종류: 문의하기, 신고하기, 건의사항, 서비 + 스 오류 + - 디폴트: 문의하기 + + +## 페이지 166 - 세 +**버전**: D1.3 | **경로**: `고객센터> 1:1 문의> 1:1 문의 상` + +**Description:** + +1. 문의영역 정보 +2. 수정 버튼 + - 답변완료 후에는 수정 버튼 비활성화 + + +## 페이지 167 - Description +**버전**: D1.3 + +**Description:** + +1. 댓글 정보 영역 + - 항목: 프로필 이미지, 이름, 댓글 내용, 등 + 록일시 표시 diff --git a/dev/dev_plans/SAM_ERP_회계관리_Storyboard_D1.6.md b/dev/dev_plans/SAM_ERP_회계관리_Storyboard_D1.6.md new file mode 100644 index 0000000..1ab7db7 --- /dev/null +++ b/dev/dev_plans/SAM_ERP_회계관리_Storyboard_D1.6.md @@ -0,0 +1,1288 @@ +# SAM ERP 회계관리 스토리보드 D1.6 + +> **작성일**: 2026-02-20 +> **버전**: D1.6 +> **상태**: 프론트 작성 +> **원본**: `SAM_ERP_회계관리_Storyboard_D1.6_260220.pdf` (65페이지) + +--- + +## 문서 이력 + +| 날짜 | 버전 | 주요 내용 | 상세 | +|------|------|----------|------| +| 2026-02-13 | D1.5 | 프론트 작성 | 세금계산서 관리, 계좌 입출금 내역, 계좌 관리, 상품권 관리, 바로빌 연동 수정 및 추가 | +| 2026-02-20 | D1.6 | 프론트 작성 | 거래처 관리(사업자등록증 OCR), 일일일보, 대시보드(생산, 시공), 이관 기초자료, 달력 관리, 즐겨찾기, 신용평가 수정 및 추가 | + +--- + +## 메뉴 구조 + +``` +SAM ERP +├── 로그인 +├── 회원가입 +├── 대시보드 +├── MES +│ ├── 판매관리 +│ ├── 구매관리 +│ ├── 발주관리 +│ ├── 공사관리 +│ ├── 생산관리 +│ ├── 품질관리 +│ ├── 자재관리 +│ ├── 장비관리 +│ └── 차량관리 +├── 인사관리 +├── 전자결재 +├── 게시판 +├── 회계관리 ★ (본 문서 범위) +│ ├── 거래처 관리 +│ ├── 세금계산서 발행 +│ ├── 세금계산서 관리 +│ ├── 계좌 입출금 내역 +│ ├── 카드 사용 내역 +│ ├── 상품권 관리 +│ ├── 일반 전표 입력 +│ └── 일일일보 +├── 기준정보 ★ (본 문서 범위) +│ ├── 바로빌 연동 관리 +│ ├── 계좌 관리 +│ ├── 카드 관리 +│ ├── 달력 관리 +│ └── 이관 기초자료 +├── 보고서 및 분석 +└── 운영 + ├── 회사정보 + ├── 계정정보 + ├── 구독관리 + ├── 결제내역 + └── 고객센터 +``` + +--- + +## 화면 목록 (페이지 인덱스) + +| 페이지 | 경로 | 화면명 | +|--------|------|--------| +| 4 | 공통 | 섹션 구분 | +| 5 | 공통 | 즐겨찾기 | +| 6 | 대시보드 | 섹션 구분 | +| 7 | 대시보드 | 대시보드 (자금 현황, 오늘의 이슈, AI 리포트) | +| 8 | 대시보드 | 대시보드 (매출 현황) | +| 9 | 대시보드 | 대시보드 (매입 현황) | +| 10 | 대시보드 | 대시보드 (생산 현황) | +| 11 | 대시보드 | 대시보드 (시공 현황, 미출고 내역) | +| 12 | 대시보드 | 대시보드 (근태 현황) | +| 13-14 | 대시보드 > 항목 설정 팝업 | 항목 설정_대시보드 팝업 | +| 15 | 회계관리 | 섹션 구분 | +| 16 | 회계관리 > 거래처 관리 | 거래처 관리 (목록) | +| 17-18 | 회계관리 > 거래처 관리 > 거래처 상세 | 거래처 상세 (등록/수정) | +| 19 | 회계관리 > 거래처 관리 > 거래처 상세 | 신용분석 리포트 팝업 | +| 20 | 회계관리 > 세금계산서 발행 | 세금계산서 발행 (목록) | +| 21-22 | 회계관리 > 세금계산서 발행 | 세금계산서 발행_확장 (발행 입력) | +| 23 | 회계관리 > 세금계산서 발행 | 공급자 기초정보 설정 팝업 | +| 24 | 회계관리 > 세금계산서 발행 | 거래처 검색 팝업 | +| 25 | 회계관리 > 세금계산서 관리 | 세금계산서 관리 (매출) | +| 26 | 회계관리 > 세금계산서 관리 | 세금계산서 관리 (매입) | +| 27 | 회계관리 > 세금계산서 관리 | 세금계산서 수기 입력 팝업 | +| 28 | 회계관리 > 세금계산서 관리 | 카드 내역 불러오기 팝업 | +| 29 | 회계관리 > 세금계산서 관리 | 분개 수정 팝업 | +| 30 | 회계관리 > 계좌 입출금 내역 | 계좌 입출금 내역 (목록) | +| 31 | 회계관리 > 계좌 입출금 내역 | 입출금 수기 입력 팝업 | +| 32 | 회계관리 > 카드 사용 내역 | 카드 사용 내역 (목록) | +| 33 | 회계관리 > 카드 사용 내역 | 카드사용 수기 입력 팝업 | +| 34 | 회계관리 > 카드 사용 내역 | 거래 분개 팝업 | +| 35 | 회계관리 > 상품권 관리 | 상품권 관리 (목록) | +| 36 | 회계관리 > 상품권 관리 > 상품권 상세 | 상품권 상세 (등록/수정) | +| 37 | 회계관리 > 일반 전표 입력 | 일반 전표 입력 (목록) | +| 38 | 회계관리 > 일반 전표 입력 | 계정과목 설정 팝업 | +| 39 | 회계관리 > 일반 전표 입력 | 수기 전표 입력 팝업 | +| 40 | 회계관리 > 일반 전표 입력 | 분개 수정 팝업 | +| 41 | 기준정보 | 섹션 구분 | +| 42 | 기준정보 > 바로빌 연동 관리 | 바로빌 연동 관리 | +| 43 | 기준정보 > 바로빌 연동 관리 | 바로빌 로그인 정보 등록 팝업 | +| 44 | 기준정보 > 바로빌 연동 관리 | 바로빌 회원가입 정보 등록 팝업 | +| 45 | 기준정보 > 바로빌 연동 관리 | 은행 빠른조회 서비스 등록 팝업 | +| 46 | 기준정보 > 계좌 관리 | 계좌 관리 (목록) | +| 47 | 기준정보 > 계좌 관리 > 계좌 상세 | 계좌 상세_은행 | +| 48 | 기준정보 > 계좌 관리 > 계좌 상세 | 계좌 상세_대출 | +| 49 | 기준정보 > 계좌 관리 > 계좌 상세 | 계좌 상세_증권 | +| 50 | 기준정보 > 계좌 관리 > 계좌 상세 | 계좌 상세_보험_단체보험 | +| 51 | 기준정보 > 계좌 관리 > 계좌 상세 | 계좌 상세_보험_화재보험 | +| 52 | 기준정보 > 계좌 관리 > 계좌 상세 | 계좌 상세_보험_CEO보험 | +| 53 | 기준정보 > 카드 관리 | 카드 관리 (목록) | +| 54 | 기준정보 > 카드 관리 > 카드 상세 | 카드 상세 | +| 55 | 기준정보 > 달력 관리 | 달력 관리 (달력 뷰) | +| 56 | 기준정보 > 달력 관리 | 달력 관리 (목록 뷰) | +| 57 | 기준정보 > 달력 관리 | 달력 상세 팝업 | +| 58 | 기준정보 > 달력 관리 | 대량 등록 팝업 | +| 59-60 | 기준정보 > 이관 기초자료 | 이관 기초자료 (거래처 탭) | +| 61 | 기준정보 > 이관 기초자료 | 이관 기초자료_거래처 CSV 스펙 | +| 62 | 기준정보 > 이관 기초자료 | 이관 기초자료_거래 내역 CSV 스펙 | +| 63 | 기준정보 > 이관 기초자료 | 이관 기초자료_계좌 내역 CSV 스펙 | +| 64 | 기준정보 > 이관 기초자료 | 이관 기초자료_세금계산서 내역 CSV 스펙 | +| 65 | 기준정보 > 이관 기초자료 | 이관 기초자료_업로드 이력 | + +--- + +## 1. 공통 + +### 1.1 즐겨찾기 (P5) + +**경로**: 공통 (사이드바) + +**기능 설명**: + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 즐겨찾기 버튼 | 메뉴명에 마우스 롤 오버 시 표시. 즐겨찾기 설정 상태일 경우 상시 표시. 클릭: 즐겨찾기 설정/해제 토글. 디폴트: 해제 상태 | +| 2 | 즐겨찾기 폴더 버튼 | 클릭: 즐겨찾기 설정 목록 표시 | + +**사이드바 메뉴 구조** (회계관리 하위): +- 거래처관리 +- 세금계산서발행 +- 세금계산서관리 +- 계좌입출금내역 +- 카드사용내역 +- 상품권관리 +- 일반전표입력 +- 일일일보 + +--- + +## 2. 대시보드 + +### 2.1 대시보드 - 메인 (P7) + +**경로**: 대시보드 +**설명**: 종합 정보를 조회합니다 + +**기능 설명**: + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 항목 설정 버튼 | 클릭: 항목 설정_대시보드 팝업 표시 | +| 2 | 오늘의 이슈 영역 | 당일 이슈 발생 시 알림 처리. 목록 길 경우 영역 내 페이지네이션. 알림 상태에서 즉시 승인/보류 처리 가능 | +| 3 | 필터 셀렉트 박스 | 종류: 전체, 수주 성공, 추심 이슈, 적정 재고, 결재 요청, 세금 신고, 신규 업체 등록, 근태, 발주 완료. 디폴트: 전체. 숫자도 함께 표시 | +| 4 | 이슈 목록 | 클릭: 해당 상세 화면으로 이동. 화면 가로 길이에 따라 4, 3, 2, 1열로 반응형 표시 | +| 5 | 일일일보 영역 | 현금성 자산합계 표시. 클릭: 일일일보 화면으로 이동 | +| 6 | 매출채권 잔액 영역 | 미수금 잔액 합계 표시. 클릭: 미수금 현황 화면으로 이동 | +| 7 | 매입채무 잔액 영역 | = 세금계산서 매입 합계 - 거래처별 일반전표 출금 합계 (또는 거래처별 미지급금 합계) | +| 8 | AI 리포트 | 핵심 키워드 강조 표시 (빨간색: 경고, 주황: 주의, 녹색: 긍정, 파랑: 양호) | + +**이슈 케이스**: +- 신규 업체 등록 +- 재고 미달 알림 +- 채권 추심 등록, 상태 변경 +- 발주, 수주 등록 +- 지출결의서 등 전자결재 상신 +- 세금 신고 알림 등 + +**자금 현황 카드** (예시 데이터): +- 일일일보: 30.5억원 +- 매출채권 잔액: 30.5억원 +- 매입채무 잔액: 30.5억원 +- 운영자금 잔여: 6.2개월 + +**AI 리포트 예시**: +- "어제 3.5억원 출금했습니다. 최근 7일 평균 대비 2배 이상으로 점검이 필요합니다." +- "10.2억원이 입금되었습니다. 대한건설 선수금 입금이 주요 원인입니다." +- "총 현금성 자산이 300.2억원입니다. 월 운영비용 대비 18개월분이 확보되어 안정적입니다." + +--- + +### 2.2 대시보드 - 매출 현황 (P8) + +**기능 설명**: + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 거래처 필터 셀렉트 박스 | 검색 & 다중 선택. 종류: 전체, 매출 거래처명. 디폴트: 전체 | +| 2 | 정렬 셀렉트 박스 | 종류: 최신순, 등록순, 금액 높은순, 금액 낮은순. 디폴트: 최신순 | + +**표시 정보**: +- 누적 매출 금액 +- 목표 대비 달성률 (%) +- 전년 동기 대비 증감률 (%) +- 당월 매출 금액 +- 거래처별 매출 (차트) +- 월별 매출 추이 (1~7월 차트) +- 당월 매출 내역 테이블: No., 매출일, 거래처, 매출금액 + +--- + +### 2.3 대시보드 - 매입 현황 (P9) + +**기능 설명**: + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 거래처 필터 셀렉트 박스 | 검색 & 다중 선택. 종류: 전체, 매입 거래처명. 디폴트: 전체 | +| 2 | 정렬 셀렉트 박스 | 종류: 최신순, 등록순, 금액 높은순, 금액 낮은순. 디폴트: 최신순 | + +**표시 정보**: +- 누적 매입 금액 +- 미결제 금액 +- 전년 동기 대비 증감률 (%) +- 자재 유형별 구매 비율 (파이 차트: 원자재 55%, 부자재 35%, 소모품 10%) +- 월별 매입 추이 차트 +- 당월 매입 내역 테이블: No., 매출일, 거래처, 매입금액 + +--- + +### 2.4 대시보드 - 생산 현황 (P10) + +**기능 설명**: + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 생산 현황 탭 | 종류: 스크린 공정, 슬랫 공정, 절곡 공정. 디폴트: 스크린 공정 | +| 2 | 요약 정보 | 선택한 공정별 요약 정보 표시 (전체 작업, 할일, 작업중, 완료) | +| 3 | 수주 목록 | 클릭: 작업자 화면으로 이동 (해당 수주 작업 선택 상태). 긴급/우선/일반 구분 | +| 4 | 작업자 현황 목록 | 작업자별 당일 생산 현황 표시 (작업중/작업대기 상태, 완료 건수) | +| 5 | 출고 현황 정보 | 클릭: 출고 목록 화면으로 이동 (해당 기간 설정 상태). 예상 출고 7일/30일 이내, 건수 표시 | + +--- + +### 2.5 대시보드 - 시공 현황 (P11) + +**기능 설명**: + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 거래처 필터 셀렉트 박스 | 검색 & 다중 선택. 종류: 전체, 매출 거래처명. 디폴트: 전체 | +| 2 | 정렬 셀렉트 박스 | 종류: 납기일 가까운순, 납기일 먼순, 잔량 많은순, 잔량 적은순. 디폴트: 납기일 가까운순 | +| 3 | 시공 현황별 요약 정보 | 시공 진행(7일 이내), 시공 완료(7일 이내) 건수. 클릭: 시공관리 화면으로 이동 | +| 4 | 시공 상세 목록 | 클릭: 해당 시공 상세 화면으로 이동. 컬럼: No., 로트번호, 현장명, 수주처, 잔량, 납기일(D-N) | + +**미출고 내역 테이블**: 시공진행 상태의 현장명, 로트번호 목록 + +--- + +### 2.6 대시보드 - 근태 현황 (P12) + +**기능 설명**: + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 근태 현황별 요약 정보 | 오늘 출근, 오늘 휴가, 어제 지각, 어제 결근 인원. 클릭: 근태관리 화면으로 이동 | +| 2 | 상태 필터 셀렉트 박스 | 종류: 전체, 출근, 휴가. 디폴트: 전체 | + +**근태 목록 테이블**: No., 부서, 직급, 이름, 상태(출근/휴가) + +--- + +### 2.7 항목 설정_대시보드 팝업 (P13-14) + +**경로**: 대시보드 > 항목 설정_대시보드 팝업 + +#### 2.7.1 접대비 한도 관리 + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 접대비 한도 관리 셀렉트 박스 | 종류: 연간, 반기, 분기, 월. 디폴트: 연간. 선택 값으로 총 한도를 분할 계산 | +| 1-1 | 기업 구분 셀렉트 박스 | 종류: 일반법인, 중소기업. 디폴트: 일반법인 | +| 1-2 | 기업 구분 방법 영역 | 클릭: 확대/축소 토글. 디폴트: 축소 상태 | + +**중소기업 판단 기준표**: + +| 조건 | 기준 | 충족 요건 | +|------|------|----------| +| 매출액 | 업종별 상이 | 업종별 기준 금액 이하 | +| 자산총액 | 5,000억원 | 미만 | +| 독립성 | 소유/경영 | 대기업 계열 아님 | + +> 3가지 조건 모두 충족 시 중소기업 + +**업종별 매출액 기준** (최근 3개년 평균): + +| 업종 분류 | 기준 매출액 | +|-----------|------------| +| 제조업 | 1,500억원 이하 | +| 건설업 | 1,000억원 이하 | +| 운수업 | 1,000억원 이하 | +| 도매업 | 1,000억원 이하 | +| 소매업 | 600억원 이하 | +| 정보통신업 | 600억원 이하 | +| 전문서비스업 | 600억원 이하 | +| 숙박/음식점업 | 400억원 이하 | +| 기타 서비스업 | 400억원 이하 | + +**접대비 기본한도 판정**: + +| 판정 | 조건 | 접대비 기본한도 | +|------|------|----------------| +| 중소기업 | 3가지 모두 충족 | 3,600만원 | +| 일반법인 | 하나라도 미충족 | 1,200만원 | + +#### 2.7.2 복리후생비 한도 관리 + +| # | 요소 | 설명 | +|---|------|------| +| 2 | 복리후생비 한도 관리 셀렉트 박스 | 종류: 연간, 반기, 분기, 월. 디폴트: 연간. 선택 값으로 총 한도를 분할 계산 | +| 3 | 계산 방식 셀렉트 박스 | 종류: 직원당 정액 금액 방식, 연봉 총액 X 비율 방식. 디폴트: 직원당 정액 금액 방식 | +| 4 | 직원당 정액 금액/월 인풋박스 | 직원당 정액 금액 방식일 경우에만 표시 | +| 5 | 비율 인풋박스 | 연봉 총액 X 비율 방식일 경우에만 표시 | +| 6 | 연간 복리후생비 | 계산된 연간 복리후생비 표시 | + +#### 2.7.3 설정 항목 ON/OFF 목록 (P14) + +| 항목 | 기본값 | +|------|--------| +| 접대비 현황 | ON | +| 카드/가지급금 관리 | ON | +| 복리후생비 현황 | ON | +| 미수금 상위 회사 현황 | ON | +| 미수금 현황 | ON | +| 채권추심 현황 | ON | +| 부가세 현황 | ON | +| 캘린더 | ON | +| 매출 현황 | ON | +| 일별 매출 내역 | ON | +| 매입 현황 | ON | +| 일별 매입 현황 | ON | +| 생산 현황 | ON | +| 출고 현황 | ON | +| 미출고 내역 | ON | +| 시공 현황 | ON | +| 근태 현황 | ON | + +--- + +## 3. 회계관리 + +### 3.1 거래처 관리 (P16) + +**경로**: 회계관리 > 거래처 관리 +**설명**: 거래처 정보 및 신용등급을 관리합니다 + +**기능 설명**: + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 거래처 등록 버튼 | 클릭: 거래처 상세_등록 화면으로 이동 | +| 2 | 구분 필터 셀렉트 박스 | 종류: 전체, 매출, 매입, 매입매출. 디폴트: 전체 | +| 3 | 사용 필터 셀렉트 박스 | 종류: 전체, 사용, 미사용. 디폴트: 전체 | +| 4 | 정렬 셀렉트 박스 | 종류: 최신순, 등록순. 디폴트: 최신순 | + +**기간 필터**: 전전월, 어제, 오늘, 전월, 당월, 당해년도 + +**목록 테이블 컬럼**: + +| 컬럼 | 설명 | +|------|------| +| No. | 순번 | +| 구분 | 매출, 매입, 매입매출 | +| 거래처명 | 회사명 | +| 매입 결제일 | 예: 10일 | +| 매출 결제일 | 예: 15일 | +| 신용등급 | 외부 신용평가 (AAA~D) | +| 거래등급 | 자사 기준 (A(우수)~E(위험)) | +| 미수금 | 금액 | +| 악성채권 | 악성채권 여부 | +| 상태 | 사용/미사용 | + +--- + +### 3.2 거래처 상세 (P17-18) + +**경로**: 회계관리 > 거래처 관리 > 거래처 상세 +**설명**: 거래처 상세 정보 및 신용등급을 관리합니다 + +#### 3.2.1 기본 정보 (P17) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 파일 등록 영역 (사업자등록증 OCR) | 클릭: 파일탐색기 팝업 표시. 사업자등록증 파일 등록 시 관련 정보 자동 입력 처리 | +| 2 | 구분 셀렉트 박스 | 종류: 매출, 매입, 매입매출 | +| 3 | 사용 셀렉트 박스 | 종류: 사용, 미사용 | + +**기본 정보 필드**: + +| 필드 | 설명 | +|------|------| +| 사업자등록증 | 파일 업로드 → OCR 자동 인식 | +| 거래처 코드 | 자동 생성 | +| 사업자등록번호 | OCR 또는 수기 입력 | +| 거래처명 | 회사명 | +| 대표자명 | 대표이사 | +| 업태 | 사업자등록증 업태 | +| 업종 | 사업자등록증 업종 | +| 거래처 유형 | 매출/매입/매입매출 | +| 상태 | 사용/미사용 | + +**연락처 정보 필드**: 주소(우편번호 찾기), 모바일, 전화번호, 팩스, 이메일 + +**담당자 정보 필드**: 담당자명, 담당자 전화 + +#### 3.2.2 신용/거래 정보 (P18) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 신용정보 보기 버튼 | 클릭: 신용분석 리포트 팝업표시 | +| 2 | 매입 결제일 셀렉트 박스 | 종류: 1일~31일, 말일. 디폴트: 10일. 거래처 유형이 매입 또는 매입매출일 경우 표시 | +| 3 | 매출 결제일 셀렉트 박스 | 종류: 1일~31일, 말일. 디폴트: 15일. 거래처 유형이 매출 또는 매입매출일 경우 표시 | +| 4 | 신용등급 인풋박스 | 외부 신용평가 등급. 예: AAA, AA, A, BBB, BB, B, CCC, CC, C, D | +| 5 | 거래등급 셀렉트 박스 | 종류: A(우수), B(양호), C(보통), D(주의), E(위험). 디폴트: A(우수). 자사 기준 거래처 평가 | +| 6 | 미수금 표시 영역 | 해당 거래처의 현재 미수금 합계 표시. 읽기 전용 | +| 7 | 연체 토글 | ON: 연체 상태, 연체일수 표시. OFF: 정상 상태. 미수금 현황에서 연체 설정과 연동 | +| 8 | 악성채권 토글 | ON: 악성채권으로 등록, 추심관리 목록에 표시. OFF: 정상. 디폴트: OFF | +| 9 | 미지급 표시 영역 | 해당 거래처에 대한 미지급금 합계 표시. 읽기 전용 | + +**추가 필드**: 입금계좌 은행, 계좌, 예금주, 세금계산서 이메일, 메모 + +--- + +### 3.3 신용분석 리포트 팝업 (P19) + +**경로**: 회계관리 > 거래처 관리 > 거래처 상세 > 신용분석 리포트 팝업 +**설명**: 현행화 (기존 화면 유지) + +--- + +### 3.4 세금계산서 발행 (P20-24) + +**경로**: 회계관리 > 세금계산서 발행 +**설명**: 바로빌 API를 통하여 전자세금계산서를 발행하고 관리합니다 + +#### 3.4.1 목록 화면 (P20) + +**상단 요약 카드**: 발행건수, 총 합계금액, 총 공급가액, 총 세액, 발행/전송 건수 + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 공급자 설정 버튼 | 클릭: 공급자 설정 팝업 표시 | +| 2 | 새로 발행 버튼 | 클릭: 전자세금계산서 발행 세부 입력 영역 표시 | +| 3 | 일자 셀렉트 박스 | 종류: 작성일자, 전송일자. 디폴트: 작성일자 | +| 4 | 상태 셀렉트 박스 | 종류: 전체, 작성중, 발행완료, 국세청 전송완료, 취소됨 | +| 5 | 정렬 셀렉트 박스 | 종류: 작성일자, 전송일자, 공급받는자, 합계금액. 디폴트: 작성일자 | +| 6 | 정렬2 셀렉트 박스 | 종류: 내림차순, 오름차순. 디폴트: 내림차순 | +| 7 | 조회 버튼 | 클릭: 조회 결과 표시 | + +**기간 필터**: 1주일, 1개월, 3개월, 날짜 범위 직접 선택 + +**거래처 검색**: 사업자 번호 또는 사업자명 + +**목록 테이블 컬럼**: 발행번호, 공급받는 자, 작성일자, 전송일자, 공급가액, 세액, 합계금액, 상태, 작업 + +#### 3.4.2 발행 세부 입력 (P21-22) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 검색 버튼 | 클릭: 거래처 검색 팝업표시, 선택 시 공급받는자 목록에 자동 입력 | +| 2 | 품목 추가 버튼 | 클릭: 품목 행 추가 | +| 3 | 전자세금계산서 발행 세부 입력 영역 | - | + +**공급자 영역 필드**: 등록번호, 종사업장, 상호, 대표자, 사업장주소, 업태, 종목, 담당자, 연락처, 이메일 + +**공급받는자 영역 필드**: 등록번호, 종사업장, 상호, 대표자, 사업장주소, 업태, 종목, 담당자, 연락처, 이메일, 세금계산서 수신 이메일 + +**품목 정보 테이블**: 월, 일, 품목, 수량, 단가, 공급가액, 세액, 합계, 과세유형(과세) + +**기타 필드**: 작성일자, 비고, 추가 메모사항 + +#### 3.4.3 공급자 기초정보 설정 팝업 (P23) + +| 필드 | 설명 | +|------|------| +| 사업자번호 | 회사정보 기본값 | +| 상호명 * | 필수 | +| 대표자명 * | 필수 | +| 업태 | - | +| 종목 | - | +| 주소 | - | +| 담당자명 | - | +| 연락처 | - | +| 이메일 | - | + +#### 3.4.4 거래처 검색 팝업 (P24) + +- 거래처명, 사업자번호, 담당자명으로 검색 +- 목록 표시: 거래처명, 사업자번호 + +--- + +### 3.5 세금계산서 관리 (P25-29) + +**경로**: 회계관리 > 세금계산서 관리 +**설명**: 홈택스에 신고된 세금계산서 매입/매출 내역을 조회하고 관리합니다 + +#### 3.5.1 매출 탭 (P25) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 일자 셀렉트 박스 | 종류: 작성일자, 전송일자. 디폴트: 작성일자 | +| 2 | 세금계산서 관리 탭 | 종류: 매출+수, 매입+수. 디폴트: 매출+수 | +| 3 | 수기 입력 버튼 | 클릭: 세금계산서 수기 입력 팝업표시 | + +**기간 필터**: 1분기, 2분기, 3분기, 4분기, 날짜 범위 직접 선택 + +**상단 요약 카드**: 매출 공급가액, 매출 세액, 매입 과세 공급가액, 매입 면세 공급가액, 매입 세액 + +**기간 요약**: 매출 합계(공급가액 + 세액), 매입 합계(공급가액 + 세액), 예상 부가세 + +**구분 표시**: 수기 세금계산서(색상 표시), 홈택스 연동 세금계산서(색상 표시) + +**목록 테이블 컬럼**: 작성일자, 발급일자, 거래처, 사업자번호(주민번호), 과세형태, 품목, 공급가액, 세액, 합계, 영수청구, 문서형태, 발급형태, 상태, 분개 + +**엑셀 다운로드** 기능 제공 + +#### 3.5.2 매입 탭 (P26) + +매출 탭과 동일 구조. 추가 기능: + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 분개 버튼 | 클릭: 분개 수정 팝업표시. 분개 저장 시 [분개 완료] 버튼으로 변경 | + +#### 3.5.3 세금계산서 수기 입력 팝업 (P27) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 구분 셀렉트 박스 | 종류: 매출, 매입. 디폴트: 매출 | +| 2 | 카드 내역 불러오기 버튼 | 클릭: 카드 내역 불러오기 팝업 표시. 선택 시 공급자 정보 및 금액 자동 입력, 수정 가능 | +| 3 | 과세유형 셀렉트 박스 | 종류: 과세, 영세, 면세. 디폴트: 과세 | + +**입력 필드**: 구분, 작성일자, 공급자명, 사업자 번호, 품목, 과세유형, 공급가액, 세액, 합계, 비고 + +#### 3.5.4 카드 내역 불러오기 팝업 (P28) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 카드 내역 목록 표시 | 기간 검색 후 목록 표시 | +| 2 | 선택 버튼 | 클릭: 세금계산서 수기 입력 팝업에 공급자 정보 및 금액 자동 입력 | + +**검색**: 가맹점/승인번호, 기간 검색 + +**목록 컬럼**: 날짜, 가맹점, 금액, 승인번호, 선택 + +#### 3.5.5 분개 수정 팝업 (P29) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 구분 영역 | 클릭: 차변/대변 토글 | +| 2 | 계정과목 셀렉트 박스 | 검색 가능. 종류: 계정과목 목록 | + +**세금계산서 정보**: 구분(매입/매출), 공급가액, 거래처, 세액 + +**분개 내역**: 구분(차변/대변), 계정과목, 금액, 합계 + +**버튼**: 분개 수정, 취소, 분개 삭제 + +--- + +### 3.6 계좌 입출금 내역 (P30-31) + +**경로**: 회계관리 > 계좌 입출금 내역 +**설명**: 계좌 입출금 내역을 조회하고 관리합니다 + +#### 3.6.1 목록 화면 (P30) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 저장 버튼 | 클릭: 인풋박스 영역의 변경값 저장 | +| 2 | 입출금 수기 입력 버튼 | 클릭: 입출금 수기 입력_등록 팝업 표시 | +| 3 | 계좌 입출금 내역 목록 | 클릭: 입출금 수기 입력 팝업 표시 | +| 4 | 수정 영역 | 수정된 영역에 하이라이트 표시 | +| 5 | 구분 셀렉트 박스 | 종류: 전체, 은행계좌, 대출계좌, 증권계좌, 보험계좌. 디폴트: 전체 | +| 6 | 금융기관 셀렉트 박스 | 종류: 전체, 금융기관명 목록. 디폴트: 전체 | + +**기간 필터**: 지난달, D-5월, D-4월, D-3월, D-2월, 이번달 + +**상단 요약 카드**: 입금, 출금, 잔액, 계좌 수, 거래 건수 + +**구분 표시**: 수기 계좌(색상 표시), 연동 계좌(색상 표시) + +**목록 테이블 컬럼**: No., 거래일시, 구분, 계좌정보(금융기관+계좌번호), 적요/내용, 입금, 출금, 잔액, 취급점, 상대계좌 예금주명 + +**엑셀 다운로드** 기능 제공 + +#### 3.6.2 입출금 수기 입력 팝업 (P31) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 계좌 셀렉트 박스 | 종류: 설정된 계좌 목록 | +| 2 | 수정 스티커 | 수정되었을 경우에만 표시 | +| 3 | 원본으로 복원 버튼 | 클릭: 원본 데이터로 변경, 수정 스티커 삭제 | + +**입력 필드**: + +| 필드 | 필수 | 설명 | +|------|------|------| +| 계좌 | * | 계좌 선택 | +| 거래일 | * | 날짜 선택 | +| 거래시간 | - | HH:MM:SS | +| 거래유형 | * | 입금/출금 | +| 금액 | * | 금액 입력 | +| 잔액 | - | 자동계산 | +| 적요 | - | 내용 | +| 상대계좌 예금주명 | - | - | +| 메모 | - | - | +| 취급점 | - | - | + +--- + +### 3.7 카드 사용 내역 (P32-34) + +**경로**: 회계관리 > 카드 사용 내역 +**설명**: 카드 사용 내역을 조회하고 관리합니다 + +#### 3.7.1 목록 화면 (P32) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 숨김 데이터 보기 버튼 | 클릭: 숨김 처리된 거래 영역 표시/숨김 토글. 디폴트: 숨김 | +| 2 | 저장 버튼 | 표 수정 사항 저장 처리 | +| 3 | 카드사용 수기 입력 버튼 | 클릭: 카드사용 수기 입력 팝업표시 | +| 4 | 카드사 셀렉트 박스 | 종류: 전체, 카드사명 목록. 디폴트: 전체 | +| 5 | 공제 셀렉트 박스 (필터) | 종류: 전체, 공제, 불공제. 디폴트: 전체 | +| 6 | 공제 셀렉트 박스 (행 내) | 종류: 공제, 불공제. 디폴트: 공제 | +| 7 | 텍스트 인풋박스 영역 | 인라인 수정 가능 | +| 8 | 숫자 인풋박스 영역 | 인라인 수정 가능 | +| 9 | 계정과목 셀렉트 박스 | 검색 가능. 종류: 계정과목 목록 | +| 10 | 분개 버튼 | 클릭: 거래 분개 팝업표시 | +| 11 | 숨김 버튼 | 클릭: 숨김 데이터 영역에 추가 | +| 12 | 복원 버튼 | 클릭: 원래 위치로 복원 | + +**기간 필터**: 지난달, D-5월, D-4월, D-3월, D-2월, 이번달 + +**상단 요약 카드**: 사용금액, 공제, 불공제, 등록된 카드 수 + +**구분 표시**: 수기 카드(색상 표시), 연동 카드(색상 표시) + +**목록 테이블 컬럼**: No., 사용일시, 카드사, 카드번호, 카드명, 공제, 사업자번호, 가맹점명/증빙/판매자상호, 내역, 합계금액, 공급가액, 세액, 계정과목, 분개, 숨김 + +**숨김 처리된 거래 영역** (별도 테이블): No., 사용일시, 카드사, 카드번호, 카드명, 사업자번호, 가맹점명, 합계금액, 숨김일시, 복원 + +**엑셀 다운로드** 기능 제공 + +#### 3.7.2 카드사용 수기 입력 팝업 (P33) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 카드 셀렉트 박스 | 종류: 설정된 카드 목록 (예: 신한카드 123123 카드명) | +| 2 | 공제 셀렉트 박스 | 종류: 공제, 불공제. 디폴트: 공제 | +| 3 | 계정과목 셀렉트 박스 | 검색 가능. 종류: 계정과목 목록 | + +**입력 필드**: + +| 필드 | 필수 | 설명 | +|------|------|------| +| 카드 선택 | * | 카드 셀렉트 | +| 사용일 | * | 날짜 | +| 사용시간 | - | HH:MM:SS | +| 승인유형 | * | 승인/취소 | +| 승인번호 | - | - | +| 가맹점명 | - | - | +| 사업자번호 | - | - | +| 공제여부 | * | 공제/불공제 | +| 계정과목 | - | 선택 | +| 증빙/판매자상호 | - | - | +| 내역 | - | - | +| 공급가액 | * | 금액 | +| 세액 | * | 금액 | +| 메모 | - | - | + +**합계 금액** = 공급가액 + 세액 (자동 계산 표시) + +#### 3.7.3 거래 분개 팝업 (P34) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 계정과목 셀렉트 박스 | 검색 가능. 종류: 계정과목 목록 | +| 2 | 공제 셀렉트 박스 | 종류: 공제, 불공제. 디폴트: 공제 | +| 3 | 분개 항목 추가 버튼 | 클릭: 분개 항목 영역 추가 | +| 4 | 삭제 버튼 | 클릭: 해당 분개 항목영역 삭제. 1개만 있을 경우 버튼 비활성화 | + +**거래 정보**: 가맹점, 사용일시, 공급가액, 세액, 합계금액 + +**분개 항목 필드**: 계정과목, 공제, 내역, 증빙/판매자상호, 공급가액, 세액, 합계금액, 내역, 메모 + +**분개 합계** 표시 + +--- + +### 3.8 상품권 관리 (P35-36) + +**경로**: 회계관리 > 상품권 관리 +**설명**: 상품권을 등록하고 관리합니다 + +> **상품권 접대비 기준**: +> 1. 50만원 미만: 일반 복리후생비/판촉비. 일반 경비로 처리 가능 +> 2. 50만원 이상: 접대비로 자동 분류. 사용처/수령인 기록 필수. 세법상 접대비 한도 관리 대상 + +#### 3.8.1 목록 화면 (P35) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 상품권 등록 버튼 | 클릭: 상품권 상세화면으로 이동 | +| 2 | 접대비 셀렉트 박스 | 종류: 전체, 해당, 해당없음. 디폴트: 전체 | +| 3 | 상태 셀렉트 박스 | 종류: 전체, 보유, 사용, 폐기. 디폴트: 전체 | + +**기간 필터**: 지난달, D-5월, D-4월, D-3월, D-2월, 이번달 + +**상단 요약 카드**: 전체 상품권 건수, 보유 상품권(건수/금액), 사용 상품권(건수/금액), 접대비 해당(건수/금액) + +**목록 테이블 컬럼**: No., 일련번호, 상품권명, 액면가, 구입일, 사용일, 접대비, 상태 + +#### 3.8.2 상품권 상세 (P36) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 액면가 인풋박스 | 50만원 이상 입력 시 필수 정보 표시 (사용처/수령인 등) | +| 2 | 구입처 셀렉트 박스 | 종류: 매입 거래처명 목록 | +| 3 | 구입목적 셀렉트 박스 | 종류: 판촉, 선물, 접대, 기타 | +| 4 | 상태 셀렉트 박스 | 종류: 보유, 사용, 폐기 | + +**기본 정보 필드**: 상품권명, 일련번호, 액면가, 구입처, 구입목적, 구입일, 접대비(해당/해당없음) + +**상품권 정보** (액면가 50만원 이상 필수): + +| 필드 | 설명 | +|------|------| +| 사용처/용도 | 내용 | +| 수령인 | 이름 | +| 수령인 소속 | 회사명 | +| 사용일 | 날짜 | +| 상태 | 보유/사용/폐기 | +| 비고 | - | + +--- + +### 3.9 일반 전표 입력 (P37-40) + +**경로**: 회계관리 > 일반 전표 입력 +**설명**: 계좌입출금내역을 기반으로 분개 전표를 생성합니다 + +#### 3.9.1 목록 화면 (P37) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 계정과목 설정 버튼 | 클릭: 계정과목 설정 팝업표시 | +| 2 | 수기 전표 입력 버튼 | 클릭: 수기 전표 입력 팝업표시 | +| 3 | 분개 버튼 | 클릭: 분개 수정 팝업표시 | + +**기간 필터**: 지난달, D-5월, D-4월, D-3월, D-2월, 이번달 + +**상단 요약 카드**: 전체 건수, 입금, 출금, 분개완료 건수, 미분개 건수 + +**구분 표시**: 수기 전표(색상 표시), 연동 전표(색상 표시) + +**목록 테이블 컬럼**: 날짜, 적요, 입금, 출금, 잔액, 분개 내역(차변/대변), 분개(차변 합계/대변 합계), 분개 버튼 + +**분개 내역 예시**: +``` +차 현금 6,000 + 대 외상매출금 6,000 + +차 현금 3,000 +차 복리후생비 3,000 + 대 외상매출금 6,000 +``` + +#### 3.9.2 계정과목 설정 팝업 (P38) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 분류 셀렉트 박스 (추가) | 종류: 자산, 부채, 자본, 수익, 비용. 디폴트: 자산 | +| 2 | 추가 버튼 | 클릭: 계정과목 행 추가 | +| 3 | 분류 셀렉트 박스 (필터) | 종류: 전체, 자산, 부채, 자본, 수익, 비용. 디폴트: 전체 | +| 4 | 상태 버튼 | 클릭: 사용중/미사용 토글 | +| 5 | 삭제 버튼 | 클릭: 해당 계정과목 삭제 처리 | + +**계정과목 추가 필드**: 코드(예: 101), 분류(자산/부채/자본/수익/비용), 계정과목명(예: 현금) + +**목록 테이블 컬럼**: 코드, 계정과목명, 분류, 상태, 작업(삭제) + +**검색**: 코드 또는 이름 검색 + +#### 3.9.3 수기 전표 입력 팝업 (P39) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 구분 영역 | 클릭: 차변/대변 토글 | +| 2 | 계정과목 셀렉트 박스 | 검색 가능. 종류: 계정과목 목록 | +| 3 | 거래처 셀렉트 박스 | 검색 가능. 종류: 거래처 목록 | +| 4 | 행 추가 버튼 | 클릭: 아래 위치에 행 추가 | + +**거래 정보 필드**: 전표일자 *, 적요, 전표번호(자동생성, 예: JE-20260213-002) + +**분개 내역 필드** (행 단위): 구분(차변/대변), 계정과목, 금액, 거래처, 적요 + +**합계**: 차변 합계, 대변 합계 + +#### 3.9.4 분개 수정 팝업 (P40) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 차변 합계 표시 | - | +| 2 | 대변 합계 표시 | - | +| 3 | 균형 표시 | 차변=대변이면 "대차 균형", 다르면 "차이: {금액}" 표시 | + +**거래 정보**: 날짜, 금액, 구분(입금/출금), 적요, 계좌, 전표 적요 + +**분개 내역 필드** (행 단위): 구분(차변/대변), 계정과목, 금액, 거래처, 적요 + +**버튼**: 분개 수정, 취소, 분개 삭제, 행추가 + +--- + +## 4. 기준정보 + +### 4.1 바로빌 연동 관리 (P42-45) + +**경로**: 기준정보 > 바로빌 연동 관리 +**설명**: 바로빌 연동 정보를 관리합니다 + +#### 4.1.1 메인 화면 (P42) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 바로빌 로그인 정보 등록 버튼 | 클릭: 바로빌 로그인 정보 등록 팝업 표시 | +| 2 | 바로빌 회원가입 정보 등록 버튼 | 클릭: 바로빌 회원가입 정보 등록 팝업 표시 | +| 3 | 은행 빠른조회 서비스 등록 버튼 | 클릭: 은행 빠른조회 서비스 등록 팝업 표시 | +| 4 | 계좌 연동 등록 버튼 | 바로빌 연동 정보 없으면 Alert, 있으면 바로빌 계좌 등록 팝업 표시 | +| 5 | 카드 연동 등록 버튼 | 바로빌 연동 정보 없으면 Alert, 있으면 바로빌 카드 등록 팝업 표시 | +| 6 | 공인인증서 등록 버튼 | 바로빌 연동 정보 없으면 Alert, 있으면 바로빌 공인인증서 등록 팝업 표시 | + +**연동 플로우**: + +``` +바로빌 연동 +├── 바로빌 회원인 경우 → 로그인 정보 등록 +├── 바로빌 비회원인 경우 → 회원가입 정보 등록 +├── 계좌 연동 (2단계) +│ ├── 1단계: 각 은행 인터넷뱅킹 접속 → 빠른조회/간편서비스 → 계좌 등록 +│ └── 2단계: 바로빌 연동 계좌 정보 등록 → 은행/계좌번호/비밀번호 → 조회 주기 설정 +├── 카드 연동 → 카드사/아이디/비밀번호 입력 +└── 공인인증서 등록 → 홈택스 세금계산서 연동용 +``` + +#### 4.1.2 바로빌 로그인 정보 등록 팝업 (P43) + +| 필드 | 필수 | 설명 | +|------|------|------| +| 바로빌 아이디 | * | Barobill_id | +| 비밀번호 | * | - | + +**버튼**: 등록하기 (바로빌 로그인 처리), 취소 + +#### 4.1.3 바로빌 회원가입 정보 등록 팝업 (P44) + +| 필드 | 필수 | 설명 | +|------|------|------| +| 사업자등록번호 | * | 123-12-12345 | +| 상호명 | * | 회사명 | +| 대표자명 | * | 홍길동 | +| 업태 | - | - | +| 업종 | - | - | +| 주소 | - | - | +| 바로빌 아이디 | * | Barobill_id | +| 비밀번호 | * | - | +| 담당자명 | - | - | +| 담당자 연락처 | - | - | +| 담당자 이메일 | - | - | + +**버튼**: 등록하기 (바로빌 회원가입 처리), 취소 + +#### 4.1.4 은행 빠른조회 서비스 등록 팝업 (P45) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 은행 셀렉트 박스 | 종류: 은행 목록. 디폴트: 첫번째 은행 | +| 2 | 구분 셀렉트 박스 | 종류: 기업, 개인. 디폴트: 기업 | +| 3 | 바로가기 버튼 | 클릭: 선택한 은행+구분에 해당하는 URL로 링크 | + +--- + +### 4.2 계좌 관리 (P46-52) + +**경로**: 기준정보 > 계좌 관리 +**설명**: 연동 계좌 및 수기 계좌를 등록하고 관리합니다 + +#### 4.2.1 목록 화면 (P46) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 수기 계좌 등록 버튼 | 클릭: 계좌 상세_등록 화면으로 이동 | +| 2 | 구분 셀렉트 박스 | 종류: 전체, 은행계좌, 대출계좌, 증권계좌, 보험계좌. 디폴트: 전체 | +| 3 | 금융기관 셀렉트 박스 | 종류: 전체, 금융기관명 목록. 디폴트: 전체 | + +**상단 요약 카드**: 전체 계좌, 국내/외환 계좌, 대출 계좌, 증권 계좌, 보험 계좌 (각 개수) + +**구분 표시**: 수기 계좌(색상 표시), 연동 계좌(색상 표시) + +**목록 테이블 컬럼**: No., 구분, 유형, 금융기관, 계좌번호, 계좌명, 상태(사용/중지) + +#### 4.2.2 계좌 상세_은행 (P47) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 구분 셀렉트 박스 | 종류: 은행계좌, 대출계좌, 증권계좌, 보험계좌 | +| 2 | 유형 셀렉트 박스 | 은행: 보통예금, 정기예금, 정기적금, 외화예금, 기타 | +| 3 | 사용 셀렉트 박스 | 종류: 사용, 중지 | +| 4 | 계좌 정보 영역 | 은행 계좌일 경우에만 표시 | + +**기본 정보 필드**: 계좌번호, 구분, 유형, 금융기관, 예금주, 계좌명(상품명), 상태 + +**계좌 정보 필드** (은행 전용): 시작일, 만기일, 이율, 계약금액, 이월잔액, 비고 + +#### 4.2.3 계좌 상세_대출 (P48) + +**기본 정보**: 은행과 동일 구조 +**유형**: 시설자금, 운영자금, 기타 + +**대출 정보 필드** (대출 전용): + +| 필드 | 설명 | +|------|------| +| 시작일 | 대출 시작일 | +| 만기일 | 대출 만기일 | +| 이율 | 이자율 (%) | +| 대출금액 | 총 대출 금액 | +| 대출잔액 | 현재 남은 잔액 | +| 상환 방식 | 원리금균등 등 | +| 이자 납입 주기 | 매월 등 | +| 거치 기간 | 개월 수 | +| 월 상환액 | 월 상환 금액 | +| 담보물 | 내용 | +| 비고 | - | + +#### 4.2.4 계좌 상세_증권 (P49) + +**유형**: 직접투자, 펀드, 신탁, 기타 + +**증권 정보 필드** (증권 전용): + +| 필드 | 설명 | +|------|------| +| 시작일 | 투자 시작일 | +| 만기일 | - | +| 수익율 | % | +| 투자금액 | 총 투자 금액 | +| 평가액 | 현재 평가 금액 | +| 비고 | - | + +#### 4.2.5 계좌 상세_보험_단체보험 (P50) + +**유형**: 단체보험 + +**보험 정보 필드**: + +| 필드 | 설명 | +|------|------| +| 시작일 | 계약 시작일 | +| 만기일 | 계약 만기일 | +| 이율 | - | +| 계약금액 | 총 계약 금액 | +| 해약환급금 | 현재 환급금 | +| 납입 주기 | 월납, 분기납, 반기납, 연납, 일시납 | +| 증권번호 | - | +| 가입 인원 | 명 | +| 1인당 보험료 | 금액 | +| 납입 주기당 보험료 | 금액 | +| 비고 | - | + +#### 4.2.6 계좌 상세_보험_화재보험 (P51) + +**유형**: 화재보험 + +**보험 정보 필드**: 단체보험과 유사. 추가 필드: + +| 필드 | 설명 | +|------|------| +| 보험 대상물 | 내용 | +| 대상물 주소 | 주소 | + +#### 4.2.7 계좌 상세_보험_CEO보험 (P52) + +**유형**: CEO 보험 + +**보험 정보 필드**: 단체보험과 유사. 추가 필드: + +| 필드 | 설명 | +|------|------| +| 피보험자 | 이름 (기본정보의 예금주 대신) | +| 수익자 | 이름 | + +--- + +### 4.3 카드 관리 (P53-54) + +**경로**: 기준정보 > 카드 관리 +**설명**: 연동 카드 및 수기 카드를 등록하고 관리합니다 + +#### 4.3.1 목록 화면 (P53) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 수기 카드 등록 버튼 | 클릭: 카드 상세_등록 화면으로 이동 | +| 2 | 카드사 셀렉트 박스 | 종류: 전체, 카드사명 목록. 디폴트: 전체 | +| 3 | 상태 셀렉트 박스 | 종류: 전체, 사용, 중지. 디폴트: 전체 | + +**상단 요약 카드**: 전체 카드 수, 총 한도, 사용금액, 잔여한도 + +**구분 표시**: 수기 카드(색상 표시), 연동 카드(색상 표시) + +**목록 테이블 컬럼**: No., 카드사, 카드번호, 카드명, 부서, 사용자, 사용현황(금액 + 사용률 %), 상태(사용/중지) + +#### 4.3.2 카드 상세 (P54) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 카드사 셀렉트 박스 | 종류: 카드사명 목록 | +| 2 | 종류 셀렉트 박스 | 종류: 신용카드, 체크카드 | +| 3 | 결제일 셀렉트 박스 | 종류: 매월 1일, 5일, 10일, 14일, 15일, 20일, 25일, 27일 | +| 4 | 상태 셀렉트 박스 | 종류: 사용, 중지 | +| 5 | 부서 셀렉트 박스 | 검색 가능. 종류: 부서 목록 | +| 6 | 사용자 셀렉트 박스 | 검색 가능. 종류: 선택 부서 사원 목록 | +| 7 | 품의서 작성 버튼 | 클릭: 문서 작성_품의서 화면으로 이동 (품의 사유에 현재 카드사, 카드번호, 카드명 표시) | + +> **선결제 신청 플로우**: 품의서 작성 → 결재선 승인 → 출금 처리 → 장표 등록 → 연동카드일 경우 잔여한도 반영 + +**기본 정보 필드**: 카드명, 종류, 카드사, 카드번호, 유효기간(년도/월), 카드 명의자, CSV + +**사용자 정보 필드**: 부서, 사용자, 직책 + +**한도 정보**: 총 한도, 사용 금액, 잔여한도, 결제일 + +**기타**: 메모, 상태, 선결제 신청, 품의서 작성 안내 + +--- + +### 4.4 달력 관리 (P55-58) + +**경로**: 기준정보 > 달력 관리 +**설명**: 달력을 관리합니다 + +#### 4.4.1 달력 뷰 (P55) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 달력 탭 | 종류: 달력, 목록. 디폴트: 달력 | +| 2 | 대량 등록 버튼 | 클릭: 대량 등록팝업 표시 | +| 3 | 달력 일정 등록 버튼 | 클릭: 달력 상세_등록팝업 표시 | +| 4 | 월별 달력 영역 | 클릭: 달력 상세 팝업 표시. 연간 달력 표시 (1~12월) | + +**상단 요약**: 등록 건수, 총 휴일 일수, 공휴일 건수 + +#### 4.4.2 목록 뷰 (P56) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 유형 필터 셀렉트 박스 | 종류: 전체, 공휴일, 임시휴일, 대체휴일, 세무일, 회사일정. 디폴트: 전체 | +| 2 | 달력 목록 | 클릭: 달력 상세 팝업 표시 | + +**목록 테이블 컬럼**: No., 유형, 일정명, 시작일, 종료일, 일수, 반복, 메모 + +#### 4.4.3 달력 상세 팝업 (P57) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 유형 셀렉트 박스 | 종류: 공휴일, 임시휴일, 대체휴일, 세무일, 회사일정 | +| 2 | 매년 반복 체크박스 | 클릭: 체크 설정/해제 토글. 디폴트: 해제. 체크 설정 시 매년 등록 | + +**입력 필드**: 일정명 *, 유형 *, 기간 *, 메모, 매년 반복 + +**버튼**: 수정, 삭제 + +#### 4.4.4 대량 등록 팝업 (P58) + +**입력 형식**: +- `YYYY-MM-DD 일정명` - 단일 일자 +- `YYYY-MM-DD~YYYY-MM-DD 일정명` - 기간 (일정) +- `YYYY-MM-DD 일정명 [유형]` - 유형 지정 (공휴일/세무일정/회사지정/대체휴일/임시휴일) + +**예시 입력**: +``` +2026-01-01 신정 +2026-01-28~2026-01-30 설날연휴 +2026-03-01 삼일절 +2026-05-05 어린이날 +2026-05-15 부처님오신날 +2026-06-06 현충일 +2026-08-15 광복절 +2026-10-03 개천절 +2026-10-05~2026-10-07 추석연휴 +2026-10-09 한글날 +2026-12-25 크리스마스 +``` + +**버튼**: {N건} 등록, 취소 + +--- + +### 4.5 이관 기초자료 (P59-65) + +**경로**: 기준정보 > 이관 기초자료 +**설명**: 이관 기초자료를 관리합니다 + +#### 4.5.1 메인 화면 (P59-60) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 이관 기초자료 탭 | 종류: 거래처, 거래 내역, 계좌 내역, 세금계산서 내역, 업로드 이력. 디폴트: 거래처 | +| 2 | 양식 다운로드 버튼 | 클릭: 등록된 양식 CSV 다운로드 | +| 3 | 파일 선택 버튼 | 클릭: 파일 탐색기 팝업. CSV 1개만 등록. 50MB 이하 | +| 4 | 파일 변환 버튼 | 클릭: CSV 데이터를 정보 등록 영역에 변환값 표시 | + +**파일 변환 후 상태** (P60): + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 파일명 버튼 | 클릭: 파일 다운로드 처리 | +| 2 | 전체/개별 체크박스 | 클릭: 체크 설정/해제 토글. 디폴트: 전체 설정 | +| 3 | 등록 버튼 | 파일변환 완료 & 체크 항목 있을 경우만 활성화. 클릭: 확인 Alert → 등록 처리 | +| 4 | 오류 하이라이트 | 오류 사항 색상 표시. 마우스 롤 오버 시 문구 표시 | + +#### 4.5.2 거래처 CSV 스펙 (P61) + +| 컬럼명 | 필수 | 타입 | 최대길이 | 입력형식/규칙 | 예시 | 검증 | +|--------|------|------|----------|--------------|------|------| +| 사업자등록번호 | O | 텍스트 | 12자 | NNN-NN-NNNNN (하이픈유무무관) | 123-45-67890 | 10자리숫자, 하이픈자동처리, 중복검사 | +| 거래처명 | O | 텍스트 | 100자 | 법인명 또는 상호명 | (주)한국건설 | 빈값불가, 앞뒤공백 자동 trim | +| 대표자명 | - | 텍스트 | 50자 | 대표이사 성명 | 김대표 | - | +| 거래처유형 | O | 텍스트 | 10자 | 매출처/매입처/기타 | 매출 | 3가지 값만 허용 (대소문자 무관) | +| 업태 | - | 텍스트 | 50자 | 사업자등록증 업태 | 건설업 | - | +| 업종 | - | 텍스트 | 50자 | 사업자등록증 종목 | 시설공사, 토목공사 | - | +| 우편번호 | - | 텍스트 | 5자 | 5자리 숫자 | 06134 | 숫자 5자리 | +| 주소 | - | 텍스트 | 200자 | 도로명 또는 지번 주소 | 서울시 강남구 테헤란로 123 | - | +| 상세주소 | - | 텍스트 | 100자 | 건물명, 층, 호 | 삼성빌딩 5층 501호 | - | +| 대표전화번호 | - | 텍스트 | 20자 | NNN-NNNN-NNNN | 02-1234-5678 | 하이픈 자동 포맷 | +| 팩스번호 | - | 텍스트 | 20자 | NNN-NNNN-NNNN | 02-1234-5679 | 하이픈 자동 포맷 | +| 담당자명 | - | 텍스트 | 50자 | 실무 담당자 이름 | 홍길동 | - | +| 담당자연락처 | - | 텍스트 | 20자 | 휴대폰 또는 직통번호 | 010-1234-5678 | 하이픈 자동 포맷 | +| 이메일 | - | 텍스트 | 100자 | name@domain.com | hk@hancon.co.kr | 이메일 형식 검증 | + +> 사업자등록번호 중복 상태일 경우 마우스 롤오버 시: "기존 거래처정보가 업데이트됩니다." 문구 표시 + +#### 4.5.3 거래 내역 CSV 스펙 (P62) + +| 컬럼명 | 필수 | 타입 | 최대길이 | 입력형식/규칙 | 예시 | 검증 | +|--------|------|------|----------|--------------|------|------| +| 거래유형 | O | 텍스트 | 10자 | 매출/매입 | 매출 | 2가지 값만 허용 | +| 일자 | O | 날짜 | - | YYYY-MM-DD (엑셀 날짜셀 가능) | 2025-12-31 | - | +| 거래처명 | O | 텍스트 | 100자 | 거래처에 등록된 이름과 매칭 | (주)한국건설 | 미등록 → 오류 | +| 사업자등록번호 | O | 텍스트 | 12자 | 등록된 거래처 자동 매칭 | 123-45-67890 | 미등록 → 오류 | +| 품목명N | - | 텍스트 | 100자 | 품목명 | 품목명 | - | +| 공급가액 | O | 숫자 | - | 양의정수 (콤마/원기호 자동 제거) | 10000000 | 0 이하 불가, 콤마 허용 | +| 부가세 | - | 숫자 | - | 미입력 시 공급가액 x 10% 자동계산 | 1000000 | 음수 불가, 빈값 = 자동계산 | +| 적요 | - | 텍스트 | 200자 | 거래 내용 설명 | 12월 기성금 청구 | - | + +> - 거래처 관리에 해당 거래처 등록 필수 +> - 부가세 미입력 시 자동계산 (공급가액 x 10%), 직접 입력 시 자동계산 무시 +> - 품목명~적요까지 추가 입력 가능 +> - 거래처 유효하지 않을 경우: "등록되지 않은 거래처입니다." 문구 표시 +> - 공급가액/부가세 양수 아닐 경우: "금액은 0보다 커야합니다." 문구 표시 + +#### 4.5.4 계좌 내역 CSV 스펙 (P63) + +| 컬럼명 | 필수 | 타입 | 최대길이 | 입력형식/규칙 | 예시 | 검증 | +|--------|------|------|----------|--------------|------|------| +| 거래일시 | O | 날짜 | - | YYYY-MM-DD HH:MM:SS | 2025-12-31 12:21:12 | - | +| 금융기관명 | O | 텍스트 | 30자 | 정식 은행명 (약어 자동 매칭) | 우리은행 | 등록된 은행 목록과 매칭 | +| 계좌번호 | O | 텍스트 | 30자 | 계좌번호 (하이픈 포함/제외 모두 가능) | 1005-301-123456 | 등록된 계좌와 매칭 | +| 적요 | - | 텍스트 | 200자 | 거래 내용 설명 | 기성금 입금 | - | +| 입금 | - | 숫자 | - | 양의정수 (콤마 자동 제거) | 5000000 | 0 이하 불가 | +| 출금 | - | 숫자 | - | 양의정수 (콤마 자동 제거) | 5000000 | 0 이하 불가 | +| 잔액 | O | 숫자 | - | 해당 거래 후 계좌 잔액 | 25000000 | 잔액 정합성 검증용 | +| 취급점 | - | 텍스트 | 100자 | 증미점 | 증미점 | - | +| 상대계좌예금주명 | - | 텍스트 | 20자 | 예금주명 | (주)한국건설 | - | + +> - 계좌 관리에 해당 계좌 등록 필수 +> - 금융기관명/계좌번호 유효하지 않을 경우: "등록되지 않은 계좌입니다." 문구 표시 +> - 잔액 정합성 유효하지 않을 경우: "잔액이 입출금 누적과 불일치합니다." 문구 표시 +> - 금액 양수 아닐 경우: "금액은 0보다 커야합니다." 문구 표시 + +#### 4.5.5 세금계산서 내역 CSV 스펙 (P64) + +| 컬럼명 | 필수 | 타입 | 최대길이 | 입력형식/규칙 | 예시 | 검증 | +|--------|------|------|----------|--------------|------|------| +| 발행유형 | O | 텍스트 | 10자 | 매출/매입 | 매출 | 2가지 값만 허용 | +| 작성일자 | O | 날짜 | - | 세금계산서 작성일 (발행일과 다를 수 있음) | 2025-12-31 | - | +| 발급일자 | O | 날짜 | - | YYYY-MM-DD | 2025-12-31 | - | +| 거래처 | O | 텍스트 | 100자 | 거래처에 등록된 이름과 매칭 | (주)한국건설 | 미등록 → 오류 | +| 사업자번호 | O | 텍스트 | 12자 | 등록된 거래처 자동 매칭 | 123-45-67890 | 미등록 → 오류 | +| 과세형태 | - | 텍스트 | 10자 | 과세/면세 | 과세 | 미입력 시 "과세" 기본값 | +| 품목 | - | 텍스트 | 200자 | 대표 품목/서비스명 | 시설공사 | - | +| 공급가액 | O | 숫자 | - | 양의정수 | 50000000 | 0 이하 불가 | +| 세액 | - | 숫자 | - | 미입력 시 공급가액 x 10% 자동 | 5000000 | - | +| 합계 | - | 숫자 | - | 합계 | 55000000 | 공급가액 + 세액 검증 | +| 영수청구 | - | 텍스트 | 10자 | 영수/청구 | 청구 | 미입력 시 "청구" 기본값 | + +> - 거래처 유효하지 않을 경우: "등록되지 않은 거래처입니다." 문구 표시 +> - 공급가액/부가세 양수 아닐 경우: "금액은 0보다 커야합니다." 문구 표시 + +#### 4.5.6 업로드 이력 (P65) + +| # | 요소 | 설명 | +|---|------|------| +| 1 | 이관 유형 필터 셀렉트 박스 | 종류: 전체, 거래처, 거래 내역, 계좌 내역, 세금계산서 내역. 디폴트: 전체 | +| 2 | 파일명 버튼 | 클릭: 파일 다운로드 처리 | + +**기간 필터**: 지난달, D-5월, D-4월, D-3월, D-2월, 이번달 + +**목록 테이블 컬럼**: No., 업로드 일시, 이관 유형, 전체(건수), 성공(건수), 파일명, 등록자 + +--- + +## 공통 UI 패턴 정리 + +### 기간 필터 유형 + +| 유형 | 사용 화면 | +|------|----------| +| 전전월/어제/오늘/전월/당월/당해년도 | 거래처 관리 | +| 1주일/1개월/3개월 + 날짜범위 | 세금계산서 발행 | +| 1분기/2분기/3분기/4분기 + 날짜범위 | 세금계산서 관리 | +| 지난달/D-5월~D-2월/이번달 | 계좌 입출금, 카드 사용, 상품권, 일반전표, 계좌관리, 카드관리, 이관기초자료 | + +### 데이터 구분 표시 (색상) + +모든 연동 가능한 화면에서 수기 데이터와 연동 데이터를 색상으로 구분: +- 수기 데이터 (한 색상) +- 연동 데이터 (다른 색상) + +### 엑셀 다운로드 + +다음 화면에서 엑셀 다운로드 기능 제공: +- 세금계산서 관리 +- 계좌 입출금 내역 +- 카드 사용 내역 + +### 분개 관련 + +분개 기능이 있는 화면: +- 세금계산서 관리 (매입) +- 카드 사용 내역 +- 일반 전표 입력 + +분개 공통 요소: +- 차변/대변 토글 +- 계정과목 셀렉트 박스 (검색 가능) +- 대차 균형 표시 +- 분개 수정/삭제 + +--- + +## 외부 연동 + +### 바로빌 API + +| 연동 항목 | 용도 | +|-----------|------| +| 전자세금계산서 발행 | 세금계산서 발행 화면에서 바로빌 API를 통한 발행 | +| 홈택스 세금계산서 조회 | 세금계산서 관리에서 홈택스 신고 내역 조회 | +| 계좌 연동 | 은행 빠른조회 서비스를 통한 실시간 계좌 조회 | +| 카드 연동 | 카드사 연동을 통한 카드 사용 내역 자동 수집 | +| 공인인증서 | 홈택스 세금계산서 연동용 인증서 등록 | + +### 사업자등록증 OCR + +거래처 등록 시 사업자등록증 파일 업로드 → OCR 자동 인식 → 거래처 정보 자동 입력 + +--- + +**최종 업데이트**: 2026-02-23 diff --git a/plans/api-explorer-development-plan.md b/dev/dev_plans/api-explorer-development-plan.md similarity index 100% rename from plans/api-explorer-development-plan.md rename to dev/dev_plans/api-explorer-development-plan.md diff --git a/plans/archive/5130-bom-migration-plan.md b/dev/dev_plans/archive/5130-bom-migration-plan.md similarity index 100% rename from plans/archive/5130-bom-migration-plan.md rename to dev/dev_plans/archive/5130-bom-migration-plan.md diff --git a/plans/archive/5130-sam-data-migration-plan.md b/dev/dev_plans/archive/5130-sam-data-migration-plan.md similarity index 100% rename from plans/archive/5130-sam-data-migration-plan.md rename to dev/dev_plans/archive/5130-sam-data-migration-plan.md diff --git a/plans/archive/AI_리포트_키워드_색상체계_가이드_v1.4.md b/dev/dev_plans/archive/AI_리포트_키워드_색상체계_가이드_v1.4.md similarity index 100% rename from plans/archive/AI_리포트_키워드_색상체계_가이드_v1.4.md rename to dev/dev_plans/archive/AI_리포트_키워드_색상체계_가이드_v1.4.md diff --git a/dev/dev_plans/archive/HISTORY.md b/dev/dev_plans/archive/HISTORY.md new file mode 100644 index 0000000..0d5408a --- /dev/null +++ b/dev/dev_plans/archive/HISTORY.md @@ -0,0 +1,88 @@ +# 완료 작업 히스토리 + +> docs/dev_plans 완료 문서 요약. 상세 내용은 git 이력 참조. + +## 견적/수주 + +| 기능 | 완료시기 | 요약 | +|------|---------|------| +| 견적 자동 산출 개발 | 2025-12 | MNG 수식 설정 + React 자동산출 기능 구현 | +| MNG 수식 관리 개발 | 2025-12 | 수식 CRUD/카테고리/시뮬레이터/범위/매핑/품목 UI 완료 | +| 시뮬레이터 로직 동기화 | 2025-12 | Design/MNG 시뮬레이터 동일 결과 동기화 | +| 견적 V2 자동산출 오류 수정 | 2026-01 | 자동산출 4가지 오류 분석 및 수정 | +| 입찰관리 API 구현 | 2026-01 | 견적→입찰 전환 API 및 더미데이터 생성 | +| 시공사 페이지 API 연동 | 2026-01 | 8개 시공사 페이지 Mock→API 연동 완료 | +| 견적 URL 마이그레이션 | 2026-01 | test-new/test 경로→정식 경로 정비 | +| 수식 엔진 실제 데이터 연동 | 2026-02 | 테스트 데이터를 실제 품목으로 재구성 | + +## 수주/작업지시 + +| 기능 | 완료시기 | 요약 | +|------|---------|------| +| 수주관리 API 연동 | 2026-01 | 수주 목록/등록/수정/삭제 API 연동 완료 | +| 수주-작업지시-출하 연동 | 2026-01 | Order→WorkOrder→Shipment FK 연결 및 상태 동기화 | +| 작업지시 API | 2026-01 | 작업지시 목록/등록/상세 API 연동 완료 | +| 수주 하위 구조 관리 | 2026-02 | N-depth 트리 구조(개소/구역/공정) 하이브리드 설계 | + +## 품목/BOM + +| 기능 | 완료시기 | 요약 | +|------|---------|------| +| Items 테이블 통합 | 2025-12 | products/materials를 items로 통합 (Item-Master) | +| 5130 BOM 마이그레이션 | 2026-01 | 5130 레거시 BOM 61건을 SAM items.bom으로 마이그레이션 | +| 5130 자재/수주 마이그레이션 | 2026-01 | KDunitprice/output 데이터를 items/orders/order_items로 이관 | +| 경동 품목/단가 마이그레이션 | 2026-01 | 5130 ~1,500건 품목/단가/BOM 데이터 이관 | +| MNG 품목관리 페이지 | 2026-02 | 3-Panel 품목관리 (좌측 리스트+중앙 BOM+우측 상세) 구현 | +| MNG 품목-수식 연동 | 2026-02 | FormulaEvaluatorService 연동으로 동적 BOM 산출 | + +## 생산/절곡 + +| 기능 | 완료시기 | 요약 | +|------|---------|------| +| 공정관리 API | 2026-01 | 공정 CRUD + 분류 규칙 + 품목 연결 API 완료 | +| 재고 통합 시스템 | 2026-01 | 입고/생산/견적/출하 시 재고 자동 증감 및 FIFO 차감 | +| 절곡 작업일지 재구현 | 2026-02 | PHP 원본(~1400줄)을 React BendingWorkLogContent로 재구현 | +| 절곡 LOT 파이프라인 | 2026-02 | 절곡 세부품목 동적 BOM + LOT 추적 파이프라인 구축 | +| 개소별 자재 투입 매핑 | 2026-02 | 개소별 자재 투입 추적 및 LOT 매핑 기능 완료 | +| 절곡 선재고 관리 | 2026-02 | 선재고 입고 흐름 14/14 완료 | + +## 문서/서식 + +| 기능 | 완료시기 | 요약 | +|------|---------|------| +| 문서 업데이트 계획 | 2025-12 | docs/architecture 문서 동기화 (admin→mng 전환 반영) | +| 문서관리 시스템 변경이력 | 2026-02 | 검사 양식 템플릿 4종 + FQC/중간검사 구현 31개 이력 | +| 제품검사(FQC) 폼 | 2026-02 | 제품검사 양식 템플릿 설계 및 5.2 Phase 구현 | + +## 시스템/인프라 + +| 기능 | 완료시기 | 요약 | +|------|---------|------| +| ERP API D1.0 개발 | 2025-12 | ERP API Phase 5~8 (12개 기능, ~71개 API) 완료 | +| API 전체 분석 보고서 | 2026-01 | 710+ API 중복/통합/미사용 분석 (React 실제 사용 ~80개) | +| 통계 DB 설계 | 2026-01 | 확장 가능한 전용 통계 DB(sam_stat) 설계 | +| MES 통합 흐름 분석 | 2026-01 | 견적→수주→작업지시 모듈 간 데이터 흐름 분석 | +| DB 트리거 감사 시스템 | 2026-02 | 감사 트리거 15/16 완료, 94% | + +## 사용자/권한 + +| 기능 | 완료시기 | 요약 | +|------|---------|------| +| L2 권한관리 API | 2025-12 | React 권한관리 Mock→API 연동 (Spatie Permission) | +| 시더 목록 | 2026-01 | 사용자/부서/거래처 등 13개 시더 명령어 정리 | + +## 프론트엔드/알림 + +| 기능 | 완료시기 | 요약 | +|------|---------|------| +| React FCM 푸시 알림 | 2025-12 | mng FCM.js를 React에 포팅, Capacitor 앱 지원 | +| FCM 사용자별 알림 | 2026-01 | 테넌트 전체 브로드캐스트→사용자별 타겟 발송 전환 | +| 알림음 시스템 | 2026-01 | FCM 알림 타입별 커스텀 알림음 (6개 채널) | +| React 서버컴포넌트 점검 | 2026-01 | 'use client' 정책 준수 여부 점검 (0개 오류) | + +## 기타 + +| 기능 | 완료시기 | 요약 | +|------|---------|------| +| AI 리포트 색상체계 가이드 | 2026-01 | AI 리포트 섹션별 색상 임계값 정의 (v1.4) | +| 복리후생비 섹션 | 2026-01 | CEO 대시보드 복리후생비 현황 4개 카드 구현 | diff --git a/plans/archive/SEEDERS_LIST.md b/dev/dev_plans/archive/SEEDERS_LIST.md similarity index 100% rename from plans/archive/SEEDERS_LIST.md rename to dev/dev_plans/archive/SEEDERS_LIST.md diff --git a/plans/archive/api-analysis-report.md b/dev/dev_plans/archive/api-analysis-report.md similarity index 100% rename from plans/archive/api-analysis-report.md rename to dev/dev_plans/archive/api-analysis-report.md diff --git a/plans/archive/bending-lot-pipeline-dev-plan.md b/dev/dev_plans/archive/bending-lot-pipeline-dev-plan.md similarity index 99% rename from plans/archive/bending-lot-pipeline-dev-plan.md rename to dev/dev_plans/archive/bending-lot-pipeline-dev-plan.md index a9d2833..e1148df 100644 --- a/plans/archive/bending-lot-pipeline-dev-plan.md +++ b/dev/dev_plans/archive/bending-lot-pipeline-dev-plan.md @@ -2,7 +2,7 @@ > **작성일**: 2026-02-22 > **목적**: 절곡 세부품목(BD-XX-NN)의 동적 BOM 생성 및 LOT 추적 파이프라인 구축 -> **기준 문서**: `docs/plans/bending-material-input-mapping-plan.md` +> **기준 문서**: `docs/dev_plans/bending-material-input-mapping-plan.md` > **상태**: ✅ 완료 (Serena ID: bending-lot-pipeline-state) --- @@ -1002,8 +1002,8 @@ class DynamicBomEntry | 문서 | 경로 | |------|------| -| **분석 기준 문서** | `docs/plans/bending-material-input-mapping-plan.md` | -| 선생산 재고 계획 | `docs/plans/bending-preproduction-stock-plan.md` | +| **분석 기준 문서** | `docs/dev_plans/bending-material-input-mapping-plan.md` | +| 선생산 재고 계획 | `docs/dev_plans/bending-preproduction-stock-plan.md` | | BendingInfoBuilder | `api/app/Services/Production/BendingInfoBuilder.php` | | WorkOrderService | `api/app/Services/WorkOrderService.php` | | StockService | `api/app/Services/StockService.php` | diff --git a/plans/archive/bending-worklog-reimplementation-plan.md b/dev/dev_plans/archive/bending-worklog-reimplementation-plan.md similarity index 100% rename from plans/archive/bending-worklog-reimplementation-plan.md rename to dev/dev_plans/archive/bending-worklog-reimplementation-plan.md diff --git a/plans/archive/bidding-api-implementation-plan.md b/dev/dev_plans/archive/bidding-api-implementation-plan.md similarity index 100% rename from plans/archive/bidding-api-implementation-plan.md rename to dev/dev_plans/archive/bidding-api-implementation-plan.md diff --git a/plans/archive/construction-api-integration-plan.md b/dev/dev_plans/archive/construction-api-integration-plan.md similarity index 97% rename from plans/archive/construction-api-integration-plan.md rename to dev/dev_plans/archive/construction-api-integration-plan.md index f217f7a..2eed05c 100644 --- a/plans/archive/construction-api-integration-plan.md +++ b/dev/dev_plans/archive/construction-api-integration-plan.md @@ -140,7 +140,7 @@ curl -I http://react.sam.kr ``` Step 1: 서브 문서 확인 -├── docs/plans/sub/{module}-plan.md 읽기 +├── docs/dev_plans/sub/{module}-plan.md 읽기 ├── 현재 Mock 데이터 구조 확인 └── 필요한 API 엔드포인트 파악 @@ -176,7 +176,7 @@ Step 5: 테스트 및 검증 **Phase 1.1 계약관리 시작:** ```bash # 1. 서브 문서 읽기 -cat docs/plans/sub/contract-plan.md +cat docs/dev_plans/sub/contract-plan.md # 2. 현재 Mock 확인 cat react/src/components/business/construction/contract/actions.ts @@ -216,7 +216,7 @@ SAM/ │ │ └── labor/ │ └── components/business/construction/ │ -└── docs/plans/ # 계획 문서 +└── docs/dev_plans/ # 계획 문서 ├── construction-api-integration-plan.md # 메인 (현재 문서) └── sub/ # 서브 문서 (9개) ``` @@ -348,13 +348,13 @@ curl -X POST "http://api.sam.kr/api/construction/contracts" \ ```bash # 1. 메인 문서 읽기 (현재 진행 상태 확인) -cat docs/plans/construction-api-integration-plan.md | head -30 +cat docs/dev_plans/construction-api-integration-plan.md | head -30 # 2. "다음 작업" 확인 -grep "다음 작업" docs/plans/construction-api-integration-plan.md +grep "다음 작업" docs/dev_plans/construction-api-integration-plan.md # 3. 해당 서브 문서 읽기 -cat docs/plans/sub/{다음작업}-plan.md +cat docs/dev_plans/sub/{다음작업}-plan.md # 4. 작업 시작 ``` diff --git a/plans/archive/docs-update-plan.md b/dev/dev_plans/archive/docs-update-plan.md similarity index 100% rename from plans/archive/docs-update-plan.md rename to dev/dev_plans/archive/docs-update-plan.md diff --git a/plans/archive/document-management-system-changelog.md b/dev/dev_plans/archive/document-management-system-changelog.md similarity index 98% rename from plans/archive/document-management-system-changelog.md rename to dev/dev_plans/archive/document-management-system-changelog.md index ee81f29..6c4cb72 100644 --- a/plans/archive/document-management-system-changelog.md +++ b/dev/dev_plans/archive/document-management-system-changelog.md @@ -1,6 +1,6 @@ # 문서관리 시스템 - 변경 이력 -> **본 문서**: `docs/plans/document-management-system-plan.md`의 변경 이력 +> **본 문서**: `docs/dev_plans/document-management-system-plan.md`의 변경 이력 > **최종 업데이트**: 2026-02-12 --- diff --git a/plans/archive/document-system-product-inspection.md b/dev/dev_plans/archive/document-system-product-inspection.md similarity index 100% rename from plans/archive/document-system-product-inspection.md rename to dev/dev_plans/archive/document-system-product-inspection.md diff --git a/plans/archive/erp-api-development-plan-d1.0-changes.md b/dev/dev_plans/archive/erp-api-development-plan-d1.0-changes.md similarity index 100% rename from plans/archive/erp-api-development-plan-d1.0-changes.md rename to dev/dev_plans/archive/erp-api-development-plan-d1.0-changes.md diff --git a/plans/archive/fcm-user-targeted-notification-plan.md b/dev/dev_plans/archive/fcm-user-targeted-notification-plan.md similarity index 100% rename from plans/archive/fcm-user-targeted-notification-plan.md rename to dev/dev_plans/archive/fcm-user-targeted-notification-plan.md diff --git a/plans/archive/formula-engine-real-data-plan.md b/dev/dev_plans/archive/formula-engine-real-data-plan.md similarity index 100% rename from plans/archive/formula-engine-real-data-plan.md rename to dev/dev_plans/archive/formula-engine-real-data-plan.md diff --git a/plans/archive/items-table-unification-plan.md b/dev/dev_plans/archive/items-table-unification-plan.md similarity index 100% rename from plans/archive/items-table-unification-plan.md rename to dev/dev_plans/archive/items-table-unification-plan.md diff --git a/plans/archive/kd-items-migration-plan.md b/dev/dev_plans/archive/kd-items-migration-plan.md similarity index 99% rename from plans/archive/kd-items-migration-plan.md rename to dev/dev_plans/archive/kd-items-migration-plan.md index 7710c32..29331d9 100644 --- a/plans/archive/kd-items-migration-plan.md +++ b/dev/dev_plans/archive/kd-items-migration-plan.md @@ -1108,7 +1108,7 @@ foreach ($itemList as $idx => $item) { - **DummyItemSeeder**: `api/database/seeders/Dummy/DummyItemSeeder.php` - **DummyDataSeeder**: `api/database/seeders/DummyDataSeeder.php` (TENANT_ID=287, USER_ID=1 상수 참조) - **prices item_type_code 마이그레이션**: `api/database/migrations/2025_12_21_165524_update_prices_item_type_code_to_actual_item_type.php` -- **연관 문서**: `docs/plans/kd-orders-migration-plan.md` (입고/재고/주문 마이그레이션) +- **연관 문서**: `docs/dev_plans/kd-orders-migration-plan.md` (입고/재고/주문 마이그레이션) --- @@ -1217,7 +1217,7 @@ cd /Users/kent/Works/@KD_SAM/SAM/api && php artisan migrate:status │ │ │ ⚠️ 주의: 모든 INSERT 실행 전 사용자 승인 필요 │ │ │ -│ 📎 연관 문서: docs/plans/kd-orders-migration-plan.md (입고/재고/주문) │ +│ 📎 연관 문서: docs/dev_plans/kd-orders-migration-plan.md (입고/재고/주문) │ │ │ └─────────────────────────────────────────────────────────────────────────┘ ``` diff --git a/plans/archive/l2-permission-management-plan.md b/dev/dev_plans/archive/l2-permission-management-plan.md similarity index 100% rename from plans/archive/l2-permission-management-plan.md rename to dev/dev_plans/archive/l2-permission-management-plan.md diff --git a/plans/archive/material-input-per-item-mapping-plan.md b/dev/dev_plans/archive/material-input-per-item-mapping-plan.md similarity index 100% rename from plans/archive/material-input-per-item-mapping-plan.md rename to dev/dev_plans/archive/material-input-per-item-mapping-plan.md diff --git a/plans/archive/mes-integration-analysis-plan.md b/dev/dev_plans/archive/mes-integration-analysis-plan.md similarity index 98% rename from plans/archive/mes-integration-analysis-plan.md rename to dev/dev_plans/archive/mes-integration-analysis-plan.md index 3b9bc28..4fad6d0 100644 --- a/plans/archive/mes-integration-analysis-plan.md +++ b/dev/dev_plans/archive/mes-integration-analysis-plan.md @@ -2,7 +2,7 @@ > **작성일**: 2025-01-09 > **목적**: 견적 → 수주 → 작업지시 + 공정관리 모듈 간 연동 상태 점검 및 문제점 분석 -> **기준 문서**: `docs/plans/process-management-plan.md`, `docs/plans/order-management-plan.md`, `docs/plans/work-order-plan.md` +> **기준 문서**: `docs/dev_plans/process-management-plan.md`, `docs/dev_plans/order-management-plan.md`, `docs/dev_plans/work-order-plan.md` > **상태**: ✅ 분석 완료 + 개선 방향 **재결정됨** (2025-01-09 추가 분석) --- @@ -454,9 +454,9 @@ WorkOrder `process_type` (varchar) → `process_id` (FK) 변경 작업 범위: ## 7. 참고 문서 -- **공정관리 계획**: `docs/plans/process-management-plan.md` -- **수주관리 계획**: `docs/plans/order-management-plan.md` -- **작업지시 계획**: `docs/plans/work-order-plan.md` +- **공정관리 계획**: `docs/dev_plans/process-management-plan.md` +- **수주관리 계획**: `docs/dev_plans/order-management-plan.md` +- **작업지시 계획**: `docs/dev_plans/work-order-plan.md` - **시스템 아키텍처**: `docs/architecture/system-overview.md` - **품질 체크리스트**: `docs/standards/quality-checklist.md` diff --git a/plans/archive/mng-item-formula-integration-plan.md b/dev/dev_plans/archive/mng-item-formula-integration-plan.md similarity index 99% rename from plans/archive/mng-item-formula-integration-plan.md rename to dev/dev_plans/archive/mng-item-formula-integration-plan.md index 54261a4..bb29a8a 100644 --- a/plans/archive/mng-item-formula-integration-plan.md +++ b/dev/dev_plans/archive/mng-item-formula-integration-plan.md @@ -2,7 +2,7 @@ > **작성일**: 2026-02-19 > **목적**: 가변사이즈 완제품(FG) 선택 시 오픈사이즈(W,H) 입력 → FormulaEvaluatorService로 동적 자재 산출 → 중앙 패널에 트리 표시 -> **기준 문서**: docs/plans/mng-item-management-plan.md, api/app/Services/Quote/FormulaEvaluatorService.php +> **기준 문서**: docs/dev_plans/mng-item-management-plan.md, api/app/Services/Quote/FormulaEvaluatorService.php > **선행 작업**: 3-Panel 품목관리 페이지 구현 완료 (Phase 1~2 of mng-item-management-plan.md) > **상태**: 🔄 진행중 @@ -732,7 +732,7 @@ function renderFormulaTree(data, container) { ## 7. 참고 문서 -- **기존 품목관리 계획**: `docs/plans/mng-item-management-plan.md` +- **기존 품목관리 계획**: `docs/dev_plans/mng-item-management-plan.md` - **FormulaEvaluatorService**: `api/app/Services/Quote/FormulaEvaluatorService.php` - 메서드: `calculateBomWithDebug(string $finishedGoodsCode, array $inputVariables, ?int $tenantId): array` - tenant_id=287 자동 감지 → KyungdongFormulaHandler 라우팅 @@ -754,7 +754,7 @@ function renderFormulaTree(data, container) { ### 8.1 세션 시작 시 (Load Strategy) ``` -1. 이 문서 읽기 (docs/plans/mng-item-formula-integration-plan.md) +1. 이 문서 읽기 (docs/dev_plans/mng-item-formula-integration-plan.md) 2. 📍 현재 진행 상태 확인 → 다음 작업 파악 3. 섹션 3 "이미 구현된 코드" 확인 → 수정 대상 파일 파악 4. 필요시 Serena 메모리 로드: diff --git a/plans/archive/mng-item-management-plan.md b/dev/dev_plans/archive/mng-item-management-plan.md similarity index 99% rename from plans/archive/mng-item-management-plan.md rename to dev/dev_plans/archive/mng-item-management-plan.md index 172f216..46a2450 100644 --- a/plans/archive/mng-item-management-plan.md +++ b/dev/dev_plans/archive/mng-item-management-plan.md @@ -12,7 +12,7 @@ | 항목 | 내용 | |------|------| | **마지막 완료 작업** | Phase 1~2 전체 구현 완료 (미커밋 상태) | -| **다음 작업** | 수식 엔진 연동 → `docs/plans/mng-item-formula-integration-plan.md` 참조 | +| **다음 작업** | 수식 엔진 연동 → `docs/dev_plans/mng-item-formula-integration-plan.md` 참조 | | **진행률** | 12/12 (100%) - 기본 3-Panel 구현 완료 | | **마지막 업데이트** | 2026-02-19 | | **후속 작업** | FormulaEvaluatorService 연동 (별도 계획 문서) | @@ -482,7 +482,7 @@ function toggleNode(toggle, childList) { ### Phase 3: 수식 엔진 연동 (후속 작업) -> 별도 계획 문서: `docs/plans/mng-item-formula-integration-plan.md` +> 별도 계획 문서: `docs/dev_plans/mng-item-formula-integration-plan.md` > > 가변사이즈 FG 품목 선택 시 오픈사이즈(W,H) 입력 → FormulaEvaluatorService 동적 산출 → 중앙 패널 탭 전환 표시 diff --git a/plans/archive/mng-quote-formula-development-plan.md b/dev/dev_plans/archive/mng-quote-formula-development-plan.md similarity index 100% rename from plans/archive/mng-quote-formula-development-plan.md rename to dev/dev_plans/archive/mng-quote-formula-development-plan.md diff --git a/plans/archive/notification-sound-system-plan.md b/dev/dev_plans/archive/notification-sound-system-plan.md similarity index 99% rename from plans/archive/notification-sound-system-plan.md rename to dev/dev_plans/archive/notification-sound-system-plan.md index f2e7e66..0d8d848 100644 --- a/plans/archive/notification-sound-system-plan.md +++ b/dev/dev_plans/archive/notification-sound-system-plan.md @@ -390,7 +390,7 @@ public function store(array $data) ## 7. 참고 문서 -- **FCM 푸시 계획**: `docs/plans/react-fcm-push-notification-plan.md` +- **FCM 푸시 계획**: `docs/dev_plans/react-fcm-push-notification-plan.md` - **API 규칙**: `docs/standards/api-rules.md` --- diff --git a/plans/archive/order-location-management-plan.md b/dev/dev_plans/archive/order-location-management-plan.md similarity index 100% rename from plans/archive/order-location-management-plan.md rename to dev/dev_plans/archive/order-location-management-plan.md diff --git a/plans/archive/order-management-plan.md b/dev/dev_plans/archive/order-management-plan.md similarity index 100% rename from plans/archive/order-management-plan.md rename to dev/dev_plans/archive/order-management-plan.md diff --git a/plans/archive/order-workorder-shipment-integration-plan.md b/dev/dev_plans/archive/order-workorder-shipment-integration-plan.md similarity index 100% rename from plans/archive/order-workorder-shipment-integration-plan.md rename to dev/dev_plans/archive/order-workorder-shipment-integration-plan.md diff --git a/plans/archive/process-management-plan.md b/dev/dev_plans/archive/process-management-plan.md similarity index 100% rename from plans/archive/process-management-plan.md rename to dev/dev_plans/archive/process-management-plan.md diff --git a/plans/archive/quote-auto-calculation-development-plan.md b/dev/dev_plans/archive/quote-auto-calculation-development-plan.md similarity index 99% rename from plans/archive/quote-auto-calculation-development-plan.md rename to dev/dev_plans/archive/quote-auto-calculation-development-plan.md index 2034c20..0a9ce73 100644 --- a/plans/archive/quote-auto-calculation-development-plan.md +++ b/dev/dev_plans/archive/quote-auto-calculation-development-plan.md @@ -669,7 +669,7 @@ SAM/ │ └── src/components/quotes/ │ └── QuoteRegistration.tsx # ⚡ Phase 2 수정 │ -└── docs/plans/ +└── docs/dev_plans/ └── quote-auto-calculation-development-plan.md # 이 문서 ``` diff --git a/plans/archive/quote-v2-auto-calculation-fix-plan.md b/dev/dev_plans/archive/quote-v2-auto-calculation-fix-plan.md similarity index 100% rename from plans/archive/quote-v2-auto-calculation-fix-plan.md rename to dev/dev_plans/archive/quote-v2-auto-calculation-fix-plan.md diff --git a/plans/archive/react-fcm-push-notification-plan.md b/dev/dev_plans/archive/react-fcm-push-notification-plan.md similarity index 100% rename from plans/archive/react-fcm-push-notification-plan.md rename to dev/dev_plans/archive/react-fcm-push-notification-plan.md diff --git a/plans/archive/react-server-component-audit-plan.md b/dev/dev_plans/archive/react-server-component-audit-plan.md similarity index 100% rename from plans/archive/react-server-component-audit-plan.md rename to dev/dev_plans/archive/react-server-component-audit-plan.md diff --git a/plans/archive/sam-stat-database-design-plan.md b/dev/dev_plans/archive/sam-stat-database-design-plan.md similarity index 100% rename from plans/archive/sam-stat-database-design-plan.md rename to dev/dev_plans/archive/sam-stat-database-design-plan.md diff --git a/plans/archive/simulator-calculation-logic-mapping.md b/dev/dev_plans/archive/simulator-calculation-logic-mapping.md similarity index 100% rename from plans/archive/simulator-calculation-logic-mapping.md rename to dev/dev_plans/archive/simulator-calculation-logic-mapping.md diff --git a/plans/archive/stock-integration-plan.md b/dev/dev_plans/archive/stock-integration-plan.md similarity index 100% rename from plans/archive/stock-integration-plan.md rename to dev/dev_plans/archive/stock-integration-plan.md diff --git a/plans/archive/welfare-section-plan.md b/dev/dev_plans/archive/welfare-section-plan.md similarity index 100% rename from plans/archive/welfare-section-plan.md rename to dev/dev_plans/archive/welfare-section-plan.md diff --git a/plans/archive/work-order-plan.md b/dev/dev_plans/archive/work-order-plan.md similarity index 100% rename from plans/archive/work-order-plan.md rename to dev/dev_plans/archive/work-order-plan.md diff --git a/plans/bending-info-auto-generation-plan.md b/dev/dev_plans/bending-info-auto-generation-plan.md similarity index 100% rename from plans/bending-info-auto-generation-plan.md rename to dev/dev_plans/bending-info-auto-generation-plan.md diff --git a/plans/bending-material-input-mapping-plan.md b/dev/dev_plans/bending-material-input-mapping-plan.md similarity index 99% rename from plans/bending-material-input-mapping-plan.md rename to dev/dev_plans/bending-material-input-mapping-plan.md index 926d4a2..019cf26 100644 --- a/plans/bending-material-input-mapping-plan.md +++ b/dev/dev_plans/bending-material-input-mapping-plan.md @@ -2,7 +2,7 @@ > **작성일**: 2026-02-21 > **목적**: 절곡 작업일지의 4대 제품 카테고리(가이드레일/하단마감재/셔터박스/연기차단재) 세부품목을 items 테이블과 연동하고, BOM 기반 자재투입 → LOT 추적 파이프라인 구축 -> **기준 문서**: `5130/output/viewBendingWork_UA.php`, `api/app/Services/Production/BendingInfoBuilder.php`, `docs/plans/bending-preproduction-stock-plan.md` +> **기준 문서**: `5130/output/viewBendingWork_UA.php`, `api/app/Services/Production/BendingInfoBuilder.php`, `docs/dev_plans/bending-preproduction-stock-plan.md` > **상태**: 📋 분석 완료, 개발 계획 수립 중 --- @@ -203,7 +203,7 @@ else → $BTmat = 'BS'; | getMaterialsForItem API | `WorkOrderService.php:2678` | 개별 품목 자재 조회 | | registerMaterialInput | `react/.../WorkerScreen/actions.ts:288` | 자재투입 등록 POST API | | increaseFromProduction | `api/app/Services/StockService.php` | 생산완료 → 재고입고 | -| 선생산 재고 흐름 | `docs/plans/bending-preproduction-stock-plan.md` | Phase 1-3 완료 | +| 선생산 재고 흐름 | `docs/dev_plans/bending-preproduction-stock-plan.md` | Phase 1-3 완료 | ### 3.2 BD-* 품목 현황 (로컬 DB 확인 완료) @@ -663,7 +663,7 @@ if ($workOrder->sales_order_id) { | 문서 | 경로 | |------|------| -| 선생산 재고 계획 | `docs/plans/bending-preproduction-stock-plan.md` | +| 선생산 재고 계획 | `docs/dev_plans/bending-preproduction-stock-plan.md` | | BendingInfoBuilder | `api/app/Services/Production/BendingInfoBuilder.php` | | QuoteCalculationService | `api/app/Services/Quote/QuoteCalculationService.php` | | FormulaEvaluatorService | `api/app/Services/Quote/FormulaEvaluatorService.php` | diff --git a/plans/bending-preproduction-stock-plan.md b/dev/dev_plans/bending-preproduction-stock-plan.md similarity index 98% rename from plans/bending-preproduction-stock-plan.md rename to dev/dev_plans/bending-preproduction-stock-plan.md index 352ae35..82c8c77 100644 --- a/plans/bending-preproduction-stock-plan.md +++ b/dev/dev_plans/bending-preproduction-stock-plan.md @@ -2,7 +2,7 @@ > **작성일**: 2026-02-21 > **목적**: 레거시 5130 절곡품(가이드레일/셔터박스/바텀바) 관리를 SAM 기존 재고 시스템에 통합하고, 선생산→재고적재 흐름 구현 -> **기준 문서**: `api/app/Services/StockService.php`, `api/app/Services/WorkOrderService.php`, `docs/plans/bending-info-auto-generation-plan.md` +> **기준 문서**: `api/app/Services/StockService.php`, `api/app/Services/WorkOrderService.php`, `docs/dev_plans/bending-info-auto-generation-plan.md` > **상태**: 🔄 Phase 3 완료 (3.5 마이그레이션 제외) --- @@ -161,8 +161,8 @@ Order ──→ WorkOrder ──→ 완료 ──→ Shipment (기존 유지) ### 1.7 준수 규칙 - `CLAUDE.md` - Service-First, FormRequest, BelongsToTenant - `SAM_QUICK_REFERENCE.md` - API 규칙 -- `docs/plans/bending-info-auto-generation-plan.md` - BendingInfoBuilder 참조 -- `docs/plans/bending-worklog-reimplementation-plan.md` - 프론트 절곡 컴포넌트 참조 +- `docs/dev_plans/bending-info-auto-generation-plan.md` - BendingInfoBuilder 참조 +- `docs/dev_plans/bending-worklog-reimplementation-plan.md` - 프론트 절곡 컴포넌트 참조 --- @@ -710,8 +710,8 @@ private function shouldStockIn(WorkOrderItem $woItem): bool ## 7. 참고 문서 ### 직접 관련 문서 -- `docs/plans/bending-info-auto-generation-plan.md` - BendingInfoBuilder 자동 생성 계획 -- `docs/plans/bending-worklog-reimplementation-plan.md` - 절곡 작업일지 프론트 재구현 (완료) +- `docs/dev_plans/bending-info-auto-generation-plan.md` - BendingInfoBuilder 자동 생성 계획 +- `docs/dev_plans/bending-worklog-reimplementation-plan.md` - 절곡 작업일지 프론트 재구현 (완료) - `docs/projects/legacy-5130/04_PRODUCTION.md` - 레거시 생산 시스템 분석 ### 핵심 코드 파일 (⚠️ 경로 주의: Models는 Tenants 네임스페이스) diff --git a/plans/bom-item-mapping-plan.md b/dev/dev_plans/bom-item-mapping-plan.md similarity index 100% rename from plans/bom-item-mapping-plan.md rename to dev/dev_plans/bom-item-mapping-plan.md diff --git a/plans/card-management-section-plan.md b/dev/dev_plans/card-management-section-plan.md similarity index 100% rename from plans/card-management-section-plan.md rename to dev/dev_plans/card-management-section-plan.md diff --git a/plans/dashboard-api-integration-plan.md b/dev/dev_plans/dashboard-api-integration-plan.md similarity index 99% rename from plans/dashboard-api-integration-plan.md rename to dev/dev_plans/dashboard-api-integration-plan.md index 63d035c..09be7f0 100644 --- a/plans/dashboard-api-integration-plan.md +++ b/dev/dev_plans/dashboard-api-integration-plan.md @@ -562,7 +562,7 @@ DELETE /api/calendar/schedules/{id} (일정 삭제) | 문서 | 경로 | |------|------| -| AI 리포트 색상 체계 | `docs/plans/AI_리포트_키워드_색상체계_가이드_v1.4.md` | +| AI 리포트 색상 체계 | `docs/dev_plans/AI_리포트_키워드_색상체계_가이드_v1.4.md` | | Hook 패턴 예제 | `react/src/hooks/useClientList.ts` | | Transform 예제 | `react/src/lib/api/dashboard/transformers.ts` | | Proxy 라우트 | `react/src/app/api/proxy/[...path]/route.ts` | diff --git a/plans/db-backup-system-plan.md b/dev/dev_plans/db-backup-system-plan.md similarity index 99% rename from plans/db-backup-system-plan.md rename to dev/dev_plans/db-backup-system-plan.md index 3598abc..91c3d7a 100644 --- a/plans/db-backup-system-plan.md +++ b/dev/dev_plans/db-backup-system-plan.md @@ -650,7 +650,7 @@ HTMX 활용: 읽음/해결 버튼 클릭 시 페이지 리로드 없이 상태 - **기존 스케줄러**: `api/routes/console.php` - **StatMonitorService**: `api/app/Services/Stats/StatMonitorService.php` - **StatAlert 모델**: `api/app/Models/Stats/StatAlert.php` -- **sam_stat 설계**: `docs/plans/sam-stat-database-design-plan.md` +- **sam_stat 설계**: `docs/dev_plans/sam-stat-database-design-plan.md` - **MNG 라우트**: `mng/routes/web.php` - **MNG 레이아웃**: `mng/resources/views/layouts/` - **Slack 웹훅**: `api/.env` → `LOG_SLACK_WEBHOOK_URL` diff --git a/plans/db-trigger-audit-system-plan.md b/dev/dev_plans/db-trigger-audit-system-plan.md similarity index 99% rename from plans/db-trigger-audit-system-plan.md rename to dev/dev_plans/db-trigger-audit-system-plan.md index 62da7d9..2b86633 100644 --- a/plans/db-trigger-audit-system-plan.md +++ b/dev/dev_plans/db-trigger-audit-system-plan.md @@ -492,7 +492,7 @@ SAM/ ← 프로젝트 루트 │ │ └── layouts/app.blade.php ← 메인 레이아웃 │ └── routes/web.php ← 웹 라우트 (auth 미들웨어 그룹) ├── react/ ← Next.js 15 프론트엔드 -└── docs/plans/ ← 이 문서 +└── docs/dev_plans/ ← 이 문서 ``` ### A.2 DB 접속 정보 diff --git a/plans/dev-toolbar-plan.md b/dev/dev_plans/dev-toolbar-plan.md similarity index 99% rename from plans/dev-toolbar-plan.md rename to dev/dev_plans/dev-toolbar-plan.md index 89a9873..170ef54 100644 --- a/plans/dev-toolbar-plan.md +++ b/dev/dev_plans/dev-toolbar-plan.md @@ -253,7 +253,7 @@ NEXT_PUBLIC_DEV_TOOLBAR_ENABLED=true | 날짜 | 항목 | 변경 내용 | 파일 | 승인 | |------|------|----------|------|------| | 2026-01-20 | 1.1~1.5 | Phase 1 기반 구조 생성 완료 | dev/*.ts, dev/*.tsx | ✅ | -| 2026-01-20 | - | 계획 문서 작성 | docs/plans/dev-toolbar-plan.md | - | +| 2026-01-20 | - | 계획 문서 작성 | docs/dev_plans/dev-toolbar-plan.md | - | --- diff --git a/dev/dev_plans/docs-comprehensive-update-plan.md b/dev/dev_plans/docs-comprehensive-update-plan.md new file mode 100644 index 0000000..dc02f49 --- /dev/null +++ b/dev/dev_plans/docs-comprehensive-update-plan.md @@ -0,0 +1,414 @@ +# docs/ 종합 정비 계획 + +> **작성일**: 2026-02-27 +> **상태**: ✅ 전체 완료 (Phase 0~4) +> **목적**: 시스템 실제 분석 기반의 문서 재정비 — 현황 정확성 확보 + 구조 표준화 + 중복 제거 + +--- + +## 1. 배경 및 목적 + +### 1.1 왜 필요한가 + +docs/ 폴더가 초기에 체계적 분석 없이 점진적으로 쌓여왔으며, 시스템의 실제 상태와 문서 간 괴리가 심각해졌다. + +**핵심 문제:** +- DB 스키마 문서가 **50+개 신규 테이블** 미반영 (219개 기록 → 실제 270+개) +- 2026년 2월 추가된 대형 도메인(재무/회계, 전자서명, 설비, AI, 차량) **기능 문서 부재** +- 실행 계획(plans/) 간 중복·대체 관계 미정리 +- 문서 내 경로·버전 등 **사실과 다른 기술 정보** 다수 +- 문서 정책(폴더 분류, 명명 규칙, 템플릿) 실제 준수율 낮음 + +### 1.2 목표 + +| # | 목표 | 완료 기준 | +|---|------|----------| +| G1 | 시스템 현황 문서 정확성 100% | DB 스키마, 아키텍처, 스펙이 실제 코드와 일치 | +| G2 | 모든 활성 도메인에 기능 문서 존재 | features/ 하위 도메인별 README.md | +| G3 | 실행 계획 통합·정리 | 중복 제거, 완료분 아카이브, 인덱스 동기화 | +| G4 | 문서 정책 현행화 | INDEX.md, CLAUDE.md, GUIDE.md 실제 반영 | +| G5 | 중복 데이터 제거 | 동일 내용의 문서 단일 소스(SSOT) 확보 | + +### 1.3 범위 + +``` +분석 대상 (소스 코드) 문서화 대상 (docs/) +┌─────────────────────┐ ┌─────────────────────┐ +│ api/ (Laravel 12) │──→ │ system/ │ ← architecture/ + specs/ 통합 +│ - 205 Models │ │ standards/ │ +│ - 179 Services │ │ rules/ │ +│ - 131 Controllers │ │ features/ │ +│ - 458 Migrations │ │ guides/ │ +│ - 18 Route domains │ │ plans/ │ ← 작업 추적 (예정/진행/완료) +├─────────────────────┤ │ projects/ │ ← 프로젝트성 자료 보관 +│ react/ (Next.js 15) │ │ front/ │ +│ - 249 Pages │ │ quickstart/ │ +│ - 612 Components │ │ changes/ │ +│ - 91 Server Actions │ │ deploys/ │ +├─────────────────────┤ │ data/ │ +│ mng/ (Laravel 12) │ │ history/ │ +│ - 171 Controllers │ └─────────────────────┘ +│ - 436 Blade views │ +│ - 185 Models │ +├─────────────────────┤ +│ sales/ (추후 개발) │ +│ docker/ (Nginx 등) │ +└─────────────────────┘ +``` + +--- + +## 2. 현황 감사 결과 + +### 2.1 시스템 vs 문서 격차 (Critical) + +| 영역 | 문서 상태 | 실제 시스템 | 격차 | +|------|----------|-----------|------| +| DB 테이블 수 | 219개 (2026-01-29) | 270+개 추정 | **50+개 미반영** | +| API 도메인 | 일부만 기록 | 18개 라우트 도메인 | features/ 누락 다수 | +| React 페이지 | 미기록 | 249개 페이지 | **프론트 현황 문서 부재** | +| MNG 기능 | 일부만 기록 | 171 컨트롤러, 436 뷰 | **MNG 현황 문서 부재** | +| 기술 스택 | Laravel 11 기록 | Laravel 12 + PHP 8.4 | **버전 불일치** | + +### 2.2 미문서화 도메인 (2026년 2월 신규) + +| 도메인 | DB 테이블 | API 존재 | 기능 문서 | +|--------|----------|---------|----------| +| 재무/회계 (Finance) | 20+개 | ✅ | ❌ 없음 | +| 전자서명 (E-Sign) | 6개 | ✅ | ❌ 없음 | +| 설비관리 (Equipment) | 6개 | ✅ | ❌ 없음 | +| 차량관리 (Vehicle) | 3개 | ✅ | ❌ 없음 | +| AI/음성 (AI) | 5개 | ✅ | ❌ 없음 | +| 면접 (Interview) | 5개 | ✅ | ❌ 없음 | +| 채번규칙 (Numbering) | 2개 | ✅ | ❌ 없음 | +| 문서서식 (DocTemplate) | 4개 | ✅ | ❌ 없음 | +| 바로빌 연동 확장 | 5개 | ✅ | ❌ 없음 | +| 회의록 (Meeting) | 2개 | ✅ | ❌ 없음 | + +### 2.3 부정확한 문서 + +| 문서 | 문제 | 심각도 | +|------|------|--------| +| `docs/CLAUDE.md` | 경로 `/home/aweso/sam/` (실제: `/Users/kent/...`), Laravel 11 기록 | 🔴 | +| `docs/specs/database-schema.md` | 50+개 테이블 누락, 테이블 수 219로 기록 | 🔴 | +| `docs/TODO.md` | 2025-12-21 이후 미갱신, 보안 이슈 방치 | 🟡 | +| `docs/rules/README.md` | 8개 중 2개만 목록에 있음 | 🟡 | +| `SAM/CLAUDE.md` (루트) | `SAM_QUICK_REFERENCE.md` 등 경로 불일치 | 🟡 | +| `docs/projects/mes/MES_PROGRESS_TRACKER.md` | 2025-11-13 이후 미갱신 | 🟡 | +| `docs/projects/api-integration/PROGRESS.md` | 2025-12-20 이후 미갱신 (90%?) | 🟡 | + +### 2.4 계획 문서(plans/) 상태 + +| 상태 | 수량 | 비고 | +|------|------|------| +| 🟡 진행중 (ACTIVE) | 18개 | 일부 장기 정체 | +| ⚪ 대기 (WAITING) | 19개 | 선행조건 대기 | +| ✅ 완료 (ARCHIVE) | ~40개 | archive/ 이동 완료 | +| ⚠️ 아카이브 필요 | 2개 | `docs-plans-cleanup-plan`, `product-code-traceability-plan` | +| ⚠️ 장기 정체 | 4개 | Phase 4에서 최종 정리 (하단 목록 참조) | + +**장기 정체 계획 (3개월+ 미갱신) — Phase 4에서 최종 정리:** + +| 계획 | 진행률 | 마지막 갱신 | +|------|--------|-----------| +| `5130-to-mng-migration-plan.md` | 13% | 2025-12-17 | +| `erp-api-development-plan.md` | Phase L 완료 | 2025-12-17 | +| `mng-menu-system-plan.md` | 구현 완료, 테스트 대기 | 2025-12-16 | +| `simulator-ui-enhancement-plan.md` | 60% | 2025-12-30 | + +--- + +## 3. 확정된 결정 사항 + +> 논의 완료 — 이후 모든 Phase에서 이 기준을 따른다 + +| # | 결정 | 내용 | +|---|------|------| +| D1 | DB 스키마 분할 | **도메인별 분할** — `system/database/` 하위에 도메인별 파일 | +| D2 | features/ 문서 깊이 | **기능 설명 + 엔드포인트 경로 목록** 포함, 상세 요청/응답은 Swagger 참조 | +| D3 | 파일명 정책 | **한글 허용** — 기술 문서는 영문 kebab-case, 업무/비즈니스 문서는 한글 허용, 혼용 금지 | +| D4 | plans/ vs projects/ | **분리 유지** — plans/=작업 추적(예정→진행→완료), projects/=프로젝트성 자료 보관 | +| D5 | architecture/ + specs/ 통합 | **`system/`으로 통합** — 현황(아키텍처+스펙+인프라)을 하나의 상위 폴더에 | +| D6 | 장기 정체 계획 | **폐기하지 않음** — 한곳에 모아두고 Phase 4(최종 정리)에서 일괄 판단 | +| D7 | changes/ 날짜 포맷 | **`YYYYMMDD_description.md`** 단일 형식으로 통일 | +| D8 | docs/CLAUDE.md 처리 | **삭제** — 유효 내용은 `docs/INDEX.md`에 통합, docs/CLAUDE.md 파일 제거 | +| D9 | docs/front/ 폴더 | **삭제** — 구 front 시절 잔재, 필요한 내용은 적절한 위치로 이동 후 폴더 제거 | +| D10 | plans/ 폴더 | **현행 유지** — 이미 정리 완료, 이번 정비에서 건드리지 않음 | +| D11 | deploys/ops-manual/ | **현행 유지** — 그대로 둠 | + +### D3 파일명 규칙 상세 + +``` +✅ 기술 문서 (코드 참조): api-rules.md, database-schema.md +✅ 업무/비즈니스 문서: 영업파트너가이드북.md, 수당지급.md +❌ 혼용 금지: 영업partner가이드.md, 메뉴badge기능.md +``` + +### D5 system/ 폴더 구조 + +``` +system/ ← architecture/ + specs/ 통합 +├── overview.md ← 전체 시스템 아키텍처 +├── database/ ← DB 스키마 (D1: 도메인별 분할) +│ ├── README.md ← 전체 테이블 인덱스 + 도메인 맵 +│ ├── tenants.md ← 테넌트/인증/권한 +│ ├── production.md ← 생산/작업지시/BOM +│ ├── finance.md ← 재무/회계 +│ ├── sales.md ← 영업/견적/수주 +│ ├── hr.md ← 인사/근태/급여 +│ ├── items.md ← 품목/자재/재고 +│ ├── documents.md ← 문서/서식/전자서명 +│ ├── commons.md ← 공통(파일, 메뉴, 게시판, 감사로그) +│ └── others.md ← 설비, 차량, AI, 면접, 바로빌 등 +├── api-structure.md ← API 라우트 도메인·엔드포인트 현황 +├── react-structure.md ← React 페이지·컴포넌트·패턴 현황 +├── mng-structure.md ← MNG 컨트롤러·뷰·패턴 현황 +├── security-policy.md ← 보안 정책 +├── scaling-roadmap.md ← 스케일링 로드맵 +├── docker-setup.md ← Docker/인프라 환경 +├── remote-work-setup.md ← 원격 접속 설정 +├── board-system-spec.md ← 게시판 시스템 스펙 +└── item-master-integration.md ← 품목 마스터 통합 스펙 +``` + +--- + +## 4. 작업 계획 + +### Phase 0: 문서 정책 재정립 (선행 필수) + +> 이후 모든 작업의 기준이 되므로 먼저 확정 + +| # | 작업 | 산출물 | +|---|------|--------| +| 0-1 | docs/ 폴더 구조 정책 재정의 (D5 system/ 통합 반영) | 폴더 구조 확정 | +| 0-2 | 문서 분류 기준 확정 (폴더별 역할, 중복 방지 SSOT 규칙) | 분류 가이드 | +| 0-3 | 파일명·포맷·템플릿 표준 확정 (D3 반영) | 표준 문서 | +| 0-4 | `docs/CLAUDE.md` 유효 내용 → `INDEX.md` 통합, 파일 삭제 (D8) | INDEX.md 갱신 | +| 0-5 | `docs/front/` 필요 내용 이관 후 폴더 삭제 (D9) | front/ 제거 | +| 0-6 | `changes/` 기존 파일명 → `YYYYMMDD_description.md` 통일 (D7) | 파일명 변경 | + +**Phase 0 결정 사항 모두 확정됨 (D1~D9)** + +--- + +### Phase 1: 시스템 현황 문서화 (최우선) + +> 실제 코드를 분석하여 "지금 시스템이 어떤 상태인가"를 정확하게 기록 +> 산출물은 모두 `system/` 폴더에 배치 + +#### 1-A. DB 스키마 전면 재작성 + +| # | 작업 | 상세 | +|---|------|------| +| 1A-1 | 전체 마이그레이션 분석 (458개) | 테이블 목록, 컬럼, 관계 추출 | +| 1A-2 | 도메인별 테이블 그룹핑 | 기존 + 신규 도메인 분류 | +| 1A-3 | `system/database/` 도메인별 파일 작성 | README.md(인덱스) + 도메인별 스키마 | +| 1A-4 | 기존 `specs/database-schema.md` 폐기 처리 | system/database/로 이전 완료 표기 | + +#### 1-B. API 시스템 현황 + +| # | 작업 | 상세 | +|---|------|------| +| 1B-1 | 18개 라우트 도메인별 엔드포인트 경로 목록 | routes/api/v1/ 분석 | +| 1B-2 | 모델-서비스-컨트롤러 매핑 현황 | 205 모델 기준 도메인 분류 | +| 1B-3 | 인증/권한 구조 현황 | Sanctum + Spatie Permission | +| 1B-4 | `system/overview.md` 작성 | 전체 아키텍처 + 기술 스택 (Laravel 12, PHP 8.4) | +| 1B-5 | `system/api-structure.md` 작성 | API 도메인·라우트 현황 | + +#### 1-C. React(프론트엔드) 현황 + +| # | 작업 | 상세 | +|---|------|------| +| 1C-1 | 페이지 라우트 구조 현황 | 249개 페이지, 도메인별 분류 | +| 1C-2 | 컴포넌트 아키텍처 현황 | Atomic Design: 55 ui + 3 atoms + 11 molecules + 12 organisms | +| 1C-3 | 상태관리·API연동 패턴 현황 | Zustand 13 stores, 91 Server Actions | +| 1C-4 | `system/react-structure.md` 작성 | Next.js 15, React 19, Tailwind v4 | + +#### 1-D. MNG(관리자) 현황 + +| # | 작업 | 상세 | +|---|------|------| +| 1D-1 | 컨트롤러·뷰 도메인 구조 현황 | 171 컨트롤러, 436 블레이드 | +| 1D-2 | HTMX + DaisyUI 프론트 패턴 현황 | 서버 렌더링, Vite 7 | +| 1D-3 | api ↔ mng 모델 공유/차이 현황 | 205(api) vs 185(mng) 비교 | +| 1D-4 | `system/mng-structure.md` 작성 | MNG 전체 구조 현황 | + +#### 1-E. 인프라/환경 현황 + +| # | 작업 | 상세 | +|---|------|------| +| 1E-1 | Docker 구성 현황 분석 | 컨테이너, 네트워크, 볼륨 | +| 1E-2 | 도메인·환경 구성 현황 정리 | *.sam.kr(로컬), codebridge-x.com(개발) | +| 1E-3 | `system/docker-setup.md` 갱신 | 현재 Docker 구성 반영 | + +--- + +### Phase 2: 기존 문서 정비 + +> 부정확한 정보 수정, 폴더 이관, 불필요한 문서 정리 + +#### 2-A. 폴더 구조 이관 + +| # | 작업 | 상세 | +|---|------|------| +| 2A-1 | `architecture/` → `system/` 이관 | 파일 이동 + 내용 갱신 | +| 2A-2 | `specs/` → `system/` 이관 | 파일 이동 + 내용 갱신 | +| 2A-3 | 기존 폴더 제거 또는 리다이렉트 안내 | 혼란 방지 | + +#### 2-B. 부정확 문서 수정 + +| # | 대상 | 수정 내용 | +|---|------|----------| +| 2B-1 | `docs/CLAUDE.md` | 경로 수정 (`/Users/kent/...`), Laravel 12, 역할 재정의 | +| 2B-2 | `SAM/CLAUDE.md` (루트) | 문서 참조 경로 수정, system/ 반영 | +| 2B-3 | `docs/TODO.md` | 현행화 — 해결된 항목 정리, 미해결 항목 갱신 | +| 2B-4 | `docs/rules/README.md` | 실제 8개 파일 목록과 동기화 | +| 2B-5 | `docs/standards/quality-checklist.md` | 현재 기준에 맞게 갱신 | + +#### ~~2-C. 계획 문서 정리~~ → 제외 (D10: plans/ 이미 정리 완료, 건드리지 않음) + +#### 2-D. 구조 표준화 + +| # | 작업 | 상세 | +|---|------|------| +| 2D-1 | `changes/` 파일명 포맷 통일 | 단일 날짜 형식 적용 | +| 2D-2 | `guides/` 파일명 정리 | D3 기준 적용 (한글/영문 혼용 수정) | +| 2D-3 | `projects/` 프로젝트별 상태 갱신 | PROGRESS.md 현행화 | +| 2D-4 | 중복 문서 통합 | 동일 주제 다중 문서 → SSOT 확보 | + +--- + +### Phase 3: 신규 도메인 기능 문서 작성 + +> Phase 1 현황 분석 결과를 바탕으로 누락된 기능 문서 신규 작성 +> 각 문서: 기능 설명 + 엔드포인트 경로 목록 + Swagger 참조 안내 (D2) + +| # | 도메인 | 위치 | 우선순위 | +|---|--------|------|---------| +| 3-1 | 재무/회계 (Finance) | `features/finance/` 확장 | 🔴 | +| 3-2 | 전자서명 (E-Sign) | `features/esign/` 신규 | 🔴 | +| 3-3 | 설비관리 (Equipment) | `features/equipment/` 신규 | 🟡 | +| 3-4 | 차량관리 (Vehicle) | `features/card-vehicle/` 확장 | 🟡 | +| 3-5 | AI/음성 | `features/ai/` 신규 | 🟢 | +| 3-6 | 면접 시스템 | `features/hr/` 확장 | 🟢 | +| 3-7 | 채번규칙 | `rules/numbering-rules.md` 신규 | 🟢 | +| 3-8 | 문서서식 템플릿 | `features/documents/` 확장 | 🟢 | +| 3-9 | 바로빌 연동 확장 | `features/barobill-kakaotalk/` 확장 | 🟢 | +| 3-10 | 회의록 | `features/meeting/` 신규 | 🟢 | + +--- + +### Phase 4: 최종 검증 및 정리 + +> 모든 Phase 완료 후 — 문서 전체 정합성 확인 + 장기 정체 계획 최종 판단 + +| # | 작업 | 상세 | +|---|------|------| +| 4-1 | `docs/INDEX.md` 전면 재작성 | system/ 반영, 모든 문서 네비게이션 | +| 4-2 | `docs/CLAUDE.md` 최종 갱신 | 정확한 경로·정책·폴더 구조 반영 | +| 4-3 | `SAM/CLAUDE.md` 동기화 | docs/ 참조 경로 최종 확인 | +| 4-4 | 교차 참조 검증 | 문서 간 링크 유효성 확인 | +| 4-5 | 문서 크기 검증 | 10KB 초과 문서 분할 | +| ~~4-6~~ | ~~장기 정체 계획 최종 정리~~ | 제외 (D10: plans/ 건드리지 않음) | + +--- + +## 5. 의존 관계 및 실행 순서 + +``` +Phase 0 (정책 재정립) + │ + ├──→ Phase 1-A (DB 스키마) ──┐ + ├──→ Phase 1-B (API 현황) ├──→ Phase 3 (신규 기능 문서) + ├──→ Phase 1-C (React 현황) │ │ + ├──→ Phase 1-D (MNG 현황) │ │ + └──→ Phase 1-E (인프라 현황) ──┘ │ + │ │ + ├──→ Phase 2 (기존 문서 정비) ──┘ + │ │ + └──────────────────────────────→ Phase 4 (최종 검증 + 장기계획 정리) +``` + +- **Phase 0** → 모든 Phase의 선행 조건 +- **Phase 1 (A~E)** → 병렬 가능 +- **Phase 2** → Phase 1과 부분 병렬 가능 (2-B, 2-C는 독립 선행 가능) +- **Phase 2-A** (폴더 이관) → Phase 1 이후 (system/ 내용이 먼저 작성되어야 이관 가능) +- **Phase 3** → Phase 1 완료 후 (현황 기반) +- **Phase 4** → 모든 Phase 완료 후 + +--- + +## 6. 예상 산출물 + +| Phase | 주요 산출물 | +|-------|-----------| +| 0 | 문서 정책서 (폴더 구조, 분류 기준, 명명 규칙, 템플릿, SSOT 원칙) | +| 1-A | `system/database/` — README.md + 도메인별 스키마 파일 (~9개) | +| 1-B | `system/overview.md` + `system/api-structure.md` | +| 1-C | `system/react-structure.md` | +| 1-D | `system/mng-structure.md` | +| 1-E | `system/docker-setup.md` 갱신 | +| 2 | 정비된 기존 문서 + architecture/specs/ → system/ 이관 | +| 3 | 10개 도메인 기능 문서 (신규/확장) | +| 4 | INDEX.md + SAM/CLAUDE.md 최종본 | + +--- + +## 7. 확정된 폴더 구조 (Phase 0 완료 후 목표) + +``` +docs/ +├── INDEX.md ← 마스터 네비게이션 +├── CURRENT_WORKS.md ← docs 작업 추적 +│ (CLAUDE.md 삭제 → INDEX.md 통합 — D8) +│ +├── system/ ← 🆕 시스템 현황 (architecture/ + specs/ 통합) +│ ├── overview.md ← 전체 아키텍처 + 기술 스택 +│ ├── database/ ← DB 스키마 (도메인별) +│ ├── api-structure.md ← API 도메인·라우트 현황 +│ ├── react-structure.md ← React 구조 현황 +│ ├── mng-structure.md ← MNG 구조 현황 +│ ├── security-policy.md ← 보안 정책 +│ ├── scaling-roadmap.md ← 스케일링 +│ ├── docker-setup.md ← Docker/인프라 +│ └── ... ← 기타 스펙 +│ +├── standards/ ← 코딩 표준·컨벤션 +├── rules/ ← 비즈니스 규칙·정책 +├── features/ ← 기능별 상세 문서 +├── guides/ ← 구현 가이드·매뉴얼 +│ (front/ 삭제 — D9) +├── quickstart/ ← 개발자 빠른 시작 +│ +├── plans/ ← 작업 추적 (예정 → 진행 → 완료 → archive/) +│ ├── index_plans.md +│ ├── GUIDE.md +│ ├── [계획 문서들] +│ └── archive/ +│ +├── projects/ ← 프로젝트성 자료 (분석, 설계, 참고) +├── changes/ ← 변경 이력 +├── deploys/ ← 운영 매뉴얼 +├── data/ ← 데이터 분석 +├── history/ ← 히스토리 기록 +├── api/ ← API 통합 문서 +├── requests/ ← 요청/기획 문서 +└── assets/ ← BI 등 정적 자산 +``` + +--- + +## 변경 이력 + +| 날짜 | 변경 내용 | +|------|----------| +| 2026-02-27 | 초안 작성 — 시스템 분석 결과 기반 계획 수립 | +| 2026-02-27 | Q1~Q6 결정 사항 반영 — D1~D6 확정, Phase별 산출물 구체화 | +| 2026-02-27 | D7~D9 추가 확정 — 날짜 포맷, CLAUDE.md→INDEX.md 통합, front/ 삭제 | +| 2026-02-27 | D10~D11 추가 — plans/, deploys/ops-manual/ 현행 유지(건드리지 않음) | +| 2026-02-27 | Phase 0 완료 — INDEX.md 재작성, CLAUDE.md→INDEX.md 통합, front/→guides/ 이관, changes/ 포맷 통일 | +| 2026-02-27 | Phase 1 완료 — system/ 문서 14개 작성 (overview, api-structure, react-structure, mng-structure, docker-setup, database/README + 9개 도메인 스키마) | +| 2026-02-27 | Phase 2 완료 — 2-A: architecture/+specs/→system/ 이관(6개 이동, 4개 폐기), 2-B: rules/README.md 갱신, 경로 참조 수정(13개 파일), 2-D: changes/ 파일명 D7 통일(3개), guides/ D3 위반 수정(1개) | +| 2026-02-27 | Phase 3 완료 — 7개 도메인 문서 작성: esign/(1), documents/(1), ai/(1), equipment/(1), numbering-rules(1), finance/ 확장(9+README갱신), barobill/ 확장(API 설정 섹션). 건너뜀: Vehicle(문서 완성), Interview(문서 완성), Meeting(API 미구현) | +| 2026-02-27 | Phase 4 완료 — INDEX.md 링크검증(96개 중 1개 깨짐→수정), 교차참조검증(7개 파일 11개 깨진링크→전수 수정), SAM/CLAUDE.md 동기화(docs/ 참조 이상 없음, root 참조 깨짐 5건은 docs/ 범위 밖), 문서크기검증(활성 문서 모두 10KB 이내, plans/history/projects는 D10/D11 대상 제외) | \ No newline at end of file diff --git a/dev/dev_plans/docs-plans-cleanup-plan.md b/dev/dev_plans/docs-plans-cleanup-plan.md new file mode 100644 index 0000000..863a139 --- /dev/null +++ b/dev/dev_plans/docs-plans-cleanup-plan.md @@ -0,0 +1,326 @@ +# docs/dev_plans 폴더 정리 계획 + +> **작성일**: 2026-02-26 +> **목적**: docs/dev_plans 폴더의 문서 분류, 통폐합, 히스토리 보관, 인덱스 재작성 +> **상태**: ⏳ Phase 1 대기 + +--- + +## 📍 현재 진행 상태 + +| 항목 | 내용 | +|------|------| +| **마지막 완료 작업** | Phase 4: 최종 검증 완료 | +| **다음 작업** | 없음 (정리 완료) | +| **진행률** | 4/4 Phase (100%) | +| **마지막 업데이트** | 2026-02-26 | + +--- + +## 1. 개요 + +### 1.1 배경 + +`docs/dev_plans/` 폴더에 문서가 누적되면서 다음 문제 발생: +- 같은 도메인에 신/구 문서가 공존 (방향 전환 등으로 새 문서가 생겼으나 이전 문서 미정리) +- 완료된 문서, 폐기된 문서, 진행중인 문서가 혼재 +- archive에 37개 개별 파일이 산재 (참조 효율 저하) +- sub/, clodeCheck/ 등 부수 폴더의 역할 불명확 + +### 1.2 현재 상태 + +``` +docs/dev_plans/ ← 메인: 44개 md 파일 +├── archive/ ← 완료: 37개 md 파일 +├── sub/ ← 하위계획: 7개 md + archive/ +├── clodeCheck/ ← 코드체크 리포트: 7개 md +├── flow-tests/ ← 플로우 테스트 JSON: 32개 +├── SAM_ERP_Storyboard_D1.0_251218/ ← 스토리보드: 38장 +└── index_plans.md ← 현재 인덱스 +``` + +### 1.3 성공 기준 + +- [ ] 모든 메인 문서(44개)가 5단계 중 하나로 분류됨 +- [ ] SUPERSEDED 문서가 최신 문서에 병합되어 삭제됨 +- [ ] COMPLETED 문서가 archive/HISTORY.md로 요약 통합됨 +- [ ] OBSOLETE 문서가 삭제됨 +- [ ] sub/, clodeCheck/ 각 파일 처리 완료 +- [ ] index_plans.md가 ACTIVE+PLANNED 문서만 반영하여 재작성됨 +- [ ] docs/dev_plans/에 ACTIVE + PLANNED 문서만 존재 + +--- + +## 2. 확정된 정책 + +### 2.1 문서 분류 기준 (5단계) + +| 분류 | 정의 | 처리 | 최종 위치 | +|------|------|------|----------| +| **ACTIVE** | 현재 진행중이거나 곧 착수할 문서 | 유지, 최신화 | `docs/dev_plans/` | +| **PLANNED** | 확정된 예정 작업, 선행조건 대기 | 유지, 최신화 | `docs/dev_plans/` | +| **SUPERSEDED** | 새 문서로 대체된 이전 문서 | 새 문서에 병합 후 **삭제** | 파일 없음 | +| **COMPLETED** | 완료된 작업 | HISTORY.md에 요약 후 **삭제** | `archive/HISTORY.md` | +| **OBSOLETE** | 방향 전환/폐기된 문서 | **삭제** | 파일 없음 | + +### 2.2 SUPERSEDED 판정 기준 + +같은 도메인에 문서 2개 이상일 때: +- **최신 문서(나중 생성)가 기준** → 이전 문서는 SUPERSEDED +- 이전 문서에만 있는 유용한 내용 → 최신 문서에 병합 +- 이전 문서가 최신 문서를 참조하지 않고 독립적 → 내용 비교 후 판단 +- 이전 문서가 최신 문서에 참조됨 → 최신 문서에 해당 내용 통합 + +**통폐합 후보 도메인** (파일명 기반, Phase 1에서 확정): +- 견적: `quote-*` 6개 +- 문서시스템: `document-*` 5개 +- 품목: `item-*`, `bom-*`, `mng-item-*` 등 +- 채번: `tenant-numbering-*`, `mng-numbering-*` + +### 2.3 HISTORY.md 구조 + +```markdown +# 완료 작업 히스토리 + +## 견적/수주 +| 기능 | 완료시기 | 요약 | +|------|---------|------| +| 견적 자동계산 | 2025-12 | 경동 수식 엔진 구현, V2 자동계산 적용 | + +## 품목/BOM +| 기능 | 완료시기 | 요약 | +| ... | ... | ... | + +## 생산/절곡 +... +``` + +- 기능 도메인별 섹션으로 구분 +- 각 항목: 기능명 + 완료시기 + 한줄 요약 (상세 불필요) +- 현재 archive/ 37개 + 이번 정리에서 COMPLETED로 분류된 문서 모두 포함 + +### 2.4 sub/, clodeCheck/ 처리 원칙 + +Phase 1에서 **문서별로 판단** (D 옵션): + +**sub/ 각 파일 → 아래 중 택1:** +- A. 메인 승격: 아직 유효 → `docs/dev_plans/`로 이동 +- B. 상위 문서에 병합: 내용이 상위 계획에 포함 가능 +- C. 삭제: 이미 반영되었거나 폐기 + +**clodeCheck/ 각 파일 → 아래 중 택1:** +- A. 삭제: 일회성 리포트 +- B. HISTORY.md에 요약: 한 줄 이력으로 보관 + +### 2.5 변경하지 않는 대상 + +| 폴더 | 이유 | +|------|------| +| `flow-tests/` | 운영 도구 (JSON 테스트 케이스) | +| `SAM_ERP_Storyboard_D1.0_251218/` | 디자인 참조 (스토리보드) | + +--- + +## 3. 실행 계획 (4 Phase) + +### Phase 1: 분류 (읽기 전용) + +**목표**: 모든 문서를 5단계 중 하나로 분류 + +**작업 절차**: +1. 메인 44개 문서의 내용을 읽고 분류 판정 +2. sub/ 7개 문서의 상위 문서 관계 파악 후 분류 판정 +3. clodeCheck/ 7개 리포트의 보관 가치 판정 +4. 현재 archive/ 37개 문서의 요약 정보 추출 (HISTORY.md용) +5. 분류 결과 테이블 작성 → 사용자 확인 + +**산출물**: 아래 테이블 완성 + +#### 3.1.1 메인 문서 분류 결과 + +| # | 파일명 | 분류 | 비고 | +|---|--------|------|------| +| 1 | 5130-to-mng-migration-plan.md | ACTIVE | 13% 진행중 | +| 2 | api-explorer-development-plan.md | PLANNED | 미착수 | +| 3 | bending-info-auto-generation-plan.md | PLANNED | 설계 확정, 착수 대기 | +| 4 | bending-material-input-mapping-plan.md | PLANNED | GAP 분석 완료 | +| 5 | bending-preproduction-stock-plan.md | COMPLETED | 14/14 완료 | +| 6 | bom-item-mapping-plan.md | ACTIVE | 66% Phase 3 검증 잔여 | +| 7 | card-management-section-plan.md | ACTIVE | 50% 모달 연동 진행중 | +| 8 | dashboard-api-integration-plan.md | ACTIVE | 45% Phase 2 예정 | +| 9 | db-backup-system-plan.md | ACTIVE | 79% 서버 작업 3건 잔여 | +| 10 | db-trigger-audit-system-plan.md | COMPLETED | 94% 옵션만 잔여 | +| 11 | dev-toolbar-plan.md | ACTIVE | 38% Phase 2-4 진행중 | +| 12 | document-management-system-plan.md | SUPERSEDED | → document-system-master.md | +| 13 | document-system-master.md | ACTIVE | Phase 4-5 마스터 문서 | +| 14 | document-system-mid-inspection.md | ACTIVE | 5/6 결재만 남음 | +| 15 | document-system-work-log.md | ACTIVE | 3/4+α React 연동 잔여 | +| 16 | dummy-data-seeding-plan.md | PLANNED | 미착수 | +| 17 | employee-user-linkage-plan.md | PLANNED | 미착수 | +| 18 | erp-api-development-plan.md | ACTIVE | Phase L 진행중 | +| 19 | esign-alimtalk-integration.md | PLANNED | 카카오 채널 개설 후 착수 | +| 20 | fg-code-consolidation-plan.md | ACTIVE | 분석완료, Phase 1 착수 전 | +| 21 | hotfix-20260119-action-plan.md | OBSOLETE | 일회성 핫픽스 이력 | +| 22 | incoming-inspection-document-integration-plan.md | PLANNED | 분석만 완료 | +| 23 | incoming-inspection-templates-plan.md | ACTIVE | 83% 4종 품목 대기 | +| 24 | intermediate-inspection-report-plan.md | PLANNED | 검토 대기 | +| 25 | item-inventory-management-plan.md | PLANNED | 설계 확정, 구현 대기 | +| 26 | item-master-data-alignment-plan.md | ACTIVE | 섀도잉 정리 재수행 | +| 27 | items-migration-kyungdong-plan.md | SUPERSEDED | → kd-items-migration-plan.md (archive) | +| 28 | kd-orders-migration-plan.md | PLANNED | 선행조건 미충족 | +| 29 | kd-quote-logic-plan.md | ACTIVE | 80% Phase 5 직전 | +| 30 | mng-item-field-management-plan.md | PLANNED | 미착수 | +| 31 | mng-menu-system-plan.md | ACTIVE | 구현완료, 테스트 잔여 | +| 32 | mng-numbering-rule-management-plan.md | PLANNED | 미착수 | +| 33 | monthly-expense-integration-plan.md | PLANNED | 미착수 | +| ~~34~~ | ~~product-code-traceability-plan.md~~ | **제외** | 진행중 - 정리 대상 아님 | +| 35 | quote-calculation-api-plan.md | PLANNED | 설계 완료, 미착수 | +| 36 | quote-management-8issues-plan.md | PLANNED | 컨펌 대기 | +| 37 | quote-management-url-migration-plan.md | COMPLETED | 92% 잔여 사소 | +| 38 | quote-order-sync-improvement-plan.md | PLANNED | 승인 대기 | +| 39 | quote-system-development-plan.md | SUPERSEDED | → kd-quote-logic-plan.md | +| 40 | react-api-integration-plan.md | ACTIVE | 기능별 API 연동 진행중 | +| 41 | react-mock-remaining-tasks.md | SUPERSEDED | → react-mock-to-api-migration-plan.md | +| 42 | react-mock-to-api-migration-plan.md | ACTIVE | Mock→API 전환 진행중 | +| 43 | receiving-management-analysis-plan.md | PLANNED | 분석 완료, 개발 대기 | +| 44 | simulator-ui-enhancement-plan.md | ACTIVE | 60% Phase 2 진행중 | +| 45 | tenant-id-compliance-plan.md | PLANNED | 실행 대기 | +| 46 | tenant-numbering-system-plan.md | PLANNED | 미착수 | + +#### 3.1.2 sub/ 문서 분류 결과 + +| # | 파일명 | 처리 | 상위 문서 | 비고 | +|---|--------|:----:|----------|------| +| 1 | categories-plan.md | C (삭제) | construction-api (archive) | 상위 완료 | +| 2 | contract-plan.md | C (삭제) | construction-api (archive) | 상위 완료 | +| 3 | items-plan.md | C (삭제) | construction-api (archive) | 상위 완료 | +| 4 | order-management-plan.md | C (삭제) | construction-api (archive) | 상위 완료 | +| 5 | pricing-plan.md | C (삭제) | construction-api (archive) | 상위 완료 | +| 6 | site-management-plan.md | C (삭제) | construction-api (archive) | 상위 완료 | +| 7 | structure-review-plan.md | C (삭제) | construction-api (archive) | 상위 완료 | + +#### 3.1.3 clodeCheck/ 문서 분류 결과 + +| # | 파일명 | 처리 | 비고 | +|---|--------|:----:|------| +| 1 | attendance-management_2026-01-14_23-30-00.md | A (삭제) | 일회성 E2E 리포트 | +| 2 | bank-transactions_2026-01-15_test-report.md | A (삭제) | 일회성 테스트 리포트 | +| 3 | card-transactions_2026-01-15_test-report.md | A (삭제) | 일회성 테스트 리포트 | +| 4 | employee-register_2026-01-14_20-00-00.md | A (삭제) | 일회성 테스트 리포트 | +| 5 | salary-management_2026-01-15_10-30-00.md | A (삭제) | 일회성 테스트 리포트 | +| 6 | sales-management_2026-01-15_test-report.md | A (삭제) | 일회성 테스트 리포트 | +| 7 | withdrawal-management_2026-01-15_test-report.md | A (삭제) | 일회성 테스트 리포트 | + +**Phase 1 완료 기준**: 위 3개 테이블 완성 + 사용자 승인 + +--- + +### Phase 2: 통폐합 (승인 후) + +**목표**: SUPERSEDED 문서를 최신 문서에 병합 + +**작업 절차**: +1. Phase 1에서 SUPERSEDED로 분류된 문서 목록 확인 +2. 각 SUPERSEDED 문서 → 대응하는 최신 문서 매핑 +3. 이전 문서에만 있는 유용한 내용 추출 +4. 최신 문서에 병합 (필요한 내용만) +5. **건별로 사용자 확인** (또는 일괄 승인 선택) +6. 확인 후 이전 문서 삭제 + +**산출물**: 통폐합 매핑 테이블 + +| SUPERSEDED 문서 | 병합 대상 (최신) | 병합 내용 요약 | 승인 | +|----------------|-----------------|---------------|------| +| (Phase 1 결과) | | | | + +**Phase 2 완료 기준**: 모든 SUPERSEDED 문서 처리 + 사용자 승인 + +--- + +### Phase 3: 정리 + +**목표**: COMPLETED/OBSOLETE 처리, HISTORY.md 작성, 인덱스 재작성 + +**병렬 가능한 작업**: + +**3-A. HISTORY.md 작성** +1. 현재 archive/ 37개 문서에서 기능명 + 완료시기 + 한줄요약 추출 +2. Phase 1에서 COMPLETED로 분류된 메인 문서도 동일 처리 +3. 기능 도메인별로 분류하여 HISTORY.md 작성 +4. archive/ 개별 파일 삭제 + +**3-B. OBSOLETE 삭제** +1. Phase 1에서 OBSOLETE로 분류된 문서 삭제 +2. sub/ 처리 (Phase 1 판정에 따라) +3. clodeCheck/ 처리 (Phase 1 판정에 따라) + +**3-C. index_plans.md 재작성** (3-A, 3-B 완료 후) +1. ACTIVE + PLANNED 문서만 기능 도메인별로 정리 +2. 각 문서의 상태/진행률 반영 +3. HISTORY.md 링크 포함 + +**Phase 3 완료 기준**: 폴더에 ACTIVE+PLANNED만 남음 + index 재작성 완료 + +--- + +### Phase 4: 검증 + +**목표**: 최종 구조 확인 + +**체크리스트**: +- [ ] docs/dev_plans/에 ACTIVE + PLANNED 문서만 존재 +- [ ] archive/에 HISTORY.md만 존재 +- [ ] sub/, clodeCheck/ 정리 완료 +- [ ] index_plans.md가 실제 파일과 일치 +- [ ] 삭제된 문서 중 필요한 내용이 누락되지 않았는지 확인 +- [ ] flow-tests/, Storyboard 폴더 영향 없음 + +--- + +## 4. 작업 시 주의사항 + +### 4.0 정리 제외 대상 + +아래 문서는 정리/분류/통폐합 대상에서 **제외**한다: +- `product-code-traceability-plan.md` — 현재 진행중 +- **이 정리 작업 이후 신규 생성되는 문서** — GUIDE.md 원칙에 따라 생성되므로 정리 불필요 + +### 4.1 삭제 전 확인 원칙 +- 문서 삭제 전 반드시 내용을 읽고 유용한 정보 유무 확인 +- SUPERSEDED 삭제 시 최신 문서에 병합 완료 확인 후 삭제 +- **git에서 복구 가능하므로** 과도한 보수적 판단 불필요 + +### 4.2 판단 기준 우선순위 +- 최신 문서 > 이전 문서 +- 구체적 구현 내용 > 추상적 계획 +- 현재 시스템에 적용된 내용 > 적용 예정이었던 내용 + +### 4.3 변경 승인 정책 + +| 분류 | 예시 | 승인 | +|------|------|------| +| ✅ 즉시 가능 | Phase 1 분류 테이블 작성 | 불필요 (읽기 전용) | +| ⚠️ 컨펌 필요 | 문서 병합, 삭제, HISTORY.md 작성 | **Phase별 사용자 승인** | +| 🔴 금지 | flow-tests/, Storyboard 수정 | 별도 협의 | + +--- + +## 5. 변경 이력 + +| 날짜 | 항목 | 변경 내용 | +|------|------|----------| +| 2026-02-26 | 문서 초안 | 정책 수립 완료, 4 Phase 계획 작성 | +| 2026-02-26 | Phase 1~4 완료 | 분류→통폐합→정리→검증 전 과정 완료 | + +--- + +## 6. 참고 문서 + +- **문서 가이드**: `docs/dev_plans/GUIDE.md` ← 정리 시 준수할 최소 원칙 +- **현재 인덱스**: `docs/dev_plans/index_plans.md` +- **문서 인덱스**: `docs/INDEX.md` +- **프로젝트 구조**: `CLAUDE.md` + +--- + +*이 문서는 /plan 스킬로 생성되었습니다.* \ No newline at end of file diff --git a/dev/dev_plans/document-snapshot-architecture-plan.md b/dev/dev_plans/document-snapshot-architecture-plan.md new file mode 100644 index 0000000..c702698 --- /dev/null +++ b/dev/dev_plans/document-snapshot-architecture-plan.md @@ -0,0 +1,385 @@ +# 문서 스냅샷 아키텍처 계획 + +> **작성일**: 2026-03-06 +> **목적**: 문서 보기/인쇄 시 HTML 스냅샷 기반 출력으로 전환 (B안 + 구조화 데이터 병행) +> **상태**: ✅ 코드 완료 (검증 대기) +> **영향 범위**: API(저장), React(캡처/전송), MNG(출력) + +--- + +## 현재 진행 상태 + +| 항목 | 내용 | +|------|------| +| **마지막 완료 작업** | Phase 2 전면 보정: API 누락 수정, 오프스크린 렌더링 적용, readOnly 자동 캡처 제거 | +| **다음 작업** | Phase 4: 브라우저 검증 + 기존 partial 정리 | +| **진행률** | 13/13 (100% 코드 완료, 검증 대기) | +| **마지막 업데이트** | 2026-03-06 | + +--- + +## 1. 개요 + +### 1.1 배경 + +현재 MNG 문서 보기(`show.blade.php`)는 문서 양식별로 전용 blade partial을 만들어 렌더링한다: +- `bending-inspection-data.blade.php` (절곡 중간검사) +- `bending-worklog.blade.php` (절곡 작업일지) + +이 방식의 문제: +1. **확장 불가**: 회사마다 다양한 양식이 존재 → 양식마다 blade 파일 생성 불가 +2. **스냅샷 미보장**: 하드코딩된 제품 목록/도면치수가 정책 변경 시 과거 문서를 깨뜨림 +3. **이중 렌더링**: React와 MNG에서 동일 문서를 각각 렌더링 → 불일치 발생 + +### 1.2 목표 아키텍처 + +``` +[React] 문서 저장 시 +├── 구조화 데이터 저장 (기존 유지) +│ ├── document_data (EAV 플랫) +│ └── work_order_items.options.inspection_data (JSON 스냅샷) +└── rendered_html 저장 (신규) + └── React가 렌더링한 HTML을 캡처 → documents.rendered_html에 저장 + +[MNG] 문서 보기 시 +├── rendered_html 있으면 → 그대로 출력 (렌더링 로직 0) +└── rendered_html 없으면 → 기존 동적 렌더링 fallback +``` + +### 1.3 핵심 원칙 + +``` +1. 하나의 view 파일로 모든 문서를 보기 (문서 양식별 blade 파일 금지) +2. rendered_html이 있으면 무조건 그것을 사용 (완전한 스냅샷) +3. 구조화 데이터는 편집/검색/통계용으로 병행 유지 +4. React에서만 문서 렌더링 책임 → MNG는 출력만 담당 +5. Lazy Snapshot: 조회 시 rendered_html 없으면 자동 캡처 → 저장 (점진적 스냅샷 전환) +``` + +### 1.4 변경 승인 정책 + +| 분류 | 예시 | 승인 | +|------|------|------| +| 즉시 가능 | blade 템플릿 수정, 기존 partial 정리 | 불필요 | +| 컨펌 필요 | API 저장 로직 변경, React 저장 흐름 변경 | **필수** | +| 금지 | documents 테이블 구조 변경 (이미 rendered_html 존재) | 불필요 | + +--- + +## 2. 현황 분석 + +### 2.1 DB 현황 + +`documents` 테이블에 이미 `rendered_html` (LONGTEXT, nullable) 컬럼이 존재: +- 마이그레이션: `api/database/migrations/2026_02_28_100001_add_block_data_to_documents.php` +- 현재 값: 모든 문서에서 NULL (사용 안 됨) +- **DB 변경 불필요** + +### 2.2 React 현황 (구현 완료) + +#### 캡처 원칙 A: 입력 시 저장 (Active Capture) + +입력 화면에서 저장할 때 해당 데이터의 "문서 뷰"를 캡처. 보기(readOnly)에서는 캡처하지 않음. + +| Save Path | 파일 | 방식 | 캡처 대상 | +|-----------|------|------|----------| +| 작업일지 저장 | `WorkLogModal.tsx` | contentWrapperRef.innerHTML | 작업일지 문서 뷰 | +| 검사성적서 저장 (edit) | `InspectionReportModal.tsx` | contentWrapperRef.innerHTML | 검사 성적서 문서 뷰 | +| 수입검사 저장 | `ImportInspectionInputModal.tsx` | 오프스크린 렌더링 (`captureRenderedHtml`) | 수입검사 성적서 문서 (`ImportInspectionDocument`) | +| WorkerScreen 인라인 검사 저장 | `index.tsx` | 미캡처 (데이터만 저장) | 성적서 모달에서 저장 시 캡처 | + +> **WorkerScreen 인라인 저장**: 검사 입력 시점에 성적서 문서가 렌더링되지 않으므로 rendered_html 미포함. +> 이후 InspectionReportModal을 edit 모드로 열어 저장하면 캡처됨. +> 향후 오프스크린 렌더링으로 확장 가능 (템플릿 로딩 등 async 의존성 해결 필요). + +#### 캡처 원칙 B: 조회 시 자동 캡처 (Lazy Snapshot) + +문서 조회(view/readOnly) 시 `rendered_html`이 없으면 자동 캡처하여 백그라운드 저장. + +``` +문서 View 시 +├── rendered_html 있음 → 그대로 표시 (기존) +└── rendered_html 없음 → 동적 렌더링 완료 후 캡처 → API로 rendered_html 저장 + (다음 조회부터는 스냅샷 사용) +``` + +**적용 대상**: +- readonly 문서 (제품검사 요청서 등 — 입력 없이 자동 생성되는 문서) +- 마이그레이션 이전 기존 데이터 (rendered_html이 NULL인 과거 문서) +- WorkerScreen 인라인 저장 후 아직 모달에서 저장하지 않은 문서 + +**구현 방식**: +```typescript +// 문서 표시 컴포넌트에서 (DocumentViewer, Modal 등) +useEffect(() => { + if (document && !document.rendered_html && isContentRendered) { + const html = contentWrapperRef.current?.innerHTML + || await captureRenderedHtml(DocumentComponent, props); + patchDocumentRenderedHtml(document.id, html); // 백그라운드 저장 + } +}, [document, isContentRendered]); +``` + +**고려사항**: +- 사용자 UX 영향 없음 (백그라운드 비동기 저장) +- 조회 권한만 있는 사용자도 트리거 가능해야 함 +- 동시 접속 시 중복 저장 가능 → 같은 HTML이므로 실질적 문제 없음 +- 캡처 타이밍: template 로드 + 데이터 바인딩 완료 후 (isContentRendered 판단 필요) + +### 2.3 API 현황 (구현 완료) + +- Document 모델 `$fillable`에 `rendered_html` 포함 ✅ +- `DocumentService` store/update에서 `rendered_html` 저장 ✅ +- `DocumentService` upsert에서 `rendered_html` 전달 ✅ (수입검사 경로) +- `StoreRequest`/`UpdateRequest`에 `rendered_html` nullable string 검증 ✅ +- `UpsertRequest`에 `rendered_html` nullable string 검증 ✅ + +### 2.4 MNG 현황 (구현 완료) + +- `show.blade.php`: rendered_html 우선 출력, 없으면 기존 동적 렌더링 fallback ✅ +- `print.blade.php`: 동일 패턴 적용 ✅ +- 전용 partial 파일 (삭제 대기): + - `partials/bending-inspection-data.blade.php` + - `partials/bending-worklog.blade.php` + +--- + +## 3. 작업 범위 + +### Phase 0: 사전 정리 + +| # | 작업 항목 | 상태 | 비고 | +|---|----------|:----:|------| +| 0.1 | API Document 모델 $fillable 확인 및 rendered_html 추가 | ✅ | | +| 0.2 | 기존 절곡 전용 partial 파일 정리 방침 결정 | ✅ | rendered_html 전환 후 삭제 | + +### Phase 1: API - rendered_html 저장 지원 + +| # | 작업 항목 | 상태 | 비고 | +|---|----------|:----:|------| +| 1.1 | Document 모델 $fillable에 rendered_html 추가 | ✅ | | +| 1.2 | DocumentService store/update에서 rendered_html 저장 | ✅ | | +| 1.3 | StoreRequest/UpdateRequest에 rendered_html 검증 추가 | ✅ | nullable, string | +| 1.4 | WorkOrderService inspection/worklog에 rendered_html 전달 | ✅ | create + update 모두 | + +### Phase 2: React - HTML 캡처 및 전송 + +| # | 작업 항목 | 상태 | 비고 | +|---|----------|:----:|------| +| 2.1 | 오프스크린 렌더링 유틸리티 생성 | ✅ | `captureRenderedHtml()` — `flushSync` + `createRoot` | +| 2.2 | InspectionReportModal 저장 시 rendered_html 포함 전송 | ✅ | contentWrapperRef.innerHTML 캡처 | +| 2.3 | 작업일지 저장 시 rendered_html 포함 전송 | ✅ | contentWrapperRef.innerHTML 캡처 | +| 2.4 | ImportInspectionInputModal 수입검사 저장 시 rendered_html | ✅ | 오프스크린 성적서 문서 렌더링 | +| 2.5 | ReceivingManagement/actions saveInspectionData 파라미터 추가 | ✅ | rendered_html → /documents/upsert 전달 | +| 2.6 | API UpsertRequest에 rendered_html 검증 추가 | ✅ | nullable string | + +### Phase 3: MNG - 스냅샷 출력 + +| # | 작업 항목 | 상태 | 비고 | +|---|----------|:----:|------| +| 3.1 | show.blade.php에 rendered_html 우선 출력 로직 추가 | ✅ | | +| 3.2 | 기존 전용 partial 파일 fallback으로 유지 (과도기) | ✅ | | +| 3.3 | print.blade.php에도 rendered_html 출력 적용 | ✅ | 스냅샷 우선, 레거시 fallback | + +### Phase 4: 검증 및 정리 + +| # | 작업 항목 | 상태 | 비고 | +|---|----------|:----:|------| +| 4.1 | 브라우저 검증 (MNG 보기/인쇄) | ⏳ | | +| 4.2 | 기존 전용 partial 파일 삭제 | ⏳ | rendered_html 전환 완료 후 | + +--- + +## 4. 상세 작업 내용 + +### 4.1 HTML 캡처 방식 (Phase 2.1) + +React에서 문서 컨텐츠 영역의 DOM을 캡처할 때 고려사항: + +**방법 A: innerHTML 직접 추출 + CSS 인라인화** +```typescript +// 문서 컨텐츠 영역에 ref 부여 +const contentRef = useRef(null); + +// 저장 시 HTML 추출 +const captureHtml = () => { + const el = contentRef.current; + if (!el) return ''; + + // Tailwind 클래스 → 인라인 스타일 변환 (또는 스타일시트 포함) + // 방법 1: 계산된 스타일을 인라인으로 + // 방법 2: 필요한 Tailwind CSS를 + + +``` + +**권장: 방법 B** — MNG에서 Tailwind가 로드되어 있으므로, Tailwind 클래스를 그대로 사용하되 MNG에 없는 커스텀 스타일만 `