# 미지급금관리 ## 개요 미지급금관리는 공급업체별 채무 현황을 추적하고 지급 처리를 관리하는 기능입니다. 인보이스별 미지급금 등록, 부분/전액 지급 처리, 세금계산서 발행 추적, 연체 관리를 지원합니다. - **라우트**: `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 스크립트 포함