Files
sam-docs/projects/legacy-5130/07_ACCOUNTING.md
hskwon 08a8259313 docs: 5130 레거시 분석 문서 및 기존 문서 초기 커밋
- 5130 레거시 시스템 분석 (00_OVERVIEW ~ 08_SAM_COMPARISON)
- MES 프로젝트 문서
- API/프론트엔드 스펙 문서
- 가이드 및 레퍼런스 문서
2025-12-04 18:47:19 +09:00

475 lines
14 KiB
Markdown

# 회계 (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` - 잔액 조회