Skip to content
← Back to Work
Product · PO

Scheduled Suspension

Operations automation that turns same-day manual suspension into a future-dated reservation to prevent missed timing.

  • State Transitions
  • Proration Rules

Background

Temporary suspension pauses a contract for a period before service resumes. The start date could only be today, so operators had to change the contract status on the day of the pause, even when the date was already known. Weekend starts required the same manual action.

Suspensions for non-payment or temporary closures involved accounting, CX, and operations. Without reservations, operators had to remember the start date and manually align the contract status and collection schedule that day.

A setting split out of contract status

Accepting a future date was not enough. Marking a contract suspended today when the pause starts next week could stop collections that should still run. I separated the reservation from the current contract status, with a scheduled job applying the transition on the start date.

Instead of selecting suspension directly in the status field, a dedicated setting captures whether to use it, the period, non-payment status, and reason. Keeping only one start/end pair on the contract would overwrite earlier pauses as service stopped and resumed, so I separated the history for later billing checks.

I led the planning and worked with accounting, CX, and operations to define reservation conditions and exceptions. I checked the effects on dates, contract status, billing, work shown in the driver app, and re-contracts, then agreed on the handling rules with designers and developers and followed through with QA.

Start-date & state-transition rules

Saving a reservation and stopping service are separate events. A future reservation should not change the current contract state.

Suspend an active contract now or reserve a future pause

Set the suspension period, reason, and type

Store the reservation separately from the current state

Ended contracts cannot be configured; work in progress restricts immediate suspension or release

  • Start date is today

    Service needs to pause immediately

    1. Apply suspension now

      Check immediate-transition restrictions before applying

      Suspended

  • Start date is in the future

    Service continues until the specified date

    1. Keep the current contract state

      Schedules before the pause still run

      Suspension scheduled

    2. The reserved start date arrives

      Apply suspension through the scheduled job

      No same-day action required from the operator

      Suspended

A specified end date enables automatic release; otherwise the pause is open-ended. This diagram covers active contracts; provisional contracts follow a separate state rule.

A contract can change before its reserved date arrives, so saving a reservation does not settle its future state. A provisional contract has not started service: it stays provisional when the pause date arrives and is evaluated again when activated. An ended contract is no longer something to pause and resume, so it is excluded from configuration.

Changing contract status during collection also caused problems. In one issue, suspending a contract during a schedule containing completed work made its work location inaccessible in the driver app. I blocked immediate suspension and release while a schedule was in progress, and verified that work before the pause could still be performed.

ConditionBehavior
Normal creation or start-date editingChoose today or later; end date must be on/after the start or unspecified
An active contract reaches its start dateTransition to suspended immediately
Start date in the futureKeep current state + "suspension scheduled" flag → auto-transition on the start date
A provisional contract reaches its start dateKeep provisional status; evaluate suspension when it becomes active
End date reachedAuto-release from suspension
No end date setOpen-ended suspension
Contract has a schedule in progressCan’t flip straight to/from suspended (protects work underway)

Re-contracts and renewals may inherit a past start date. This is distinct from allowing a user to enter a new past date. Only present/future history is editable, past history is protected, and every change is logged.

Billing-aggregation conflicts

Suspension dates are part of the basis for a billed amount. Deleting or extending them after an invoice is issued can make the recorded operating days disagree with the amount already charged. I blocked changes affecting issued invoices until the affected invoice is removed and the history can be corrected.

An existing invoice should not block every future reservation. I compared the old and new suspension dates with each invoice’s billing period and restricted edits only when an already-billed period would change. Unbilled periods remain adjustable.

Entering a new past date changes the basis of earlier collections and billing. But refusing to carry over the start date of an ongoing pause could interrupt it when the contract changes. Normal input is limited to today or later, while a date inherited from the previous contract can be retained.

Suspension reasons and billing rules

Operations did not bill suspension periods, but a “continue settlement” option remained in the interface and caused incorrect charges. Billing was aligned to the pause dates, while non-payment remained a separate classification for receivables management.

Remove the misleading billing choice and calculate from pause dates

Generate the October invoice · 31-day period

Policy example: pauses on Oct 1–10 and Oct 27–Nov 10

  • Before · incorrect settlement choice

    An option remained even though operations did not use it

    1. Suspended days still billed

      The 15 paused days are incorrectly left in the charge

      31-day basis · error

  • After · both suspension reasons

    Distinguish non-payment, but exclude paused days in both cases

    1. Deduct the 15 overlapping days

      10 days on Oct 1–10 plus 5 days on Oct 27–31

      16 operating days / 31

November suspension dates do not enter October’s calculation. Proration uses the overlap with the billing period, not the entire suspension period.

Accounting needed to know whether non-payment caused a pause, not whether to keep charging during it. I removed the unused billing choice and retained non-payment versus other reasons for receivables management. Base and subscription plans prorate by excluding suspended periods for both reasons.

When a pause crosses months, each invoice must deduct only the dates within its own billing period. The example excludes 15 days from October without deducting November’s days there, so the charge reflects the period when service was provided.

Connect the driver app, re-contracts, and renewals

A reservation must also affect the work list drivers see. Re-contracting or renewing during a pause must not restart collection.

Losing a pause setting during re-contracting can restart dispatch to a site that should still be suspended. Copying past history, however, mixes the old contract’s dates into the new contract’s billing basis. I therefore carried forward applicable settings while creating separate history for the new contract. QA also caught missing scheduled-pause data and unspecified end dates during copying, which were corrected.

  • Driver app: schedules before the suspension start still run; those after it stop appearing
  • Re-contract: the suspension setting is copied, but not its past history — a fresh one is created
  • Renewal: suspension is decided at the moment the contract goes active, creating a new history entry
  • A warning dialog confirms with the user when a re-contract/renewal carries a suspension

Replaced same-day manual work with advance reservations

Operators can register the dates in advance and have the pause applied automatically, instead of waiting to change the status that day. Collections before the pause continue, and the suspension period and billing rules carry into re-contracts and renewals, reducing the separate checks and adjustments teams had to make.

After launch, operational records showed that weekend and holiday work fell from 1.6% to 1.0% of all suspension activity.

Based on suspension creation, update, and cancellation records. The observation windows cover approximately ten months before and two months after the change, so the comparison uses the share of total activity rather than raw counts.