
SOFTMOA TECHNOLOGY
계근대 순중량 오류 검수와 계근표 승인 시스템 구축 방법
소프트모아가 정리한 기술 기록입니다.
Contents
계근대에서 두 번 잰 무게가 있는데 순중량이 맞지 않는다면, 뺄셈보다 먼저 같은 운행의 측정값인지 확인해야 합니다. 계근 관리 시스템은 총중량과 공차중량을 따로 보관하고, 누락·역전·0kg을 검수한 뒤 승인된 계근표만 확정하도록 설계합니다. 아래는 골재를 실어 나르는 현장을 가정한 구축 예시이며, 실제 고객 운영 자료나 법정 계량 기준이 아닙니다.
차량번호가 같아도 같은 계근 건은 아닙니다
이 예시에서 총중량은 화물을 실은 차량의 무게, 공차중량은 화물을 비운 차량의 무게입니다. 두 값의 차이를 순중량 후보로 계산합니다. 입차 때 실려 있었는지, 현장에서 적재했는지에 따라 측정 순서가 달라지므로 ‘첫 번째 무게에서 두 번째 무게를 뺀다’는 규칙은 쓰지 않습니다. 각 측정에 적재·공차 구분을 명시합니다.
접수 화면에서는 운행번호 W01, 차량번호, 트레일러 식별값, 거래처, 품목, 반입·반출 방향을 입력합니다. 하루에 같은 차가 세 번 오면 운행도 세 건입니다. 차량번호만으로 오늘의 마지막 공차중량을 가져오지 않고, 해당 운행에 연결된 두 측정번호를 선택하게 합니다. 차량 조합이나 측정 사이의 조건이 바뀌었다면 담당자가 확인할 때까지 보류합니다.
접수부터 확정까지, 숫자와 권한을 함께 나눕니다
- 접수 담당자는 운행을 만들고 거래처·품목을 지정합니다. 이 단계에서는 순중량과 확정 계근표가 없습니다.
- 계근 담당자는 계근대 식별값, 측정 시각, 원측정값과 단위, 적재·공차 구분을 저장합니다. 예시 시스템의 계산 단위는 정수 kg입니다. 수기 입력은 장비 수신값과 구별하고 입력 사유를 남깁니다.
- 검수 화면은 두 원측정과 순중량 후보를 나란히 보여줍니다. 한쪽이 없으면 WAIT, 음수 입력이나 총중량 역전이면 ERROR, 같은 무게면 REVIEW_ZERO로 표시합니다.
- 승인자는 운행과 원측정 연결을 확인하고 확정합니다. READY는 산술 검사를 통과한 상태일 뿐이며 자동 승인이 아닙니다. 입력자 자신의 수기 보정을 승인하지 못하도록 서버에서 권한을 검사합니다.
- 조회 화면은 미완료·검수대기·확정 건을 분리합니다. 거래처별 합계에는 확정된 순중량만 포함하고, 보류 건수는 옆에 따로 표시합니다.
0kg이 언제나 잘못된 측정이라는 뜻은 아닙니다. 빈 차가 두 번 측정됐거나 실제 이동량이 없는 상황도 검토해야 하므로, 여기서는 자동 확정하지 않는 운영 규칙을 둡니다. ‘자료가 없음’과 ‘측정 차이가 0’을 같은 빈칸이나 0으로 보여주지 않는 것이 핵심입니다.
다섯 건으로 검수 조건을 확인합니다
아래 SQL은 가상의 정수 kg 입력만 검사하며 테이블을 만들거나 운영 데이터를 변경하지 않습니다. SQLite 3.54.0에서 실행했습니다. 내용을 check.sql에 저장하고 sqlite3 -header -column :memory: < check.sql로 확인할 수 있습니다. CASE는 조건 순서대로 검사하며, 충족한 조건과 ELSE가 모두 없으면 NULL을 반환합니다.[1]
WITH weighing(id, gross_kg, tare_kg) AS (
VALUES ('W01',30000,12000), ('W02',28000,NULL),
('W03',11000,12000), ('W04',12000,12000),
('W05',25000,-100)
)
SELECT id, gross_kg, tare_kg,
CASE
WHEN gross_kg IS NULL OR tare_kg IS NULL THEN 'WAIT'
WHEN gross_kg < 0 OR tare_kg < 0
OR gross_kg < tare_kg THEN 'ERROR'
WHEN gross_kg = tare_kg THEN 'REVIEW_ZERO'
ELSE 'READY'
END AS check_status,
CASE WHEN gross_kg > tare_kg AND tare_kg >= 0
THEN gross_kg - tare_kg END AS candidate_net_kg
FROM weighing ORDER BY id;
실행 결과 W01은 READY와 18,000kg, W02는 WAIT, W03과 W05는 ERROR, W04는 REVIEW_ZERO입니다. W01 외에는 순중량 후보가 NULL로 남습니다. W03의 차이를 절댓값으로 바꾸면 그럴듯한 1,000kg이 되지만, 측정 짝이 잘못됐는지 총중량을 잘못 입력했는지 드러나지 않습니다. W02의 빠진 공차를 0으로 대체해 28,000kg을 확정하는 것도 피해야 합니다.
수정은 원본 덮어쓰기가 아니라 재검수입니다
예제 복사본에서 W03의 총중량만 31,000kg으로 바꾸면 READY와 19,000kg이 나옵니다. 이는 계산 조건이 바뀌었다는 확인이지 올바른 측정값을 찾아냈다는 증거가 아닙니다. 실제 보정 화면에는 이전값·새값·사유·근거 측정번호·요청자를 남기고, 승인 전에는 기존 확정값을 바꾸지 않도록 합니다. 이미 발급된 문서라면 원문서와 정정본의 연결 및 거래처 전달 여부도 관리해야 합니다.
이 조회는 장비의 안정 신호, 최대 계량 범위, 문자열·소수 입력, 동일 운행 중복 확정까지 검증하지 않습니다. 한쪽 누락을 먼저 판정하므로 나머지 값의 오류가 동시에 드러나지 않을 수도 있습니다. 실제 입력 API에서는 필드별 오류를 별도로 검사하고, 확정 요청 재전송에는 같은 문서번호를 돌려주도록 설계합니다. 산술 검수 통과만으로 화물 종류나 실제 인수 완료가 확인되는 것도 아닙니다.
구축 범위는 계근대가 내보내는 데이터 형식과 단위, 운행번호 생성 방식, 보정 승인자, 정정 문서 처리부터 정하면 됩니다. 소프트모아의 서비스는 softmoa.com에서 확인할 수 있습니다.
문법 확인 자료: [1] SQLite SQL Language Expressions — CASE
소프트모아는 해당 시스템을 구축합니다. 문의하기
