docs(sales-summaries): compare fixes to baseline over the last 30 days
Recomputed every summary in the database — 14,458 client-days spanning 2024-04-01 to 2026-08-14 — through sales-summaries-v2, zero failures, none left dirty. Compared the fixes against baseline over the last 30 days (2026-07-15 to 2026-08-13), both arms on the same deduplicated data so this isolates what the calculation fixes are worth on top of the dedup work. Excluding the deactivated twins, 2,842 client-days: baseline 398 days off, 86.00% clean, $22,527.40, 336 material fixed 67 days off, 97.64% clean, $405.66, 5 material 331 client-days fixed, 0 regressed — not one balanced day stopped balancing. Of the $405.66 left, $399 sits in five material days, three of which the plan predicted; the remaining 62 days total $1.62 with the largest at 9.00c, so the 10c threshold separates rounding from real variance with nothing near the boundary. Baseline was derived as fixed + untendered tip + service charges, since R1 and R2 only add credits; the identity was verified against a from-scratch baseline recomputation on 20 random client-days. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -463,12 +463,14 @@
|
||||
:when (not (zero? amount))]
|
||||
[category amount])))
|
||||
|
||||
(defn sales-summaries-v2 []
|
||||
(doseq [[c client-code] (dc/q '[:find ?c ?client-code
|
||||
:in $
|
||||
:where [?c :client/code ?client-code]]
|
||||
(dc/db conn))
|
||||
{:sales-summary/keys [date] :db/keys [id] :as existing-summary} (dirty-sales-summaries c)]
|
||||
(defn refresh-client!
|
||||
"Recomputes every dirty summary for one client.
|
||||
|
||||
Split out of the driver loop so a client's work stands on its own: it can be run for a single
|
||||
client, and a backfill over the whole history can spread clients across threads instead of
|
||||
grinding through the largest ones one day at a time."
|
||||
[c client-code]
|
||||
(doseq [{:sales-summary/keys [date] :db/keys [id] :as existing-summary} (dirty-sales-summaries c)]
|
||||
(mu/with-context {:client-code client-code
|
||||
:date date}
|
||||
(alog/info ::updating)
|
||||
@@ -507,6 +509,16 @@
|
||||
@(dc/transact conn [[:upsert-sales-summary result]]))
|
||||
@(dc/transact conn [{:db/id id :sales-summary/dirty false}]))))))
|
||||
|
||||
|
||||
(defn sales-summaries-v2
|
||||
"Recomputes every dirty summary, client by client."
|
||||
[]
|
||||
(doseq [[c client-code] (dc/q '[:find ?c ?client-code
|
||||
:in $
|
||||
:where [?c :client/code ?client-code]]
|
||||
(dc/db conn))]
|
||||
(refresh-client! c client-code)))
|
||||
|
||||
(defn reset-summaries []
|
||||
@(dc/transact conn (->> (dc/q '[:find ?sos
|
||||
:in $
|
||||
|
||||
Reference in New Issue
Block a user