- 거래처관리: vendor/freelancer 타입, OCR 명함인식 - 고객사관리: VIP/Gold/Silver/Bronze 등급, 업종별 관리 - 미수금관리: 부분/전액 수금, 연체 추적, API 서비스 - 미지급금관리: 부분/전액 지급, 세금계산서 추적 - 환불/해지관리: 승인 워크플로우, refund/cancel 타입 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
151 lines
4.6 KiB
Markdown
151 lines
4.6 KiB
Markdown
# 미지급금관리
|
|
|
|
## 개요
|
|
|
|
미지급금관리는 공급업체별 채무 현황을 추적하고 지급 처리를 관리하는 기능입니다.
|
|
인보이스별 미지급금 등록, 부분/전액 지급 처리, 세금계산서 발행 추적, 연체 관리를 지원합니다.
|
|
|
|
- **라우트**: `GET /finance/payables`
|
|
- **UI 기술**: React 18 + Babel (브라우저 트랜스파일링)
|
|
|
|
## 파일 구조
|
|
|
|
```
|
|
mng/
|
|
├── app/Http/Controllers/Finance/
|
|
│ └── PayableController.php # 메인 컨트롤러 (5개 메서드)
|
|
├── app/Models/Finance/
|
|
│ └── Payable.php # 미지급금 모델
|
|
└── resources/views/finance/
|
|
└── payables.blade.php # React 기반 단일 페이지
|
|
|
|
api/
|
|
└── database/migrations/
|
|
├── 2026_02_04_222513_create_payables_table.php
|
|
└── 2026_02_05_600000_add_tax_type_and_payable_fields.php
|
|
```
|
|
|
|
## 라우트
|
|
|
|
```php
|
|
// routes/web.php (finance prefix 그룹 내)
|
|
GET /payables → 페이지 렌더링 (HX-Redirect)
|
|
GET /payables/list → index() 목록 + 통계 (JSON)
|
|
POST /payables/store → store() 등록
|
|
PUT /payables/{id} → update() 수정
|
|
POST /payables/{id}/pay → pay() 지급 처리
|
|
DELETE /payables/{id} → destroy() 삭제
|
|
```
|
|
|
|
## 컨트롤러
|
|
|
|
### PayableController
|
|
|
|
| 메서드 | HTTP | 설명 |
|
|
|--------|------|------|
|
|
| `index()` | GET | 미지급금 목록 (검색, 상태/카테고리 필터) |
|
|
| `store()` | POST | 미지급금 등록 |
|
|
| `update()` | PUT | 미지급금 수정 |
|
|
| `pay()` | POST | **지급 처리** (지급액 입력 → 상태 자동 변경) |
|
|
| `destroy()` | DELETE | 삭제 (Soft Delete) |
|
|
|
|
### pay() 지급 처리 로직
|
|
|
|
```
|
|
지급액 입력
|
|
↓
|
|
paid_amount += 지급액
|
|
↓
|
|
paid_amount >= amount ?
|
|
→ YES: status = 'paid' (전액 지급)
|
|
→ NO: status = 'partial' (부분 지급)
|
|
```
|
|
|
|
### index() 응답 구조
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": [...],
|
|
"stats": {
|
|
"totalAmount": 30000000,
|
|
"paidAmount": 20000000,
|
|
"unpaidAmount": 10000000,
|
|
"overdueAmount": 3000000,
|
|
"count": 18
|
|
}
|
|
}
|
|
```
|
|
|
|
## 모델
|
|
|
|
### Payable
|
|
|
|
**테이블**: `payables`
|
|
|
|
| 필드 | 타입 | 설명 |
|
|
|------|------|------|
|
|
| `tenant_id` | bigint | 테넌트 ID |
|
|
| `vendor_name` | string(100) | 공급업체명 |
|
|
| `invoice_no` | string(50) | 인보이스 번호 |
|
|
| `issue_date` | date | 발급일 |
|
|
| `due_date` | date | 만기일 |
|
|
| `category` | string(50) | 카테고리 |
|
|
| `amount` | bigint | 총액 |
|
|
| `paid_amount` | bigint | 지급액 |
|
|
| `status` | string | unpaid / partial / paid / overdue |
|
|
| `description` | string | 설명 |
|
|
| `memo` | text | 메모 |
|
|
| `tax_invoice_issued` | boolean | 세금계산서 발행 여부 |
|
|
|
|
- SoftDeletes 적용
|
|
- Scope: `forTenant($tenantId)`
|
|
- Index: `(tenant_id, status)`, `(tenant_id, due_date)`
|
|
|
|
#### 상태 흐름
|
|
|
|
```
|
|
unpaid (미지급)
|
|
├── pay() (부분) → partial (부분 지급)
|
|
├── pay() (전액) → paid (지급 완료)
|
|
└── (만기일 경과) → overdue (연체)
|
|
```
|
|
|
|
#### 카테고리
|
|
|
|
사무용품, 소프트웨어, 서비스, 시설, 장비, 외주, 기타
|
|
|
|
## 뷰 구성 (React)
|
|
|
|
### payables.blade.php
|
|
|
|
```
|
|
┌─ 페이지 헤더 ──────────────────────
|
|
│ 제목: "미지급금관리"
|
|
│ [등록] 버튼
|
|
│
|
|
├─ 통계 카드 (5열) ──────────────────
|
|
│ 총액 | 지급액 | 미지급액 | 연체액 | 건수
|
|
│
|
|
├─ 필터 영역 ────────────────────────
|
|
│ 검색 (공급업체명) | 상태 | 카테고리
|
|
│
|
|
├─ 미지급금 목록 테이블 ─────────────
|
|
│ 공급업체 | 인보이스 | 발급일 | 만기일 | 카테고리 | 금액 | 지급액 | 상태 | 세금계산서 | 작업
|
|
│ └─ 상태: 미지급(노랑), 부분(파랑), 지급완료(초록), 연체(빨강) 배지
|
|
│ └─ 세금계산서: 발행/미발행 표시
|
|
│ └─ 작업: 지급처리, 수정, 삭제
|
|
│
|
|
├─ 등록/수정 모달 ───────────────────
|
|
│ 공급업체명, 인보이스번호, 발급일, 만기일
|
|
│ 카테고리, 금액, 설명, 세금계산서 발행 체크박스, 메모
|
|
│
|
|
└─ 지급 처리 모달 ───────────────────
|
|
현재 미지급액 표시, 지급액 입력
|
|
```
|
|
|
|
## HTMX 호환성
|
|
|
|
- React 기반 페이지이므로 **HX-Redirect 필요**
|
|
- `@push('scripts')` 블록에 React/Babel 스크립트 포함
|