Repository navigation
Commit 8af8bf8
committed
fix(billing): refuse charges into a period the terminal settlement already invoiced
A subscription's deletion settles its terminal period at once (claim, overage,
final invoice, bookkeeping), but recordCumulativeUsage kept topping up that
period's row for a still-running request because the subscription's period
never rolls after deletion. That spend was never billed.
The terminal claim now advances the close marker to the period's end under its
FOR UPDATE lock, and recordCumulativeUsage reads the marker in its existing FOR
SHARE read: a charge whose target period ends at or before the marker throws
CumulativeUsagePeriodClosedError, which update-cost answers with the existing
non-retryable BILLING_PERIOD_ELAPSED outcome, so the worker quarantines the leg
for reconciliation instead of the spend disappearing into an invoiced period.
No migration: the marker is an existing column, and every reader treats a
marker at or past periodStart as current, so v0.9.6 behaves unchanged.1 parent fa32bc1 commit 8af8bf8
9 files changed
Lines changed: 190 additions & 70 deletions
File tree
- apps/sim
- app/api/billing/update-cost
- lib/billing
- core
- webhooks
- packages
- db
- testing/src/mocks
Lines changed: 87 additions & 49 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
10 | | - | |
| 11 | + | |
11 | 12 | | |
12 | 13 | | |
13 | 14 | | |
| |||
25 | 26 | | |
26 | 27 | | |
27 | 28 | | |
| 29 | + | |
28 | 30 | | |
29 | 31 | | |
30 | 32 | | |
31 | | - | |
32 | | - | |
| 33 | + | |
33 | 34 | | |
34 | 35 | | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | | - | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
39 | 41 | | |
40 | 42 | | |
41 | | - | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
42 | 98 | | |
43 | 99 | | |
44 | 100 | | |
45 | 101 | | |
46 | 102 | | |
47 | 103 | | |
48 | 104 | | |
49 | | - | |
| 105 | + | |
50 | 106 | | |
51 | 107 | | |
52 | | - | |
| 108 | + | |
53 | 109 | | |
54 | 110 | | |
55 | 111 | | |
| |||
63 | 119 | | |
64 | 120 | | |
65 | 121 | | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
80 | | - | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
| 122 | + | |
93 | 123 | | |
94 | 124 | | |
95 | | - | |
| 125 | + | |
96 | 126 | | |
97 | 127 | | |
98 | 128 | | |
99 | | - | |
100 | | - | |
| 129 | + | |
| 130 | + | |
101 | 131 | | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
| 132 | + | |
110 | 133 | | |
111 | 134 | | |
112 | 135 | | |
| |||
118 | 141 | | |
119 | 142 | | |
120 | 143 | | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
121 | 159 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
33 | 34 | | |
34 | 35 | | |
35 | 36 | | |
| |||
512 | 513 | | |
513 | 514 | | |
514 | 515 | | |
515 | | - | |
| 516 | + | |
| 517 | + | |
516 | 518 | | |
517 | 519 | | |
518 | 520 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
| 27 | + | |
27 | 28 | | |
28 | 29 | | |
29 | 30 | | |
| |||
121 | 122 | | |
122 | 123 | | |
123 | 124 | | |
124 | | - | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
125 | 129 | | |
126 | 130 | | |
127 | 131 | | |
| |||
362 | 366 | | |
363 | 367 | | |
364 | 368 | | |
| 369 | + | |
365 | 370 | | |
366 | 371 | | |
367 | | - | |
368 | | - | |
| 372 | + | |
| 373 | + | |
369 | 374 | | |
370 | | - | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
371 | 379 | | |
372 | 380 | | |
373 | 381 | | |
| |||
528 | 536 | | |
529 | 537 | | |
530 | 538 | | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
531 | 552 | | |
532 | 553 | | |
533 | 554 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
590 | 590 | | |
591 | 591 | | |
592 | 592 | | |
593 | | - | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
594 | 596 | | |
595 | 597 | | |
596 | 598 | | |
| |||
680 | 682 | | |
681 | 683 | | |
682 | 684 | | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
683 | 702 | | |
684 | 703 | | |
685 | 704 | | |
| |||
882 | 901 | | |
883 | 902 | | |
884 | 903 | | |
885 | | - | |
886 | | - | |
887 | | - | |
| 904 | + | |
| 905 | + | |
| 906 | + | |
888 | 907 | | |
889 | 908 | | |
890 | 909 | | |
891 | 910 | | |
892 | 911 | | |
| 912 | + | |
893 | 913 | | |
894 | 914 | | |
895 | 915 | | |
| |||
910 | 930 | | |
911 | 931 | | |
912 | 932 | | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
| 942 | + | |
913 | 943 | | |
914 | 944 | | |
915 | 945 | | |
| |||
929 | 959 | | |
930 | 960 | | |
931 | 961 | | |
932 | | - | |
933 | 962 | | |
934 | 963 | | |
935 | 964 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
191 | 191 | | |
192 | 192 | | |
193 | 193 | | |
194 | | - | |
195 | | - | |
196 | | - | |
197 | | - | |
198 | | - | |
199 | | - | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
200 | 204 | | |
201 | 205 | | |
202 | 206 | | |
| |||
241 | 245 | | |
242 | 246 | | |
243 | 247 | | |
244 | | - | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
245 | 252 | | |
246 | 253 | | |
247 | 254 | | |
| |||
250 | 257 | | |
251 | 258 | | |
252 | 259 | | |
253 | | - | |
254 | 260 | | |
| 261 | + | |
255 | 262 | | |
256 | 263 | | |
257 | 264 | | |
| |||
0 commit comments