두 배차 중 어느 쪽이 나은지 보여 주는 화면이라면 가장 큰 운송료를 강조하면 될까. 운송 도구의 실제 코드를 읽어 보니 수입뿐 아니라 비용과 시간을 따로 받는 이유가 보였다.

나는 기존 계산기 분리 글에서 더 들어가 무엇을 분모에 넣어 비교할지 다룬다. 새 독립 예제는 고정된 작은 합성 숫자를 사용하며 실제 기사 수익과 시장 운임을 가져오지 않았다.

배차 한 건의 금액과 시간을 따로 읽었다

기존 소스에는 적재거리와 공차거리, 실연비와 유가, 통행료와 확인한 수수료가 있다. 시간도 운전, 대기, 상하차·서류 작업과 계획 휴게로 나뉜다. 화면의 단순한 비교 결과 뒤에 서로 다른 입력 근거가 있는 것이다. 나는 수입 하나를 좋은 배차의 점수처럼 쓰기 전에 이 항목들이 어떤 사실을 나타내는지 설명하고 싶었다.

비용은 실제로 확인한 값인지 배분한 예산인지 구별해야 한다. 휴게를 비용처럼 없애고 시간을 줄였다고 보여 주는 것도 적절하지 않다. 이번 예제는 전달받은 모든 계획 시간을 더하며 어떤 경로가 안전하거나 법적으로 허용되는지는 판단하지 않는다. 비교 화면이 다루는 선택과 별도로 확인할 운영 조건을 나눠 둔다.

공차와 대기도 같은 기준 안으로 들어간다

적재하지 않은 이동도 연료를 쓰므로 총거리는 적재거리와 공차거리의 합이다. 새 합성 plan 함수는 그 거리와 명시한 연비·유가로 연료비를 계산한다. 대기와 작업 시간은 수입을 직접 늘리지 않더라도 총 소요시간에는 포함한다. 어느 한쪽만 빼면 두 안을 같은 조건으로 비교했다는 말이 성립하기 어렵다.

이 계산은 실제 도로의 거리와 통행료를 조회하지 않는다. 입력 값의 출처를 확인하는 서비스도 아니다. 신뢰할 호출자가 선언한 숫자에 대해서만 일관된 결과를 만든다. 어떤 비용이 빠졌는지 모르는 상황에서 잔여액을 확정 순이익으로 이름 붙이지 않고 확인된 계산 범위의 잔여액으로 설명했다.

큰 금액과 높은 시간당 값이 다른 예제

합성 A안은 수입 1200, 비용 100, 총 240분이고 B안은 수입 1000, 비용 100, 총 120분이다. 남는 금액은 A의 1100이 크지만 시간당 값은 A 275와 B 450으로 달라진다. 이 숫자는 시장 단가가 아니라 순위가 뒤집히는 작은 검산 예제다. 실제 로컬 테스트에서 두 순위를 각각 확인했다.

표시용 시간당 값은 정수로 반올림하지만 어느 쪽이 큰지 판단할 때는 정확한 분수를 비교한다. 반올림한 값이 같아졌다는 이유로 원래 다른 비율을 같은 결과로 묶지 않기 위해서다. 금액 순위와 시간 기준 순위가 왜 다른지 방문자가 읽을 수 있어야 하며 하나를 자동 선택하는 배차 기능으로 만들지는 않았다.

시각을 모르면 여유시간도 모른다

기존 비교 코드에는 예상 도착과 상차 마감의 차이가 있고 미입력 일정은 null이다. 다만 두 안의 차이를 계산하는 부분에서 빠진 값을 0처럼 대입하는 구조도 확인했다. 이번 새 예제에서는 한쪽 일정이라도 없으면 비교 차이도 None으로 남겼다. 현행 사이트에서 실제 사용자가 오해했다는 사고 기록을 만든 것은 아니다.

두 시각이 있을 때는 같은 민간 달력 기준의 자정 경계를 계산하고 존재하지 않는 날짜나 한쪽만 있는 입력을 거절한다. 세계 시간 변환과 실시간 도착 예측은 없다. 남은 시간을 안다는 표시와 모른다는 표시를 구별하는 범위다. 이미 모르는 값을 0으로 바꾼 뒤에는 화면이 그 차이를 복구할 수 없다.

비교 버튼이 약속할 수 있는 것

모듈의 테스트는 낮은 수입이 더 높은 시간당 잔여액을 만드는 경우, 대기·휴게 추가, 공차 연료비와 일정 누락을 다룬다. 같은 입력 객체를 바꾸지 않는지도 확인했다. 코드는 독립 패키지로 공개하며 실제 업체의 배차표나 연락 정보를 포함하지 않는다. 페이지의 기록은 그 로컬 실행에서 남긴 결과다.

이 도구를 다른 사업에 적용한다면 어떤 자원을 분모로 삼을지부터 정하면 좋다. 한 시간, 한 거리, 한 작업 건은 같은 질문이 아니다. 입력 근거와 빠진 비용을 설명한 뒤 실제 이용 화면을 검수해야 한다. 나는 숫자를 크게 보여주는 디자인보다 방문자가 비교의 이유를 스스로 확인할 수 있는 기준을 남기고 싶었다.