회계관리 시스템
이름과 사번으로 로그인하세요
DUGURU · v7.0-auth · Master DB SSO
DUGURU 회계관리
Supabase 연결 중...
대시보드
DB Connected
Financial Overview
2026 Monthly Cash Flow
월별 매출 / 지출 / 순자금 흐름 입금예정 기준
2026년 1월~12월 | 입금예정 vs 지급예정
Analysis
전년 대비 비교 2025 vs 2026
월별 지출 누계 비교
지출 유형별 구성
공정내역 기준 유형별 비율
Budget Status
Summary & Alerts
Alerts
Recent Activity 최근 5건 (V5.5)
모든 작업자의 최근 등록·수정·삭제·승인 활동
로딩 중...
Export
상태 기준
· 미수  : 입금·계산서 모두 0
· 부분수금  : 입금 일부 있음
· 계산서 미발행  : 입금완료·계산서 미발행
· 완료  : 입금=계약·계산서=계약
· 연체  : 마감 경과·미수잔액 존재
기준: 착공일자
직접 입력 ~
착공준공발주처프로젝트POPMPD공사금액입금액미수잔액수금률계산서 발행률상태관리
Export
조회기간
거래처명기초채무발주(매입)지급합계계산서최근 구매일마지막 지급일잔액
프로젝트 목록
경비사용내역
Import
Export
양식
일괄 상태변경:
상태프로젝트명현장주소발주처POPMPD공사일계약금액집행예산한도관리
카테고리거래처명사업자번호견적 건수최근 견적일최근 프로젝트총 견적금액관리

견적 상세

외주 견적 빠른 등록

거래처 기초 정보

견적 정보

#품명규격수량단가금액비고
합계0
연체
0건
0원
오늘 입금
0건
0원
이번 주
0건
0원
이번 달
0건
0원
금일 완료
0건
0원
전체 완료
0건
0원
반려
0건
0원
분류: 소재/자재 노무비 촬영 협력업체 운영비 창고 홈페이지 기타
0건 선택 — 합계 0원
예정일
요청자
분류
거래처 · 내용
계좌정보
금액
증빙
상태
보조 기능 (분리 운영)
③ 계산서 미수령
④ 자동 생성 경비
입금완료 후 세금계산서 발행 대기/예정 상태인 건. 입금일 오래된 순.
입금일경과일거래처현장금액증빙상태관리
입금요청 상세
0원
승인대기
처리완료
현장명거래일자회계일자거래처항목청구금액결제수단제목관리

전체 데이터 일괄 다운로드

카테고리별 다운로드

Excel 업로드용 빈 양식 다운로드

양식을 다운로드 후 데이터를 입력하고, 해당 페이지에서 Excel 업로드하세요. 예시 데이터 1행이 포함되어 있습니다.

현재 데이터 요약

소프트 삭제된 21종(입금요청·경비·거래처·프로젝트·미수금/입금/계산서/메모·매출 항목·미지급금·입금·출금·세금계산서 수취/발행·카드 마스터·경비 분류·공정 항목·외주 업체/견적/견적항목·직원) 통합 표시. 90일 이내는 복원 가능. 90일 경과 시 영구 삭제 가능.
삭제일유형항목거래처현장금액남은일삭제자사유관리

기초등록 — 거래처 마스터

전체 거래처를 한 곳에서 관리합니다. 카테고리(협력업체·발주처·기타)는 다중 선택 가능하며, 협력업체 결제·거래처 미수금·입금요청은 카테고리에 따라 거래처를 표시합니다.

거래처명 사업자번호 카테고리 은행 계좌번호 예금주 최근 입금일 2026 건수 누적 입금액 관리

앱 정보

DUGURU 회계관리 V6.3 (Supabase Cloud)

두구루 지원팀 전용 | Supabase DB 기반 | 다중 사용자 공유 | 활동 로그 (append-only)

👤 현재 작업자 (V5.5 신규)

활동 로그에 기록되는 작업자 이름입니다. 브라우저별로 저장되며 (localStorage), 사용자마다 최초 1회만 설정하면 됩니다.

현재 설정값: 미지정

※ 미지정 상태에서도 앱은 동작하지만, 로그에는 '미지정'으로 기록됩니다.

📋 활동 로그 (V5.5 신규 · append-only)

DB에 영구 저장되는 등록·수정·삭제·승인 이력. 최근 500건 단위로 페이지네이션, 필터·검색·엑셀 내보내기 지원.

시각 사용자 작업 대상 요약 상세
로드 대기 — '새로고침' 클릭
페이지 1

활동 로그 상세

✓ V6.0-rc4 — Phase 3: 협력업체 결제 자동연동 A안 (rc2 흡수)

2026-05-08 배포. V6.0-rc2 라이브 미배포 흡수 + Phase 3 자동연동 A안 통합. 입금요청 ↔ 협력업체 결제 단일 SSOT 화면 표시.

[P3-1] 협력업체 결제 자동연동 A안 (요청 #5)
• 데이터 모델: acc_payables UNION acc_expenses[source_type='payment_request', vendor_id] (별도 INSERT 없음, 기존 자동 경비 활용)
• renderAP 거래처별 통계: 입금요청 자동 경비를 발주=지급 동시 1건으로 합산 (orderAmt + paidAmt 동일 금액 반영, 잔액 영향 0)
• 기간 필터(per.start ~ per.end) 적용 — beforeOrders / orders 동일 분기 처리
• openVendorDetail 결제 내역 테이블에 [입금요청] 뱃지 행 추가 — 배경 #F8F7FE, 뱃지 #EEF2FF/#3730A3
• [입금요청] 뱃지 행 클릭 시 입금요청 상세 모달 자동 오픈 (goPage('payreq') + prOpenView)
• KPI 박스에 "입금요청 자동연동" 카드 추가 (보라색, 합계+건수)

[V6.0-rc2 Phase 2 흡수 — 라이브 미배포로 통합 배포]
• P2-1 입금요청 승인 카드 컴팩트 한 줄 레이아웃 (요청 #7)
• P2-2 자동 경비 INSERT vendor_id 매핑 (V5.10 #8 — 본 P3-1 인프라)
• P2-3 importMaster Silent Skip 청산 4 type 일괄 (client/project/employee/vendor)

[데이터 정합성]
• 입금요청 = 즉시 지급 (발주·지급 동시) 회계 처리 — bal 영향 0
• acc_payables 수동 발주·지급과 별개 흐름이라 중복 카운팅 없음
• 거래처 미수금(acc_receivables) 모듈은 영향 없음 (입금요청은 우리가 보내는 돈)

[Phase 4+ 인계]
• SS-3 saveVn / SS-4 delVn 결과 검증 강화 (선택, 사용성 평가 필요)
• Popbill API / Clova OCR 전자세금계산서 연동 (V5.x 시리즈 미인수)
• B순위: acc_expenses / acc_vendors 휴지통 UI

[5/7 V5.10 사고 학습 적용 — rc2 deprecated 처리]
• V6.0-rc2 (b2fcdb8e): archive 박제됐으나 라이브 미배포 → V6.0-rc4 박제 시점에 deprecated 처리
• 라이브 = 박제 = 1:1 정합성 원칙 유지

✓ V6.0-rc2 — Phase 2: 승인 카드 컴팩트 + 자동연동 인프라 + Silent Skip 추가 청산

2026-05-08 배포. Phase 2 작업 3건 통합. Phase 3 자동연동 A안 인프라 완성.

[P2-1] 입금요청 승인 카드 컴팩트 한 줄 레이아웃 (요청 #7)
• 1줄 핵심: 거래처 → [현장] · 금액 · 예정일 · 첨부 · 세금계산서 상태 · 액션 버튼
• 2줄 부가: 은행 계좌 예금주 · 요청자 · 시간
• 카드 간격 8px → 4px (한 화면 5~6건+ 표시)
• 호버 효과: 배경 #fafbff + 테두리 #534AB7 (시선 추적)

[P2-2] 자동 경비 INSERT vendor_id 매핑 (V5.10 #8)
• prDoComplete expData에 vendorId: p.vendorId || null 추가
• Phase 3 자동연동 A안(acc_payables UNION acc_expenses[source_type='payment_request']) 인프라 완성
• 거래처별 그룹핑 정확도 향상 (vendor 텍스트 매칭 → vendor_id FK 매칭)

[P2-3] importMaster Silent Skip 청산 — client/project/employee/vendor 4종 일괄
• 종전: vendor만 V6.0-rc1.1에서 fix. client/project/employee는 dbInsert 실패해도 c++
• 수정: 4 type 모두 dbInsert 결과 검사 + failed 누적 + 통합 알림
• 500건+ 업로드 시 사전 confirm 추가 (대량 처리 안전성)

[Phase 3 인계 잔여]
• 협력업체 결제 자동연동 A안 — acc_payables UNION acc_expenses[source_type=payment_request] + 출처 뱃지
• SS-3 saveVn / SS-4 delVn 결과 검증 강화 (선택, dbInsert/dbDelete alert 자체로 의도 동작에 가까움)

[검증]
JS syntax 3 inline scripts / V6.0-rc2 표기 4곳 / vendorId 매핑 1곳 / importMaster failed 누적 4곳

✓ V6.0-rc1.1 hotfix — 정밀검증 + Silent Skip 결함 4건 청산

2026-05-08 발행. V6.0-rc1 사전 배포 직전 정밀검증으로 발견된 결함 일괄 수정.

[SS-1 — P0 트랜잭션 보장] prSave 거래처 INSERT 실패 시 입금요청 INSERT 중단
• 종전: 거래처 dbInsert 실패 → vendorId=null → 입금요청만 저장 (박종명 사고 패턴 재현 가능)
• 수정: dbInsert 실패 시 alert + return — 입금요청 INSERT 자체를 차단

[결함 1 + SS-2] importMaster vendor 카테고리 자동분류 + 실패 검출
• 종전: Excel 일괄 업로드 거래처 모두 미분류 (회계 모듈에서 안 보일 위험) + dbInsert 실패해도 c++
• 수정: isPartner=true 자동분류 + createdByModule='vendor_excel_import' + 실패 건수 누적 후 alert

[결함 2] saveVn createdByModule 출처 추적성 손실
• 종전: 매 saveVn 호출마다 createdByModule='vendor_master' 덮어씀 (수정 시 입금요청 출처 손실)
• 수정: 신규 등록(_eid 없음)일 때만 createdByModule 설정. 수정 시 기존 출처 보존

[Phase 2 인계 — Silent Skip 잔여]
• SS-3 saveVn / SS-4 delVn 결과 무관 진행 — dbInsert/dbDelete 자체 alert 있어 의도 동작에 가까움
• importMaster client/project/employee — vendor와 동일 패턴이지만 카테고리 컬럼 없으므로 SS-2와 결합 위험 없음

[정밀검증 통과 항목 (10건)]
JS syntax 3 inline scripts / page-vendors div 균형 6/6 / 라우터 정합 / 사이드바 10개 / protectedTables 5종 / colMap V6.0 4종 / NULL 참조 방어 / prSave isPartner / prFillVendorList 모든 활성 거래처 / vnRep 잔재 0

✓ V6.0-rc1 — Phase 1: 거래처 마스터 통합 + 기초등록 페이지

2026-05-08 배포. V5.9.3 베이스 위에 거래처 마스터 통합 + 휴지통 보호 확장.

[신규] 기초등록 페이지 (System 섹션)
• acc_vendors를 단일 SSOT로 통합 (협력업체·발주처·기타 카테고리 다중 선택)
• 통계 박스 (전체 / 협력업체 / 발주처 / 둘 다 / 기타 / 미분류)
• 거래처명·사업자번호·계좌번호 통합 검색 + 카테고리 필터
• 풀 정보 입력 모달 (사업자번호·대표자·은행·계좌·예금주·담당자·연락처·이메일·주소·특이사항·카테고리)
• 거래처별 최근 입금일·당해년도 건수·누적 입금액 표시
• Excel 내보내기

[변경] 입금요청 거래처 자동 등록 정책
• V5.9.3과 동일하게 신규 등록 허용 (자동완성에 없는 거래처 입력 시 자동 INSERT)
• V6.0 신규: 입금요청에서 만들어진 거래처는 is_partner=true 자동 분류
• createdByModule='payment_request' 추적 메타 기록

[변경] 사이드바
• System 섹션에 [기초등록] 메뉴 추가 (설정 위)
• 외주 견적서 관리 사이드바 항목 제거 (페이지·데이터·라우터 보존, page-outsourcing 직접 접근 가능)

[추가] 휴지통 보호 (V5.9.4 흡수)
• dbDelete protectedTables: acc_payment_requests / acc_expenses / acc_vendors → +acc_sites / +acc_receivables (5종)
• loadAllData 활성 데이터 필터에도 동일 5종 적용 (deleted_at IS NULL)
• DB 트리거 trg_sites_block_delete / trg_receivables_block_delete (V5.9.4에서 적용 완료)

[DB] 기 적용 DDL 활용
• acc_vendors: is_partner / is_client / is_other / created_by_module / 계좌·은행·예금주·휴지통 컬럼 (V5.10 시절 적용)
• acc_expenses.vendor_id FK (자동연동 인프라 — Phase 2/3에서 활용)

[검증]
• JS 문법 OK / colMap 무결성 OK / 신규 컬럼 4종 추가 매핑 (isPartner / isClient / isOther / createdByModule)
• 활성 거래처 10건 모두 분류 완료 (협력업체 9 / 기타 1 / 미분류 0)
• 휴지통 5건은 deleted_at != NULL — 화면 미표시

[Phase 2/3 예정]
• Phase 2: 승인 카드 컴팩트 한 줄 레이아웃 + 자동 경비 vendor_id 매핑
• Phase 3: 협력업체 결제 자동연동 A안 (acc_payables UNION acc_expenses[source_type='payment_request']) + 출처 뱃지

✓ V5.9.3 — 프로젝트 상세 사이드 요약형 레이아웃

2026-05-07 배포. V5.9.2(P6) + 프로젝트 관리 펼침 영역 가독성 전면 개편.

[변경] 프로젝트 관리 — 프로젝트명 클릭 펼침 영역
• 좌측 4분할 → 좌측 3카드 + 우측 핵심 요약 사이드바 (1.5 : 1)
• 좌측: 기본정보 / 발주처 / 담당 카드 세로 배치
• 우측: 핵심 요약 사이드바 (그라데이션 배경, 보라 강조)
• 계약금액 (VAT 포함) 28px 메인 강조
• PO/PM/PD 14px 굵게, 빈 값 '-' 회색 처리
• 프로젝트명 17px 헤더로 분리 + 상태 표기
• 좌측 강조 바 5px → 4px (#534AB7)

[유지] V5.9.2 P6 hotfix 포함
• acc_payment_requests 은행 컬럼 3종 (DDL 적용 완료)
• colMap bankNm 중복 매핑 제거

[검증]
• 펼침/접힘 동작·다른 행 자동 닫힘 동작 무수정 (이벤트 핸들러 골격 유지)
• JS 문법 OK / colMap 무결성 OK

✓ V5.9.2 hotfix — 입금요청 은행 정보 저장 복구 (P6)

2026-05-07 배포. acc_payment_requests 테이블에 은행 컬럼 3종 추가. 입금요청 시점 스냅샷 보존.

[근본 원인]
• acc_payment_requests 테이블에 bank_name / account_number / account_holder 컬럼이 존재하지 않아 prSave INSERT 시 해당 데이터가 무시됨
• prSave 코드와 colMap 매핑은 정상이었으나 DB 스키마에서 누락
• 결과: 입금요청 등록 시 은행/계좌/예금주가 화면에 입력되어도 DB에 저장되지 않음. 상세 보기에서 항상 '-' 표시

[수정 내용]
• DDL 마이그레이션 v592_add_bank_columns_to_payment_requests 적용
• acc_payment_requests에 bank_name TEXT / account_number TEXT / account_holder TEXT 3개 컬럼 추가
• colMap에서 중복 매핑 bankNm:'bank_name' 제거 (bankName과 충돌, 사용처 0건이었음)
• prSave HTML 코드는 무수정 (이미 정상 매핑됨)

[설계 결정]
• 거래처 마스터(acc_vendors)와의 정규화 대신 시점 스냅샷 채택
• 사유: 회계 감사 정합성 — 거래처 마스터 은행 정보가 후일 변경되어도 과거 결재 건은 원본 보존되어야 함
• 입금요청 등록 시점에 acc_vendors → acc_payment_requests로 은행 정보 복사 (prSave 라인 6159-6161)

[검증 절차]
① 입금요청 신규 등록 → 은행/계좌/예금주 입력
② Supabase에서 acc_payment_requests 해당 row 조회 → 3개 필드 NOT NULL 확인
③ 입금요청 상세 보기 → 은행 정보 정상 표시 확인

✓ V5.9 체인지로그 — 입금요청 시스템 + 데이터 보호 안전장치

2026-04-30 배포. DB 스키마 v1.0 적용 완료. 휴지통·이력 자동 기록·물리삭제 차단 6중 안전장치.

[신규] 입금요청 메뉴
• 사이드바 자금 섹션 신설 (외주 견적서와 승인 대시보드 사이)
• 5개 탭: 등록(직원) / 승인(대표) / 계산서 미수령 / 자동 생성 경비 / 휴지통
• 거래처 자동완성 (계좌번호 역검색 / 신규 거래처 자동 등록)
• 현장 자동완성 (acc_sites 진행/대기 상태 + 미등록 시 sentinel 자동 처리)
• 공급가액·VAT·합계 3분할 입력 (자동 계산)
• 세금계산서 4단계 상태 (대기/예정/완료/불요)

[신규] 입금완료 → 자동 경비 생성
• 대표 [✓ 입금완료] 클릭 시 acc_expenses 자동 INSERT
• source_type='payment_request' / source_id로 1:1 매핑
• approval_status='승인완료' 자동 (이중 결재 방지)

[신규] 데이터 보호 안전장치 6중
① 소프트 삭제 — 모든 보호 테이블에 deleted_at 컬럼
② 물리 DELETE 차단 — 트리거가 강제 거부 + 가이드 메시지
③ 휴지통 90일 보존 — 그 이전엔 영구삭제 절대 불가
④ 변경 이력 자동 기록 — INSERT/UPDATE/SOFT_DELETE/RESTORE 모두
⑤ 결제완료 30일 자동 잠금 — 감사·법적 보존
⑥ 활성/휴지통 뷰 분리 + version 자동 증가

[DB 변경]
• acc_vendors: 컬럼 10개 추가 (계좌·은행·예금주·거래통계 + 보호장치)
• acc_payment_requests: 컬럼 21개 추가 (FK·공급가/VAT·계산서·첨부 + 보호장치)
• acc_expenses: 컬럼 8개 추가 (source_type/source_id·계산서 + 보호장치)
• 신규: acc_payment_requests_history / acc_expenses_history (이력)
• 신규: 4개 뷰 (active/trash) + 8개 함수 + 트리거 7개 + 인덱스 13개
• sentinel 현장 1건 (UUID 00...01, 미등록 현장 자동 매핑용)

[중요 변경] dbDelete 동작
• acc_payment_requests / acc_expenses / acc_vendors 삭제 시
  자동으로 소프트 삭제로 전환 (사유 입력 프롬프트)
• loadAllData에서 deleted_at IS NULL로 자동 필터링

[근거] Constitution v1.2 조항 13 · 공통 코어 v1.0
[ops_archives] ea632e7b-0515-4c37-a324-5c6b9fc89924

✓ V5.7.1 체인지로그 — 거래처 미수금 기간 탭 + 가독성 개선

2026-04-30 배포. 미수금 페이지 단독 패치. 매출 분석 페이지 신설은 V5.7.2에서 진행 예정.

[신규]
거래처 미수금 — 기간 탭 영역 신설 (착공일자 기준)
  - 1행: [2026 전체] / [미수금](빨강 강조)
  - 2행: [1월]~[12월] 다중 토글 (연속·비연속 OR)
  - 3행: 직접 입력 [날짜]~[날짜] [조회] [초기화]
페이지 첫 진입 시 [2026 전체] 자동 활성
[미수금] 특수 탭 — 모든 연도 + 미수잔액 > 0 (월 탭·직접 입력 비활성)
모든 필터 AND 결합 — 기간 + 통합검색 + 상태 + 체크박스

[개선]
• 상태 기준 안내 박스 — 항목별 줄바꿈 + 좌측 컬러바 + 그리드 레이아웃
• 정렬: 착공일자 오름차순 유지

[비포함 — V5.7.2로 이연]
• 매출 분석 페이지 신설 (사이드바 분석 섹션)
• DB 신설: acc_sales_history_yearly / acc_annual_targets
• 2021~2025 Import Tool, 매출 인식 기준 토글
• PD → DE 전사 라벨 통일은 별도 패치로 진행

[로드맵] V5.7.2 — 매출 분석 페이지 신설

✓ V5.5 체인지로그 — 등록·수정·삭제 활동 로그 (append-only)

2026-04-24 배포. 설정 페이지에 '활동 로그' 섹션, 대시보드에 '최근 활동 5건' 카드 신설.

[신규]
acc_audit_logs 테이블 — user_name / action / target_table / target_id / summary / extra(jsonb) / created_at
RLS append-only — SELECT·INSERT만 허용, UPDATE·DELETE 차단 (감사 무결성)
• 로그 훅 15종: 경비 등록·수정·삭제·분할·일괄삭제·일괄복사·승인요청·승인·반려·일괄승인·일괄반려, 카드내역 업로드, 카드마스터 CRUD, 프로젝트 CRUD
• 설정 → 현재 작업자 입력 (localStorage 저장, 브라우저별)
• 설정 → 활동 로그 (필터·검색·페이지네이션 500건 단위·Excel 내보내기·상세 팝업)
• 대시보드 상단 '최근 활동 5건' 카드

[DB 마이그레이션 — Claude가 MCP로 실행 완료]
• CREATE TABLE acc_audit_logs + extra jsonb 컬럼
• 인덱스 3종: idx_acc_audit_logs_created_at / target_table / user_name
• RLS policy: SELECT·INSERT 허용, UPDATE·DELETE 차단
• schema_changelog에 'acc-v5.5' 등록

[로드맵] V5.6 — 전자세금계산서 Clova OCR

⚙ 경비 분류 관리 (V5.2 신규)

경비 입력 시 사용하는 소분류·대분류·원가구분 매핑표. 소분류 입력만으로 대분류/원가구분이 자동 세팅됩니다. DB에 저장되며 앱 재시작 없이 즉시 반영됩니다.

소분류 대분류 원가구분 과세구분 활성 관리
로딩 중...

경비 분류 추가

✓ V5.2 Supabase SQL 마이그레이션 (대표님 1회 실행 필요) — 경비 분류 관리

아래 SQL을 Supabase SQL Editor에서 실행하세요. 시드 데이터 113건 포함. 실행 후 F5 새로고침.

-- 1) 테이블 생성
CREATE TABLE IF NOT EXISTS acc_expense_categories (
  id BIGSERIAL PRIMARY KEY,
  sub_cat TEXT NOT NULL,
  major_cat TEXT NOT NULL,
  cost_type TEXT NOT NULL DEFAULT '재료비',
  tax_type_default TEXT DEFAULT '과세',
  sort_order INT DEFAULT 0,
  is_active BOOLEAN DEFAULT TRUE,
  note TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW(),
  CONSTRAINT acc_expense_categories_sub_major_uk UNIQUE (sub_cat, major_cat)
);
CREATE INDEX IF NOT EXISTS idx_acc_exp_cat_active ON acc_expense_categories(is_active) WHERE is_active = TRUE;
CREATE INDEX IF NOT EXISTS idx_acc_exp_cat_sub ON acc_expense_categories(sub_cat);

-- 2) RLS
ALTER TABLE acc_expense_categories ENABLE ROW LEVEL SECURITY;
CREATE POLICY acc_exp_cat_all ON acc_expense_categories FOR ALL USING (TRUE) WITH CHECK (TRUE);

-- 3) 시드 113건 — 별도 파일 v5.2_migration.sql 참조 (INSERT 문 전체)

✓ 전체 SQL은 첨부된 v5.2_migration.sql 파일을 실행하세요.

💳 카드 관리 (V5.3 신규)

법인카드별 사용자·별명 관리. 카드 마스킹번호만 저장하며 FULL 번호는 보관하지 않습니다. 카드내역 업로드 시 자동 등록되며, 사용자 매핑은 이 화면에서 직접 설정하세요.

카드번호 (마스킹) 카드사 별명 사용자 부서 거래수 활성 관리
로딩 중...

카드 추가

IBK 엑셀 포맷 그대로 입력하세요. FULL 번호는 저장하지 않습니다.

✓ V5.3 Supabase SQL 마이그레이션 (Claude가 MCP로 실행 완료) — 카드 마스터

acc_card_master 테이블 신규 + 기존 4개 카드 자동 시드 + RLS 설정 완료. 대표님은 이 화면에서 카드별 사용자·부서를 입력하시면 됩니다.

✓ DB 작업 완료. HTML 배포만 하면 즉시 사용 가능.

✓ V5.0 Supabase SQL 마이그레이션 (대표님 1회 실행 필요) — 카드내역 업로드 방식 도입

경비 수기입력 → 카드내역 자동축적 → 미처리건 선택 매핑 방식으로 전환. 아래 SQL을 Supabase SQL Editor에서 순서대로 실행하세요. (IF NOT EXISTS 로 안전)

1) 카드 사용내역 원장 테이블 신설 — acc_card_transactions

CREATE TABLE IF NOT EXISTS acc_card_transactions (
  id                uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  card_company      text,                    -- IBK / 국민 / 신한 / 우리 / 기타
  card_no           text NOT NULL,           -- 4140---1979 (원본 그대로)
  trade_datetime    timestamp,               -- 승인일시
  merchant          text,                    -- 이용가맹점명
  amount            numeric DEFAULT 0,       -- 승인금액
  approval_no       text NOT NULL UNIQUE,    -- 승인번호 (중복 체크 키)
  approval_type     text DEFAULT '원화',     -- 원화 / 취소또는할인
  use_type          text,                    -- 이용구분
  status            text DEFAULT '미처리',   -- 미처리 / 처리완료
  linked_expense_id uuid,                    -- 연결된 acc_expenses.id
  note              text,
  created_at        timestamptz DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_card_txn_status   ON acc_card_transactions(status);
CREATE INDEX IF NOT EXISTS idx_card_txn_card_no  ON acc_card_transactions(card_no);
CREATE INDEX IF NOT EXISTS idx_card_txn_datetime ON acc_card_transactions(trade_datetime DESC);

2) acc_expenses 연동 컬럼 추가 — 증빙종류 / 승인번호 / 카드내역 FK

ALTER TABLE acc_expenses
  ADD COLUMN IF NOT EXISTS evidence_type  text DEFAULT '신용카드',  -- 신용카드/계좌이체/현금영수증/기타
  ADD COLUMN IF NOT EXISTS approval_no    text,                     -- 카드 승인번호
  ADD COLUMN IF NOT EXISTS card_txn_id    uuid;                     -- acc_card_transactions FK
CREATE INDEX IF NOT EXISTS idx_expenses_approval_no ON acc_expenses(approval_no);
CREATE INDEX IF NOT EXISTS idx_expenses_card_txn_id ON acc_expenses(card_txn_id);

3) RLS — 익명 읽기/쓰기 허용 (내부 앱)

ALTER TABLE acc_card_transactions ENABLE ROW LEVEL SECURITY;
CREATE POLICY card_txn_all ON acc_card_transactions FOR ALL USING (true) WITH CHECK (true);

✓ 실행 완료 후 이 앱을 새로고침(F5)하면 카드내역 업로드·미처리 관리 기능이 정상 동작합니다.

⚠ V4.8 Supabase SQL 마이그레이션 (대표님 1회 실행 필요)

아래 SQL을 Supabase 프로젝트 → SQL Editor에서 순서대로 실행하세요. 이미 실행했다면 무시해도 됩니다. (IF NOT EXISTS 로 안전)

1) acc_expenses 컬럼 추가 — 계정 2단계 / 원가구분 / 과세구분

ALTER TABLE acc_expenses
  ADD COLUMN IF NOT EXISTS major_cat       text,
  ADD COLUMN IF NOT EXISTS sub_cat         text,
  ADD COLUMN IF NOT EXISTS cost_type       text,
  ADD COLUMN IF NOT EXISTS tax_type        text DEFAULT '과세',
  ADD COLUMN IF NOT EXISTS supply_amount   numeric DEFAULT 0,
  ADD COLUMN IF NOT EXISTS tax_amount      numeric DEFAULT 0;

2) 외주 견적서 관리 — 거래처 테이블

CREATE TABLE IF NOT EXISTS acc_outsourcing_vendors (
  id           uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  vendor_name  text NOT NULL,
  biz_num      text,
  contact_name text,
  phone        text,
  email        text,
  address      text,
  bank_name    text,
  acct_no      text,
  acct_holder  text,
  created_at   timestamptz DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_os_vendors_biz ON acc_outsourcing_vendors(biz_num);

3) 외주 견적서 관리 — 견적 테이블

CREATE TABLE IF NOT EXISTS acc_outsourcing_quotes (
  id             uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  vendor_id      uuid NOT NULL REFERENCES acc_outsourcing_vendors(id) ON DELETE CASCADE,
  quote_date     date,
  manager_name   text,
  category_name  text,
  description    text,
  site_id        uuid,
  site_type      text,
  site_name      text,
  total_amount   numeric DEFAULT 0,
  supply_amount  numeric DEFAULT 0,
  tax_amount     numeric DEFAULT 0,
  note           text,
  created_at     timestamptz DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_os_quotes_vendor ON acc_outsourcing_quotes(vendor_id);
CREATE INDEX IF NOT EXISTS idx_os_quotes_date   ON acc_outsourcing_quotes(quote_date);

4) 외주 견적서 관리 — 품목 테이블

CREATE TABLE IF NOT EXISTS acc_outsourcing_quote_items (
  id              uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  quote_id        uuid NOT NULL REFERENCES acc_outsourcing_quotes(id) ON DELETE CASCADE,
  item_seq        integer,
  item_name       text,
  item_spec       text,
  item_qty        numeric DEFAULT 0,
  item_unit_price numeric DEFAULT 0,
  item_amount     numeric DEFAULT 0,
  item_remark     text,
  created_at      timestamptz DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_os_items_quote ON acc_outsourcing_quote_items(quote_id);

5) RLS(Row Level Security) — 익명 읽기/쓰기 허용 (내부 앱이므로)

ALTER TABLE acc_outsourcing_vendors     ENABLE ROW LEVEL SECURITY;
ALTER TABLE acc_outsourcing_quotes      ENABLE ROW LEVEL SECURITY;
ALTER TABLE acc_outsourcing_quote_items ENABLE ROW LEVEL SECURITY;
CREATE POLICY os_vendors_all ON acc_outsourcing_vendors     FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY os_quotes_all  ON acc_outsourcing_quotes      FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY os_items_all   ON acc_outsourcing_quote_items FOR ALL USING (true) WITH CHECK (true);

✓ 실행 완료 후 이 앱을 새로고침(F5)하면 외주 견적서 관리 / 경비사용내역 신규 기능이 정상 동작합니다.

Supabase 연결 상태

데이터 관리

거래처

협력업체 — 풀 기능은 [기초등록] 메뉴에서 (이 영역은 빠른 등록·일괄 업로드용)

프로젝트

직원 (임직원)

데이터 소스 2021~2025=수기 / 2026=acc_sites 자동 (착공일 기준 · 진행/완료=확정 · 대기=전망)
목표 대비 달성률
0
① 연도별 매출 비교
② 연도별 건수 비교
③ 대형 프로젝트
④ 담당자 순위
2021~2025=수기 편집 가능 / 2026=잠금

거래처 미수금

검색

거래처 상세

일자적요금액프로젝트지급계산서잔액관리

발주 등록

품목 입력
품목코드품목명 *규격 *수량 *단가 *공급가액부가세합계적요
합계000

지급 등록

계산서 등록

적요 상세

거래처 추가

공정내역

프로젝트 등록

입금 예정

지급 예정

세금계산서 발행

매입 계산서

거래처

거래처 등록

직원 등록/수정

프로젝트 등록/수정

기본정보
발주처 정보
일정
금액/예산
첨부파일

경비 상세 입력

카드 선택

미처리 카드 사용내역

필터:
승인일시카드번호가맹점명금액승인번호구분상태선택

카드 사용내역 업로드

IBK 기업은행 홈페이지 → 카드 → 이용내역 조회 → 인쇄및파일저장 으로 다운로드한 엑셀 파일을 그대로 업로드하세요.
업로드 시 승인번호 기준 중복 체크가 자동으로 수행됩니다. (중복 건은 스킵)

📖 사용법 가이드

DUGURU 회계관리 V6.0-rc4 (Supabase Cloud)

모든 데이터는 Supabase 클라우드 DB에 실시간 저장됩니다. 여러 PC/사용자가 동일한 데이터를 공유합니다.
다른 사용자가 입력한 데이터를 보려면 상단 새로고침(↻) 버튼을 클릭하세요.

📌 시작하기 (필수 순서)

STEP 1. 설정 페이지에서 기초 데이터를 등록합니다.

→ 거래처(발주처) / 협력업체 / 프로젝트 / 직원 등록
→ 수기 등록(+ 버튼) 또는 Excel 일괄등록 (양식 다운로드 → 작성 → 업로드)

STEP 2. 프로젝트 관리에서 현장(프로젝트)을 등록합니다.

→ 프로젝트명, 발주처, PO/PM/PD, 계약금액, 공사일 등 입력
→ 등록 즉시 거래처 미수금에 자동 연동됩니다 (SSOT)

STEP 3. 각 모듈에서 데이터를 관리합니다.

⚠️ 핵심 원칙: 프로젝트 기본정보·금액 수정은 프로젝트 관리에서만 가능합니다. 거래처 미수금은 입금/계산서 관리 전용입니다.

📊 메뉴별 상세 가이드

1. 대시보드 (Dashboard)

미수금/미지급/입금예정/지급예정/순자금흐름 KPI를 한눈에 확인합니다.

• 각 KPI 카드 클릭 → 해당 페이지로 즉시 이동
• 월별 캐시플로우 차트 / 전년 대비 비교 / 지출 유형 구성 / 예산 사용률
• 연체 및 7일 내 예정 건 자동 알림

2. 거래처 미수금 (Accounts Receivable)

프로젝트 관리와 자동 연동되어 프로젝트별 수금 현황을 관리합니다.

• 공사금액 = 프로젝트 목록의 계약금액 (읽기 전용, 수정 불가)
• 프로젝트명 클릭 → 아코디언 펼침 → 입금 내역 / 세금계산서 / 메모 관리
• 자동 계산: 미수잔액 = 공사금액 − 입금액, 수금률 = 입금액 ÷ 공사금액 × 100
• 프로젝트 일괄 연동: 최초 1회 기존 프로젝트를 미수금에 일괄 생성

3. 협력업체 결제 (Accounts Payable)

거래처별 채무 현황을 한눈에 보고, 상세 드릴다운합니다.

• 메인: 거래처별 집계 (기초채무/발주/지급/계산서/잔액)
• 거래처명 클릭 → 상세 팝업 (업체 정보 편집 + 거래 내역 테이블)
• 발주 등록: 그리드형 다중 품목 입력 (품목코드/품목명/규격/수량/단가/공급가/부가세/합계)
• 지급 등록: 단순 입력 폼 (날짜/금액/비고)
• 계산서 등록: VAT 포함 금액 입력 → 공급가액·세액 자동 분할
• + 거래처 추가: 메인 화면에서 신규 업체 직접 등록 가능

4. 프로젝트 관리 (Project Management)

Single Source of Truth — 모든 프로젝트 정보의 단일 원본입니다.

• 4개 탭: 프로젝트 목록 / 공정내역·영수증 / 경비사용내역 / 현장 상세관리
• 프로젝트 등록/수정 팝업: 5탭 구조 (기본정보/발주처/일정/금액·예산/첨부파일)
• 상태 필터: 진행/대기 (기본) / 진행 / 대기 / 완료 / 전체
• 프로젝트명 클릭 → 섹션카드형 아코디언 (기본정보/발주처/담당/일정·금액)
• PO/PM/PD/발주처에 🔍 검색 버튼 → 기존 등록된 담당자·거래처 검색 팝업
• 과세/면세/영세 구분 지원
• 프로젝트 등록 → 미수금 자동 생성 / 수정 → 미수금 자동 갱신 / 삭제 → cascade 삭제

5. 입금 / 지급 (Payment Management)

• 입금(받을 돈)과 지급(줄 돈)을 탭으로 구분
• 구분: 계약금/중도금/잔금/기타 | 상태: 예정/완료/지연

6. 세금계산서 (Tax Invoice)

• 매출(발행)과 매입(수취) 탭 구분
• 공급가 입력 → 부가세·합계 자동 계산 | 월별·상태별 필터

7. 승인 대시보드 (Approval)

• 경비 승인/반려 처리 (대표 전용)
• 승인 흐름: 경비 입력 → 저장 → 회계일자 입력 → 체크 → 승인요청 → 대표 승인/반려
• 승인완료 = 수정·삭제 잠금

💡 팝업 실수 종료 방지

프로젝트 등록/수정, 미수금, 경비 입력 등 주요 팝업은 바깥 클릭으로 닫히지 않습니다.
닫기는 × 버튼 / 취소 / ESC 키로만 가능하며, 입력값이 변경된 경우 확인 팝업이 표시됩니다.

⌨️ 단축키

F8 — 발주 등록 팝업에서 저장
ESC — 현재 최상위 팝업 닫기 (변경사항 있으면 확인)

⚙️ 시스템 정보

저장: Supabase PostgreSQL (클라우드) | 프로젝트: jdmzgsyqsozjzakxppls
배포: Netlify (duguru-accounting-master.netlify.app)
폰트: Pretendard + IBM Plex Mono
라이브러리: SheetJS (Excel), jsPDF (PDF), Chart.js (차트), Supabase JS SDK
버전: V5.0 (2026-04-22)

📋 패치노트 — What's New

V6.3 — 2026.05.22 (정식 빌드 · DB 정합 + 죽은 코드 정리 + 에러 스윕)

• [정식] v6.2-rc5 → V6.3 정식 승격 — 단일 빌드로 종결 (DB 변경 정합 + 죽은 코드 정리 + 에러 스윕)
• [DB 정합] acc_projects 정상화 완료(2026-05-22, master_project) — 뷰 INSTEAD OF 트리거 3종이 ops_projects(source_app='acc')로 재지정 + SECURITY DEFINER + delete=soft(is_deleted) + 뷰 필터. acc_projects 추가/수정/삭제 모두 정상 작동
• [DB 정합] anon DELETE: acc_* 전 테이블 0(이번 세션 30종 REVOKE) — 모든 삭제는 dbDelete soft 경로(UPDATE deleted_at)로 일원화
• [DB 정합] 뷰 트리거 DEFINER 함수 9개 search_path 고정 (master_project 완료)
• [죽은 코드] prSwTab 'trash' 분기 제거 — taxtrack·autoexp만 유지. 휴지통은 사이드바 독립 페이지(page-trash, rp('trash')) 전용 경로
• [죽은 코드] renderPayReq 내 trashCount(미사용) 제거 + prRenderTrashTab cross-page 호출 제거 — 휴지통 페이지는 자체 진입 경로로만 렌더
• [주석 갱신] dbDelete acc_projects "크로스도메인 보류" → "해결됨(ops_projects soft, 2026-05-22)" + goPage trash alias 주석 정리 + _prAux 주석에서 trash 제거
• [범위 밖 명시] RLS 정책(_anon_all) Stage④(SSO 후, 7~8월) — auth_migration_roadmap v1.1
• [무변경] SOFT_DELETE_TABLES/protectedTables 21종 / DB 스키마·권한·트리거·함수 모두 master 완료분 그대로 유지
• [근거] handoff_m2c_accounting_finalize_v63_20260522 (master_project SSOT)

V6.2-rc5 — 2026.05.22 (휴지통 사이드바 독립 페이지 승격 · B안)

• [구조] 휴지통 → 사이드바 독립 최상위 페이지(page-trash)로 승격 — 21종 전역 휴지통(TRASH_TABLES) 위상에 맞춰 입금요청 보조탭에서 분리
• [UX] 사이드바 "보관 / 휴지통(Trash)" 신설 — System 그룹 위 신규 라벨. 클릭 즉시 page-trash 진입, 상단 제목·하이라이트 정합
• [라우팅 정리] _GOPAGE_ALIAS에서 trash:'payreq' 제거, _GOPAGE_AUX 비움, PT에 trash:'휴지통' 추가, rp() 디스패처에 trash:prRenderTrashTab 등록
• [중복 진입로 제거] 입금요청 페이지의 보조탭 "🗑 휴지통" 제거 — 계산서 미수령·자동 생성 경비 보조탭은 유지
• [회귀 안전] prTrashStats / prTrashFilter / prTrashTB 등 내부 element id 100% 보존 — 자동 새로고침 훅 5곳 (prTrashFilter onchange + 6756·6876·7187·7562) 무손상 동작
• [DB 무변경] UI 전용 작업. SOFT_DELETE_TABLES / TRASH_TABLES / RLS / 권한 변경 없음
• [근거] handoff_m2c_accounting_trash_sidebar_20260522 (master_project SSOT)

V6.2-rc4 — 2026.05.22 (soft-delete Phase 2 · 12종 확장)

• [핵심] SOFT_DELETE_TABLES 9종 → 21종 확장 — Phase 2 추가 12종: acc_payables / acc_payments_in / acc_payments_out / acc_tax_receipts / acc_tax_issues / acc_card_master / acc_expense_categories / acc_process_items / acc_outsourcing_vendors / acc_outsourcing_quotes / acc_outsourcing_quote_items / acc_employees
• [강화] loadAllData protectedTables 동기화 — 21종 모두 .is('deleted_at', null) 필터 적용 (휴지통 이동 시 목록에서 즉시 사라짐)
• [강화] TRASH_TABLES 21종 통합 표시 — 휴지통 탭에서 신규 12종도 표시·복원 가능. 라벨·매퍼 추가
• [정리] Phase 2 TODO 주석 갱신 — 12종 흡수 완료. 잔여 hard: acc_projects(크로스도메인 보류, 별 안건)
• [선행] DDL deleted_at/deleted_by/deleted_reason 12종 컬럼 추가 완료 (migration add_softdelete_cols_acc_phase2_20260522, HIST-20260522-055, 검증완료)
• [후속] master_project가 Step 3에서 anon DELETE REVOKE 11종 직접 처리(acc_employees는 이미 anon DELETE 없음)
• [손대지 않음] acc_clients(뷰, INSTEAD OF DELETE 트리거 soft 처리) / acc_projects(크로스도메인 별 안건)
• [근거] handoff_m2c_accounting_phase2_softdelete_20260522 / accounting_g1_anon_audit_20260522 / HIST-20260522-055

V6.2-rc1 — 2026.05.22 (soft-delete 일원화 · 작업 A 완료)

• [핵심] SOFT_DELETE_TABLES 5종 → 9종 확장 — acc_receivable_payments / acc_receivable_invoices / acc_receivable_notes / acc_revenue_majors_legacy 4종을 휴지통 경로로 흡수
• [수정] 직접 .delete() 4곳 제거 — (1) delSite 연쇄 3곳: UPDATE deleted_at 패턴(prompt 우회 + cascade reason 자동 생성) (2) rvDelMajor 1곳: dbDelete 경유로 일원화
• [강화] dbDelete 시그니처 확장 — opts={reason, by, skipPrompt} 추가. 연쇄/배치 삭제 시 prompt 우회 가능. by 인자에 getCurUser() 자동 적용 (기존 하드코딩 '김종현' 폴백)
• [강화] schema-cache reload 보호 추가 — dbDelete에 _isSchemaCacheError + _reloadPgrstSchema 적용 (rc4와 동일 패턴). deleted_at 컬럼 미존재 시 명시적 안내문 출력
• [강화] SELECT 휴지통 필터 추가 — loadAllData protectedTables 9종 / acc_receivable_notes 노트 로드 / acc_receivable_payments paidAmt 합산 — 모두 .is('deleted_at', null) 가산
• [보호] acc_* hard delete 잔존 분기 경고 로그 — Phase 2 TODO 명시: acc_tax_receipts·payables·payments_in/out·tax_issues·clients·projects·employees·process_items·outsourcing_*·card_master·expense_categories 약 14종. DDL 결재 후 SOFT_DELETE_TABLES 추가 시 자동 흡수
• [범위 외 → 별건] anon DELETE 권한 회수 / RLS 교체 / Phase 2 DDL은 master_project §18 #2 결재 경유 (라이브 권한 변경 보호)
• [근거] handoff_master_to_cowork_accounting_auth_softdelete_20260522 v1.0 / auth_migration_roadmap v1.0 / HIST-20260522-031

V6.1-rc4 — 2026.05.18 (P0-3 직원 민감 컬럼 차단 + 라이브 복구)

• [라이브 복구] V6.1-rc3 라이브 직원 관리 fetch 깨짐 사고 복구 — 5-18 보안 패치 부수효과로 acc_employees table-level anon SELECT가 REVOKE된 상태(address·blood_type 컬럼 GRANT 차단). 클라이언트 sb.from('acc_employees').select('*') 호출 시 PostgreSQL이 permission denied 반환(또는 PostgREST cache 만료 후 깨짐). V6.1-rc4가 acc_v_employees_safe view 경유로 전환되면서 fetch 정상화
• [신규] acc_v_employees_safe view 신설 — 안전 컬럼 8종(id·emp_no·name·department·position·join_date·bank·created_at)만 노출. 민감 컬럼 7종(phone·address·blood_type·height·top_size·bottom_size·shoe_size) anon 차단
• [수정] loadAllData() read 대상 변경: acc_employeesacc_v_employees_safe. write(saveEmp/delEmp/importEmployees)는 acc_employees 직접 유지
• [회귀방지] saveEmp() 민감 컬럼 빈 값 UPDATE 제외 분기 — view fetch 안 되는 민감 4컬럼(phone/address/bloodType/유니폼)이 수정 모달에 빈 값으로 prefill될 때, 사용자가 변경 안 하고 저장해도 기존 DB 값 보존(빈 값으로 덮어쓰지 않음). 신규 등록은 입력값 그대로 INSERT
• [DB 마이그레이션] acc_v_employees_safe_view_create_20260518 (security_invoker=false=definer, anon+authenticated GRANT). view owner=postgres
• [Phase 3 잔여 안건] 라이브 배포 검증 후 별건 사이클에서: ① acc_employees 잔여 5 컬럼 GRANT 차단(phone·height·top_size·bottom_size·shoe_size) ② storage upload + ops_archives V6.1-rc4 정식 active 박제 ③ V6.1-rc3 계열 deprecated 전환
• [근거] HIST-20260518-053. 회계 도메인 전체 보안 점검 P0-3 안건 우산 결재 (대표 "A안")

V6.1-rc3 P3 — 2026.05.13 (입금요청 v3 디자인 + 패치노트 catch-up)

• [신규] 입금요청 페이지 v3 디자인 전면 개편 — 5탭(등록·승인·계산서미수령·자동경비·휴지통)을 4탭(대기·완료·반려·전체)으로 재편성. 보조 3종은 페이지 하단 분리 운영
• [신규] 기간별 결제 예정 카드 4종 — 연체·오늘 입금·이번 주·이번 달. 클릭 시 해당 기간 필터링. 연체·오늘은 빨강 펄스 강조
• [신규] 처리상태 통계 4종 — 전체 대기(별표 강조) / 금일 완료 / 전체 완료 / 반려
• [신규] 분류 색상 8종 레전드 — 소재/자재·노무비·촬영·협력업체·운영비·창고·홈페이지·기타 (메인 리스트 계좌정보 셀에 분류 색상 자동 매칭)
• [신규] 일괄 액션 바 — 체크박스 다중 선택 → 합계·건수 실시간 표시 → 일괄 입금완료·반려·삭제
• [신규] 우측 상세 패널 — 행 클릭 시 슬라이드 오픈. 계좌번호 28px 강조 + 분류 색상 그라데이션 배경 + 복사 버튼
• [신규] 예정일 임박 강조 — 연체·오늘 = 빨강 좌측 강조선, 이번 주 = 주황. 행에 펄스 뱃지
• [신규] 등록 모달 거래처 자동완성 + 미존재 시 기초등록 추가 확인 — V6.1-rc3 P0 커스텀 드롭다운 흡수
• [수정] 사이드바·title·앱 정보 표기 V6.0-rc4 → V6.1-rc3 일괄 통일
• [수정] 패치노트 모달 5월 누락 catch-up — V5.7~V6.1-rc3 P3까지 8건 신규 등재
• Supabase SQL 변경 없음 (acc_payment_requests 기존 컬럼 100% 활용)

V6.1-rc3 P1·P2 — 2026.05.13 (입금요청 모달 분리 · 기초등록 컬럼 통합)

• [P0] 거래처·현장 자동완성 datalist → 커스텀 드롭다운 — 검색·선택 UX 개선 (신유리 대리 요청 #1)
• [P1] 입금요청 등록 모달 17필드 → 7필드 + 10필드 접힘 분리 — 일상 입력은 7필드, 부가 정보는 펼침 (신유리 대리 요청 #4)
• [P2] 기초등록 화면 10컬럼 → 6컬럼 통합 + 행 펼침 (single-open) — 거래처·카테고리·계좌정보·최근거래·누적입금액·관리. ▼ 클릭 시 담당자·연락처·이메일·주소·특이사항 부가 정보 펼침 (신유리 대리 요청 #5)
• [신규 함수] vnToggleDetail / 신규 CSS 12종 (vn-cell-sub·vn-name-link·vn-acct-line·vn-detail-grid 등)
• Supabase SQL 변경 없음 (UI 개편만)

V6.1-rc2 — 2026.05.13 (거래처 INSERT 가드 + vendor snapshot)

• [신규] 거래처 신규 INSERT 시 사용자 확인 팝업 — 입금요청 모듈이 거래처 마스터에 무단 등록하던 누수 차단
• [신규] acc_payment_requests에 vendor_*_snapshot 4종 컬럼 — 거래처 마스터 변경 시 입금요청 시점 데이터 보존 (vendor_name·bank·account·holder 스냅샷)
• [개선] 거래처 ↔ 입금요청 단방향 SSOT 정합 강화. 거래처 마스터 변경이 과거 입금요청에 소급 영향 없음

V6.0-rc4 — 2026.05.08~11 (협력업체 결제 자동연동 + hotfix)

• [Phase 3-1] 협력업체 결제 ↔ 입금요청 자동연동 A안 — acc_payables UNION acc_expenses[source='payment_request'] 단일 SSOT. 입금요청 자동 경비를 발주=지급 동시 1건으로 합산 (잔액 영향 0)
• [Phase 3-1] renderAP 거래처별 통계에 [입금요청] 뱃지 행 추가 — 클릭 시 입금요청 상세 모달 자동 오픈
• [Phase 3-1] KPI 박스에 "입금요청 자동연동" 보라 카드 추가 (합계·건수)
• [Phase 2 흡수] P2-1 입금요청 승인 카드 컴팩트 한 줄 레이아웃, P2-2 자동 경비 INSERT vendor_id 매핑, P2-3 importMaster Silent Skip 청산
• [hotfix 2026-05-11] RC9 L2 7종 검증 통과. RPC 회수 역방향 DDL 박제. V5 트리거 정공법 삭제
• [정합성] 입금요청 = 즉시 지급 (발주·지급 동시) 회계 처리, bal 영향 0
• Supabase SQL: acc_vendors_history 트리거 + acc_payment_requests 컬럼 보강

V5.10 — 2026.05.06 (거래처 마스터 통합 + 누수 차단 + 모듈 식별)

• [근본 조치] 박종명 사고 패턴 차단 — 입금요청에서 거래처 자동 INSERT가 마스터에 침투하던 구조 해소
• [P0] acc_payment_requests_history RLS 정책 추가 + 마이그레이션 더미 682건 soft delete (합계 6.4억원). 30일 후 hard delete 예정
• [P1] acc_vendors 누수 차단 트리거 — bank_name/account_no NOT NULL 패턴으로 입금요청 출처 자동 식별. INSERT 차단, UPDATE는 허용
• [P2] 정공법 모듈 식별 — acc_vendors에 created_by_module 컬럼 추가. INSERT 트리거에 명시 + 휴리스틱 이중 안전망
• [P2] acc_vendors_history audit log 신설 — 테이블 + RLS + 적재 트리거. 변경 이력 보존
• [P3 설계] 모듈별 RLS 정책 매트릭스 — 클라이언트 X-App-Module 헤더 일관 전송 시 활성화 예정
• [P5 거버넌스] 본문 휘발 복원 보고서 + 거버넌스 인덱스 v2 통합

V5.9.2 hotfix — 2026.05.07 (입금요청 은행 정보 저장 복구)

• [긴급 P6] 입금요청 등록 시 은행/계좌/예금주가 화면 입력은 되지만 DB 저장 안 되던 문제 해결. 상세 보기에서 항상 '-' 표시되던 증상 복구
• [신규] acc_payment_requests 컬럼 추가 — bank_name·account_number·account_holder (스냅샷)
• [수정] prSave 라인 6159-6161 — 입금요청 등록 시점에 acc_vendors → acc_payment_requests로 은행 정보 복사
• [신규] 변경 이력 자동 기록 — INSERT/UPDATE/SOFT_DELETE/RESTORE 모두 acc_payment_requests_history 트리거 적재
• [신규 테이블] acc_payment_requests_history / acc_expenses_history (이력) — RLS append-only

V5.9 — 2026.05.05 (입금요청 모듈 신설)

• [신규 모듈] 입금요청 (Payment Request) — 직원이 입금요청 등록 → 대표 승인 → 입금완료 처리 시 자동 경비 생성
• [신규] 5탭 구조 — ① 등록 (직원) / ② 승인 (대표) / ③ 계산서 미수령 / ④ 자동 생성 경비 / 🗑 휴지통
• [신규] 90일 휴지통 정책 — soft delete 후 90일 이내 복원 가능, 경과 시 영구 삭제 가능
• [신규] 자동 경비 생성 — 입금완료 처리 시 acc_expenses에 source='payment_request'로 INSERT. expense_id 양방향 연결
• [신규] 계산서 미수령 추적 — 입금완료 후 세금계산서 발행 대기/예정 상태 자동 표시, 경과일 기준 정렬
• [신규 테이블] acc_payment_requests (24컬럼) — RLS + 인덱스 5종

V5.7~V5.8 — 2026.04.30~05.03 (착공일자 미수금 · 매출 분석 페이지)

• [V5.7.1] 거래처 미수금 기간 탭 (착공일자 기준) — 1월~12월 + 직접 입력. 5상태 안내 박스 가독성 개선
• [V5.7.2] PD → DE 전사 라벨 통일 예정 알림 (별도 패치)
• [V5.8] 매출 분석 페이지 신설 — 사이드바 OVERVIEW → 매출 분석. 카드 4종(누적·목표·건수·평균) + 진행바(기대선 마커) + 4탭(연도별/매출/건수/대형/담당자)
• [V5.8] CSV 업로드/템플릿 + 대형·담당자 legacy CRUD 모달
• [V5.8] 데이터 소스: 7-table/view 스키마 (acc_revenue_manual + acc_annual_targets + acc_majors_legacy + acc_staff_legacy + acc_v_revenue_monthly/majors/staff)
• [V5.8] 2026 목표 30억 초기 설정. acc_sites 자동집계 검증 완료
• Supabase SQL: 테이블 4개 + 뷰 3개 신설

V5.0 — 2026.04.22 (카드내역 업로드 방식 전면 도입)

• [신규] 경비 처리 방식 전환 — 수기 입력 → 카드 사용내역 자동 축적 → 담당자가 미처리 건을 선택해 현장·계정에 매핑하는 방식으로 전환
• [신규] 카드내역 업로드 기능 — 경비사용내역 탭 상단 [카드내역 업로드] 버튼. IBK 기업은행 "인쇄및파일저장" 엑셀 자동 파싱 (헤더 자동 인식, 승인번호 기준 중복 체크, 취소/할인 건 음수 처리)
• [신규] 카드 검색 팝업 — 카드번호 뒷자리 일부만 입력해도 검색 (예: "79" → ****-1979 조회). 카드별 전체건수·미처리건수 뱃지 표시
• [신규] 미처리 카드내역 리스트 — 선택한 카드의 미처리 내역을 최신순으로 표시. 건 선택 시 거래일자·거래처·청구금액·카드번호·승인번호가 경비 폼에 자동 채움
• [신규] 증빙종류 라디오 (신용카드/계좌이체/현금영수증/기타) — 증빙종류에 따라 카드 선택 UI 표시/숨김, 결제수단 자동 동기화
• [신규] 당월 미처리 현황 카드 — 경비사용내역 탭 상단에 "당월 카드 사용 / 처리완료 / 미처리" 실시간 표시
• [연동] 경비 저장 시 연결된 카드내역 status를 자동으로 "처리완료"로 전환 + linkedExpenseId 양방향 연결. 경비 수정 시 이전 연결 해제 자동 처리
• [안정화] loadAllData 개별 테이블 try-catch 적용 — 신규 테이블 미존재 시에도 앱이 graceful하게 동작
• Supabase SQL 필요: acc_card_transactions 테이블 신설 + acc_expenses 컬럼 추가 (evidence_type / approval_no / card_txn_id) + RLS — 설정 페이지 SQL 블록 참조

V5.6 — 2026.04.27 (착공·준공일 분리 · 통합검색 · 부분처리)

• [신규] 착공·준공일 분리 — 프로젝트 등록/수정 일정 탭에 stStartDate / stEndDate 분리 입력. 4/1, 04-01, 4-1, 2026/4/1 등 유연 입력 자동 정규화 (parseFlexibleDate). 착공>준공 시 자동 스왑 + 경고. acc_sites에 start_date / end_date 컬럼 마이그레이션 완료 (54건 자동 분리)
• [신규] 거래처 미수금 통합 검색 — 프로젝트·발주처·PO·PM·PD·금액·입금자·발행자를 단일 검색창으로 OR 조회
• [신규] 5상태 다중선택 필터 — 미수 / 부분수금 / 계산서 미발행 / 완료 / 연체. 드롭다운 체크박스로 다중 선택, 연체는 due_date < 오늘 자동 판정
• [신규] 행 선택 + 합계 + 엑셀 내보내기 — 미수금 표 행 체크박스 → 선택 합계(공사금액·입금액·미수잔액)·건수 실시간 표시 → 3시트 엑셀(요약·입금내역·세금계산서) 다운로드
• [신규] 착공일 오름차순 정렬 — 프로젝트 관리·미수금 표 모두 착공일 기준 정렬, 월 컬럼은 착공일의 YYYY-MM
• [신규] 카드 부분처리 — 카드 1건을 여러 경비로 분할 가능. 잔액 자동 계산·자동 입력, 잔액 초과 입력 차단, 보라색 뱃지 + 잔액 표시. 분할 저장 시 합계 vs 카드금액 비교로 부분처리/처리완료 자동 결정
• [신규] 5상태 카드내역 — releaseCardTxnsFromExpense에서 잔여 매핑 합계 기반 미처리/부분처리/처리완료 자동 복원
• [엑셀] dlSiteExcel·미수금 export에 착공·준공 컬럼 추가
로드맵 V5.7 — Clova OCR 영수증 자동 인식 (예정)

V5.5 — 2026.04.24 (등록·수정·삭제 활동 로그 · append-only)

• [신규] acc_audit_logs 테이블 — user_name / action / target_table / target_id / summary / extra(jsonb) / created_at. 인덱스 3종 + RLS 정책으로 append-only (SELECT·INSERT만 허용, UPDATE·DELETE 차단)
• [신규] 로그 훅 15종 — 경비 등록·수정·삭제·분할·일괄삭제·일괄복사·승인요청·승인·반려·일괄승인·일괄반려, 카드내역 업로드, 카드마스터 CRUD, 프로젝트 CRUD
• [신규] 설정 → 현재 작업자 입력 — localStorage로 브라우저별 저장. 미지정 시 로그엔 "미지정"으로 기록
• [신규] 설정 → 활동 로그 섹션 — 작업 유형·사용자·날짜·키워드 필터, 500건 단위 페이지네이션, Excel 내보내기, 상세 팝업(before/after 스냅샷 포함)
• [신규] 대시보드 "최근 활동 5건" 카드 — 상위 5건 스트림, 설정으로 이동 링크
• [아키텍처] extra(jsonb)에 before/after 스냅샷, 카드 업로드 메타, 분할 금액 내역 등 구조화 저장
• [DB 마이그레이션] Claude가 MCP로 직접 적용 완료. schema_changelog에 'acc-v5.5' 등록
[로드맵] V5.6 — 전자세금계산서 Clova OCR

V5.4 — 2026.04.24 (원가 안분(1:N) + 행 클릭 이동 + 취소건 자동 생성)

• [① 신규] 원가 안분(1:N) — 1개 카드내역을 여러 경비로 분할 저장. 경비 입력 모달 하단 [원가 안분(분할 저장) 활성화] 버튼 → 분할 행 추가(현장/소분류/금액). 분할합계 실시간 표시 + 승인금액 일치 검증. 각 분할 경비는 동일 card_txn_id/approval_no 공유, is_split=TRUE + split_seq로 순번 관리
• [② 신규] 처리완료 행 클릭 → 현장 이동 — 카드내역 팝업의 처리완료 행 클릭 시 linked_expense_id로 연결된 경비의 현장 상세로 자동 이동(프로젝트 페이지 + 경비사용내역 탭 + 현장 선택). 팝업 자동 닫힘
• [③ 신규] 취소건 자동 경비 생성 (재검토 지점 B 이월분) — 취소 카드내역도 매핑 대상 포함. [취소건 등록] 버튼으로 픽 → 청구금액 자동 음수 세팅, is_cancel=TRUE 플래그. 원 경비 드롭다운으로 수동 연결 가능(가맹점+절대값 자동 후보 추천)
• [UI] 경비 테이블에 취소/분할 뱃지 표시 (회색 [취소] / 노랑 [분할#N])
• [DB 변경] acc_expenses 컬럼 4개 추가: is_split / split_seq / is_cancel / parent_expense_id (self-reference FK, ON DELETE SET NULL). 인덱스 3개 신규. Claude가 MCP로 직접 적용 완료
• [아키텍처] saveExpense를 3분기(일반/분할/취소) 구조로 재작성. 분할 저장은 신규 생성에서만 허용(수정 모드 차단)
[로드맵] V5.5 완료 / V5.6 — 전자세금계산서 Clova OCR

V5.3 — 2026.04.24 (카드↔경비 상태 연동 + 카드 마스터)

• [B 신규] 경비 삭제 시 연결된 카드내역 상태 자동 복원 — delExpense / delCheckedExp 모두 releaseCardTxnsFromExpense 선행 호출. 원가 안분(1:N) 대비: 남은 경비가 있으면 처리완료 유지, 전부 삭제되어야 미처리 롤백
• [C 개선] 당월 카드사용 카운트에서 취소/할인 건 제외 — approval_type = '취소또는할인' 또는 금액 음수 기준. 취소건 건수는 별도 뱃지로 표시
• [D 신규] 처리완료 행 시각 스타일 — pointer cursor + hover 시 배경 강조(rgba(126,109,92,0.10)). V5.4에서 클릭 → 현장 이동 기능 연결 예정
• [E 신규] 취소/할인 행 스타일 — 폰트색 #6b6560 (회색 처리). 카드내역 팝업에서 시각적으로 구분
• [F 신규] 카드 마스터 테이블(acc_card_master) 신규 — 카드번호(마스킹)별 사용자·부서·별명 관리. 카드 FULL 번호는 저장하지 않음(재검토 지점 D 반영). 기존 4장 카드 자동 시드
• [F UI] 설정 > 카드 관리 CRUD — 추가·수정·삭제·거래수 집계 표시. 카드번호는 수정 시 잠금(UNIQUE 제약). 카드내역 팝업에서 사용자명 인라인 표시
• [A 확인] 경비 저장 시 카드 status=처리완료 자동 업데이트는 기존 V5.0부터 작동 중 — 보강 없이 유지
• [Supabase 변경] Claude가 MCP로 acc_card_master 테이블 생성 + RLS + 4장 카드 시드 완료. HTML 배포만 필요
[로드맵] V5.4 — 원가 안분(1:N) + 처리완료 행 클릭 → 현장 이동 / V5.5 — 등록확인 활동 로그 / V5.6 — Clova OCR 세금계산서

V5.2 — 2026.04.24 (경비 분류 DB 이관 + CRUD)

• [Constitution 준수] HTML 하드코딩된 7 대분류 × 113 소분류 매핑 체계를 DB(acc_expense_categories)로 이관 — SSOT 확보 (조항 1·5·10)
• [신규] 설정 > 경비 분류 관리 CRUD — 소분류·대분류·원가구분·과세구분 기본값·정렬순서·활성여부·메모 필드 관리. Excel 내보내기 지원
• [재검토 지점 C 반영] (sub_cat, major_cat) 조합 유니크 제약 — 같은 소분류("택시비")가 여러 대분류(여비교통비/복리후생비)에 속할 수 있음. 타이핑 매칭 시 드롭다운 선택 요청
• [신규] 소분류 직접 타이핑 후 blur 이벤트 — 드롭다운 미선택 상태에서도 자동 매핑 동작 (onblur → handleExpSubCatBlur)
• [개선] 소분류 선택 시 원가구분뿐 아니라 과세구분 기본값도 자동 반영 (DB tax_type_default 컬럼)
• [안전장치] DB 미로드/로드 실패 시 기존 하드코딩 트리를 폴백으로 유지 → 앱은 항상 동작 가능
• [Supabase SQL 필요] acc_expense_categories 테이블 생성 + 시드 113건 INSERT + RLS 정책 — 첨부 v5.2_migration.sql 실행
[로드맵] V5.3 — 카드내역 업로드 확장 / V5.4 — 원가 안분 + 카드↔경비 상태 연동 + 처리완료 행 클릭 이동 / V5.5 — 등록확인 활동 로그 / V5.6 — 전자세금계산서 Clova OCR

V5.1 — 2026.04.23 (경비 입력 UI 개선)

• [라벨 변경] "등록자" → "사용자" (향후 사용자 선택 연동 구조로 확장 가능하게 유지)
• [UI 정리] 카드 사용자(레거시 호환) 영역 제거 — 카드사 드롭다운 / 카드사 직접입력 / 뒷4자리 입력 UI 삭제. 카드 정보는 "카드 선택"에서 일원화 처리 (레거시 필드는 hidden으로 유지해 기존 JS 참조 안전)
• [UI 개선] 증빙종류 / 원가구분 / 과세구분 라디오 전부 가로 한 줄 정렬 (flex-wrap:nowrap + white-space:nowrap) — 줄바꿈(신용 / 카드) 현상 제거
• [자동 입력] 증빙종류 = 신용카드 + 카드 선택 시 회계일자 = 거래일자 자동 세팅. 거래일자 변경 시에도 동기화. 사용자가 회계일자를 수동으로 수정한 경우 자동 덮어쓰기 중단 (_exAccDateManual 플래그)
• [안정성] pickCardTxn / addExpense 내 레거시 select API 호출을 hidden input 호환 로직으로 교체 — V4.9 유형(exCat 제거 후 TypeError) 재발 방지
• Supabase SQL 변경 없음 (HTML 재배포만 필요)
[로드맵] V5.2 — 경비 분류 자동 매핑(소분류→대분류/원가구분) + 설정 CRUD 예정 / V5.3 — 카드내역 업로드 + card_transactions 테이블 / V5.4 — 원가 안분 + 카드↔경비 상태 연동

V4.9 — 2026.04.20 (긴급 버그수정)

• [긴급] 경비사용내역 + 버튼 클릭 시 모달이 뜨지 않던 오류 수정 — V4.8에서 DOM에서 제거된 exCat 요소를 addExpense()가 참조해 TypeError 발생 → 모달 호출 중단되던 문제 해결
• [개선] 경비 신규 입력 모달 초기화 보강 — 대분류/소분류/원가구분/과세구분/공급가액·세액 필드 일괄 초기화 (이전 입력 잔상 제거)
• [긴급] 프로젝트 등록/수정 과세구분 계산 오류 수정 — 면세/영세 선택 시에도 세액이 자동으로 0이 되지 않고 공급가액·세액이 VAT 포함 기준으로 잘못 계산되던 문제 해결
  - 과세: 공급가액 = 계약금액 ÷ 1.1, 세액 = 계약금액 − 공급가액
  - 면세·영세: 공급가액 = 계약금액, 세액 = 0
• [개선] 과세구분 드롭다운 변경 즉시 공급가액·세액 자동 재계산 (onchange 이벤트 부착) — 저장 후 재조회 시에도 일관 표시
• Supabase SQL 변경 없음 (HTML 재배포만 필요)

V4.8 — 2026.04.17

• [긴급 버그수정] 테이블 헤더 정렬 시 서버 멈춤 현상 해결 — MutationObserver 제거, 렌더 훅 기반으로 전환 (클라이언트 단 정렬, 서버 요청 없음)
• [외주 견적서 관리] 실제 모듈 구현 — 거래처별 견적 요약 / 빠른 등록 팝업 / 1차 탭(견적 내역) / 2차 탭(견적 상세) / 품목 그리드 / 금액·공급가액·세액 자동 계산
• [경비 상세 입력] 과세구분 라디오 추가 (과세/면세/영세율) — 과세 선택 시 청구금액에서 공급가액·세액 자동 분리 표시
• [경비사용내역] 계정과목 2단계 구조 — 대분류 7개(재료비/외주비/인건비/운반비/장비비/경비/관리비) / 소분류 약 120개 / 검색형 드롭다운 / 자유입력 불가
• [경비사용내역] 원가구분 라디오 추가 (재료비 귀속 / 공임 귀속) — 상단 요약 카드의 재료비·공임 합계는 원가구분 기준으로 공급가액만 합산
• [경비 목록 테이블] 컬럼 재구성 — 확정/처리/거래일자/대분류/소분류/원가구분/제목/결제수단/과세구분/청구금액/회계일자/상태/관리
• [필터] 경비사용내역 카테고리 필터가 대분류 7개 기준으로 변경
• Supabase SQL 필요: acc_expenses 컬럼 추가(major_cat/sub_cat/cost_type/tax_type/supply_amount/tax_amount), 신규 테이블 3개(acc_outsourcing_vendors/quotes/quote_items) — 설정 페이지 SQL 블록 참조

V4.7 — 2026.04.17

• [테이블 정렬] 거래처 미수금 / 협력업체 결제 / 프로젝트 목록 / 경비사용내역 — 모든 컬럼 헤더 클릭 시 오름차순(▲) / 내림차순(▼) / 해제(⇅) 3단계 토글
• [테이블 정렬] 숫자·날짜·퍼센트·텍스트·상태 자동 인식, 소계/누계 행은 정렬 제외
• [사이드바] "입금 / 지급" 메뉴 삭제
• [사이드바] "세금계산서" 메뉴 삭제
• [사이드바] "외주 견적서 관리" 메뉴 추가 (V4.5 모듈 구현 예정)
• [프로젝트 관리] "공정내역 / 영수증" 탭 삭제
• [프로젝트 관리] "현장 상세관리" 탭 삭제 (잔여 탭: 프로젝트 목록 / 경비사용내역)

V4.6 — 2026.04.16

• [경비사용내역] 승인완료 행도 체크박스 선택 가능 (잠금=수정/삭제만)
• [경비사용내역] 모든 행 클릭 → 상세조회 팝업 (승인완료: 읽기전용, 미승인: 수정)
• [경비사용내역] "사용자" 컬럼 추가 (카드사용자/등록자)
• [경비 입력] 카드 사용자 → 카드사 드롭다운 + 뒷4자리 입력 방식 변경
• [경비 입력] 제목 자동생성 — 거래일자/거래처/계정 입력 시 [MM/DD]거래처_계정 형식
• [거래처 미수금] 메인 목록 "관리" 컬럼 추가 (수정/삭제)
• [거래처 미수금] 입금/계산서 차수별 첨부파일 기능 (📎 클릭, 다중 업로드/미리보기/다운로드)

• [버그수정] 발주 등록 품목 JSON 구조 저장 — 등록확인/수정 시 그리드 완전 복원
• [버그수정] 연속 등록 시 필드 잠김 해소 — enableModalFieldsForEdit() 적용
• [거래처 미수금] 프로젝트 일괄 연동 버튼 제거 (자동 실시간 연동 유지)
• [거래처 미수금] 상세 영역 높이 확장, 특이사항 메모 4줄 이상 확보
• [거래처 미수금] 입금 등록 — 입금 계좌(기업/국민/기타) + 입금자명 필드 추가
• [거래처 미수금] 세금계산서 발행률 컬럼 신규 추가 (100% 미만 주황 강조)
• Supabase SQL 필요: acc_receivable_payments에 bank_account, depositor_name 컬럼 추가

showToast 버그 수정 · 기초채무 표시 개선 · 금액 포맷

• showToast is not defined 오류 수정 — 토스트 알림 함수·요소 추가
• 기초채무: 이월잔액 행 금액 컬럼에 기초채무 금액 표시
• 기초채무: 메인 화면 기초채무·잔액 컬럼 연동 수정 (vMap 누락)
• 기초채무 입력란: 세자리 쉼표 자동 포맷 적용

V4.3 — 2026.04.14

기초채무(이카운트 이월) 입력 기능 추가

• 거래 상세 팝업에 기초채무 입력 영역 추가 (금액·기준일·비고)
• 거래 내역 테이블 최상단에 이월잔액 행 자동 표시
• 잔액 = 기초채무 + 매입 − 지급 로직 반영
• 메인 목록 기초채무 컬럼에 값 자동 반영
• KPI 카드에 기초채무 표시
• 수정·삭제 가능 (삭제 시 잔액 재계산 확인)

V4.2 — 2026.04.14

협력업체 결제 기능 개선 · 프로젝트 표시 버그 수정

• 발주 등록: VAT 포함/미포함 토글 추가 — 단가 입력 기준 선택 가능
• 적요 클릭 → 수정 팝업과 동일한 읽기전용 상세 화면으로 변경
• 거래 상세 프로젝트명 표시 버그 수정 (D.projects → D.sites 테이블 참조 오류)
• 수정 진입 시 기존 프로젝트 선택 상태 정상 복원

V4.1 — 2026.04.14 (보안 패치)

XSS 방어 · 에러 핸들링 보강 · $v 안전 처리

• esc() 함수 추가 — innerHTML 삽입 시 HTML 이스케이프 적용
• sanitizeText() 함수 추가 — 사용자 입력 정제
• gn() 헬퍼 — 이름 출력 시 esc() 자동 적용
• $v() 안전 처리 — 요소 미존재 시 빈 문자열 반환
• 핵심 저장/삭제 함수 try-catch 보강 (saveSite, delSite, syncAllSitesToAR, saveApOrder/Payment/Invoice)
• 거래처·협력업체·직원·프로젝트 목록 XSS 방어
• 별도 RLS SQL 제공 — Supabase 테이블 행 수준 보안 활성화

V4.0 — 2026.04.15

프로젝트 ↔ 미수금 SSOT 연동 · 협력업체 결제 전면 개편 · 프로젝트 UI 리뉴얼

🔗 프로젝트 ↔ 미수금 자동 연동 (SSOT)

• 프로젝트 등록 → 미수금 행 자동 생성
• 프로젝트 수정 → 미수금 계약금액·거래처 자동 갱신 (덮어쓰기)
• 프로젝트 삭제 → 미수금 + 입금내역 + 계산서 + 메모 cascade 삭제
• 미수금 화면: 프로젝트 정보 읽기 전용, 수금률(%) 자동 계산
• "프로젝트 일괄 연동" 버튼 (기존 현장 1회성 일괄 생성)

🏗 협력업체 결제 전면 개편

• 거래처별 채무 집계 메인 + 상세 드릴다운 구조로 변경
• 발주 등록: 그리드형 다중 품목 입력 (합계 컬럼 추가)
• 지급 등록: 단순 입력 폼 (업체 자동세팅)
• 계산서 등록: VAT 포함 → 공급가·세액 자동 분할
• 수정 버튼 → 행 종류별 팝업 자동 라우팅 (발주/지급/계산서)
• 적요: 품목 2건+ → "첫 품목 외 N건" 요약 표시
• + 거래처 추가 버튼 신설
• 구 발주(매입) 등록 팝업 완전 삭제

📋 프로젝트 관리 UI 리뉴얼

• 등록/수정 팝업: 5탭 구조 (기본정보/발주처/일정/금액·예산/첨부파일)
• 라벨 좌측 정렬 + 2단 고밀도 레이아웃 + 필수항목 빨간 * 표시
• PO/PM/PD/발주처에 🔍 검색 버튼 (기존 담당자·거래처 검색)
• 과세/면세/영세 구분 필드 추가
• 아코디언: 섹션카드형 리뉴얼 (기본정보/발주처/담당/일정·금액)
• 상태(진행/대기/완료) 드롭다운 추가
• 금액: 큰 폰트 + 우측 정렬 + "원" 단위 표기

🛡 UX 개선

• 팝업 바깥 클릭 실수 종료 방지 (protected 모달)
• 변경사항 있을 시 종료 전 확인 팝업
• ESC 키 dirty check 적용
• 프로젝트 목록 상태별 필터 (진행/대기 기본값)
• 발주 등록: F8 저장 단축키 + "다시 작성" 버튼

이전 버전

V3.9 (2026.04.13) — 프로젝트 목록 상태 필터 복구, Supabase 신규 프로젝트 전환

V3.8 (2026.04.10) — 아코디언 상세뷰, 경비승인 시스템, 현장 상세관리