현장에서 기다린 시간을 적었다고 바로 받을 금액이 확정되는 것은 아니다. 기록할 사실과 계약에 따라 달라질 값을 같은 입력칸으로 합치고 싶지 않았다.
실제 도구의 제작 일지에는 법정 평균 단가를 만들지 않고 확인한 배차·계약 값을 사용한다는 범위가 적혀 있다. 이번 글은 그 판단과 새 합성 계산을 설명하며 현재 법률이나 세무 조언을 제공하지 않는다.
경과시간에서 무엇을 빼는지 보인다
기존 입력은 대기 시작과 종료, 제외할 시간과 무상시간으로 나뉜다. 새 예제도 경과시간을 먼저 계산하고 제외한 뒤 무상 부분을 뺀다. 계산 대상이 0보다 작아지면 청구후보 시간은 0이다. 왜 최종 시간이 원래 시각 차이와 다른지 사용자가 다시 읽을 수 있는 출력 구조를 두었다.
시각 기록이 계약상 대기로 인정되는지와 실제 휴게 기준에 맞는지는 이 함수가 판단하지 않는다. 시간을 뺄 권한도 자동으로 만들지 않는다. 호출자가 검토한 값을 전달한다는 전제다. 코드가 어떤 기록을 계산에 포함했는지 설명할 수 있어야 나중에 요청 초안과 원래 사실을 비교하기 쉽다.
비례 요금과 시작 단위는 다른 약속이다
확인한 시간당 요금으로 분 비례 계산을 할 수도 있고 시작한 30분 단위마다 정해진 금액을 적용할 수도 있다. 둘은 같은 입력에 다른 금액을 만들 수 있다. 그래서 mode를 명시하고 사용하지 않는 방식의 요금 필드가 남아 있으면 새 예제에서는 거절한다. 예전 선택값이 몰래 합계에 들어오지 않게 하려는 경계다.
어느 방식이 맞는지는 실제 합의에서 확인해야 한다. 현재 모듈은 기본 법정 단가나 보편적 무료시간을 제공하지 않는다. 원래 도구와 달리 이번 작은 계약은 세금 계산도 제외했다. 공유 코드를 쉽게 읽을 수 있도록 범위를 좁히되 운영 양식을 완전히 복원한 것처럼 소개하지 않는다.
같은 70분이 다른 금액이 되는 합성 기록
고정 예제는 09시부터 11시30분까지의 150분에서 제외 20분과 무상 60분을 뺀다. 후보 시간은 70분이다. 합성 시간당 값 36을 비례 적용하면 42이고, 30분 시작 단위에 값 18을 적용하면 세 단위인 54다. 실제 운임이 아니라 방식 차이를 눈으로 확인하려는 작은 숫자다.
추가작업 두 건의 수량과 단가, 확인한 실비도 별도 행으로 받는다. 대기 금액과 다른 근거의 합계를 구분해서 읽을 수 있다. 테스트 예제에서 비례 대기 42에 작업 50과 실비 8을 더하면 100이다. 그 결과는 지급요청 후보이며 실제 채권 확정이나 상대방의 승인, 입금을 뜻하지 않는다.
근거가 이상하면 계산을 멈춘다
종료가 시작보다 빠르거나 제외시간이 경과시간보다 크면 거절한다. 존재하지 않는 날짜와 지원하지 않는 요금 방식도 멈춘다. 자정이 넘어가면 실제로 다음 날짜가 입력돼야 한다. 코드가 편의를 위해 밤에 끝난 시간을 다음날이라고 추측하지 않는다. 기록한 사실 자체가 바뀌지 않게 하려는 선택이다.
추가 행에는 합성 ID와 양의 정수 수량, 단가가 필요하다. 같은 종류의 행에서 중복 ID도 거절하지만 다른 ID의 실질적 중복 비용을 자동으로 판단하지는 못한다. 원래 기록과 증빙의 충분성은 별도다. 산식을 실행할 수 있다는 사실을 근거 검토까지 자동 완료한 것으로 설명하지 않았다.
요청 초안이라는 이름을 지킨다
테스트는 같은 시간의 두 요금 방식, 무상시간이 더 긴 경우, 잘못된 제외와 사용하지 않는 필드, 추가 행의 합계를 확인했다. 결과에는 proposal_only가 참이고 entitlement_decided는 거짓으로 남는다. 실제 업체명과 상대방 연락처, 작업 사진과 원래 영수증은 공개 패키지에 없다. 이번 검증은 합성 코드의 실행이다.
다른 업종의 작업시간 청구에도 비슷한 구분이 필요할 수 있다. 관측 사실, 합의 변수와 요청 금액을 보여 주고 실제 전송·확인·지급은 별도 상태로 연결해야 한다. 나는 계산 결과를 과장하지 않는 버튼 이름까지 제작의 일부로 본다. 사용자가 무엇을 준비했는지와 아직 무엇을 확인해야 하는지 함께 남길 수 있기 때문이다.