Expose ARR disclosure gaps before statistical comparison

This commit is contained in:
2026-10-31 23:36:33 +08:00
parent ae84304e16
commit cce2fd8581
3 changed files with 57 additions and 7 deletions
+20 -1
View File
@@ -11,7 +11,26 @@ import { openSiteDatabase } from "../src/lib/site-database";
import { categorySummary, evidenceUrl, reviewCompanyIds, validateResearch, type ResearchSnapshot } from "../src/lib/ai-research";
import { consumeCode, initializeStore } from "../src/lib/auth-store";
import { newAuthConfig } from "../src/lib/auth";
import { arrDisclosureCoverage, arrDisclosures, compareIncomeGroups, describeIncome, groupIncome, platformIncomeSample } from "../src/lib/research-statistics";
import { arrDisclosureCoverage, arrDisclosures, arrFieldGaps, compareIncomeGroups, describeIncome, groupIncome, platformIncomeSample } from "../src/lib/research-statistics";
test("ARR field checks distinguish missing dates, other currencies, bounds and estimates", () => {
const observation = { ...seed.observations[0], metric: "arr", unit: "USD", value: 100,
bound: "=", selection: "signal", observedAt: "2026-10-30" } as ResearchSnapshot["observations"][number];
assert.deepEqual(arrFieldGaps(observation, "2026-10-31"), []);
for (const observedAt of [undefined, "2026-02-30", "2026-11-01"])
assert.deepEqual(arrFieldGaps({ ...observation, observedAt }, "2026-10-31"), ["date"]);
assert.deepEqual(arrFieldGaps({ ...observation, unit: "EUR" }, "2026-10-31"), ["currency"],
"known foreign currencies stay distinct without an invented USD conversion");
assert.deepEqual(arrFieldGaps({ ...observation, unit: "原文$,币种待核", bound: ">",
selection: "historical-estimate", observedAt: undefined }, "2026-10-31"), ["date", "currency", "amount", "estimate"]);
assert.deepEqual(arrFieldGaps({ ...observation, value: Number.NaN }, "2026-10-31"), ["amount"]);
assert.deepEqual(arrFieldGaps({ ...observation, value: -1 }, "2026-10-31"), ["amount"]);
assert.deepEqual(arrFieldGaps({ ...observation, value: 0 }, "2026-10-31"), [], "disclosed zero is a valid amount");
const rows = arrDisclosures(seed as ResearchSnapshot);
assert.ok(rows.length > 0);
assert.ok(rows.every(({ observation: claim }) => arrFieldGaps(claim, seed.asOf).length > 0),
"the current ledger cannot be described as a complete dated exact USD sample");
});
test("income interpretations compare sufficient samples within a provider and known billing model", () => {
const snapshot = structuredClone(seed) as ResearchSnapshot;