docs(config): 발주 주기가 월 단위 정기 발주임을 근거로 기록 (이슈 #54 요청 1번) - #64
Conversation
#54 에서 reo-23 님이 조달 실무를 확인해 주셨다 — 보건기관은 재고 소진 시 수시 발주가 아니라 **월 단위로 정기 발주**한다. 따라서 정기검토 모형(보호기간 = 검토주기 + 리드타임)이 실무에 부합하고, DEFAULT_REVIEW_PERIOD_DAYS = 30 은 실무와 일치한다. 그동안 이 값은 코드에 상수로만 있고 근거가 없었다. 다음에 보는 사람이 "30일은 어디서 나온 값인가"를 다시 묻지 않도록 확인 경위와 날짜, 이슈 번호를 남긴다. reo-23 님 요청 1번이다. 함께 적어 둔 것 - 왜 연속검토가 아니라 정기검토인지 (실무가 정기 발주이므로) - backend 가 연속검토 식(SS = z·σ·√L, ROP = μ·L + SS)으로 운영 DB 를 채워 온 사실과, 두 모형 공존이 #54 의 내용이며 실무 확인으로 정기검토가 정본이 된 경위 - 운영 DB 재산정은 별도 PR 이고, 그때까지 apply_inventory_policy.py 가 ss/rop/target/status/order_recommendation 을 쓰지 않는다는 현재 상태 상수 값은 바꾸지 않았다(30 유지). 주석만 추가한다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 전체 재검토결론: 비기능 문서 변경으로는 병합 가능하지만, #54를 해결하거나 닫는 PR은 아닙니다. head 현재 남은 불일치:
권장:
따라서 이 PR은 부분 문서화로 병합 가능, #54는 계속 열어두는 판단입니다. |
이 PR 이 기록하려는 근거가 실측과 어긋납니다 — 병합 전 확인 부탁드립니다이 PR 은 무엇을 쟀나조달청 나라장터 납품요구 27,653건(보건기관 300곳)에서 기관×세부품목 발주 간격을 재면 중앙값은 31일로 R=30 과 맞습니다. 그런데 분포가 평평합니다.
중앙값 31일은 30일 근처에 몰려서가 아니라 양쪽으로 넓게 퍼진 것의 한가운데입니다. 원장 입고 간격 423,573건으로 품목별 R 을 내면 이렇습니다. 품목간 차이는 우연이 아닙니다 — Kruskal-Wallis H=1741.1, p<1e-300. 왜 문제인가보호기간이 L=30 은 이번에 조달청 24개월 전수 30,815건으로 재확인했고 분위수가 20개월 때와 소수점까지 동일합니다(#20). R 을 상수로 두면 회전 빠른 품목은 과다발주, 분기 조달 품목은 재고 소진입니다. 방향이 반대라 평균으로 상쇄되지 않습니다. 제안이 PR 을 막을 생각은 없습니다. 다만 주석 문구만 조정하면 좋겠습니다.
|
2026-08-16 현재 dev 기준 검토이 PR의 핵심인 “월 단위 정기검토 R=30 근거 기록”은 이후 병합된 #79와 #90의 문서·코드에서 이미 다뤄졌습니다. 현재 브랜치는 최신 또한 #54는 R 값만의 문제가 아니라 AI/backend 계산식 정본, DB migration 버전, #39 리드타임과 #52 바닥값 입력까지 포함하는 문제로 확장됐습니다. 주석 한 곳보다 versioned policy와 parity test가 필요합니다. 따라서 이 PR은 병합하지 않고 superseded로 닫는 것을 권합니다. 보존할 근거 문구가 있다면 최신 |
#54에서 reo-23 님이 요청하신 1번입니다."검토주기 = 정기검토 30일"이라는 결정 자체는 확정(ai#54 요청1, 2026-07-30 reo-23 확인)이지만, 그 결정을 실제 DB 재계산에 반영하는 건 이 PR 범위 밖입니다.
apply_inventory_policy.py는 여전히ss/rop/target/status/order_recommendation을 쓰지 않고,inventory_policy.py의inventory_policy_method라벨도 아직module_c_continuous_target_stock로 남아있습니다(라벨 정정은 sehyeon03 님 리뷰 권고대로 DB 마이그레이션 반영하는 후속 PR에서 함께 처리).#54는 계속 열어둡니다.
변경
src/config.py의DEFAULT_REVIEW_PERIOD_DAYS위에 주석만 추가했습니다. 상수 값은 30 그대로이고 동작 변경은 없습니다.추가로
apply_inventory_policy.py모듈 docstring과 실행 로그 문구를, "#54가 미결"이라는 stale한 표현에서 "cadence 결정은 됐고 DB 반영만 별도 PR 대기"로 정정했습니다(sehyeon03 리뷰 지적).남긴 내용:
#54)SS = z·σ·√L,ROP = μ·L + SS)으로 운영 DB를 채워 온 사실과, 두 모형 공존이#54였으며 실무 확인으로 정기검토가 정본이 된 경위apply_inventory_policy.py가ss/rop/target/status/order_recommendation을 쓰지 않는다는 현재 상태정책 파일이 아니라 주석으로 한 이유
data/mapping/inventory_status_policy.json은 재고 판정(zero_stock_reason·urgent_shortage·ledger_rule) 정책이라 발주 주기를 넣을 자리가 아니라고 봤습니다. 새 정책 파일을 만드는 것도 읽는 코드가 없어 과해 보였습니다.발주 주기 전용 정책 파일이 필요하다고 보시면 알려주세요 — 그렇게 옮기겠습니다.
검증
ast.parse통과, 상수 값 30 유지 확인, 관련 테스트 9건 통과. 주석/로그 문구만 변경이라 동작 영향 없습니다.Type
PR Checklist