# 회계 (Accounting) 분석 ## 개요 - **디렉토리**: `/account/` - **DB 테이블**: `account` (메인), `recordlist` (미수금 약속이력) - **주요 기능**: 금전출납, 미수금 관리, 매출채권 관리, 거래처별 잔액 ## 디렉토리 구조 ``` /account/ ├── _request.php # 요청 파라미터 (17개) ├── _row.php # 행 렌더링 ├── insert.php # 회계 저장 ├── insert_bulk.php # 대량 저장 ├── list.php # 회계 목록 (92KB) ├── list_daily.php # 일별 목록 (23KB) ├── detail.php # 상세 보기 ├── modal.php # 모달 팝업 ├── fetch_modal.php # 모달 데이터 조회 (21KB) ├── fetch_balance.php # 잔액 조회 ├── fetch_options.php # 옵션 조회 ├── fetch_todoMonthly.php # 월별 할일 │ ├── receivable.php # 미수금 현황 (35KB) ├── receivablelist.php # 미수금 목록 (28KB) ├── baddebt.php # 대손 관리 (29KB) │ ├── S_transaction.php # 거래 내역 (30KB) ├── s_transaction_sheet.php # 거래 시트 (26KB) ├── month_sales.php # 월별 매출 (31KB) ├── monthly_balance_popup.php # 월별 잔액 팝업 │ ├── customer_last.php # 거래처 최근 거래 (23KB) ├── schedule.php # 일정 관리 (14KB) ├── settings.php # 설정 (15KB) │ ├── saveExcel.php # 엑셀 저장 ├── downloadExcel.php # 엑셀 다운로드 ├── order_saveExcel.php # 주문 엑셀 저장 ├── customer_saveExcel.php # 거래처 엑셀 저장 │ ├── accoutlist.php # 계정 목록 ├── cardlist.php # 카드 목록 ├── get_electronic_bills.php # 전자세금계산서 조회 │ ├── accountContents.json # 계정과목 설정 (6KB) ├── accoutlist.json # 계정 목록 JSON ├── cardlist.json # 카드 목록 JSON ├── bankbook.txt # 통장 목록 │ ├── css/ # 스타일시트 ├── excel/ # 엑셀 출력 └── json/ # JSON 데이터 ``` ## DB 스키마 ### account 테이블 ```sql CREATE TABLE account ( num INT AUTO_INCREMENT PRIMARY KEY, -- 기본 정보 registDate DATE, -- 거래일 dueDate DATE, -- 만기일/결제예정일 endorsementDate DATE, -- 배서일 (전자어음) -- 입출 구분 inoutsep VARCHAR(20), -- 입출구분 (수입/지출) -- 내용 정보 content VARCHAR(200), -- 내용 (대분류: 거래처 수금, 자재비 등) contentSub VARCHAR(200), -- 내용 상세 (중분류) content_detail TEXT, -- 상세 내용 (적요) -- 금액 amount DECIMAL(15,0), -- 금액 (콤마 제거 후 저장) -- 은행/결제 정보 bankbook VARCHAR(100), -- 통장/결제수단 -- 거래처 정보 secondordnum VARCHAR(50), -- 거래처 번호 (발주번호) parentEBNum VARCHAR(50), -- 부모 전자어음 번호 -- 시스템 필드 first_writer VARCHAR(100), -- 최초 작성자 (날짜 + 이름) update_log TEXT, -- 수정이력 searchtag TEXT, -- 검색태그 is_deleted TINYINT DEFAULT 0, -- 삭제플래그 INDEX idx_registDate (registDate), INDEX idx_inoutsep (inoutsep), INDEX idx_content (content), INDEX idx_secondordnum (secondordnum) ); ``` ### recordlist 테이블 (미수금 약속 이력) ```sql CREATE TABLE recordlist ( num INT AUTO_INCREMENT PRIMARY KEY, secondordnum VARCHAR(50), -- 거래처 번호 primisedate DATE, -- 약속일 comment TEXT, -- 코멘트 is_deleted TINYINT DEFAULT 0, -- 삭제플래그 INDEX idx_secondordnum (secondordnum) ); ``` ## 계정과목 구조 (accountContents.json) ### 수입 계정 ```json { "수입": { "거래처 수금": { "description": "거래처에서 입금한 금액", "level": 1, "하위계정": ["외상매출금"] }, "차입금": { "description": "대출금(개인,은행 등)", "level": 1 }, "이자": { "description": "결산이자", "level": 1, "하위계정": ["이자수익"] }, "최초전월이월": { "description": "금전출납부 시작", "level": 1 }, "잡이익": { "description": "잡이익", "level": 1 } } } ``` ### 지출 계정 ```json { "지출": { "자재비": {"하위계정": ["외상매입금"]}, "급여": {"하위계정": ["임직원급여", "상여금"]}, "복리후생비": {"description": "직원 식대외 직원 작업복등"}, "소모품비": {"description": "각종 소모품 비용"}, "차량유지비": {"description": "유류대, 통행료"}, "운반비": {"description": "택배운반비외 각종운반비"}, "통신비": {"description": "전화요금, 인터넷요금"}, "수도요금": {"하위계정": ["수도광열비"]}, "전기요금": {"하위계정": ["수도광열비"]}, "보험료": {"description": "차량보험료, 화재보험료등"}, "세금과공과금": {"description": "등록면허세, 취득세, 재산세등"}, "접대비": {"description": "경조사비용"}, "교통비": {"하위계정": ["여비교통비"]}, "카드대금": {"하위계정": ["미지급비용"]}, "이자비용": {"하위계정": ["국민은행"]}, "차입금상환": {"description": "대출에 의한 차입금"}, "임차료": {"description": "지급임차료"}, "렌트비용": {"하위계정": ["지급임차료"]}, "수선비": {"description": "수선비"}, "개발비": {"description": "프로그램 개발비용"}, "기계장치": {"description": "기계구입"}, "선급금": {"description": "미리 지급하는 금액"}, "예치금": {"description": "예치금"}, "보증금": {"하위계정": ["기타보증금"]}, "수수료": {"하위계정": ["지급수수료"]}, "외상매출채권(전자어음)": {"description": "외상매출채권(전자어음)"} } } ``` ## 비즈니스 로직 ### 회계 등록 (insert.php) ```php // 검색태그 생성 $searchtag = $registDate . ' ' . $inoutsep . ' ' . $content . ' ' . $contentSub . ' ' . $amount . $content_detail; // INSERT $sql = "INSERT INTO account ( registDate, inoutsep, content, content_detail, amount, dueDate, searchtag, update_log, first_writer, bankbook, secondordnum, contentSub, endorsementDate, parentEBNum ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; // 금액에서 콤마 제거 $amount = str_replace(',', '', $amount); ``` ### 미수금 계산 (receivable.php) ```php // 이월 잔액 계산 $previousMonthFromDate = date("Y-m-01", strtotime($previousMonth . '01')); $previousMonthToDate = date("Y-m-t", strtotime($previousMonth . '01')); // recordlist에서 약속일/코멘트 조회 $recordSql = " SELECT secondordnum, primisedate, comment FROM recordlist WHERE (is_deleted IS NULL or is_deleted = 0) ORDER BY num DESC "; // 거래처별 미수금 = 청구금액 - 입금금액 ``` ### 잔액 조회 (fetch_balance.php) - 월별 이월 잔액 계산 - 거래처별 채권/채무 현황 - 전자어음 만기 관리 ## 회계 유형 ### 1. 금전출납 (Daily Cash) - **파일**: `list.php`, `list_daily.php` - **특징**: 일자별 입출금 기록 - **주요 기능**: 일계표, 월계표 ### 2. 미수금 관리 (Receivable) - **파일**: `receivable.php`, `receivablelist.php` - **특징**: 거래처별 미수금 추적 - **주요 기능**: 이월잔액, 약속일 관리, 대손 처리 ### 3. 거래 내역 (Transaction) - **파일**: `S_transaction.php`, `s_transaction_sheet.php` - **특징**: 거래처별 거래 이력 - **주요 기능**: 거래처 원장, 거래 명세 ### 4. 월별 매출 (Monthly Sales) - **파일**: `month_sales.php` - **특징**: 월별 매출 집계 - **주요 기능**: 매출 통계, 추이 분석 ## work 테이블 회계 연동 ### work 테이블 내 금액 필드 ```sql -- 견적/청구 금액 sum_estimate DECIMAL(15,0), -- 견적합계 decided_estimate DECIMAL(15,0), -- 확정견적 -- 청구/발행 금액 sum_bill DECIMAL(15,0), -- 청구합계 totalbill DECIMAL(15,0), -- 총청구액 issued_amount DECIMAL(15,0), -- 발행금액 -- 입금/미수금 sum_deposit DECIMAL(15,0), -- 입금합계 total_deposit DECIMAL(15,0), -- 총입금액 sum_receivable DECIMAL(15,0), -- 미수금 total_receivable DECIMAL(15,0), -- 총미수금 receivable DECIMAL(15,0), -- 미수잔액 issued_receivable DECIMAL(15,0), -- 발행미수금 -- 클레임 sum_claimamount DECIMAL(15,0), -- 클레임금액 -- JSON 리스트 accountList TEXT, -- 회계 리스트 (JSON) estimateList TEXT, -- 견적 리스트 (JSON) ``` ### accountList JSON 구조 ```json [ { "date": "2025-01-15", "type": "입금", "amount": 5000000, "memo": "1차 입금" }, { "date": "2025-02-15", "type": "청구", "amount": 10000000, "memo": "세금계산서 발행" } ] ``` ## SAM 마이그레이션 포인트 ### 1. 회계 테이블 정규화 ```sql -- SAM: 회계 전표 journal_entries ( id, tenant_id, entry_number, -- 전표번호 entry_date, -- 전표일자 entry_type, -- income, expense, transfer -- 계정 정보 account_code, -- 계정코드 (계정과목 테이블 참조) sub_account_code, -- 하위계정코드 -- 금액 debit_amount, -- 차변 credit_amount, -- 대변 -- 상대방 counterpart_id, -- 거래처 ID counterpart_name, -- 결제 정보 payment_method, -- cash, bank, card, note bank_account, due_date, -- 참조 reference_type, -- project, shipment, purchase reference_id, description, created_by, created_at ) ``` ### 2. 계정과목 테이블 ```sql -- SAM: 계정과목 마스터 account_codes ( id, tenant_id, code, -- 계정코드 name, -- 계정명 parent_id, -- 상위 계정 level, -- 계층 레벨 account_type, -- asset, liability, equity, income, expense is_cash_account, -- 현금성 계정 여부 is_receivable, -- 매출채권 여부 is_payable, -- 매입채무 여부 description, is_active, sort_order ) ``` ### 3. 미수금 관리 분리 ```sql -- SAM: 채권 관리 receivables ( id, tenant_id, receivable_number, customer_id, -- 채권 정보 original_amount, -- 원금 paid_amount, -- 입금액 balance, -- 잔액 (computed) -- 일자 invoice_date, -- 청구일 due_date, -- 만기일 -- 상태 status, -- open, partial, paid, overdue, bad_debt -- 약속 관리 promised_date, promised_memo, -- 참조 project_id, invoice_id, created_at, closed_at ) -- SAM: 채권 이력 receivable_histories ( id, receivable_id, action, -- created, payment, promise, overdue, bad_debt amount, note, created_by, created_at ) ``` ### 4. 전자어음 관리 ```sql -- SAM: 전자어음 electronic_notes ( id, tenant_id, note_number, -- 어음번호 -- 어음 정보 drawer, -- 발행인 payee, -- 수취인 amount, issue_date, -- 발행일 due_date, -- 만기일 -- 배서 정보 endorsement_date, -- 배서일 endorsee, -- 피배서인 -- 상태 status, -- issued, endorsed, collected, dishonored -- 참조 parent_note_id, -- 분할 시 부모 receivable_id, created_at ) ``` ### 5. 통합 재무 현황 ```sql -- SAM: 월별 재무 요약 (캐시 테이블) monthly_financial_summaries ( id, tenant_id, year_month, -- YYYYMM -- 수입 total_income, income_by_category JSON, -- 지출 total_expense, expense_by_category JSON, -- 채권/채무 receivables_balance, payables_balance, -- 현금 흐름 cash_beginning, cash_ending, calculated_at ) ``` ## 특이사항 ### 계정과목 JSON 관리 - 계정과목이 `accountContents.json` 파일로 관리됨 - 2단계 계층구조 (대분류 → 하위계정) - SAM에서는 DB 테이블로 정규화 권장 ### 미수금-약속일 연동 - `recordlist` 테이블로 거래처별 약속일/코멘트 관리 - 최신 약속만 표시 (ORDER BY num DESC) - SAM에서는 이력 관리로 확장 필요 ### work 테이블 금액 동기화 - 공사별 회계 정보가 work 테이블에 집계됨 - `accountList` JSON으로 상세 내역 저장 - SAM에서는 정규화된 테이블로 관계 설정 ## 참고 파일 - `/account/insert.php` - 회계 저장 로직 - `/account/_request.php` - 17개 요청 변수 - `/account/accountContents.json` - 계정과목 설정 - `/account/receivable.php` - 미수금 계산 로직 - `/account/fetch_balance.php` - 잔액 조회