김보곤
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
김보곤
ead546e268
feat: [account] tenant_id=1 계정과목을 KIS 5자리 표준으로 완전 교체
...
- 기존 3자리 코드 체계 삭제
- 서비스 표준(5자리 KIS) 458개 코드를 활성 상태로 복사
- 기존 전표 account_code 매핑은 수동 진행 예정
2026-03-17 11:13:51 +09:00
김보곤
921f1ecba7
fix: [production] 생산지시 생성 시 $process 미정의 오류 수정
...
- $process 변수를 if 블록 밖에서 null로 초기화
2026-03-17 11:03:37 +09:00
김보곤
8404f29bca
feat: [account] 계정과목 카테고리 영문 통일 마이그레이션
...
- 한글 카테고리(자산/부채/자본/수익/비용)를 영문(asset/liability/capital/revenue/expense)으로 변환
- API 표준에 맞춰 전체 테넌트 통일
2026-03-17 11:00:06 +09:00
김보곤
053323c144
fix: [production] 생산지시 생성 시 $isStock 미정의 오류 및 수량 정수 변환
...
- DB::transaction 클로저 use절에 $isStock 변수 추가
- work_order_items 수량을 정수로 캐스팅
2026-03-17 10:46:29 +09:00
유병철
750776d5c8
fix: [exception] BadRequestHttpException 커스텀 메시지 전달
...
- 하드코딩된 '잘못된 요청' 대신 예외 메시지 우선 사용
- 메시지 없을 경우 기존 기본값 유지
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-17 10:25:15 +09:00
김보곤
ae73275cf9
feat: [order] 재고생산 생산지시 자동 처리
...
- STOCK 타입 store() 시 site_name='재고생산' 자동 설정
- createProductionOrder() STOCK 분기 추가:
- project_name='재고생산' 고정
- 절곡 공정 자동 선택 (BOM 매칭 스킵)
- scheduled_date=now() 자동 설정
- 절곡 공정 미존재 시 에러 메시지 추가
2026-03-16 22:24:15 +09:00
김보곤
407afe38e4
feat: [order] 재고생산관리(STOCK) 타입 추가
...
- Order 모델에 TYPE_STOCK = 'STOCK' 상수 추가
- StoreOrderRequest/UpdateOrderRequest에 STOCK 타입 validation 추가
- options에 production_reason, target_stock_qty 필드 추가
- 재고생산 채번: STK{YYYYMMDD}{NNNN} 형식
- stats()에 order_type 필터 파라미터 추가
- STOCK 타입 확정 시 매출 자동 생성 스킵
2026-03-16 21:27:13 +09:00
57133541d0
feat: [bending] 절곡품 기초관리 API 구현
...
- BendingItemController: CRUD + filters 엔드포인트 (pagination 메타 보존)
- BendingItemService: items 테이블 item_category=BENDING 필터 기반
- BendingItemResource: options → 최상위 필드 노출 + 계산값(width_sum, bend_count)
- FormRequest: Index/Store/Update 유효성 검증 (unique:items,code 포함)
- BendingFillOptions: BD-* prefix/분류 속성 자동 보강 커맨드
- BendingImportLegacy: chandj 레거시 전개도(bendingData) 임포트 커맨드 (125/170건 매칭)
- ensureContext: Bearer 토큰 없이 X-TENANT-ID 헤더로 컨텍스트 설정
2026-03-16 20:49:20 +09:00
김보곤
a7f98ccdf5
fix: [payment] 더미 시더 무료 체험 기간 14일 → 7일로 변경
2026-03-16 16:03:42 +09:00
유병철
9d2333bfb1
fix: [approval] 문서번호 생성 시 삭제된 문서도 포함하여 중복 방지
...
- generateDocumentNumber()에서 query() → withTrashed()로 변경
- soft-deleted 결재문서 번호와의 충돌 방지
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 10:47:33 +09:00
유병철
6e6843fd67
feat: [approval] 근태신청·사유서 양식에 select options 추가
...
- 근태신청: 신청유형에 휴가/출장/재택근무/외근 옵션
- 사유서: 사유유형에 지각/조퇴/결근/외출/기타 옵션
- 기존 테넌트 데이터 마이그레이션 포함
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 09:37:38 +09:00
김보곤
d8560d889c
fix: [security] eval() 제거 — SafeMathEvaluator로 교체
...
- FormulaParser의 eval() 2곳 제거 (executeSimpleMath, evaluateCondition)
- FormulaEvaluatorService의 eval() 1곳 제거 (calculateExpression)
- Shunting-yard 알고리즘 기반 SafeMathEvaluator 신규 추가
- 사칙연산, 비교연산, 단항 마이너스, 괄호, 나머지 연산 지원
2026-03-15 10:20:39 +09:00
김보곤
9d95b2c373
feat: [sales] sales_tenant_managements에 options JSON 컬럼 추가
...
- 프로모션, 기타 확장 데이터 저장용
2026-03-14 16:53:19 +09:00
김보곤
6b9673d21a
feat: [sales] sales_products에 최저 개발비/구독료 컬럼 추가
...
- min_development_fee: 상품별 최저 개발비
- min_subscription_fee: 상품별 최저 구독료
2026-03-14 14:46:25 +09:00
김보곤
926a7c7da6
refactor: [performance] N+1 쿼리 3건 배치 조회로 최적화
...
- WorkOrderService.getMaterials(): 기존 BOM 루프 내 find() x2 제거
→ 루프 전 bomItemsMap/bomChildItemsMap 일괄 사전 로드
- OrderService.createWorkOrderFromOrder(): 루프 내 DB 쿼리 x2 제거
→ item_code→id, process_items 사전 배치 조회
- OrderService.checkBendingStockForOrder(): 루프 내 StockService 호출 제거
→ Stock 배치 조회 후 맵 참조
2026-03-14 14:42:22 +09:00
김보곤
877d15420a
test: [work-order] 작업지시 API 테스트 16개 추가
...
- CRUD 테스트 5개 (생성/상세/수정/삭제/404)
- 상태전이 테스트 4개 (미배정→대기→준비→진행→완료)
- 담당자 배정 테스트 1개
- 공정단계/자재 조회 테스트 3개
- 목록/통계/인증 테스트 3개
2026-03-14 14:42:22 +09:00