직원이 목표 수량을 만들었으면 대표 화면에서도 모든 일이 끝났다고 보여 주어도 될까. 실제 제조 서비스의 작업 완료와 주문 납품 처리를 읽고, 서로 다른 완료를 나누는 이유를 작은 상태 예제로 풀었다.

완료한 대상이 무엇인지 먼저 물었다

원래 서비스는 작업의 양품 누계와 주문 항목의 delivered_qty를 따로 관리한다. 작업이 끝났다는 사실과 주문의 남은 납품이 없다는 사실은 다른 기준이다. 나는 대표가 완료 배지만 보고 물건이 이미 고객에게 갔다고 읽지 않게 하고 싶었다. 무엇이 완료됐는지 문장에 들어가야 한다.

새 status는 production과 delivery를 별도 반환한다. 생산 목표를 채우면 production은 complete지만 납품이 없으면 delivery는 not_started다. 일부만 납품하면 partial이고 목표만큼 납품해야 complete다. 재고는 두 흐름 사이에 남아 있는 양품으로 따로 보여 준다.

같은 열 개를 다른 시점에서 읽었다

합성 목표 10개에 양품 6개를 먼저 기록한다. 네 개를 더 만들면 생산은 완료지만 재고는 10개이고 납품은 시작 전이다. 세 개를 내보내면 납품은 일부, 재고는 7개다. 나머지를 내보냈을 때 두 완료가 함께 참이 된다. 합성 예제의 순서이지 실제 업체 거래를 복원한 것이 아니다.

이 상태를 생산율 하나로 축약하면 출고 전 물량을 알아보기 어렵다. 반대로 납품률만 보여 주면 현장에서 이미 만들어 놓은 양품을 놓칠 수 있다. 필요한 요약은 대표가 하려는 질문에 따라 달라진다. 두 기준이 어디에서 나온 숫자인지 함께 남기는 편이 재확인에 도움이 된다.

납품이 보유량을 넘지 않도록 했다

apply의 delivery는 양수 정수이고 현재 inventory를 넘을 수 없다. 이전 상태의 재고가 good-delivered와 맞는지도 먼저 확인한다. 납품을 반영하면 delivered가 늘고 inventory가 같은 수량만큼 줄어든다. 누계의 의미와 잔액의 관계를 하나의 작은 불변식으로 연결했다.

원래 사업에는 수주와 여러 품목, 재고 이동과 거래명세가 더 있다. 이번 모듈은 한 목표와 합성 수량만 다루며 납품 증빙과 실제 인도 사실을 확인하지 않는다. 시스템에 기록했다고 물리적 배송이 끝났다는 결론도 내리지 않는다. 상태 이름이 보장하는 범위를 실제 입력 사건으로 좁혔다.

완료 날짜와 완료 상태도 다른 책임이다

과거 수정 기록에는 완료된 작업의 추가 실적이 완료일을 바꿀 수 있다는 질문이 있다. 현재 service는 처음 완료될 때의 날짜를 보존하는 조건을 갖는다. 나는 과거 지적을 현재 오류처럼 반복하지 않고 실제 코드의 조건과 나누어 읽었다. 이번 새 예제는 완료 날짜 자체를 구현하지 않는다.

일정과 재작업을 추가하려면 첫 완료와 재완료, 정정의 의미를 더 정해야 한다. 지금의 status 함수에 날짜가 없다는 이유로 임의의 오늘 날짜를 채우지 않았다. 필요한 사실을 모를 때 완료처럼 보이는 기본값을 만드는 것은 대표가 읽는 기록의 의미를 바꿀 수 있다.

취소와 반품은 아직 다른 흐름이다

현재 합성 모듈은 생산과 납품의 양의 이벤트만 받는다. 취소와 반품, 불량 판정 뒤 재고 조정은 구현하지 않았다. 음수 수량을 넣어 임의로 역산하는 방법도 허용하지 않는다. 실제 적용에서 되돌리는 사건은 사유와 권한, 원래 사건 참조를 가진 별도 기능으로 설계해야 한다.

이 한계는 모듈을 재사용할 때 특히 중요하다. 간단한 데모가 모든 주문 생애주기를 처리한다고 읽히면 운영에 빈틈이 생긴다. 나는 작은 상태 예제의 약속을 명확히 하고 필요할 때 기존 원자 처리와 변경 이력 모듈로 이어가도록 책임을 나누었다. 기능을 덜 숨기고 더 읽기 쉽게 만드는 범용화다.

두 화면이 같은 사실을 다른 목적으로 읽는다

새 패키지의 25개 테스트에는 생산 완료 후 납품 시작 전과 전체 납품 완료, 재고 초과 거절이 있다. 소스와 ZIP 추출에서 통과했다. 실제 창고·주문·배송 서비스를 호출하지 않았고 고객 자료는 쓰지 않았다. 문서 안의 합성 상태로 직원 입력과 대표 확인의 관계를 보여 준다.

직원은 오늘 얼마를 만들었는지, 대표는 주문에 얼마가 남았는지 물을 수 있다. 질문이 다르다고 숫자를 따로 만들어 두기보다 같은 사건에서 의미가 다른 요약을 만드는 편이 좋다. 나는 완료라는 단어를 더 많이 쓰기보다 완료한 대상이 무엇인지 분명하게 하는 제작 판단을 공유하고 싶었다.