| 월 | 착공 | 준공 | 발주처 | 프로젝트 | PO | PM | PD | 공사금액 | 입금액 | 미수잔액 | 수금률 | 계산서 발행률 | 상태 | 관리 |
|---|
| 거래처명 | 기초채무 | 발주(매입) | 지급합계 | 계산서 | 최근 구매일 | 마지막 지급일 | 잔액 |
|---|
| 상태 | 월 | 프로젝트명 | 현장주소 | 발주처 | PO | PM | PD | 공사일 | 계약금액 | 집행예산한도 | 관리 |
|---|
| 카테고리 | 거래처명 | 사업자번호 | 견적 건수 | 최근 견적일 | 최근 프로젝트 | 총 견적금액 | 관리 |
|---|
견적 상세
외주 견적 빠른 등록
거래처 기초 정보
견적 정보
| # | 품명 | 규격 | 수량 | 단가 | 금액 | 비고 | |
|---|---|---|---|---|---|---|---|
| 합계 | 0 | ||||||
| 입금일 | 경과일 | 거래처 | 현장 | 금액 | 증빙 | 상태 | 관리 |
|---|
입금요청 등록
×입금요청 상세
×반려 사유 입력
×휴지통으로 이동
×물리 삭제는 차단되어 있습니다. 90일간 휴지통에 보관되며, 그 기간 안에 복원 가능합니다.
세금계산서 수령 처리
×| 현장명 | 거래일자 | 회계일자 | 거래처 | 항목 | 청구금액 | 결제수단 | 제목 | 관리 |
|---|
전체 데이터 일괄 다운로드
카테고리별 다운로드
Excel 업로드용 빈 양식 다운로드
양식을 다운로드 후 데이터를 입력하고, 해당 페이지에서 Excel 업로드하세요. 예시 데이터 1행이 포함되어 있습니다.
현재 데이터 요약
| 삭제일 | 유형 | 항목 | 거래처 | 현장 | 금액 | 남은일 | 삭제자 | 사유 | 관리 |
|---|
기초등록 — 거래처 마스터
전체 거래처를 한 곳에서 관리합니다. 카테고리(협력업체·발주처·기타)는 다중 선택 가능하며, 협력업체 결제·거래처 미수금·입금요청은 카테고리에 따라 거래처를 표시합니다.
| 거래처명 | 사업자번호 | 카테고리 | 은행 | 계좌번호 | 예금주 | 최근 입금일 | 2026 건수 | 누적 입금액 | 관리 |
|---|
앱 정보
DUGURU 회계관리 V6.3 (Supabase Cloud)
두구루 지원팀 전용 | Supabase DB 기반 | 다중 사용자 공유 | 활동 로그 (append-only)
👤 현재 작업자 (V5.5 신규)
활동 로그에 기록되는 작업자 이름입니다. 브라우저별로 저장되며 (localStorage), 사용자마다 최초 1회만 설정하면 됩니다.
※ 미지정 상태에서도 앱은 동작하지만, 로그에는 '미지정'으로 기록됩니다.
📋 활동 로그 (V5.5 신규 · append-only)
DB에 영구 저장되는 등록·수정·삭제·승인 이력. 최근 500건 단위로 페이지네이션, 필터·검색·엑셀 내보내기 지원.
| 시각 | 사용자 | 작업 | 대상 | 요약 | 상세 |
|---|---|---|---|---|---|
| 로드 대기 — '새로고침' 클릭 | |||||
활동 로그 상세
✓ V6.0-rc4 — Phase 3: 협력업체 결제 자동연동 A안 (rc2 흡수)
2026-05-08 배포. V6.0-rc2 라이브 미배포 흡수 + Phase 3 자동연동 A안 통합. 입금요청 ↔ 협력업체 결제 단일 SSOT 화면 표시.
• 데이터 모델: 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안 인프라 완성.
• 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 사전 배포 직전 정밀검증으로 발견된 결함 일괄 수정.
• 종전: 거래처 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 베이스 위에 거래처 마스터 통합 + 휴지통 보호 확장.
• 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)하면 외주 견적서 관리 / 경비사용내역 신규 기능이 정상 동작합니다.