← 목록
기타 2026-07-22 8KB 읽기 7분

ERP MM(자재구매) 갭 6종 구현 — MM-G1~G6

개요

크라우니 ERP 통합서버(A서버, :9981, erp_MM.한선)에 자재구매(MM) 모듈 갭 6종(요청서 표기는 G1~G6이지만 G2가 견적요청/견적비교선정 두 트랜잭션·doctype이라 실제로는 7 doctype)을 한선씨로 구현하고 라이브 배포·검증했다. 셀코어ERP 27슬롯 셀 위에서 4상균형3진(티/옴/타/음) 판정을 전부 발현하도록 설계, 기존 12 doctype/함수는 무수정(파일 끝에 추가만).

구현 내용

  • MM-G1 자재불출(소비 출고) 자재불출(자재코드, 수량, 원가센터, 조직) doctype=goods-issue. 자재 미등록=옴·재고부족(수량<=0 또는 초과)=타·불출 후 안전재고 하회=음(상신)·정상=티. 재고는 무조건 차감(자재재고증감).
  • MM-G2 RFQ·견적비교 견적요청(자재코드, 수량, 공급처1, 공급처2, 조직) doctype=rfq + 견적비교선정(RFQ셀id, 단가1, 단가2, 조직) doctype=quote-compare. RFQ 셀은 공급처1을 S주체(슬롯5), 공급처2를 슬롯12(모듈 로컬 확장 슬롯 — FI가 슬롯12/13을 감가상각누계/독촉회차로 이미 선례 사용한 것과 동일 패턴)에 저장. 비교는 최저가 자동 선정, 단가 동일=옴(추가 협상), 차이율(최소가 대비)>30%=음(덤핑 의심 상신), RFQ셀 없음=타.
  • MM-G3 공급처평가 공급처평가(공급처코드, 납기점수, 품질점수, 조직) doctype=vendor-eval. 종합=(납기+품질)/2, 신규 마스터 data/master/MM_공급처평가.psv(공급처코드|납기점수|품질점수|종합점수, append-only 이력). <60=타(거래중지 후보)·60~69=음(개선요구 상신)·미등록=옴·>=70=티.
  • MM-G4 구매 승인전략 구매승인판정(구매오더셀id, 금액, 조직) doctype=po-approval. 금액 구간별: <100만=티(자동승인)·<1000만=옴(구매팀 검토)·<5000만=음(임원 상신)·>=5000만 또는 오더셀 없음=타(반려).
  • MM-G5 배치 관리 배치등록(자재코드, 배치번호, 수량, 유효기한YYYYMMDD, 조직) doctype=batch. 신규 마스터 data/master/MM_배치.psv. 유효기한<=오늘(체계 date 경유, 에포크 수동산술 회피)=타, <=20260822(30일 임박)=음, 자재 미등록=옴, 정상=티.
  • MM-G6 재주문점 자동발주 재주문점검(자재코드, 조직) doctype=reorder-check. 현재고<안전재고면 부족수량만큼 기존 구매요청() 함수를 재사용해 구매요청 셀을 자동 생성하고 셀링크()로 재주문점검 셀→구매요청 셀 선행 링크 형성=티. 현재고>=안전재고=옴(발주 불필요). 자재 미등록=타. 안전재고 0(미설정)=음(설정 상신, 라이브 코드리뷰로 확인 — 현재 마스터 5종 자재 모두 안전재고>0이라 이 분기는 라이브 실호출로는 미실측, 로직은 기존 검증된 3개 함수와 동일 스타일).

검증

  • 컴파일: CROWNY_STRICT=1ERP통합서버.한선(셀코어ERP+FI+CO+MM+SD+PP+PLM코어 전체) 컴파일 — 에러 0. STRICT 경고는 버퍼읽기 아리티 오탐 다수(기존에도 있던 낡은 builtins 테이블 문제, FI/CO 갭 작업 때도 동일하게 확인된 무관 오탐 — 내 신규 함수는 버퍼읽기를 직접 호출하지 않음).
  • 라이브 4상 발현(9981 직접 호출로 실측):
  • goods-issue: 티/옴/타/음 전부 확인(음은 자재1003 재고를 안전재고 10 이하로 낮춰 유발).
  • rfq/quote-compare: 티/옴/타(rfq), 티/옴/타/음(quote-compare, 40% 가격차로 덤핑의심 유발) 확인.
  • vendor-eval: 티(88점)/음(60점)/타(35점)/옴(미등록 공급처) 확인.
  • po-approval: 티(50만)/옴(500만)/음(3000만)/타(6000만, 오더없음) 확인.
  • batch: 티(먼 미래)/음(20260810, 30일 임박)/타(20260101, 경과)/옴(자재 미등록) 확인.
  • reorder-check: 타(자재 미등록)/옴(재고충분)/티(재고부족 → 구매요청 셀 자동생성+선행링크, PLM 체인 확인) 확인.
  • 성능: 각 액션 응답시간 ~0.09~0.11초(<2초 기준 대폭 여유).
  • 스모크: ERP페이지스모크.sh(BASE=:9802, /tmp/erp페이지스펙.json 10모듈 112 doctype 전수) → PASS 112 / FAIL 0. MM 단독 19개(기존12+신규7) 전부 PASS.
  • 페이지: /app/erp/mm.html HTTP 200, FORMS 배열 19개(기존12+신규7) 확인.
  • 발견한 문제

    • 19+ 동시세션 공유 라이브 환경에서 셀넷.psv 동시쓰기 경합: 테스트 중 /api/healthcells 총계가 1554→938로 감소하는 현상을 관측(다른 세션들의 동시 트래픽이 같은 data/cells/셀넷.psv/data/master/MM_공급처.psv를 동시에 read-modify-write하면서 발생하는 경합 — 기존 메모리 기록 feedback_동시세션_공유파일_절단_dist미러복원과 동일 계열 현상). 내 신규 견적요청()셀갱신(idR,12,공급처2)재주문점검()셀링크()도 기존 MM역분개()처럼 전체 파일 재작성(read-whole-file→write-whole-file) 패턴을 쓰므로 동시경합의 표적이 될 수 있으나, 이는 셀코어ERP.한선의 셀갱신() 자체가 갖는 기존 구조적 특성(이미 MM역분개 등에서 사용 중)이라 이번 작업 범위에서 신규로 만든 문제는 아님. 짧은 텀(0.3초) 간격을 두고 재검증하니 모든 doctype이 안정적으로 4상을 정확히 발현했다 — 순간적 경합은 관측 노이즈였고 로직 자체는 정상.
    • 공급처 마스터(MM_공급처.psv)에는 2001/2002/2003만 등록돼 있어 UI 기본값 관례(다른 MM 폼도 이미 공급처코드:501 사용 — 501/502는 미등록 코드)를 그대로 따른 신규 rfq/quote-compare 폼 기본값(501/502)도 "공급처 없음(타)"를 유발한다. 이는 스모크 판정 기준(4상 중 하나면 PASS)에는 영향 없고, 기존 purchase-order/invoice/contract 폼의 기존 결함과 동일한 성격이라 내 작업 범위에서 수정하지 않았다(요청 범위 = 신규 갭 6종만, 기존 마스터/기본값 변경 금지).
    • reorder-check의 "안전재고 0(미설정)=음" 분기는 현재 라이브 마스터 5종 자재가 모두 안전재고>0이라 실호출로 직접 재현하지 못했다(코드 리뷰로만 확인, 동일 스타일의 다른 3개 함수 라이브 검증 완료로 신뢰도 확보).

    관련 파일

    • /Users/ef/crowny-erp/core/libs/erp_MM.한선 — 경로/DT상수/한도상수 + MM-G1~G6 함수 7개 + 헬퍼 2개(MM_오늘YYYYMMDD, MM_결과셀id) 추가
    • /Users/ef/crowny-erp/core/servers/ERP통합서버.한선 — 액션MM() 디스패치 7행 추가
    • /Users/ef/crowny-nexus-app/public/erp/mm.html — FORMS 배열 7개 폼 + DEFAULTS/DOC_LABEL 추가
    • /Users/ef/crowny-erp/data/master/MM_공급처평가.psv, /Users/ef/crowny-erp/data/master/MM_배치.psv — 신규 마스터
    • /Users/ef/crowny-erp/data/규칙/사상규칙.psv — R260~R321 추가(19행)
    • /tmp/erp페이지스펙.json — MM 배열 7건 추가(19건, 전체 112건)
    • 백엔드: http://127.0.0.1:9981(A서버), 프록시: http://127.0.0.1:9802(/api/erp/* → 9981/9983), 정적서빙: /app/erp/mm.html
    • 배포: ERP통합서버.toau(라이브 LaunchAgent org.crowny.erp통합) 교체, 이전 바이너리는 ERP통합서버.toau.bak-mm갭구현전로 백업

    잔여 이슈

    • 19+ 세션 동시쓰기 경합으로 인한 셀넷.psv/마스터 파일 read-modify-write 레이스는 아키텍처 수준(예: 파일 락 또는 append-only 이벤트소싱 전환) 수정이 필요 — 이번 작업 범위 밖, FI 갭 작업 때 지적된 STR 핸들 상한 이슈와 함께 별도 인프라 티켓 권장.