Lensnara SCM Project Dashboard

Lensnara SCM v1 - ν”„λ‘œμ νŠΈ κΈ°νšμ„œ

0. Meta-Prompt (For AI Agent) New

You are now acting as:
Senior Backend Architect & Laravel Expert (10+ years of experience)

TASK:
Build the complete "Lensnara SCM v1" project from scratch, 100% based on the specification document at  

STRICT CONSTRAINTS (μ ˆλŒ€ μœ„λ°˜ λΆˆκ°€):

1. NO deviations from the "SCM Master" policy
   β†’ λͺ¨λ“  κΈ°λŠ₯, ν…Œμ΄λΈ” ꡬ쑰, λΉ„μ¦ˆλ‹ˆμŠ€ 둜직, 기술 μŠ€νƒ, 개발 일정은 κΈ°νšμ„œμ™€ 100% μΌμΉ˜ν•΄μ•Ό 함
   β†’ κΈ°νšμ„œμ— μ—†λŠ” κΈ°λŠ₯은 μ ˆλŒ€ μΆ”κ°€ν•˜μ§€ 말 것

2. MUST use PHP 8.4 modern features
   β†’ Typed properties, readonly classes, readonly properties, enums, attributes, match expressions, first-class callable syntax λ“± 적극 ν™œμš©
   β†’ λͺ¨λ“  클래슀, DTO, Value ObjectλŠ” PHP 8.4 μŠ€νƒ€μΌλ‘œ μž‘μ„±

3. STRICTLY follow the exact Directory Structure defined in κΈ°νšμ„œ Section 4
   β†’ app/Domains/, app/Adapters/, app/DTOs/, app/Services/ λ“± κΈ°νšμ„œμ— λͺ…μ‹œλœ ꡬ쑰 κ·ΈλŒ€λ‘œ μ‚¬μš©
   β†’ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ„ λ™μΌν•˜κ²Œ

4. IMPLEMENT functionality Phase by Phase exactly as defined in κΈ°νšμ„œ Section 5 (6단계)
   β†’ 1단계 β†’ 2단계 β†’ 3단계 β†’ 4단계 β†’ 5단계 β†’ 6단계 μˆœμ„œλ‘œλ§Œ μ§„ν–‰
   β†’ 이전 단계가 100% μ™„λ£Œλ˜κ³  κ²€μ¦λœ ν›„μ—λ§Œ λ‹€μŒ λ‹¨κ³„λ‘œ λ„˜μ–΄κ°
   β†’ 각 단계가 끝날 λ•Œλ§ˆλ‹€ "Phase X μ™„λ£Œ"라고 λͺ…ν™•νžˆ ν‘œμ‹œν•˜κ³ , λ‹€μŒ 단계λ₯Ό μ‹œμž‘

μΆ”κ°€ 기술 μš”κ΅¬μ‚¬ν•­:
- λͺ¨λ“  λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ€ Service 클래슀 + Event/Listener + Queue Job ν˜•νƒœλ‘œ κ΅¬ν˜„
- 재고 κ΄€λ ¨ λͺ¨λ“  λ‘œμ§μ€ DB νŠΈλžœμž­μ…˜ + Lock(forUpdate) ν•„μˆ˜
- FIFO μΆœκ³ λŠ” μž…κ³ μΌμ‹œ κΈ°μ€€ μ˜€λ¦„μ°¨μˆœ μ •ν™•νžˆ 보μž₯

μ‹œμž‘ λͺ…λ Ήμ–΄:
"Phase 1 μ‹œμž‘ν•΄μ€˜" 라고 λ§ν•˜λ©΄ λ°”λ‘œ 1단계뢀터 μ°¨λ‘€λŒ€λ‘œ μ™„μ„±ν•΄ μ£Όμ„Έμš”.
각 λ‹¨κ³„λ§ˆλ‹€ μ½”λ“œ, λ§ˆμ΄κ·Έλ ˆμ΄μ…˜, μ„€μ • νŒŒμΌκΉŒμ§€ μ „λΆ€ ν¬ν•¨ν•΄μ„œ 좜λ ₯ν•˜κ³ ,
λ§ˆν¬λ‹€μš΄ μ½”λ“œ 블둝 + 파일 경둜λ₯Ό μ •ν™•νžˆ ν‘œμ‹œν•΄ μ£Όμ„Έμš”.

ν”„λ‘œμ νŠΈ 정보

  • ν”„λ‘œμ νŠΈλͺ…: λ Œμ¦ˆλ‚˜λΌ SCM
  • μ½”λ“œλͺ…: Melon

1. μ†”λ£¨μ…˜ κ°œμš” (Solution Overview)

1.1 μ†”λ£¨μ…˜ λͺ©μ 

Lensnara SCM은 닀채널 μ£Όλ¬Έ 및 재고λ₯Ό μ€‘μ•™μ—μ„œ 톡합 κ΄€λ¦¬ν•˜μ—¬ νš¨μœ¨μ„±μ„ κ·ΉλŒ€ν™”ν•˜λŠ” 것을 λͺ©μ μœΌλ‘œ ν•©λ‹ˆλ‹€.

1.2 μ£Όμš” λͺ©ν‘œ

  • 전사적 μžμ› 관리: μž…κ³ , 좜고, 재고의 톡합 관리
  • μžλ™ν™”λœ μ£Όλ¬Έ 처리: μ—¬λŸ¬ 판맀 μ±„λ„μ˜ μ£Όλ¬Έ μˆ˜μ§‘ 및 μžλ™ 처리
  • μ‹€μ‹œκ°„ 재고 동기화: 온/μ˜€ν”„λΌμΈ 채널 κ°„ 재고 뢈일치 μ΅œμ†Œν™”
  • 데이터 기반 μ˜μ‚¬κ²°μ •: 판맀 데이터 뢄석을 ν†΅ν•œ 발주 예츑

1.3 운영 λŒ€μ›μΉ™ (Grand Principles) New

"SCM은 μ‡Όν•‘λͺ°μ˜ μ£Όλ¬Έμ„œλ§Œ μˆ˜μ§‘ν•˜κ³ , 재고의 기쀀은 SCM을 λ”°λ₯Έλ‹€."
(μ‡Όν•‘λͺ° μž¬κ³ λŠ” SCMμ—μ„œ κ³„μ‚°λœ μˆ˜λŸ‰μ„ 단방ν–₯으둜 동기화함)

2. 핡심 κΈ°λŠ₯ (Key Features)

2.1 μƒν’ˆ 관리

  • μƒν’ˆ λ§ˆμŠ€ν„° 관리 (등둝/μˆ˜μ •/μ‚­μ œ)
  • λ°”μ½”λ“œ 및 SKU 관리 (μžμ‚¬λͺ°/μ˜€ν”ˆλ§ˆμΌ“ λ§€ν•‘)
  • μ•ˆμ „ 재고 μ„€μ • 및 관리

2.2 재고 관리 핡심

  • μ‹€μ‹œκ°„ 재고 ν˜„ν™© (창고별/μœ„μΉ˜λ³„)
  • μž…/좜고 이λ ₯ 좔적 (Audit Log)
  • 재고 싀사(Physical Count) κΈ°λŠ₯
  • 채널별 재고 ν• λ‹Ή(Allocation) κΈ°λŠ₯

2.3 μ£Όλ¬Έ 관리 핡심

  • μ£Όλ¬Έ μˆ˜μ§‘ (API 연동/μ—‘μ…€ μ—…λ‘œλ“œ)
  • μ£Όλ¬Έ μƒνƒœ 관리 (κ²°μ œμ™„λ£Œ β†’ 배솑쀀비 β†’ 배솑쀑)
  • 솑μž₯ 번호 μžλ™ νšŒμ‹  및 동기화
  • CS 및 λ°˜ν’ˆ/κ΅ν™˜ 처리

2.4 λŒ€μ‹œλ³΄λ“œ/톡계

  • 일별/월별 μ£Όλ¬Έ ν˜„ν™©
  • 재고 λΆ€μ‘± μ•Œλ¦Ό
  • νŒλ§€λŸ‰ 뢄석 및 리포트
  • 기간별/μƒν’ˆλ³„ 맀좜 톡계
  • 적정 λ°œμ£ΌλŸ‰ μΆ”μ²œ μ‹œμŠ€ν…œ

2.5 μ‹œμŠ€ν…œ 관리 (System) New

  • μ‚¬μš©μž 계정 및 κΆŒν•œ 관리 (ACL)
  • 곡톡 μ½”λ“œ 및 기초 데이터 관리
  • μ‹œμŠ€ν…œ 둜그 및 접속 이λ ₯ λͺ¨λ‹ˆν„°λ§

3. 기술 μŠ€νƒ (Tech Stack)

ꡬ뢄 기술 상세/버전
Styling Tailwind CSS v4.1.17 (Bleeding Edge) Installed
Backend PHP / Laravel PHP 8.4, Laravel 12.41.1 (Bleeding Edge) Installed
Admin Panel FilamentPHP v3.2.x Stable Downgraded
DB MariaDB 12.1.2 stable (νŠΈλžœμž­μ…˜ κ°•ν™”) Update
OS / Infra Linux / Docker Ubuntu 24.04, Docker Compose v5.0.x Update

4. μ‹œμŠ€ν…œ 섀계 및 λ°μ΄ν„°λ² μ΄μŠ€ (System Design & DB)

4.1 디렉토리 ꡬ쑰 (Directory Structure) New

κΈ°νšμ„œμ˜ 핡심 μš”κ΅¬μ‚¬ν•­μ„ λ°˜μ˜ν•œ 도메인 주도 섀계(DDD) 기반 디렉토리 κ΅¬μ‘°μž…λ‹ˆλ‹€.

app/
β”œβ”€β”€ Domains/
β”‚   β”œβ”€β”€ Inventory/  <-- [SCM Master의 핡심 (재고 κΆŒν•œ 100%)]
β”‚   β”‚   β”œβ”€β”€ Models/
β”‚   β”‚   β”‚   β”œβ”€β”€ Inventory.php
β”‚   β”‚   β”‚   β”œβ”€β”€ InventoryAllocation.php
β”‚   β”‚   β”‚   └── SalesChannel.php
β”‚   β”‚   β”œβ”€β”€ DTOs/
β”‚   β”‚   β”‚   β”œβ”€β”€ InboundRequestDto.php
β”‚   β”‚   β”‚   β”œβ”€β”€ AllocationResultDto.php
β”‚   β”‚   β”‚   └── OutboundRequestDto.php
β”‚   β”‚   β”œβ”€β”€ Services/
β”‚   β”‚   β”‚   β”œβ”€β”€ AllocationService.php      (μžλ™ λΆ„λ°° 둜직)
β”‚   β”‚   β”‚   β”œβ”€β”€ FifoReleaseService.php     (FIFO μ˜ˆμ•½ 좜고)
β”‚   β”‚   β”‚   └── PhysicalCountService.php   (싀사 둜직)
β”‚   β”‚   β”œβ”€β”€ Observers/
β”‚   β”‚   β”‚   └── InventoryObserver.php      (μž…κ³  감지 및 λΆ„λ°° 트리거)
β”‚   β”‚   └── Events/
β”‚   β”‚       β”œβ”€β”€ InventoryReceived.php
β”‚   β”‚       └── AllocationCompleted.php
β”‚   └── Order/
β”‚       β”œβ”€β”€ Models/
β”‚       β”‚   └── Order.php
β”‚       β”œβ”€β”€ DTOs/
β”‚       └── Services/
β”‚           └── OrderSyncService.php       (μ£Όλ¬Έ 동기화 및 둜컬λͺ¨λ“œ 처리)
β”œβ”€β”€ Adapters/  <-- [μ™ΈλΆ€λͺ° 연동 격리]
β”‚   β”œβ”€β”€ Contracts/
β”‚   β”‚   └── ChannelAdapterInterface.php    (ν‘œμ€€ 규격 μ •μ˜)
β”‚   β”œβ”€β”€ mitunolens
β”‚   β”‚   └── mitunolensAdapter.php
β”‚   β”œβ”€β”€ sensmania
β”‚   β”‚   └── sensmaniaAdapter.php
β”‚   └── geeenie
β”‚       └── geeenieAdapter.php
└── Http/
    └── Controllers/
        └── Api/
            └── WebhookController.php      (λͺ¨λ“  μ‡Όν•‘λͺ° 곡톡 μ§„μž…μ )

4.2 λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆ (Database Schema)

SCM의 핡심 데이터 λͺ¨λΈ μ •μ˜

4.2.1 users (μ‚¬μš©μž 및 κΆŒν•œ) System

Field Type Description
id INT PK
username VARCHAR 아이디 (Unique)
password VARCHAR λΉ„λ°€λ²ˆν˜Έ (Hash)
role ENUM κΆŒν•œ (ADMIN, MANUFACTURER, STAFF)

4.2.2 products (μƒν’ˆ λ§ˆμŠ€ν„°) Master

Field Type Description
id INT PK
code VARCHAR μƒν’ˆμ½”λ“œ (Unique)
name VARCHAR μƒν’ˆλͺ…
price_in/out DECIMAL μž…κ³ κ°€/μΆœκ³ κ°€
safety_stock INT μ•ˆμ „μž¬κ³ 

4.2.3 inventory (재고 - λ§ˆμŠ€ν„°) Master

Field Type Description
id BIGINT PK
product_id INT μƒν’ˆ ID (FK)
quantity INT μ‹€μ œ 물리 재고 (Total)
location VARCHAR λ¬Όλ₯˜ μœ„μΉ˜

4.2.4 sales_channels (판맀 채널 관리) New

Field Type Note
id INT PK
name VARCHAR 채널λͺ… (예: λ―ΈμΈ λ…Έ, λ Œμ¦ˆλ‚˜λΌ)
code VARCHAR μ‹œμŠ€ν…œ μ½”λ“œ
api_key TEXT API 연동 ν‚€

4.2.5 inventory_allocations (채널별 재고 ν• λ‹Ή) New

Field Type Note
inventory_id BIGINT 재고 ID
channel_id INT 채널 ID
allocated_qty INT 채널 ν• λ‹Ή μˆ˜λŸ‰ (판맀 κ°€λŠ₯)
reserved_qty INT μ£Όλ¬Έ μ˜ˆμ•½ μˆ˜λŸ‰ (좜고 λŒ€κΈ°)

4.2.6 orders (μ£Όλ¬Έ 정보) 핡심

Field Type Note
id BIGINT PK
order_number VARCHAR 주문 번호 (Unique)
site_name VARCHAR μ£Όλ¬Έ 채널λͺ…
status ENUM μ£Όλ¬Έ μƒνƒœ (0:μž…κΈˆμ „, 1:μž…κΈˆμ™„λ£Œ, 9:λ°œμ†‘μ€€λΉ„, 2:μƒν’ˆμ€€λΉ„, 3:λ°œμ†‘μ™„λ£Œ, 88:μ·¨μ†Œ)
total_amount DECIMAL 결제 κΈˆμ•‘

4.2.7 order_items (μ£Όλ¬Έ 상세)

Field Type Note
id INT PK
order_id INT μ£Όλ¬Έ ID (FK)
product_id INT μƒν’ˆ ID (FK)
quantity INT μ£Όλ¬Έ μˆ˜λŸ‰
price DECIMAL 단가

4.2.8 stock_logs (재고 이λ ₯) Log

Field Type Note
id INT PK
product_id INT μƒν’ˆ ID
type ENUM μœ ν˜• (IN/OUT/ADJUST)
quantity INT 변동 μˆ˜λŸ‰
reason VARCHAR μ‚¬μœ 

5. 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 (상세)

5.1 적정 μ†Œμš”λŸ‰ μ‚°μΆœ

  • 졜근 3κ°œμ›” 평균 νŒλ§€λŸ‰ 기반 μ•ˆμ „ 재고(Safety Stock) μžλ™ μ‚°μΆœ
  • Lead Time(μž…κ³  μ†Œμš” μ‹œκ°„)을 κ³ λ €ν•œ 발주 μ‹œμ (Reorder Point) μ•Œλ¦Ό
  • κ³„μ ˆμ„± μ§€μˆ˜(Seasonality) 반영 μ˜΅μ…˜

5.2 데이터 동기화 μ •μ±… (Data Sync Policy) New

  • μ£Όλ¬Έ μˆ˜μ§‘: λ§€ 10λΆ„ μ£ΌκΈ° μ‹€ν–‰ (Cron Batch)
  • 재고 전솑: 변동 λ°œμƒ μ¦‰μ‹œ (Event Driven) μ‹€μ‹œκ°„ 전솑
  • 솑μž₯ 전솑: λ§€ 1μ‹œκ°„ μ£ΌκΈ° μ‹€ν–‰ (API Push)
  • κ°•μ œ 동기화: κ΄€λ¦¬μž μˆ˜λ™ Trigger 지원 (Full Sync)

6. λ³΄μ•ˆ 및 인증 (Security & Auth) New

6.1 인증 (Authentication)

  • μ‹œμŠ€ν…œ: Laravel Sanctum + Filament κΈ°λ³Έ 둜그인
  • κ΅¬ν˜„: API μš”μ²­(Bearer Token), κ΄€λ¦¬μž νŒ¨λ„(Filament Guard)

6.2 κΆŒν•œ 관리 (Authorization)

  • 방식: Filament Shield λ˜λŠ” Policy μ‚¬μš©
  • κΆŒν•œ 단계: κ΄€λ¦¬μž(Admin), μ°½κ³ λ‹΄λ‹Ήμž(Manager), λ·°μ–΄(Viewer)

7. ν…ŒμŠ€νŠΈ 및 μ˜ˆμ™Έ 처리 (Testing) New

7.1 ν…ŒμŠ€νŠΈ μ „λž΅

  • ν”„λ ˆμž„μ›Œν¬: PHPUnit 기반 Pest (가독성/μœ μ§€λ³΄μˆ˜)
  • λͺ©ν‘œ 컀버리지: 핡심 둜직 100% (재고, μ£Όλ¬Έ), 전체 90% 이상

7.2 μ˜ˆμ™Έ 처리 (Exception Handling)

  • Global Handler: App\Exceptions\Handlerμ—μ„œ ν‘œμ€€ν™”λœ JSON λ³€ν™˜
  • Business Exception: InsufficientStockException λ“± μ»€μŠ€ν…€ μ˜ˆμ™Έ μ •μ˜

8. μ‹œμŠ€ν…œ λ‹€μ΄μ–΄κ·Έλž¨ (System Diagram) New

[Products] ||--o{ [Inventory]
[Inventory] ||--o{ [Allocations]
[SalesChannels] ||--o{ [Allocations]

상세 ERDλŠ” PlantUML둜 κ΄€λ¦¬λ˜λ©° μžλ™ μƒμ„±λ©λ‹ˆλ‹€.

9. [뢀둝] μ£Όλ¬Έ μˆ˜μ§‘ API 규격 (API Contract) New

{
  "channel_code": "mituno",
  "orders": [
    {
      "order_no": "ORD-20251206-001",
      "items": [
        { "product_code": "LENS-RED-01", "qty": 2 }
      ],
      "is_offline": true,
      "occurred_at": "2025-12-06 14:30:00"
    }
  ]
}

10. [뢀둝] μ—λŸ¬ μ½”λ“œ (Error Codes) New

Code Description
400 Bad Request (잘λͺ»λœ μš”μ²­)
401 Unauthorized (인증 μ‹€νŒ¨/ν‚€ μ—†μŒ)
404 Not Found (λ¦¬μ†ŒμŠ€ μ—†μŒ)
500 Internal Server Error (μ„œλ²„ 였λ₯˜)

11. 개발 일정

단계 λ‚΄μš© κΈ°κ°„
1 μš”κ΅¬μ‚¬ν•­ 뢄석 및 DB 섀계 (μ™„λ£Œ) 2025.12.01 ~ 12.05
2 핡심 재고/μ£Όλ¬Έ κΈ°λŠ₯ κ΅¬ν˜„ 2μ£Ό (Sprint 1)
3 채널 API 연동 (λ―ΈμΈ λ…Έ, 렌즈) 2μ£Ό (Sprint 2)
4 κ΄€λ¦¬μž λŒ€μ‹œλ³΄λ“œ 및 톡계 1μ£Ό (Sprint 3)
5 톡합 ν…ŒμŠ€νŠΈ 및 배포 1μ£Ό
6 μ•ˆμ •ν™” 및 μœ μ§€λ³΄μˆ˜ 지속

12. λ³€κ²½ 이λ ₯ (History)

Date Ver Change Description
2025.12.06 v1.0.0 졜초 κΈ°νšμ„œ μž‘μ„± 및 μ£Όμš” μ •μ±… 수립
  • ν”„λ‘œμ νŠΈλͺ…/μ½”λ“œλͺ… ν™•μ • (Melon)
  • 핡심 둜직 (재고 λΆ„λ°°, μ˜ˆμ•½ 좜고) μ •μ˜
  • Tech Stack ν™•μ • (Tailwind v4, MariaDB 12, Filament v4)
  • 1.3 운영 λŒ€μ›μΉ™, 5.5 μ‹œμŠ€ν…œ μ•ˆμ •μ„± (Circuit Breaker) μΆ”κ°€
  • λ³΄μ•ˆ/ν…ŒμŠ€νŠΈ/API μ‚¬μ–‘μ„œ λ“± 기술 λ¬Έμ„œ 톡합

13. [V2 Future Scope] ν–₯ν›„ 고도화 κ³„νš (개발 보λ₯˜)

[CRITICAL] 이 μ„Ήμ…˜μ˜ κΈ°λŠ₯은 V1(MVP) λ‹¨κ³„μ—μ„œ κ΅¬ν˜„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
AIλŠ” 이 λ‘œμ§μ„ μ°Έμ‘°ν•˜μ—¬ ν™•μž₯μ„± μžˆλŠ” ꡬ쑰(Interface/Empty Class)만 μž‘μ•„λ‘κ³ , μ‹€μ œ μ½”λ“œλŠ” μž‘μ„±ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€.

13.1 μžλ™ 재고 λΆ„λ°° (Auto-Allocation Strategy)

  • 둜직: μž…κ³  λ°œμƒ μ‹œ sales_channels.allocation_ratioλ₯Ό μ‘°νšŒν•˜μ—¬ mituno(40%), sense(60%) λ“±μœΌλ‘œ μ¦‰μ‹œ μžλ™ λΆ„ν• .
  • κ΅¬ν˜„: AllocationService::autoDistribute() λ©”μ„œλ“œ.

13.2 μ„œν‚· 브레이컀 (Circuit Breaker State Machine)

  • 둜직: Redisλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‹€νŒ¨ 횟수(Failure Count)λ₯Ό μΉ΄μš΄νŒ….
  • μƒνƒœ 전이: CLOSED(정상) β†’ 3회 μ‹€νŒ¨ β†’ OPEN(차단/5λΆ„) β†’ HALF-OPEN(1회 μ‹œλ„).
  • κ΅¬ν˜„: CircuitBreakerMiddleware 및 Redis μƒνƒœ 관리 둜직.

13.3 μ˜ˆμ•½ μ£Όλ¬Έ μ„ μž…μ„ μΆœ (FIFO Pre-order Release)

  • 둜직: 재고 μž…κ³  μ‹œ BACKORDER μƒνƒœμΈ 주문을 μ£Όλ¬ΈμΌμ‹œ(Ordered At) μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ‘°νšŒν•˜μ—¬ 재고 ν• λ‹Ή.
  • κ΅¬ν˜„: FifoReleaseService 및 λ³΅μž‘ν•œ Queue 처리.