From 88b44fe76631c488f1fbb7913041eb929609ecfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Wed, 18 Mar 2026 19:56:52 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20[numbering]=20=EC=9E=AC=EA=B3=B5?= =?UTF-8?q?=ED=92=88=20=EB=A1=9C=ED=8A=B8=EB=B2=88=ED=98=B8=20=EC=B1=84?= =?UTF-8?q?=EB=B2=88=20=EA=B7=9C=EC=B9=99=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - stock_production 문서유형 추가 - 5.5절 재공품 로트번호 템플릿 추가 - scope_key 복합키 설명 보완 - 현재 등록 현황에 재공품 규칙 반영 --- rules/numbering-rules.md | 52 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/rules/numbering-rules.md b/rules/numbering-rules.md index 8dfdc50..0d6d22b 100644 --- a/rules/numbering-rules.md +++ b/rules/numbering-rules.md @@ -38,6 +38,7 @@ | `sale` | 매출 | (예정) | | `work_order` | 작업지시 | (예정) | | `material_receipt` | 원자재수입검사 | `ReceivingService` | +| `stock_production` | 재고생산 | `BendingCodeService` (향후 연동) | **리셋 주기:** @@ -212,7 +213,48 @@ URL: admin.codebridge-x.com/numbering-rules **결과:** `WO-20260317-0001` -### 5.5 월별 리셋 예시 (INV-YYYYMM-NNN) +### 5.5 재공품 로트번호 ({prod}{spec}{date}-{length}-NNN) + +> 절곡품 LOT 번호. 제품+종류+날짜+길이 조합별 독립 시퀀스. +> 날짜코드는 `BendingCodeService::generateDateCode()`가 생성한 4자리 압축 포맷. + +| 항목 | 값 | +|------|------| +| 규칙명 | `5130 재공품 로트번호` | +| 문서유형 | `stock_production` (재고생산) | +| 리셋 주기 | `daily` (일별) | +| 시퀀스 자릿수 | `3` | + +**패턴:** + +```json +[ + { "type": "param", "key": "prod_code", "default": "R" }, + { "type": "param", "key": "spec_code", "default": "M" }, + { "type": "param", "key": "date_code", "default": "6318" }, + { "type": "separator", "value": "-" }, + { "type": "param", "key": "length_code", "default": "30" }, + { "type": "separator", "value": "-" }, + { "type": "sequence" } +] +``` + +**결과:** `GI6318-53-001`, `GI6318-53-002`, ... (연기차단재 화이바원단 W50×3000) + +**scope_key:** 4개 param 값이 누적되어 `GI631853`처럼 조합별 독립 시퀀스 유지. + +**호출 예시:** + +```php +$numberingService->generate('stock_production', [ + 'prod_code' => 'G', // 연기차단재 + 'spec_code' => 'I', // 화이바원단(W50) + 'date_code' => '6318', // BendingCodeService::generateDateCode() + 'length_code' => '53', // W50×3000 +]); +``` + +### 5.6 월별 리셋 예시 (INV-YYYYMM-NNN) | 항목 | 값 | |------|------| @@ -290,9 +332,10 @@ ON DUPLICATE KEY UPDATE MySQL의 `ON DUPLICATE KEY UPDATE`로 Atomic 연산을 보장한다. 동시 요청에서도 시퀀스 충돌 없이 안전하게 번호를 생성한다. -**scope_key 분리**: `param`, `mapping` 세그먼트 값이 scope_key로 저장되어, 파라미터별 독립 시퀀스를 유지한다. +**scope_key 분리**: `param`, `mapping` 세그먼트 값이 **누적 결합**되어 scope_key로 저장된다. 복수 param이 있으면 조합별 독립 시퀀스를 유지한다. -예: 수주 `KD-SS-260317-01`과 `KD-TE-260317-01`은 각각 독립 시퀀스. +예 1: 수주 `KD-SS-260317-01`과 `KD-TE-260317-01`은 scope_key가 `SS`, `TE`로 각각 독립 시퀀스. +예 2: 재공품 `GI6318-53-001`과 `RM6318-30-001`은 scope_key가 `GI631853`, `RM631830`으로 조합별 독립. --- @@ -305,6 +348,7 @@ MySQL의 `ON DUPLICATE KEY UPDATE`로 Atomic 연산을 보장한다. 동시 요 | 1 | 5130 견적번호 | quote | `KD-PR-260317-01` | 일별 | 2 | | 2 | 5130 수주 로트번호 | order | `KD-SS-260317-01` | 일별 | 2 | | 3 | 원자재 로트번호 | material_receipt | `260317-01` | 일별 | 2 | +| 4 | 5130 재공품 로트번호 | stock_production | `RM6318-30-001` | 일별 | 3 | > 신규 테넌트에 규칙이 없으면 각 서비스의 레거시 로직이 자동 적용된다. @@ -317,4 +361,4 @@ MySQL의 `ON DUPLICATE KEY UPDATE`로 Atomic 연산을 보장한다. 동시 요 --- -**최종 업데이트**: 2026-03-17 +**최종 업데이트**: 2026-03-18