Commit Graph

1120 Commits

Author SHA1 Message Date
유병철
8f8eae92f2 fix: [bending] 품목 resolveItem eager loading 컬럼 수정
- item 관계 로드 시 specification → attributes로 변경

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 21:13:24 +09:00
김보곤
dd2975ba8c fix: [common] ApiResponse 에러 신호 배열의 추가 필드 전달
- handle()에서 에러 감지 시 error/code/message/details 외 추가 필드도 전달
- error()에서 details 외 추가 필드를 error 객체에 포함
- BendingController의 expected_code 등이 API 응답에 노출됨
2026-03-18 20:56:14 +09:00
김보곤
673f521543 feat: [stock] 재고생산 저장 시 자동 확정+생산지시 생성
- 기존: 저장(DRAFT) → 확정(CONFIRMED) → 생산지시 생성 (3단계)
- 변경: 저장 즉시 확정 + 생산지시 자동 생성 (1단계)
- store()에서 STOCK 타입 감지 시 CONFIRMED 전환 + 재고 예약 + createProductionOrder 호출
2026-03-18 20:45:47 +09:00
김보곤
66a75746f3 fix: [bending] 원자재 LOT 조회 재질 검색 개선
- status 필터 확장: completed → completed + inspection_completed
- 재질 키워드 분해 검색: "EGI 1.55T" → "EGI" AND "1.55" (공백/T 무관)
- 기존: LIKE "%EGI 1.55T%" → 매칭 실패 (실제 데이터: "EGI1.55")
2026-03-18 20:33:32 +09:00
김보곤
7ae5ba1264 feat: [bending] resolve-item 응답에 expected_code 추가
- 매핑 성공/실패 모두 expected_code(BD-XX-nn) 포함
- 매핑 실패 시 어떤 품목코드를 찾고 있는지 사용자가 확인 가능
2026-03-18 20:26:52 +09:00
김보곤
8dc21bdda8 fix: [bending] LOT 채번에서 일련번호 제거
- generateLotNumber() 시그니처 변경: lotBase → prod/spec/length/date
- 일련번호(-001) 로직 제거: 같은 날 같은 조합은 동일 LOT
- generate-lot API 응답에서 lot_base/date_code 필드 제거
- 미사용 Order 모델 import 제거
2026-03-18 20:14:24 +09:00
유병철
55f97f67d3 feat: [finance] 경비계정 동기화에 증빙번호(receipt_no) 지원 추가
- StoreManualJournalRequest/UpdateJournalRequest에 receipt_no 필드 추가
- GeneralJournalEntryService: store/update 시 receipt_no 전달
- JournalSyncService: saveForSource에 receiptNo 파라미터 추가
- SyncsExpenseAccounts: 증빙번호 결정 우선순위 (명시 전달 > 바로빌 승인번호 > null)
- SOURCE_BAROBILL_CARD를 카드결제 payment_method에 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 20:07:17 +09:00
김보곤
b7c6e7f69d fix: [numbering] scopeKey 누적 할당 오류 수정
- scopeKey = value → scopeKey .= value 수정 (param, mapping 세그먼트)
- stock_production 문서유형 추가
2026-03-18 19:56:16 +09:00
김보곤
6af9162ce4 feat: [bending] 절곡품 품목 일괄 등록 + LOT 매핑 (222건 신규)
- BendingCodeService에 42(4200mm) 길이코드 복원
- 품목 일괄 등록 스크립트 추가 (scripts/register-bending-items.php)
- 신규 종류(RW/RF/SW/SF/TE/GH) + 신규 길이(06/17/20/45) 조합 등록
- bending_item_mappings 320건 매핑 동시 등록
2026-03-18 19:43:15 +09:00
김보곤
daf292f687 feat: [bending] LOT 채번 코드맵 최신화 (경동기업 2026-03 기준)
- 종류 코드 신규: W(본체L120), F(SUS마감재L120), H(화이바원단W80)
- 길이 코드 신규: 06(610), 17(1750), 20(2000), 45(4500)
- 명칭 변경: 본체디딤(S:M), SUS마감재(3)(S:S/U), 화이바원단(W50)(G:I)
- 가이드레일(R/S)에서 EGI 종류 코드 제거
- MATERIAL_MAP 신규 조합 추가
2026-03-18 19:31:30 +09:00
김보곤
15609a1e5e fix: [document] rendered_html 크기 제한 추가 (500KB)
- 수입검사 저장 시 rendered_html이 Nginx 제한 초과하여 413 발생하던 문제
- max:512000 검증 추가로 413 대신 422(명확한 에러메시지) 반환
2026-03-18 17:28:55 +09:00
김보곤
f1c6653220 feat: [bom] BOM 트리 API 3단계 구조 반환 (category 그룹 노드)
- GET /items/{id}/bom/tree: category 필드가 있으면 CAT 그룹 노드 자동 생성
- expandBomItems에 category 필드 포함
- 3단계: FG → 카테고리(CAT) → PT 품목
2026-03-18 16:49:20 +09:00
김보곤
e2ecbaf8a5 fix: [middleware] 자동산출 API에 Bearer 없이 API Key + X-TENANT-ID 접근 허용
- quotes/calculate/* 를 allowWithoutAuth 화이트리스트에 추가
- X-TENANT-ID 헤더로 tenant 컨텍스트 설정 (Bearer 토큰 없어도 동작)
- MNG 품목관리 수식 산출에서 HTTP 401 오류 해결
2026-03-18 15:54:19 +09:00
decfe57b50 fix: [order] 수주 관리 개선 - stats 상태 추가, 수정 시 item_name 유효성 에러 수정
- stats에 IN_PRODUCTION/PRODUCED 상태 추가
- 수주 수정 시 item_name 유효성 에러 수정 (V1#29)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 15:06:14 +09:00
59469d4bf6 feat: [shipment] 출하 프로세스 개선 - 수주 품목 기반 변경, 취소→cancelled 상태, 역방향 프로세스, 제품명/오픈사이즈 추가
- 출하 품목을 수주 품목(order_item_id) 기반으로 변경
- 작업 취소 시 출하를 삭제 대신 cancelled 상태로 변경
- 작업 취소 시 역방향 프로세스 구현 (WorkOrderService)
- 출하 상세 API에 제품명(product_name) 매핑 추가
- 출하 상세 제품그룹에 오픈사이즈 추가
- shipment_items 테이블에 없는 item_id 컬럼 참조 제거

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 14:56:07 +09:00
김보곤
abf5b6896e fix: [subscription] 내보내기 stuck 문제 해결 - 동기 처리로 전환
- pending 상태로 영원히 남던 DataExport 문제 수정
- 미구현 비동기 Job 대신 ExportService::store() 동기 처리
- 5분 이상 stuck된 export 자동 만료 처리
- 파일 다운로드 엔드포인트 추가 (GET /export/{id}/download)
2026-03-18 14:10:43 +09:00
김보곤
8f215b235b fix: [items] 레거시 임포트 커맨드 item_type FG → PT 수정
- BendingProductImportLegacy: 케이스(SB-), 하단마감재(BB-) → PT
- GuiderailImportLegacy: 가이드레일(GR-) → PT
- DB 60건 FG → PT 변경 완료 (구성부품이므로 완제품이 아님)
2026-03-18 13:48:45 +09:00
김보곤
529c48f65e fix: [items] 품목 검색 API per_page/itemType 파라미터 호환성 추가
- size 외에 per_page 파라미터도 읽도록 수정 (React에서 per_page로 전송)
- itemType(camelCase) 파라미터도 item_type으로 매핑
2026-03-18 13:08:27 +09:00
김보곤
97c9cff4c7 fix: [internal] MNG 내부 토큰 교환 테넌트 검증 수정
- InternalTokenService: 테넌트 소속 검사 제거 (HMAC으로 이미 신뢰)
- ApiKeyMiddleware: mng_session 토큰 시 X-TENANT-ID 헤더 우선 적용
- MNG 관리자가 모든 테넌트의 BOM 산출 가능하도록 개선
2026-03-18 13:07:54 +09:00
김보곤
13f84467f0 chore: [notification] 알림음 wav 파일 gitignore 예외 + 파일 추가
- .gitignore에 !public/sounds/*.wav 예외 추가
- default.wav, sam_voice.wav 실제 파일 커밋 (788KB each)
2026-03-18 12:32:02 +09:00
김보곤
72bb33e634 feat: [notification] 알림음 파일 서빙 + 응답에 soundUrls 추가
- public/sounds/에 default.wav, sam_voice.wav 배치 (MNG에서 복사)
- getGroupedSettings() 응답에 _soundUrls 맵 추가 (절대 URL)
2026-03-18 12:31:33 +09:00
김보곤
677da324f8 feat: [subscription] usage() API에 AI 토큰 사용량 통합
- api_calls 섹션 제거, ai_tokens 섹션으로 교체
- 월별 토큰 집계: 총 요청수, 입출력 토큰, 비용(USD/KRW)
- 모델별 사용량 내역 (by_model)
- 한도/사용율/경고 기준(80%) 포함
- tenant_id 기반 구독 조회로 변경 (subscription_id 미연결 대응)
2026-03-18 12:27:20 +09:00
김보곤
69a8e573ee feat: [tenant] AI 토큰 한도 컬럼 추가 및 저장공간 100GB 변경
- tenant.ai_token_limit 추가 (기본값 월 100만 토큰)
- tenant.storage_limit 기본값 10GB → 100GB 변경
- 기존 10GB 테넌트를 100GB로 일괄 업데이트
2026-03-18 12:19:36 +09:00
김보곤
540255ec27 feat: [notification] 알림설정 soundType API 연동
- getGroupedSettings()에서 soundType 반환 (settings.sound_type)
- updateGroupedSettings()에서 soundType 저장 (settings JSON)
- UpdateGroupedSettingRequest에 soundType 검증 추가 (default/sam_voice/mute)
2026-03-18 11:25:19 +09:00
김보곤
427e585236 feat: [settings] AI 토큰사용량 조회 API 추가
- GET /settings/ai-token-usage: 목록 + 통계 조회
- GET /settings/ai-token-usage/pricing: 단가 설정 조회 (읽기 전용)
- AiTokenHelper: Gemini/Claude/R2/STT 사용량 기록 헬퍼
- AiPricingConfig 캐시에 cloudflare-r2 provider 추가
2026-03-18 11:25:19 +09:00
f6f08fb810 refactor: [cleanup] kd_price_tables 레거시 단가 테이블 삭제 + 문서 업데이트 2026-03-18 09:22:47 +09:00
26e33fdc13 fix: [production-orders,order] 생산지시 목록 최적화 + 진행률 컬럼 수정 + 중복체크 취소 건 제외 2026-03-18 09:22:41 +09:00
783a41dc82 fix: [quality,qms] 검사 목록·품목명 미노출 + 관련서류 공정 매핑 확대 2026-03-18 09:22:35 +09:00
7a23d77b5f fix: [sales,pricing] 매출 0원 + 단가 수정 0원 수정 2026-03-18 09:22:28 +09:00
3259a64beb feat: [shipment] 출고 프로세스 개선
- 생산완료 시 출하 자동생성 status를 ready(출하대기)로 변경
- stats에 completed_count 등 프론트 호환 필드 추가
- 절곡물/모터/부자재 수량을 개수(EA) 기반으로 변환
2026-03-18 09:22:23 +09:00
김보곤
bba8f6c0a0 feat: [stock] 재고 조정 API 추가
- GET /stocks/{id}/adjustments: 조정 이력 조회
- POST /stocks/{id}/adjustments: 조정 등록 (증감 수량 + 사유)
- StockTransaction에 adjustment reason 추가
- StoreStockAdjustmentRequest 검증 추가
2026-03-17 20:42:53 +09:00
김보곤
ba8fc0834c feat: [receiving] 원자재로트번호 채번규칙 연동
- NumberingService(material_receipt) 우선 호출
- 채번규칙 없으면 레거시 로직(YYMMDD-NN) 폴백
- QuoteNumberService, OrderService와 동일 패턴
2026-03-17 20:26:47 +09:00
김보곤
ecfe389420 fix: [receiving] 원자재로트번호 생성 로직 개선
- rand() 기반 → DB 시퀀스 기반으로 변경 (중복 방지)
- 5130 레거시 방식 차용: YYMMDD-NN (일별 시퀀스, 01부터)
- 테넌트별 격리 적용
2026-03-17 20:26:47 +09:00
유병철
e83d0e90ff feat: [equipment] 설비점검 조회 응답에 휴무일(non_working_days) 추가
- InspectionCycle::getHolidayDates()로 해당 주기/기간의 휴무일 조회
- 응답에 non_working_days 배열 포함하여 프론트 캘린더 표시 지원

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 18:19:30 +09:00
김보곤
d1c65f5465 feat: [finance] vendors 및 supplier-settings API 추가
- GET /api/v1/vendors: 거래처 간단 목록 (id, name) 반환
- GET /api/v1/tax-invoices/supplier-settings: 공급자 설정 조회
- PUT /api/v1/tax-invoices/supplier-settings: 공급자 설정 저장
2026-03-17 16:11:42 +09:00
김보곤
17a0d2f98d feat: [quality] 실적신고 확정건 엑셀 다운로드 API 구현
- PhpSpreadsheet 기반 PerformanceReportExcelService 신규 생성
- 건기원 양식(품질인정자재등의 판매실적 대장) 엑셀 생성
- 카테고리별 배경색, 셀 병합, 회사정보 섹션 포함
- GET /api/v1/quality/performance-reports/export-excel 엔드포인트 추가
- 미확정 4개 필드(인정품목/내화성능시간/사용부위/로트번호) 빈값 처리
2026-03-17 15:56:57 +09:00
김보곤
a96fd254e5 fix: [migration] 이미 존재하는 테이블/컬럼에 대한 안전 가드 추가
- hasTable/hasColumn 체크로 중복 생성 방지
- 로컬/개발서버 DB 상태 불일치 시에도 마이그레이션 안전 실행
2026-03-17 15:41:20 +09:00
김보곤
b10713344a feat: [barobill] SOAP 서비스 27개 메서드 추가 (MNG 100% 동등)
- 카카오톡 15개: 채널/템플릿 관리, 알림톡/친구톡 발송, 전송결과 조회
- SMS 4개: 단문 발송, 발신번호 확인/목록, 전송상태 조회
- 계좌 5개: 관리URL, 입출금URL, 범용URL, 일별/월별 조회
- 카드 6개: 수정/해지/해지취소, 일별/월별 조회, 사용내역URL
- 세금계산서 1개: 목록URL
- API 56개 메서드 = MNG 54개 + 유틸리티 메서드
2026-03-17 14:38:54 +09:00
김보곤
b60e44ea3a feat: [bending] 담당자 기본값 + 원자재 LOT 조회 API + 취소 복원 지원
- STOCK 주문 생성 시 담당자(manager_name) 미입력이면 로그인 사용자명 자동 설정
- GET /bending/material-lots?material={재질}: 수입검사 완료 입고의 LOT 목록 조회
- 취소→등록 복원은 기존 CANCELLED→DRAFT 전환으로 이미 지원됨 (프론트 UI만 필요)
2026-03-17 14:20:36 +09:00
9358c4112e chore: [misc] 거래처 통계 수정 + 문서 템플릿 file_id 추가 + 라우트 정리
- ClientService stats() active/inactive 카운트 추가
- DocumentTemplateSection file_id 컬럼 마이그레이션
- 논리 관계 문서 업데이트 (BendingItemMapping 추가)
2026-03-17 13:56:08 +09:00
0863afc8d0 fix: [items] 품목 규격 accessor + 감사로그 + bom_category 마이그레이션
- Item 모델에 specification accessor 추가 (attributes.spec 조회)
- ItemService.update()에 AuditLogger 감사 로그 추가
- items.options에 bom_category 추가 마이그레이션
2026-03-17 13:55:44 +09:00
afc31be642 fix: [order] 견적→수주 변환 개소별 분리 구현
- CreateFromQuoteRequest 검증 규칙 추가
- Order 모델 견적 연동 관계 보강
- OrderService 변환 시 개소별 분리 로직
2026-03-17 13:55:28 +09:00
e5da452fde fix: [quote] QA 견적 관련 백엔드 버그 수정
- Quote.isEditable() 생산지시 존재 시 수정 차단
- BOM 탭 순서 정렬 + inspection→검사비 매핑 추가
- 제어기 수량 계산 오류 수정 (1개소 고정 → 수량 반영)
- QuoteService for_order/status 필터 조건 수정
2026-03-17 13:55:18 +09:00
5e65cbc93e Merge branch 'develop' of http://114.203.209.83:3000/SamProject/sam-api into develop 2026-03-17 13:38:55 +09:00
8821509c99 fix: [files] FileStorageController/ItemsFileController에 ensureContext 추가 (MNG 이미지 404 수정) 2026-03-17 13:38:37 +09:00
김보곤
7a9b800413 merge: develop 브랜치 충돌 해결 (production 라우트)
- bending + bending-items + guiderail-models 라우트 모두 유지
2026-03-17 13:18:58 +09:00
김보곤
c11ac7867c feat: [bending] 절곡품 코드맵/품목매핑/LOT 채번 API 추가
- bending_item_mappings 테이블 마이그레이션
- BendingCodeService: 코드 체계, 품목 매핑, LOT 일련번호 생성
- BendingController: code-map, resolve-item, generate-lot 엔드포인트
- StoreOrderRequest/UpdateOrderRequest: bending_lot validation 추가
2026-03-17 13:06:29 +09:00
김보곤
269a17b49c feat: [barobill] SOAP 동기화 서비스 신규 구축
- BarobillSoapService: PHP SoapClient 기반 SOAP 래퍼 (회원/계좌/카드/인증서)
- BarobillBankSyncService: 은행 거래내역 SOAP 조회 → DB 캐시 동기화
- BarobillCardSyncService: 카드 거래내역 SOAP 조회 → DB 캐시 동기화
- HometaxSyncService: 홈택스 세금계산서 upsert 동기화
- BarobillSyncController: 동기화/회원/인증서/잔액 API 11개 엔드포인트
- SyncBarobillDataJob: 매일 06:00/06:30 자동 동기화 스케줄러
- BarobillController.status() 보강: 실제 계좌/카드 수 표시
2026-03-17 13:03:24 +09:00
7083057d59 feat: [bending] 절곡품 관리 API 완성 + 데이터 마이그레이션
- GuiderailModelController/Service/Resource: 가이드레일/케이스/하단마감재 통합 CRUD
- item_category 필터 (GUIDERAIL_MODEL/SHUTTERBOX_MODEL/BOTTOMBAR_MODEL)
- BendingItemResource: legacy_bending_num 노출 추가
- ApiKeyMiddleware: guiderail-models, files 화이트리스트 추가
- Swagger: BendingItemApi, GuiderailModelApi 문서 (케이스/하단마감재 필드 포함)
- 마이그레이션 커맨드 5개: GuiderailImportLegacy, BendingProductImportLegacy, BendingImportImages, BendingModelImportImages, BendingModelImportAssemblyImages
- 데이터: GR 20건 + SB 30건 + BB 10건 + 이미지 473건 R2 업로드
2026-03-17 12:50:26 +09:00
13d91b7ab4 Merge branch 'develop' of http://114.203.209.83:3000/SamProject/sam-api into develop 2026-03-17 12:47:50 +09:00