summaryrefslogtreecommitdiff
path: root/requirements/catalogue/req-030.md
blob: e09a2810f26fc47a6482fb16558a3125659be593 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# req-030

Schist must implement the procedure described below as `calculate_bucket_balance`.

## calculate_bucket_balance

Inputs:

-   A bucket name, `name`

1. If no bucket exists with the name, `name`, then return empty.
2. If more than one bucket exists with the name, `name`, then panic.
3. Let `bucket` be the bucket with the given name.
4. Let `cache_key = bucket.balance_cache_key`.
5. Let `is_up_to_date` be the result of the procedure,
   `is_bucket_balance_up_to_date(bucket)`, as described in req-035.
6. If `is_up_to_date = TRUE`, then return `bucket.balance`.
7. Carry out the procedure, `update_bucket_drips(bucket)`, as described in
   req-037.
8. Let `transaction_sum` be the sum over the property, `amount`, of all
   transactions `t` such that `t.bucket_id = bucket.id`.
9.  Let `drip_sum` be the sum over the property, `amount`, of all drips `d` such
   that `d.bucket_id = bucket.id`.
10. Return `drip_sum - transaction_sum`.

Source: req-029