Commit Graph

504 Commits

Author SHA1 Message Date
김보곤
efb0c23aef fix:예정 세액 계산 실패 시 상세 에러 로깅 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 12:38:47 +09:00
김보곤
3241eee0de fix:부가세 예정 세액 계산 실패 시 방어 처리 (try-catch)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 11:35:39 +09:00
김보곤
bc43479d00 feat:부가세 확정 신고 시 예정 세액 차감 반영
- 확정(C) 기간 조회 시 대응하는 예정(P) 기간의 netVat 자동 계산
- 예정 환급세액 → "예정신고 미환급세액"으로 차감 표시
- 예정 납부세액 → "예정신고 기납부세액"으로 차감 표시
- 최종 납부세액 = 확정 산출세액 - 예정 차감액
- 상단 요약 카드에도 최종 세액 반영

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 11:21:42 +09:00
김보곤
02685371f9 fix:카드사용내역 엑셀 다운로드 개선
- 카드번호 문자형 출력 (="번호" 형식으로 과학적 표기 방지)
- 사업자번호, 가맹점명 열 추가
- 합계금액/공급가액/세액 3열로 분리 (화면과 동일)
- 분개 행도 공급가액/세액 분리 출력

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 10:55:20 +09:00
김보곤
5cb92c0fd7 fix:카드별 사용금액 프로그래스바 바로빌 실거래 데이터 반영
- summary API에 cardUsages(카드번호별 사용금액) 응답 추가
- 카드 목록 프로그래스바가 바로빌 거래 합산 기준으로 표시
- 체크카드도 사용금액 있으면 금액 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 10:31:06 +09:00
김보곤
d78d431350 feat:법인카드 요약카드 개선 (결제일/사용금액/선불결제)
- 요약카드 4개→6개 확장 (등록카드, 총한도, 매월결제일, 사용금액, 선불결제, 잔여한도)
- 매월결제일: 휴일/주말 시 다음 영업일로 자동 조정 표시
- 사용금액: barobill_card_transactions 기반 청구기간 실거래 합산
- 선불결제: 수정 모달로 테넌트 단위 월별 금액 관리
- 잔여한도: (총한도 - 사용금액 + 선불결제) 계산

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 10:24:39 +09:00
김보곤
c9ed5f27a4 feat:일반전표입력 수동 전표 생성 기능 추가
은행거래 기반 분개 외에 수동으로 전표를 작성할 수 있는 탭/모달 추가
- 탭 시스템: 은행거래 분개 / 수동전표 탭 전환
- ManualJournalTab: 전표 목록 조회, 필터링, 통계 카드
- ManualJournalModal: 날짜/적요 입력, 분개라인 편집, 대차균형 검증
- 컨트롤러 index() 응답에 source_type 필드 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 09:50:36 +09:00
김보곤
8e135672a1 feat:일반전표입력에 계정과목 설정 기능 이관
계좌입출금내역에서 제거된 계정과목 설정 기능을 일반전표입력 페이지로 이관
- JournalEntryController에 계정과목 CRUD 메서드 추가
- 계정과목 CRUD 라우트 추가 (journal-entries/account-codes/*)
- AccountCodeSettingsModal 컴포넌트 추가
- 페이지 헤더에 계정과목 설정 버튼 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 09:33:33 +09:00
김보곤
2609437063 fix:바로빌 거래 저장 시 잔액 차이 중복 방지 및 기존 중복 자동 정리 2026-02-10 21:45:30 +09:00
김보곤
1f73c9a6e9 fix:일반전표 은행거래 목록 잔액 차이로 인한 중복 표시 제거 2026-02-10 21:43:01 +09:00
김보곤
4c09f2536e feat:달력 일정에 첨부파일 아이콘 표시 2026-02-10 21:11:11 +09:00
김보곤
26c3f2ca4d feat:유형에 면접 추가 + 커스텀 유형 동적 추가 기능
- Schedule 모델에 TYPE_INTERVIEW(면접) 추가 (보라색)
- 유형 select 옆에 [+] 버튼 → 커스텀 유형 직접 입력 가능
- 컨트롤러 validation을 string|max:50으로 변경 (동적 유형 허용)
- 달력 뱃지 색상을 인라인 스타일로 변경 (Tailwind JIT 미빌드 대응)
- 수정 모달에서 커스텀 유형도 select에 자동 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 20:50:26 +09:00
김보곤
489a491415 feat:일정 첨부파일 기능 추가 (다중 업로드, 드래그앤드롭, GCS)
- DashboardCalendarController에 uploadFiles/deleteFile/downloadFile 추가
- 파일 업로드 라우트 3개 추가 (POST/DELETE/GET)
- 모달에 드래그앤드롭 파일 업로드 영역 추가
- XHR 진행률 표시, 파일 목록 렌더링, 개별 삭제
- Google Cloud Storage 연동 (가용시 자동 업로드)
- files 테이블 document_type='schedule' 활용

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 20:36:22 +09:00
김보곤
0281e4a8aa feat:대시보드 일정관리 달력 추가
- Schedule 모델 생성 (schedules 테이블, type별 색상 상수)
- DashboardCalendarController 생성 (CRUD + 달력 partial)
- 대시보드 뷰에 월간 달력 섹션 추가 (HTMX + Vanilla JS)
- 일정 생성/수정/삭제 모달 구현
- 공휴일 빨간색 표시, 일정 유형별 색상 뱃지

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 20:11:36 +09:00
김보곤
9f81c759e5 refactor:은행거래 조회를 바로빌 API → DB 직접 조회로 변경
- bankTransactions()를 barobill_bank_transactions 테이블 직접 조회로 변경
- EaccountController 의존성 제거
- 계좌 목록을 DB distinct 조회로 제공 (별도 API 불필요)
- 프론트엔드 계좌 드롭다운 필드명 수정 (camelCase → snake_case)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 19:41:40 +09:00
김보곤
93fe51ea9b Revert "refactor:일반전표 상태(status) 열 제거, 기본상태를 confirmed로 변경"
This reverts commit 6ecbcfd428.
2026-02-10 19:02:26 +09:00
김보곤
6ecbcfd428 refactor:일반전표 상태(status) 열 제거, 기본상태를 confirmed로 변경
- 프론트엔드: 전표목록 테이블에서 상태 컬럼/필터/통계 제거
- 프론트엔드: 임시저장/확정 stat cards를 차변합계/대변합계로 교체
- 백엔드: store(), storeFromBank() 기본 status를 draft→confirmed 변경
- 백엔드: index() 통계에서 draftCount/confirmedCount 제거

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 18:46:38 +09:00
김보곤
34788e854c feat:일반전표입력 페이지 전면 개편 - 계좌입출금 기반 분개 시스템
- 3탭 구조로 전면 재작성 (은행거래분개, 수동전표, 전표목록)
- JournalEntryController에 bankTransactions, storeFromBank, bankJournals, deleteBankJournal API 추가
- JournalEntry 모델에 source_type, source_key fillable 및 헬퍼 메서드 추가
- 은행거래 목록에서 분개 모달로 복식부기 전표 생성
- 입금/출금에 따라 보통예금(103) 자동 세팅
- 분개 완료/미분개 상태 표시 및 필터링
- 기존 수동전표, 전표목록 기능 그대로 유지

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 17:58:33 +09:00
김보곤
510b25ff1d fix:전표번호 채번 시 soft-deleted 포함 (withTrashed) + store 에러 핸들링 2026-02-10 17:22:50 +09:00
김보곤
5596ed0e76 fix:mergeWithDedup 반환 형식 수정 및 합계 금액 중복 차감 2026-02-10 17:19:29 +09:00
김보곤
352b521fcf fix:수동/API 중복 거래 제거 (mergeWithDedup) + 디버그 로그 2026-02-10 17:17:53 +09:00
김보곤
892778b7eb fix:save() 디버그 로그 추가 (수동거래 저장 문제 추적) 2026-02-10 17:04:37 +09:00
김보곤
d01253aa27 fix:save()에서 수동 거래를 dbId로 직접 업데이트
수동 거래는 balance가 재계산되어 composite key 매칭 불가.
dbId를 사용하여 직접 레코드를 찾고 비-키 필드만 업데이트.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:57:48 +09:00
김보곤
2c3bccb9a0 fix:save()에서 수동 거래 스킵 (재계산 balance로 인한 충돌 방지)
수동 거래의 balance는 화면에서 재계산된 값이므로 DB 원본값과 다름.
save()에서 처리하면 잘못된 레코드 매칭 또는 unique key 충돌 발생.
수동 거래는 updateManual()에서만 처리하도록 스킵.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:55:48 +09:00
김보곤
cc4cf64248 fix:수동거래 수정 시 unique key 컬럼(deposit/withdraw/balance) 제외
수동 거래의 balance는 화면에서 재계산(recalcManualBalances)되어 표시되므로
DB의 원본값과 다름. 프론트에서 재계산된 balance를 보내면 다른 레코드와
unique key 충돌 발생. 수정 시 적요/예금주명 등 비-키 필드만 업데이트.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:52:44 +09:00
김보곤
587c21fa11 fix:updateManual()도 Query Builder로 전환 (numeric dirty 감지 문제)
수동 거래 수정 시 Eloquent가 deposit/withdraw/balance를
dirty로 오감지 (DB "515900.00" vs validation 515900 비교).
DB::table()로 변경하여 지정 필드만 정확히 업데이트.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:48:28 +09:00
김보곤
1cab267ec6 fix:입출금내역 save()를 순수 Query Builder로 전환
Eloquent 모델의 decimal cast + opcache 캐시 문제로 인해
deposit/withdraw/balance가 dirty 감지되어 unique 제약조건 위반.
- Eloquent 완전 우회: DB::table() 기반 lookup + update + insert
- CAST(AS SIGNED) 제거: 정확한 decimal 비교로 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:42:13 +09:00
김보곤
f73e8a18a1 fix:입출금내역 저장 시 decimal:2 cast dirty 감지로 인한 unique 제약조건 위반 수정
Eloquent 모델의 decimal:2 cast가 balance를 dirty로 잘못 감지하여
UPDATE 시 balance가 포함되면서 unique 제약조건 위반 발생.
Query Builder(DB::table)로 변경하여 지정 필드만 업데이트.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:35:04 +09:00
김보곤
13f2e1df73 fix:입출금내역 상대계좌예금주명 저장 후 원복되는 문제 수정
인라인 편집으로 cast 저장 시 override 테이블의 modified_cast가
메인 테이블 값보다 우선하여 이전 값이 표시되는 문제.
save() 후 override의 modified_cast를 동기화(제거)하여 충돌 방지.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:25:00 +09:00
김보곤
bc4322c1f5 feat:거래처 등록 사업자등록증 OCR 기능 추가
- TradingPartnerOcrService 신규 생성 (Gemini Vision API 사업자등록증 OCR)
- TradingPartnerController에 ocr() 메서드 추가
- partners 라우트 그룹에 OCR 엔드포인트 추가
- 거래처 등록 모달에 이미지 드래그앤드롭 업로드 UI 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 15:18:51 +09:00
김보곤
d4ff6dae25 fix:일일자금일보 중복 제거 키에 balance 추가하여 동일 금액 다른 거래 구분
계좌 입출금내역과 동일한 문제: balance 없이 중복 제거하면
같은 출금금액의 서로 다른 거래가 하나로 합쳐지는 문제 수정.
BankTransaction 모델의 unique_key 속성(balance 포함)을 재사용.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 12:17:09 +09:00
김보곤
20568765e0 fix:계좌 입출금내역 저장 키값에 balance 추가하여 동일 금액 다른 거래 구분
같은 출금금액이라도 잔액(balance)이 다르면 별도 거래로 인식하도록 개선.
기존에는 balance 없이 매칭하여 김종성/곽형석 등 다른 거래가 같은 키로 인식되는 문제 수정.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 11:39:16 +09:00
김보곤
b2fbd3d113 feat:회의록 자동 화자 분리(Phase 2) 구현 및 세그먼트 저장 에러 수정
- GoogleCloudService에 speechToTextWithDiarization 메서드 추가
- Google STT V1 diarizationConfig 활성화로 자동 화자 구분
- MeetingMinuteService에 processDiarization 메서드 추가
- POST /{id}/diarize 엔드포인트 및 라우트 추가
- 프론트엔드에 '화자 분리' 버튼 추가 (RecordingControlBar)
- saveSegments 컨트롤러에 try-catch 에러 핸들링 추가
- 빈 텍스트 세그먼트 필터링 로직 추가 (서버/클라이언트 양쪽)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 10:29:16 +09:00
김보곤
418aa0c469 feat:Tiro AI 스타일 회의록 작성 기능 추가 (음성인식+화자분리+AI요약)
- MeetingMinute/MeetingMinuteSegment 모델
- MeetingMinuteService (CRUD, GCS 업로드, Gemini AI 요약)
- MeetingMinuteController (11개 엔드포인트)
- React SPA Blade 뷰 (대화기록/스크립트 탭, AI 요약 사이드패널)
- Web Speech API 실시간 STT + 수동 화자 전환 + MediaRecorder 녹음

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 09:50:23 +09:00
김보곤
d7a656a047 feat:음성입력 STT 사용량 AI 토큰 추적 연동
logSttUsage 엔드포인트 추가, 녹음 종료 시 duration 전송
AI 토큰 사용량에 '공사현장사진대지-음성입력' 카테고리로 기록

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 21:54:30 +09:00
2182f177f2 Merge remote-tracking branch 'origin/develop' into develop 2026-02-09 21:32:55 +09:00
김보곤
beff95b4e1 feat:공사현장 사진대지 기능 추가
모델, 서비스, 컨트롤러, React SPA 뷰, 라우트 추가
GCS 업로드/다운로드, 드래그앤드롭 사진 관리

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 21:25:07 +09:00
8f20fa8163 feat:트리거 관리(4.4) + 파티션 관리(4.6) UI 구현
- TriggerManagementService: 테이블별 트리거 상태 조회/재생성/삭제
- PartitionManagementService: 파티션 현황 조회/추가/삭제 (보관기간 검증)
- triggers.blade.php: 트리거 상태 대시보드 + 개별/전체 재생성·삭제
- partitions.blade.php: 파티션 통계 + 추가/삭제 (초과분만)
- sub-nav: 감사 로그 목록/트리거 관리/파티션 관리 탭 내비게이션
- 라우트 6개 추가, 컨트롤러 6개 메서드 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 19:53:32 +09:00
김보곤
64ac667cfd fix:계좌 입출금내역 상대계좌예금주명/적요 업데이트 누락 수정
기존 거래 업데이트 시 cast(상대계좌예금주명), summary(적요)가
업데이트 대상에서 빠져있어 저장되지 않던 문제 수정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 17:46:57 +09:00
김보곤
2c138a1135 feat:홈택스 분개 저장 구조 변경 (journal_entries → hometax_invoice_journals)
- HometaxInvoiceJournal 모델 신규 생성
- HometaxInvoice에 journals() 관계 추가
- HometaxController: 저장 로직 변경 + 조회/삭제 엔드포인트 추가
- HometaxSyncService: hasJournal 필드 추가
- 프론트엔드: 분개완료 상태 표시, 기존 분개 로드/수정/삭제 지원

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 17:03:07 +09:00
김보곤
943648169a fix:홈택스 분개 차/대 토글 기능 추가 및 저장 오류 수정
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 16:25:16 +09:00
김보곤
4c9daf3633 fix:부가세 카드매입 분개 이중계산 버그 수정
분개가 있는 카드거래의 unique_key가 금액 변경/수동입력으로
달라질 경우 매칭 실패하여 원본+분개 이중 집계되는 문제 수정.
금액을 제외한 부분키(card_num|use_dt|approval_num)로
보조 매칭하여 분개가 있으면 원본 금액을 사용하지 않도록 개선.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 15:05:39 +09:00
김보곤
71ba63c570 feat:주일기업 기획 메뉴 추가 (견적/입찰/공사관리, 프로젝트관리/기성청구)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 11:18:51 +09:00
f24a084152 Merge remote-tracking branch 'origin/develop' into develop 2026-02-09 10:46:09 +09:00
김보곤
89a5c7000d fix:법인차량 총 주행거리에 운행기록 합산 반영
- 기존: 초기 주행거리(mileage)만 표시
- 변경: 초기 주행거리 + vehicle_logs.distance_km 합계 = total_mileage
- 요약 카드, CSV 다운로드 모두 total_mileage 사용

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 09:55:27 +09:00
김보곤
b204e73ada feat:부가세 관리 구분 6개로 확장 (전자/종이세금계산서 분리)
- 매출(세금계산서) → 매출(전자세금계산서) + 매출(종이세금계산서) 분리
- 매입(세금계산서) → 매입(전자세금계산서) + 매입(종이세금계산서) 분리
- 매입(카드) → 매입(신용카드) 명칭 변경
- 요약 테이블 6행으로 확장, 필터 드롭다운 업데이트
- 컨트롤러 stats에 hometaxSales/manualSales/manualPurchase 분리 반환

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 09:46:21 +09:00
김보곤
4ed902e846 feat:AI 토큰 단가 설정 UI 및 DB 조회 연동
- AiPricingConfig 모델 추가 (캐시 적용 단가/환율 조회)
- AiTokenUsageController에 pricingList/pricingUpdate 메서드 추가
- AI 토큰 사용량 페이지에 설정 버튼 + 모달 UI 추가
- AiTokenHelper 하드코딩 단가를 DB 조회로 변경
- pricing 라우트 추가 (GET/PUT)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 09:33:56 +09:00
0316c63d3c feat:DB 트리거 감사 로그 관리 화면 구현
- TriggerAuditLog 모델 (casts, accessors, scopes)
- TriggerAuditController (목록/상세/이력/롤백 미리보기/롤백 실행)
- index: 대시보드 통계 + 필터 + 목록 + 파티션 현황
- show: old/new diff 뷰 (변경 컬럼 하이라이트)
- history: 레코드별 변경 타임라인
- rollback-preview: SQL 미리보기 + 확인 후 실행
- 라우트 5개 등록, 메뉴 시더 (시스템 관리 > DB 변경 추적)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 08:55:18 +09:00
김보곤
6d02cc5e5e feat:상세모달에 브라우저 내장 오디오 플레이어 추가
- DetailModal에 <audio> 태그 기반 재생기 추가 (다운로드 없이 바로 재생)
- 다운로드 엔드포인트에 ?inline=1 파라미터 지원 (스트리밍 재생용)
- Content-Length, Accept-Ranges 헤더 추가
- 플레이어 옆 다운로드 버튼 배치

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 14:24:59 +09:00
김보곤
29a670522a fix:음성파일 다운로드 한글 파일명 및 확장자 수정
- Str::slug()이 한글을 제거하는 문제 수정
- 한글 파일명 그대로 유지 (파일시스템 금지문자만 치환)
- RFC 5987 filename*=UTF-8'' 헤더로 브라우저 호환성 확보
- 다운로드 파일명 예시: 무제 음성녹음.webm

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 14:20:57 +09:00