fix: [stocks] 재고생산 상세 간소화 + 벤딩LOT/액션 보강
- 재고생산 상세 코드 대폭 간소화 - 벤딩 LOT 폼/액션 개선 - 경비계정 영수증번호 API 구현 문서
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
# 접대비 증빙번호(receipt_no) 자동 매핑 및 수기 입력 지원
|
||||
|
||||
## 날짜: 2026-03-18
|
||||
|
||||
## 배경
|
||||
CEO 대시보드 접대비 현황에서 "증빙 미비"로 표시되는 항목의 근본 원인:
|
||||
- `expense_accounts.receipt_no`가 항상 `null`로 고정 저장됨
|
||||
- 카드 거래(바로빌) 승인번호가 전달되지 않음
|
||||
- 수기 전표 입력 시 증빙번호 입력 필드 부재
|
||||
|
||||
## 수정 파일
|
||||
|
||||
### 백엔드 (sam-api)
|
||||
|
||||
| 파일 | 변경 내용 |
|
||||
|------|----------|
|
||||
| `app/Traits/SyncsExpenseAccounts.php` | `syncExpenseAccounts()`에 `$receiptNo` 파라미터 추가 + `resolveReceiptNo()` 메서드 신규 |
|
||||
| `app/Services/JournalSyncService.php` | `saveForSource()`에 `$receiptNo` 파라미터 추가 → `syncExpenseAccounts()`에 전달 |
|
||||
| `app/Services/GeneralJournalEntryService.php` | `store()`, `updateJournal()`에서 `$data['receipt_no']` → `syncExpenseAccounts()`에 전달 |
|
||||
| `app/Http/Requests/V1/GeneralJournalEntry/StoreManualJournalRequest.php` | `receipt_no` validation 규칙 추가 (`nullable\|string\|max:100`) |
|
||||
| `app/Http/Requests/V1/GeneralJournalEntry/UpdateJournalRequest.php` | `receipt_no` validation 규칙 추가 (`nullable\|string\|max:100`) |
|
||||
|
||||
### 프론트엔드 (sam-react-prod)
|
||||
|
||||
| 파일 | 변경 내용 |
|
||||
|------|----------|
|
||||
| `src/components/accounting/GeneralJournalEntry/ManualJournalEntryModal.tsx` | 증빙번호 입력 필드 추가 (FormField) |
|
||||
| `src/components/accounting/GeneralJournalEntry/actions.ts` | `createManualJournal()`에 `receiptNo` 파라미터 추가 → `receipt_no` body 전달 |
|
||||
|
||||
## 증빙번호 결정 로직 (우선순위)
|
||||
|
||||
```
|
||||
1순위: 명시적 전달 ($receiptNo 파라미터) — 수기 전표에서 사용자가 직접 입력
|
||||
2순위: 바로빌 카드 승인번호 자동 조회 — source_type=barobill_card일 때 approval_num
|
||||
3순위: null — 기본값 (증빙 미비로 판정됨)
|
||||
```
|
||||
|
||||
## SyncsExpenseAccounts 변경 상세
|
||||
|
||||
### Before
|
||||
```php
|
||||
ExpenseAccount::create([
|
||||
'receipt_no' => null, // 항상 null
|
||||
]);
|
||||
```
|
||||
|
||||
### After
|
||||
```php
|
||||
// 증빙번호 결정: 명시 전달 > 바로빌 승인번호 > null
|
||||
$resolvedReceiptNo = $receiptNo ?? $this->resolveReceiptNo($entry);
|
||||
|
||||
ExpenseAccount::create([
|
||||
'receipt_no' => $resolvedReceiptNo,
|
||||
]);
|
||||
```
|
||||
|
||||
### resolveReceiptNo() 신규 메서드
|
||||
- `SOURCE_BAROBILL_CARD` → `source_key`에서 ID 추출 → `BarobillCardTransaction.approval_num` 조회
|
||||
- 그 외 → `null`
|
||||
|
||||
## 영향 범위
|
||||
- CEO 대시보드 접대비 현황: 증빙 미비 건수 정확도 향상
|
||||
- CEO 대시보드 복리후생비 현황: 동일 트레이트 사용으로 함께 개선
|
||||
- 일반전표입력: 증빙번호 필드 추가 (UI)
|
||||
- 카드사용내역 분개: 바로빌 승인번호 자동 매핑 (추가 UI 변경 없음)
|
||||
|
||||
## 테스트 결과
|
||||
- 수기 전표에 증빙번호 입력 → expense_accounts.receipt_no에 저장 확인
|
||||
- 기존 미증빙 전표에 증빙번호 PUT → 증빙 미비 해소 확인
|
||||
- CEO 대시보드 접대비 현황: 증빙 미비 0건 / 고액 결제 0건 확인
|
||||
Reference in New Issue
Block a user