Prototype
Buckets
- Consume
- Sink for consumed service; source for refunds
- Service
- Current allocation for service (can go negative if customer desires, or act as access cutoff)
- Balance
- Current customer balance not allocated for service (can go negative as consumed, or positive if prepaid)
- Invoice
- Amount owed on current invoice
Ticks
Automatic Ticks
Service tick
Service -> Consume
Consumes a bit of service
- once a day for daily consumption (disk, etc)
- once a month for granular service (hosting)
- once a year for registration (domain)
Refund tick
Service -> Balance
- Refund for unused service, in case of overprovisioning or unconfigured service
Billing tick
Balance -> Service
- Replenishes Service with enough to cover the next billing period
Invoice tick
Invoice -> Balance
- Bring Balance from negative to zero to account for currently owed outstanding
- Bring Invoice from positive to zero to account for overpayment
Payment tick
Outside -> Invoice
- Incoming payments are placed here until they're accounted for by an invoice run
Manual Ticks
Prepay tick
Invoice -> Balance
- Preemptively move money to indicate a customer's desire to prepay by owing more on next invoice than is actually outstanding
Service Refund tick
Consume -> Service
- Refund for consumed but unprovided service (outage, etc)
Invoice Generation
- Generate Refund tick to refund unused service
- Generate Billing tick to fund next billing period
- Generate Invoice tick to account for payments and refunds
- Compute invoice values and lines from all ticks between current and previous Invoice tick
Example flows
- 20-Dec: January period starts December 20th
- 29-Dec: New customer provisioned for $10.00 VHOST MED service
- 29-Dec: Bucket balances: C:0 S:0 B:0 I:0
- 01-Jan: Service tick: $10.00 VHOST MED - S->C - C:10 S:-10 B:0 I:0
- 20-Jan: February billing period starts
- 20-Jan: Refund tick (none necessary, since service was consumed)
- 20-Jan: Billing tick - B->S - C:10 S:10 B:-20 I:0
- 20-Jan: Invoice tick - I->B - C:10 S:10 B:0 I:-20
Sample invoice:
$10.00 - VHOST MED: example.com 2011-Jan $10.00 - VHOST MED: example.com 2011-Feb ---- $20.00 - Amount due
- 30-Jan: Payment tick: $20.00
- 01-Feb: Service tick: $10.00 VHOST MED - S->C - C:20 S:0 B:0 I:10
- 20-Feb: March billing period starts
- 20-Feb: Refund tick (none necessary)
- 20-Feb: Billing tick - B->S - C:20 S:10 B:-10 I:10
- 20-Feb: Invoice tick - I->B - C:20 S:10 B:0 I:0
$20.00CR - Payment received 2011-01-30, Thank you! $10.00 - VHOST MED: example.com 2011-Mar ---- $10.00 - Amount due