Commit Graph

244 Commits

Author SHA1 Message Date
김보곤
3603a06c62 feat: [esign] 완료 알림톡 템플릿 2종 선택 및 버튼 URL 도메인 치환
- 발송 UI에 서명 요청 + 완료 알림톡 템플릿 각각 선택 가능
- 선택한 완료 템플릿명을 DB에 저장하여 서명 완료 시 사용
- 버튼 URL 도메인을 현재 환경의 app.url로 자동 치환 (개발/운영 환경 대응)
2026-02-27 16:29:03 +09:00
김보곤
5553ccf493 feat: [hr] 사원 등록/수정 폼에 고용형태 선택 추가
- Employee 모델에 EMPLOYMENT_TYPES 상수 정의 (정규직/계약직/일용직/프리랜서)
- create/edit 뷰에 고용형태 select 드롭다운 추가
2026-02-27 16:00:19 +09:00
김보곤
743ab6da34 feat: [payroll] 근로소득세 간이세액표 기반 자동 계산 기능
- IncomeTaxBracket 모델 생성 (DB 조회 방식)
- PayrollService: calculateIncomeTax DB 기반으로 리팩토링
- 10,000천원 초과 구간 공식 계산 (calculateHighIncomeTax)
- 지방소득세 10원 단위 절삭 적용
- 공제대상가족수(1~11명) 반영 (본인 + 피부양자)
- calculate API에 user_id 파라미터 추가
- 사원 select에 data-dependents 속성 추가
- 모달에 공제대상가족수 표시
2026-02-27 13:58:59 +09:00
김보곤
f02e96d4fd feat: [hr] 사업소득자관리 메뉴 신설
- BusinessIncomeEarner 모델 생성 (worker_type 글로벌 스코프)
- Employee 모델에 worker_type 글로벌 스코프 추가 (기존 사원 격리)
- BusinessIncomeEarnerService 생성 (등록/수정/삭제/조회)
- Web/API 컨트롤러 생성 (CRUD + 파일 업로드)
- 라우트 추가 (web.php, api.php)
- View 5개 생성 (index, create, show, edit, partials/table)
- 사업장등록정보 6개 필드 (사업자등록번호, 상호, 대표자명, 업태, 종목, 소재지)
2026-02-27 13:46:50 +09:00
김보곤
bd85a902ad feat: [payroll] 장기요양보험 공제항목 추가
- 건강보험에서 장기요양보험 분리하여 별도 항목으로 표시
- 급여등록/수정/일괄생성/상세보기/CSV 내보내기 모두 반영
- 공제순서: 국민연금-건강보험-장기요양보험-고용보험-근로소득세-지방소득세
2026-02-27 10:06:28 +09:00
김보곤
8d78a1ee69 fix: [payroll] 급여 등록 500 에러 수정
- 중복 급여 등록 시 유니크 제약 위반 대신 422 응답 반환
- tenant_id null 방어 처리 (세션 값이 null인 경우 기본값 적용)
2026-02-27 09:48:16 +09:00
김보곤
af17880246 fix: [payroll] tenant_id null 오류 수정
- session('selected_tenant_id')에 기본값 1 추가
- PayrollSetting::getOrCreate, scopeForTenant 수정
- PayrollService 전체 tenant_id 조회에 기본값 적용
- Payroll 모델 scopeForTenant 동일 패턴 적용
2026-02-27 09:42:58 +09:00
김보곤
fbbc4ba385 fix: [esign] MNG EsignSigner 모델에 역할/상태 상수 추가
- ROLE_CREATOR, ROLE_COUNTERPART 상수 추가
- STATUS_WAITING~STATUS_REJECTED 상수 추가
- 운영서버 Undefined constant 오류 수정
2026-02-26 23:15:17 +09:00
김보곤
06fb6b42be feat: [payroll] 급여관리 기능 구현
- Payroll, PayrollSetting 모델 생성
- PayrollService 구현 (CRUD, 자동계산, 간이세액표, 일괄생성)
- Web/API 컨트롤러 생성 (HTMX/JSON 이중 응답)
- 급여 목록, 통계 카드, 급여 설정 뷰 생성
- 라우트 추가 (web.php, api.php)
- 상태 흐름: draft → confirmed → paid
2026-02-26 22:49:44 +09:00
김보곤
684bba105f feat: [leave] 휴가관리 Phase 1 구현
- Leave, LeavePolicy, LeaveGrant 모델 생성
- LeaveBalance 헬퍼 메서드 추가 (useLeave, restoreLeave, canUse)
- LeaveService 핵심 로직 (신청, 승인, 반려, 취소, 잔여연차, 통계)
- API 컨트롤러 (목록, 등록, 승인/반려/취소, 잔여연차, 통계, CSV 내보내기)
- 뷰 컨트롤러 + 라우트 등록 (web, api)
- Blade 뷰 (index + 3개 탭 partials: table, balance, stats)
2026-02-26 22:34:31 +09:00
김보곤
4398d5e27c fix: [attendance] User 모델에 tenantProfiles 관계 추가로 500 에러 수정
- User 모델에 tenantProfiles() HasMany 관계 추가 (tenant_user_profiles 테이블)
- eager loading에 department 관계도 포함하여 N+1 방지
2026-02-26 21:55:27 +09:00
김보곤
2550c16894 feat: [attendance] 근태관리 2차 고도화 8개 기능 구현
- 월간 캘린더 뷰 (사원별 필터, 날짜 클릭 등록, HTMX 월 이동)
- 일괄 등록 (다수 사원 체크박스 선택 후 일괄 등록, upsert 처리)
- 사원별 월간 요약 (상태별 카운트 + 총 근무시간 집계 테이블)
- 초과근무 알림 (주 48h 경고 / 52h 위험 배너)
- 근태 승인 워크플로우 (신청→승인→근태 레코드 자동 생성)
- 자동 결근 처리 (매일 23:50 스케줄러, 주말 제외)
- 연차 관리 연동 (휴가 등록 시 leave_balances 자동 차감)
- GPS 출퇴근 UI (테이블 GPS 아이콘 + 상세 모달)
- 탭 네비게이션 (목록/캘린더/요약/승인) HTMX 기반 전환
2026-02-26 20:56:25 +09:00
김보곤
c5d5d0c3ab feat: [hr] 사원등록 기능 확장
- 기본정보에 주민등록번호 필드 추가
- 급여이체정보 섹션 추가 (이체은행, 예금주, 계좌번호)
- 부양가족 정보 섹션 추가 (동적 행 추가/삭제)
- 첨부파일 업로드/다운로드/삭제 기능 추가
- 은행 목록 config/banks.php 설정 파일 생성
- show 페이지 주민등록번호 뒷자리 마스킹 처리
2026-02-26 19:59:15 +09:00
김보곤
e8d38953d0 feat: [hr] 근태현황 MNG 프론트엔드 구현
- Attendance 모델 (attendances 테이블, 상태/색상 매핑, check_in/check_out accessor)
- AttendanceService (목록/월간통계/CRUD, 부서/사원 드롭다운)
- API 컨트롤러 (HTMX+JSON 이중 응답, stats/index/store/update/destroy)
- 페이지 컨트롤러 (index 페이지 렌더링)
- 웹/API 라우트 등록 (hr/attendances, api/admin/hr/attendances)
- index.blade.php (통계카드+필터+등록/수정 모달)
- partials/table.blade.php (HTMX 부분 로드 테이블)
2026-02-26 19:34:07 +09:00
김보곤
b6220810cf feat: [hr] 사원 등록/수정 - 비밀번호 제거 및 퇴직일 추가
- 비밀번호 필드 제거 (등록 폼, validation, 서비스)
- 퇴직일(resign_date) 필드 추가 (등록/수정/상세 화면)
- json_extra에 resign_date 저장/수정 지원
- Model에 resign_date accessor 추가
2026-02-26 18:59:15 +09:00
김보곤
a1ca8b7e46 refactor: [hr] 사번(employee_code) 필드 전체 제거
- Model: appends, accessor 제거
- Service: 검색 필터, json_extra 저장/수정 로직 제거
- Controller: validation 규칙 제거
- View: create, edit, show, table에서 사번 UI 제거
2026-02-26 18:50:12 +09:00
김보곤
bb9193bcad feat: [hr] 인사관리 사원관리 Phase 1 구현
- Employee, Position 모델 생성 (tenant_user_profiles, positions 테이블)
- EmployeeService 생성 (CRUD, 통계, 필터/검색/페이지네이션)
- 뷰 컨트롤러(HR/EmployeeController) + API 컨트롤러 생성
- Blade 뷰: index(통계카드+HTMX테이블), create, edit, show, partials/table
- 라우트: web.php(/hr/employees/*), api.php(/admin/hr/employees/*)
2026-02-26 16:43:52 +09:00
김보곤
7f1327bfea feat: [equipment] 사진 멀티 업로드(GCS) + 엑셀 Import 기능 추가
- EquipmentPhotoService: GCS 기반 사진 업로드/삭제/조회 (최대 10장)
- EquipmentImportService: 엑셀 파싱 → 설비 일괄 등록 (한글 헤더 자동 매핑)
- API: 사진 업로드/목록/삭제, Import 미리보기/실행 엔드포인트
- 뷰: create/edit에 드래그앤드롭 사진 업로드, show에 갤러리 표시
- import.blade.php: 3단계 Import UI (파일선택 → 미리보기 → 결과)
- phpoffice/phpspreadsheet 패키지 추가
2026-02-25 20:15:06 +09:00
김보곤
4115bbd7db feat: [equipment] 설비관리 모듈 구현
- 모델 6개 (Equipment, InspectionTemplate, Inspection, InspectionDetail, Repair, Process)
- 서비스 3개 (Equipment, Inspection, Repair)
- API 컨트롤러 3개 + FormRequest 4개
- Blade 컨트롤러 + 라우트 등록
- 뷰: 대시보드, 등록대장(CRUD), 일상점검표(캘린더 그리드), 수리이력
2026-02-25 19:39:59 +09:00
김보곤
9a7c548246 style: Pint 포맷팅 적용 2026-02-25 11:45:01 +09:00
김보곤
85c7a55d00 feat: [business-card] 3단계 워크플로우 구현 (요청→제작의뢰→처리완료)
- 모델: STATUS_ORDERED 추가, markAsOrdered() 헬퍼
- 서비스: order(), getOrderedRequests() 추가
- 컨트롤러: order() 액션 추가
- 관리자 뷰: 좌측 신규요청 + 우측 제작중 + 하단 처리완료
- 파트너 뷰: 제작중(파란) 상태 뱃지 추가
- 라우트: POST business-cards/{id}/order 추가
2026-02-25 05:41:34 +09:00
김보곤
089a60231d feat: [business-card] 명함신청 기능 구현
- 모델: BusinessCardRequest (pending/processed 상태 관리)
- 서비스: 신청/처리/통계/뱃지 카운트
- 컨트롤러: 관리자 2분할 뷰, 파트너 신청폼+이력
- 뷰: admin-index (대기/처리완료 2분할), partner-index (신청폼+이력)
- 라우트: GET/POST /sales/business-cards, POST /{id}/process
- 뱃지: ViewServiceProvider에 대기 건수 연동
2026-02-24 21:45:08 +09:00
김보곤
005020f5ec fix: [bank-transaction] uniqueKey에 적요(summary) 추가하여 동일 금액·시간 거래 구분
- BankTransaction 모델: getUniqueKeyAttribute, generateUniqueKey에 summary 추가
- EaccountController: API 응답 및 DB upsert 시 summary 포함 매칭
- JournalEntry, JournalEntryController: 레거시(5필드) 키 호환 처리
- BankTransactionOverride: 레거시 키 호환 조회
2026-02-23 16:02:36 +09:00
김보곤
52b26c7216 refactor: [ai-config] 모든 API 키를 DB(ai_configs)에서 .env로 전환
- AiConfig::getActiveGemini() → config('services.gemini') 기반
- AiConfig::getActiveGcs() → config('services.google') 기반
- AiConfig::getActiveClaude() → config('services.claude') 기반
- AiConfig::getActiveNotion() → config('services.notion') 기반
- GoogleCloudStorageService: DB 우선 로직 제거, .env만 사용
- 8개 서비스 파일은 수정 없이 동작 (AiConfig 인터페이스 유지)
2026-02-23 09:55:07 +09:00
김보곤
0001915cfb feat: [ai-config] Notion API 설정 UI 추가
- AI 설정 페이지에 Notion 섹션 추가 (추가/수정/삭제)
- AiConfig에 API_SERVICE_PROVIDERS 상수 분리
- Notion 전용 모달 (API 키, API 버전, 활성화)
2026-02-22 23:12:49 +09:00
김보곤
aa3c9f4c3b feat: [additional] Notion 검색 기능 추가
- NotionService: Notion API 검색 + Gemini AI 답변
- AiConfig에 notion provider 추가
- 추가기능 > Notion 검색 채팅 UI
2026-02-22 23:04:16 +09:00
김보곤
1e7edab101 fix: [barobill] 홈택스 매입/매출 월정액을 무료(본사 부담)로 변경
- DEFAULT_MONTHLY_FEES hometax: 10000 → 0
- 월정액 0원일 때 "무료 (본사 제공)" 표시
2026-02-22 19:14:24 +09:00
김보곤
9351e215e4 feat:통합정산 정산상세 승인취소 기능 추가 2026-02-20 19:26:42 +09:00
김보곤
63dd9bd510 feat:홈택스 수동입력 모달에 거래처 상세정보 필드 추가 (종사업장번호, 성명, 주소, 업태, 종목, 이메일)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 10:51:34 +09:00
f271f8bdc3 feat:품목관리 3-Panel 페이지 신규 구현 + FormulaEvaluatorService 연동
- 품목관리 3-Panel 레이아웃 (좌:목록, 중:BOM/수식산출, 우:상세)
- FormulaApiService로 API 견적수식 엔진 연동
- FG 품목 선택 시 기본값(W:1000, H:1000, QTY:1) 자동 산출
- 수식 산출 결과 트리 렌더링 (그룹별/소계/합계)
- 중앙 패널 클릭 시 우측 상세만 변경 (skipCenterUpdate)
- API 인증 버튼 전역 헤더로 이동 (모든 페이지에서 사용 가능)
- FormulaApiService에 Bearer 토큰 지원 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 10:50:24 +09:00
김보곤
ed1a792d37 feat:법인카드 결제 기능 개선 (동적 항목 입력, 선불결제→결제 명칭 변경)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 10:32:58 +09:00
김보곤
71f745bdb9 fix:거래처 검색을 trading_partners 테이블로 변경 (clients → trading_partners)
- Barobill/Client 모델 삭제, Finance/TradingPartner 모델 사용
- 거래처관리(finance/partners)와 동일한 데이터 소스 사용
- status='active' 필터 적용

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 21:32:16 +09:00
김보곤
69f117ef8e fix:거래처코드 검색을 고유번호(id) 기반으로 변경
- Client::searchByCodeOrName → searchByIdOrName으로 변경
- 검색 기준: id(숫자일 때 정확 매칭) + name(LIKE 검색)
- 반환값: client_code 대신 id를 code로 반환

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 21:25:08 +09:00
김보곤
072268a1cf feat:계좌 입출금내역 거래처코드 검색 기능 추가
- Client 모델 생성 (거래처 검색용)
- EaccountController에 searchClients API 추가
- save/parseTransactionLogs/convertManualToLogs/convertDbToRawLog에 client_code/client_name 필드 추가
- ClientCodeSelect 컴포넌트 추가 (서버 검색 기반 debounce 드롭다운)
- 테이블에 거래처코드 컬럼 추가
- BankTransaction 모델 fillable에 client_code/client_name 추가
- 라우트에 clients/search 엔드포인트 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 21:18:31 +09:00
김보곤
1686198fcd feat:바로빌 계좌 입출금내역 API 캐싱 전략 구현
- BankSyncStatus 모델 추가 (월별 동기화 상태 추적)
- BankTransaction에 getCachedByMonth() 메서드 추가
- EaccountController fetchAccountTransactions() 캐싱 로직 적용
  - 과거 월: sync 레코드 존재 시 DB 캐시 반환
  - 현재 월: 10분 이내 sync이면 DB 캐시 반환, 초과 시 API 재호출
  - 미동기화: API 호출 → DB 자동 저장 → sync 상태 갱신
- cacheApiTransactions(): insertOrIgnore로 기존 레코드 보호
- convertDbToRawLog(): DB→SOAP 객체 변환 (기존 파싱 로직 호환)
- updateSyncStatus(): 동기화 상태 upsert

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:48:35 +09:00
김보곤
6a7a8d00d0 feat:영업파트너 고객관리 인계일 컬럼 동적 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 16:27:12 +09:00
9eeb62f819 feat: 트리거 감사로그 operation 단위 일괄 롤백 기능
- operation 상세 페이지 및 일괄 롤백 실행 기능 추가
- TriggerAuditLog에 scopeForOperation 스코프 추가
- 트리거 INSERT/UPDATE/DELETE에 operation_id 컬럼 포함
- 감사로그 목록에 작업 단위 링크 컬럼 추가
- 라우트: operation/{id}, batch-rollback 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 11:22:09 +09:00
김보곤
7bc412d9a1 feat:통합 정산관리 페이지 구현 (5개 탭 기반)
- SettlementController 신규 생성 (통합 정산관리 메인 + 탭별 HTMX)
- 5개 탭: 수당정산, 파트너별현황(NEW), 컨설팅비용, 고객사정산, 구독관리
- 수당정산 탭: 기존 영업수수료정산 이관 + 유치수당 컬럼/수당유형 필터 추가
- 파트너별 현황 탭: SalesPartner 수당 집계 + 필터/페이지네이션
- 컨설팅/고객사/구독 탭: React → Blade+Alpine.js 전환 (기존 API 재사용)
- 통합 통계카드 (미지급수당/승인대기/이번달예정/누적지급)
- 기존 4개 URL → 통합 페이지 리다이렉트
- SalesPartner 모델에 commissions 관계 추가
- SalesCommissionService에 commission_type 필터 + referrerPartner eager load 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 09:53:13 +09:00
김보곤
81bcd617fe feat:단체(Corporate) 파트너 UI 접근 제한 구현
- User 모델에 isGroupPartner() 헬퍼 추가
- 대시보드에서 단체 파트너는 판매자 카드만 표시 (관리자/협업지원금 카드 제외)
- 유치 파트너 현황 탭 단체 파트너에게 숨김
- 파트너 등록 create/store 접근 차단 (403)
- 파트너 목록에서 등록 버튼 숨김
- SidebarMenuService에 hide_for_group_partner 옵션 기반 메뉴 필터링 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 08:00:58 +09:00
김보곤
28c6c40f54 fix:영업 대시보드 개인/단체 수수료율 동적 적용
- SalesPartner::isGroup()이 partner_type 기반으로 판별하도록 수정
- 대시보드 수수료율 표시: 개인 20%, 단체 30% 동적 반영
- 인수 수수료 계산: 개인 10%, 단체 15% 동적 반영

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 07:36:30 +09:00
김보곤
768bc30a6d feat:사용자 매뉴얼 영상 자동 생성 기능 구현
- TutorialVideo 모델 (상태 관리, TenantScope)
- GeminiScriptService에 callGeminiWithParts() 멀티모달 지원 추가
- ScreenAnalysisService: Gemini Vision 스크린샷 AI 분석
- SlideAnnotationService: PHP GD 이미지 어노테이션 (마커, 캡션)
- TutorialAssemblyService: FFmpeg 이미지→영상 합성 (crossfade)
- TutorialVideoJob: 분석→슬라이드→TTS→BGM→합성 파이프라인
- TutorialVideoController: 업로드/분석/생성/상태/다운로드/이력 API
- React-in-Blade UI: 3단계 (업로드→분석확인→생성모니터링) + 이력

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 15:56:39 +09:00
김보곤
3f4cd88c20 feat:영상 파일 GCS 저장 및 삭제 연동
- VideoGenerationJob: 최종 합성 후 GCS 업로드, gcs_path 저장
- Veo3Controller: download/preview GCS 서명URL 사용, destroy GCS 파일 삭제
- VideoGeneration 모델: gcs_path fillable 추가
- GCS 불가 시 로컬 파일로 폴백

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 11:11:18 +09:00
김보곤
6ab93aedd2 feat:YouTube Shorts AI 자동 생성 시스템 구현 (Veo 3.1 + Gemini)
- GeminiScriptService: 트렌딩 제목/시나리오 생성
- VeoVideoService: Veo 3.1 영상 클립 생성
- TtsService: Google TTS 나레이션 생성
- BgmService: 분위기별 BGM 선택
- VideoAssemblyService: FFmpeg 영상 합성
- VideoGenerationJob: 백그라운드 처리
- Veo3Controller: API 엔드포인트
- React 프론트엔드 (5단계 위저드)
- GoogleCloudService.getAccessToken() public 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 08:46:28 +09:00
김보곤
f1f31d5f70 feat:단체(그룹) 수당 체계 통합 (단체 30%, 유치 3%, 매니저 0%)
- SalesPartner: referrer_partner_id, referrer/referredGroups 관계, isGroup() 헬퍼
- SalesCommission: 유치수당 필드, referrerPartner 관계, 지급 추적 메서드
- SalesCommissionService: 단체/개인 분기 수당 계산 로직
- SalesManagerService: 단체 등록 시 수당률 자동 설정
- SalesManagerController: 유형 선택 및 유치 파트너 지정 기능
- 대시보드: 유치수당 카드 표시 및 합산
- UI: purple 색상 처리 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 19:42:51 +09:00
김보곤
bea7bd5987 feat:전자계약 알림톡 발송 방식 선택 기능 추가
- EsignApiController: send_method/sms_fallback 저장, dispatchNotification/sendAlimtalk 메서드 추가
- EsignPublicController: 완료/다음서명자 알림에 알림톡 지원 추가
- EsignContract 모델: send_method, sms_fallback fillable/casts 추가
- send.blade.php: 발송방식 선택 UI (알림톡/이메일/동시), SMS 대체발송, 연락처 확인

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 16:12:41 +09:00
김보곤
92c78b353e feat:E-Sign 계약 생성 영업파트너 검색 모달 추가
- EsignApiController에 searchPartners() 검색 API 추가
- SalesPartner 모델 $fillable에 company_name, biz_no, address 추가
- User 모델에 salesPartner() HasOne 관계 추가
- create.blade.php에 PartnerSearchModal 컴포넌트 + 자동채우기 로직 추가
- web.php에 search-partners 라우트 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 10:48:31 +09:00
김보곤
843e898f5f fix:E-Sign PDF 폰트 크기 2배 확대, 왼쪽 정렬 기본값, 서명자 매핑 수정
- PdfSignatureService: 자동 폰트 크기 공식 2배(h*0.7→h*1.4), 기본 정렬 C→L
- text_align 필드 추가 (L/C/R 정렬 선택 가능)
- store()/buildVariableMap(): sign_order→role 기반 매핑으로 변경
  (signer_order 1=creator/갑/회사, 2=counterpart/을/파트너)
- template-fields: 가로 정렬 버튼 UI 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 18:07:31 +09:00
김보곤
416eea4401 feat:거래처 매출/매입 구분 라디오버튼 추가
- 등록/수정 모달에 매출/매입 라디오버튼 (기본값: 매출)
- 통계 카드에 매출/매입 건수 표시
- 필터 바에 매출/매입 필터 버튼
- 테이블에 매출/매입 뱃지 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 11:27:40 +09:00
김보곤
d43d5e9cd2 feat:거래처에 대표자/주소 필드 추가, OCR 매핑 개선
- 대표자(ceo) 입력란 추가 (OCR에서 ceo_name 직접 매핑)
- 주소(address) 입력란 추가 (메모가 아닌 별도 필드)
- 테이블/검색/CSV에 대표자 반영

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 11:22:14 +09:00
김보곤
5ffabed6b4 feat:E-Sign 템플릿 변수 자동채움 시스템 구현
- 시스템 변수 (서명자명, 이메일, 계약제목, 날짜 등) 자동 해석
- 커스텀 변수 정의/관리 (템플릿별 계약금액, 기간 등)
- 템플릿 필드 에디터: 변수 관리 + 필드-변수 바인딩 UI
- 계약 생성 폼: 템플릿 변수 입력 섹션 추가
- 계약 필드 에디터: 변수 연결 정보 표시
- PdfSignatureService: font_size 반영 렌더링

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 10:11:14 +09:00