임시중단 예약
당일 수기로 처리하던 임시중단을 미래 시점 예약으로 전환해 시점 누락을 줄인 운영 자동화.
배경
임시중단은 계약을 일정 기간 멈췄다가 재개하는 기능입니다. 시작일을 당일로만 지정할 수 있어, 중단 일정이 미리 정해져 있어도 담당자가 그날 직접 계약 상태를 바꿔야 했습니다. 주말에 시작되는 중단도 예외가 아니었습니다.
미납·휴업에 따른 중단은 회계팀·CX팀·운영팀의 업무와 연결돼 있었습니다. 예약할 수 없는 구조 때문에 담당자가 중단일을 기억하고, 그날의 계약 상태와 수거 일정을 수기로 맞춰야 했습니다.
상태에서 예약을 분리했습니다
미래 날짜를 입력받는 것만으로는 충분하지 않았습니다. 다음 주부터 중단할 계약을 오늘 “임시중단”으로 바꾸면, 아직 제공해야 하는 수거 서비스까지 멈출 수 있기 때문입니다. 현재 계약 상태와 중단 예약을 분리하고, 개시일에 배치가 상태를 전환하는 방식으로 정의했습니다.
계약 상태에서 임시중단을 직접 고르는 대신, 전용 설정에서 사용 여부·기간·미납 여부·사유를 함께 입력하도록 했습니다. 계약 본체에 시작일·종료일 하나만 두면 중단과 재개를 반복할 때 과거 기간이 덮일 수 있어, 청구 때 다시 확인할 수 있는 별도 이력으로 분리했습니다.
이 과제의 기획을 직접 맡아 회계팀·CX팀·운영팀과 중단 예약에 필요한 조건과 예외를 정리했습니다. 날짜와 계약 상태뿐 아니라 청구 금액, 드라이버 앱의 작업 노출, 재계약에 어떤 영향을 주는지 확인하고, 디자인팀·개발팀과 처리 방식을 협의한 뒤 QA까지 진행했습니다.
시작일·상태 전이 규칙
예약을 저장하는 시점과 실제 서비스가 중단되는 시점을 나눴습니다. 미래 예약이 있다는 이유만으로 현재 계약 상태를 바꾸지 않도록 했습니다.
활성 계약의 즉시 중단과 미래 예약
임시중단 기간 · 사유 · 유형 설정
현재 상태와 예약 정보를 분리해 저장
종료 계약은 설정 불가 · 수행 중 스케줄이 있으면 즉시 중단·해제 제한
-
시작일이 오늘
바로 중단해야 하는 경우
-
즉시 중단 반영
즉시 전환 제한 조건을 확인한 뒤 적용
임시중단
-
-
시작일이 미래
서비스를 유지하다 지정한 날부터 중단할 경우
-
현재 계약 상태 유지
중단 전 스케줄은 정상 수행
임시중단 예정
- 예약 시작일 도래
배치로 중단 반영
담당자가 당일 다시 처리하지 않아도 상태 전환
임시중단
-
예약일이 오기 전에 계약이 바뀔 수도 있기 때문에, 예약을 저장하는 것만으로 미래 상태까지 확정하지 않았습니다. 가계약은 아직 서비스를 시작한 계약이 아니므로 중단일이 와도 가계약 상태를 유지하고, 실제 활성화 시점에 중단 기간을 다시 판단하도록 했습니다. 종료 계약은 중단했다 재개할 대상이 아니어서 설정에서 제외했습니다.
수거가 진행 중일 때 계약 상태를 바꾸는 것도 문제였습니다. 실제로 수행완료 작업이 포함된 스케줄에서 계약이 중간에 임시중단되자, 드라이버 앱의 작업 위치를 열지 못하는 이슈가 있었습니다. 수행 중인 스케줄이 있으면 즉시 중단하거나 해제할 수 없게 하고, 중단 시작 이전 작업은 정상 수행되는지도 QA에서 확인했습니다.
| 조건 | 동작 |
|---|---|
| 일반적인 신규 설정·시작일 수정 | 오늘을 포함한 이후 날짜 선택 · 종료일은 시작일 이상 또는 미정 |
| 활성 계약의 시작일 도래 | 즉시 임시중단으로 전환 |
| 시작일이 미래 | 계약 상태 유지 + “임시중단 예정” 플래그 → 개시일에 자동 전환 |
| 가계약의 시작일 도래 | 가계약 상태 유지 · 활성 전환 시 임시중단 여부 판단 |
| 종료일 도래 | 임시중단 자동 해제 |
| 종료일 미지정 | 무기한 중단 |
| 수행 중 스케줄이 있는 계약 | 즉시 임시중단·해제 불가 (진행 중 작업 보호) |
재계약·갱신계약에서는 기존 설정의 과거 시작일을 이어받을 수 있지만, 이를 일반적인 과거 날짜 입력 허용과 구분했습니다. 현재·미래 이력만 수정 가능하고 과거 이력은 변경할 수 없으며, 모든 변경을 로그로 기록합니다.
청구 집계 충돌 처리
중단 기간은 청구 금액을 계산한 근거이기도 합니다. 청구서가 발행된 뒤 그 기간의 중단 이력을 삭제하거나 늘리면, 화면에 남은 운영일수와 이미 청구한 금액이 서로 달라집니다. 그래서 발행된 청구서의 집계에 영향을 주는 변경은 막고, 해당 청구서를 정리한 뒤 이력을 수정하도록 했습니다.
다만 청구서가 있다는 이유로 미래 예약까지 모두 막을 필요는 없었습니다. 수정 전후의 중단 기간을 청구서의 집계 기간과 대조해, 이미 청구한 기간이 달라지는 경우에만 수정을 제한했습니다. 아직 청구하지 않은 기간은 조정할 수 있게 했습니다.
과거 날짜를 새로 입력하면 지난 수거·청구의 기준을 뒤늦게 바꾸게 됩니다. 하지만 재계약에서 이미 진행 중인 중단의 시작일을 이어받지 못하면, 계약이 바뀌는 날 중단이 끊길 수 있습니다. 일반 입력은 오늘 이후로 제한하되, 이전 계약에서 불러온 시작일은 유지할 수 있도록 했습니다.
중단 사유와 정산 기준
실무에서는 중단 기간을 청구하지 않았지만, 화면에는 “정산 진행” 옵션이 남아 잘못 청구되는 일이 있었습니다. 청구 기준은 중단 기간으로 통일하고, 미납 여부는 채권 관리를 위해 별도로 남겼습니다.
잘못 선택할 수 있던 청구 옵션을 없애고 중단 기간으로 계산
10월 청구서 생성 · 집계 기간 31일
정책 예시: 중단 기간 10/01–10/10, 10/27–11/10
-
기존 · 정산 진행을 잘못 선택
실제 운영에 필요하지 않은 선택지가 남아 있던 경우
-
중단 기간까지 청구
실제 중단한 15일이 차감되지 않는 오청구
31일 기준 · 오류
-
-
개선 · 미납 / 미납 외 공통
사유는 구분하되 중단 기간은 모두 청구에서 제외
-
집계 기간과 겹친 15일 제외
10/01–10/10의 10일 + 10/27–10/31의 5일
운영일수 16일 / 31일
-
회계팀이 필요로 한 구분은 “중단 중에도 청구할지”가 아니라 “미납으로 중단했는지”였습니다. 실제로 쓰지 않는 청구 선택지는 제거하고, 미납·미납 외를 구분해 채권 관리에 활용하도록 정리했습니다. 기준·구독 요금제에서는 두 사유 모두 중단 기간을 제외해 일할 계산합니다.
중단 기간이 두 달에 걸쳐 있으면 각 청구서에 해당하는 날짜만 빼야 합니다. 위 예시에서는 11월 중단일을 10월에서 차감하지 않고, 10월 집계 기간과 겹친 15일만 제외해 실제 서비스한 기간만큼 청구하도록 했습니다.
드라이버 앱 · 재계약 · 갱신까지 연결했습니다
중단 예약은 계약 화면뿐 아니라 기사가 확인하는 작업 목록에도 반영돼야 했습니다. 중단 기간에 재계약하거나 갱신하더라도 수거가 다시 시작되지 않도록 했습니다.
재계약에서 중단 설정을 빠뜨리면 아직 수거하면 안 되는 업장에 다시 배차될 수 있고, 과거 이력까지 복제하면 새 계약의 정산 근거에 이전 계약의 기간이 섞입니다. 그래서 앞으로 적용할 설정은 이어받되 이력은 새 계약에서 따로 만들도록 했습니다. QA에서도 예정된 중단 정보와 종료일 미정 값이 복사되지 않는 케이스를 확인해 보완했습니다.
- 드라이버 앱: 중단 시작 이전 스케줄은 정상 수행, 이후 스케줄은 미노출·수행 불가
- 재계약: 임시중단 설정 값을 복사하되 과거 이력은 가져오지 않고 새로 생성
- 갱신계약: 활성으로 전환되는 시점에 임시중단 여부를 판단해 새 이력 생성
- 재계약·갱신 계약에 임시중단이 포함되면 경고 팝업으로 사용자 확인
중단 당일의 수작업을 사전 예약으로 바꿨습니다
담당자가 중단일을 기다렸다가 상태를 바꾸는 대신, 일정을 미리 등록하면 해당 날짜에 자동으로 중단되도록 했습니다. 중단 전 수거는 유지하고, 중단 기간과 청구 기준은 재계약·갱신에도 이어지도록 해 부서마다 따로 확인하고 맞추던 일을 줄였습니다.
배포 후 운영 이력에서 주말·공휴일 업무가 전체 임시중단 업무에서 차지하는 비중은 1.6%에서 1.0%로 낮아졌습니다.
임시중단 등록·수정·취소 이력 기준. 개선 전 약 10개월, 개선 후 약 2개월로 관측 기간이 달라 단순 건수 대신 전체 업무 중 비중으로 비교했습니다.