ERP FI(재무회계) 갭 7종 구현 — FI-G1~G7
개요
크라우니 ERP 통합서버(A서버, :9981, erp_FI.한선)에 재무회계 모듈 갭 7종(FI-G1~G7)을 한선씨로 구현하고 라이브 배포·검증했다. 셀코어ERP 27슬롯 셀 위에서 4상균형3진(티/옴/타/음) 판정을 전부 발현하도록 설계, 기존 함수는 무수정(파일 끝에 추가만).
구현 내용
- FI-G1 자동지급실행
지급실행(기준일, 한도금액, 조직)doctype=payment-run. 미지급(문서유형3) 승인건 스캔 → 합계≤한도=티(지급확정+셀 슬롯10을 7로 마킹, 재실행 시 중복지급 방지)·0건=옴·초과=음·한도값 오류=타. - FI-G2 독촉관리
독촉실행(기준일, 조직)doctype=dunning. 미수(AR) 승인건 스캔, 셀 슬롯13에 회차 누적 → 1차/2차/최종 산출. 대상있음=티·0건=옴·조직오류=타·최종독촉 3건 이상=음. - FI-G3 외화평가
환율등록(통화, 환율)doctype=fx-rate+외화평가(통화, 금액, 조직)doctype=fx-reval. 신규 마스터data/마스터_환율.psv(통화코드|환율|등록일). 환율≤0=타·급변(±20%초과)=음·미등록통화=옴·정상=티. 통화는 문자열("USD"/"KRW"/"EUR") 입력 → 내부 코드(1/2/3) 변환. - FI-G4 부가세집계
부가세집계(년, 월, 조직)doctype=vat-report. AR/AP 합계 기반 매출세액/매입세액/납부세액 산출. 기간오류=타·0건=옴·환급(납부세액<0)=음·정상=티. - FI-G5 재무제표
재무제표산출(년, 월, 조직)doctype=fin-statement. BS(자산=문서유형4, 부채=문서유형3)·PL(수익=문서유형2, 비용=문서유형1) 집계. 기간오류=타·데이터없음=옴·자본잠식(자산-부채<0)=음·정상=티. - FI-G6 기간마감통제
기간마감설정(년, 월, 조직)doctype=period-lock. 신규 마스터data/마스터_기간마감.psv(년|월|조직|상태). 기간오류/이미마감=타·미래월=옴·정상=티. 헬퍼기간마감확인(년,월,조직)별도 제공(기존 전표기입() 등은 무수정, 게이트 연동은 호출측 책임으로 남김). - FI-G7 어음수표
어음등록(구분, 거래처, 금액, 만기일, 조직)doctype=bill-note. 금액오류/만기경과=타·고액(≥5000만)=음·거래처미등록=옴·정상=티.
성능 수정 (중요)
초기 구현은 모듈셀들(FI모듈)(id 목록, O(n) 전체스캔) + 후보마다 셀슬롯()(각 호출이 다시 O(n) 파일 재스캔) 패턴을 4개 함수(G1,G2,G4,G5)에 사용 — O(n²). 셀넷.psv가 라이브 다세션 환경에서 500+ 건으로 자라면서 502(Bad Gateway)/타임아웃 발생을 실측 확인. FI_모듈셀전체() 헬퍼(버퍼파일읽기 1회 + 라인 파싱, 셀코어ERP.한선의 모듈셀들()/셀읽기()와 동일 검증된 패턴)로 O(n) 단일패스로 리팩터링 → 응답시간 15초+(타임아웃) → 0.35초로 개선.
검증
- 컴파일:
CROWNY_STRICT=1경고 0 (버퍼읽기 아리티 경고 4건은 기존에도 있던 낡은 builtins 테이블 오탐, 무관) - 라이브 4상 발현: fx-rate/fx-reval 조합으로 티/옴/타/음 전부 실측 확인(환율 정상등록=티, 미등록통화평가=옴, 환율≤0=타, 환율급변=음). payment-run/dunning/period-lock/bill-note 등도 각각 실측 확인.
- 스모크: FI 16개 doctype(기존9+신규7) 단독 100% PASS (
SPEC=/tmp/spec_fi_only.json ERP페이지스모크.sh→ PASS 16/FAIL 0). - 페이지:
/app/erp/fi.htmlHTTP 200, 폼 16개(9+7) 확인. - fi.html FORMS 배열에 7개 폼 추가(payment-run/dunning/fx-reval/vat-report/fin-statement/period-lock/bill-note). fx-rate(환율등록)는 마스터 세팅 성격이라 폼 미배치(curl로만 접근, 기존 계정/거래처 마스터도 폼 없음과 동일 관례).
/tmp/erp페이지스펙.json,data/규칙/사상규칙.psv(R120~R192, 17행)에도 신규 doctype 반영.
발견한 문제 (내 범위 밖 — 인프라 이슈)
- 문자열 핸들 상한(480000) 근접: ERP통합서버.한선(10모듈 병합 서버, 셀코어ERP+erp_FI+CO+MM+SD+PP+PLM코어)는 GC 없는 범프 할당자 특성상 프로세스 수명 동안 누적된 문자열 핸들이 90%(432000/480000)에 도달하면 이후 요청이 간헐적으로 502/응답지연을 일으킴. 98개 doctype 전수 스모크를 한 프로세스 수명에서 연속 실행하면 이 한도에 근접해 MM/CO/SD 등 기존(pre-existing) 모듈에서도 동일 증상 재현 확인(내 FI 추가와 무관, 원인은 한선씨 상주 HTTP 서버가 연결당 메모리마커()/메모리복원()을 안 하는 구조적 특성 — 가드레일 "한선씨 상주 HTTP 서버 필수 이디엄" 참조). "다른 부분 절대 수정 금지" 지시에 따라
주()연결루프는 손대지 않음 — 별도 인프라 티켓으로 보고 필요. - 이 이슈로 98/98 풀스모크를 한 번의 연속 실행으로 깨끗하게 통과시키기 어려움(공유 19+세션 환경의 동시 트래픽으로 셀넷.psv가 테스트 중에도 계속 자람, 296→650+ 관측). FI 16/16 단독 스모크는 매번 클린 PASS.
관련 파일
/Users/ef/crowny-erp/core/libs/erp_FI.한선— FI-G1~G7 함수 + 헬퍼(FI_모듈셀전체, FI_통화코드, FI_오늘YYYYMMDD 등) 추가/Users/ef/crowny-erp/core/servers/ERP통합서버.한선— 액션FI() 디스패치 8행 추가/Users/ef/crowny-nexus-app/public/erp/fi.html— FI_SPEC 배열 7개 폼 추가/Users/ef/crowny-erp/data/마스터_환율.psv,/Users/ef/crowny-erp/data/마스터_기간마감.psv— 신규 마스터/Users/ef/crowny-erp/data/규칙/사상규칙.psv— R120~R192 추가/tmp/erp페이지스펙.json— FI 배열 7건 추가- 백엔드:
http://127.0.0.1:9981(A서버), 프록시:http://127.0.0.1:9802(감사서버.js,/api/erp/*→ 9981/9983), 정적서빙:/app/erp/fi.html←/Users/ef/crowny-nexus-app/public/erp/fi.html
잔여 이슈
- 위 STR 핸들 상한 이슈는 A서버(9981) 전체(10모듈 공용) 아키텍처 수준 수정이 필요 — 연결당 메모리마커()/메모리복원() 도입은 별도 작업으로 분리 권장.