Scoring Methodology
How the Corporate Integrity Score is calculated — every formula, weight, and confidence tier. Formulas are taken directly from the live implementation.
For where the underlying data comes from and its limitations, see Data Sources.
Each analysis produces six module scores (0–100, higher = healthier). Five are blended into the headline Corporate Integrity Score. One — Narrative Consistency — is computed and displayed but currently carries zero weight (see section 7).
| Module | In Integrity Score? |
|---|---|
| Financial Quality | Yes |
| Cash Flow Integrity | Yes |
| Governance Risk | Yes |
| Earnings Quality | Yes |
| News Sentiment | Yes |
| Narrative Consistency (experimental) | No |
The Integrity Score maps to a risk label: 100–81 = Strong Integrity · 80–61 = Low Risk · 60–41 = Moderate Risk · 40–21 = High Risk · 20–0 = Severe Risk.
The five scored modules are weighted as follows. These are the original weights (summing to 0.90 with narrative included) renormalized by ×(1/0.9) so the active five sum exactly to 1.0.
| Module | Weight |
|---|---|
| Financial Quality | 33.3% |
| Cash Flow Integrity | 22.2% |
| Governance Risk | 16.7% |
| Earnings Quality | 16.7% |
| News Sentiment | 11.1% |
If a module's pipeline stage fails to produce a real score (network failure, zero financial periods, AI timeout), that module is excluded from both the numerator and the denominator. The remaining modules' weights are rescaled to sum to 1.0 among themselves — the score reflects only what was actually measured.
A module that legitimately computes exactly 50 from real data is still included and weighted normally. Only null/missing triggers exclusion. This is produced upstream in the analysis pipeline, not inferred inside the scoring formula.
Each analysis carries a confidence tier shown on the Overview tab:
Four modules derive scores from annual financial statement data using deterministic formulas — no AI. All operate on consecutive period pairs sorted by date. Periods with missing required fields are skipped; a module with zero valid periods returns 50 (neutral baseline).
5a. Revenue Quality (blended into Financial Quality)
Per consecutive period pair: divergence = revenue_growth − operating_CF_growth and recv_ratio = accounts_receivable / revenue. Starting from 100: −15 if divergence > 0.15; −25 more if divergence > 0.30; −10 if recv_ratio increases by more than 0.10. Red flags at 2+ consecutive high divergences (HIGH) or 3+ consecutive receivables increases (MODERATE).
5b. Cash Flow Integrity
Sloan Accrual Ratio per period: (net_income − operating_CF) / total_assets. Score per period: ≥0.15 → 20, ≥0.10 → 45, ≥0.05 → 70, otherwise 100. Module score = average across all valid periods. SEVERE flag when net income is positive but operating cash flow is negative in the same period.
5c. Earnings Quality
Starting from 100: −20 if gross margin changes by more than 8 percentage points in any period. If 2+ net income growth rates exist, compute coefficient of variation; −25 if CV > 1.5 (highly erratic earnings). HIGH flag if earnings spike >50% with revenue growth ≤10%.
5d. Debt Stress (blended into Financial Quality)
Starting from 100 per period: −20 if debt-to-revenue > 1.0; −20 more if > 2.0; −15 if debt grows >30% YoY; −20 if interest coverage (operating CF / (debt × 5%)) < 2.0. Financial Quality = (Revenue Quality + Debt Stress) / 2.
Two modules use Google Gemini. Both run at temperature=0 with a pinned model version. The exact prompt and raw response are persisted per analysis for auditability. Each call has a 30-second timeout; a per-process daily cap of 200 requests guards against runaway loops.
6a. Governance Risk
Gemini extracts governance events (leadership changes, auditor transitions, regulatory actions) from recent news text. Every event must include a verbatim source quote from the input text — events that fail this grounding check are dropped before scoring to prevent fabricated findings. Deductions: moderate event −15, high −25, severe −35. Returns 50 with a low-confidence marker if news text is under 40 characters or if the API call fails. Returns 100 (clean, not low-confidence) if the API succeeds but finds zero events.
6b. News Sentiment
Keyword-based (not AI): positive words (+1 each) vs. negative words (−1 each) across up to 20 recent headlines from three RSS feeds. Raw average is clamped to [−1, 1] then mapped to [0, 100]. Falls back to 50 if no headlines are found.
Narrative Consistency is computed and shown on the Narrative tab, but carries zero weight in the Integrity Score. The current pipeline derives "statements" from news headlines, not from management's own earnings-call or filing language. It measures press-coverage tone consistency — a real but different signal than management narrative consistency. Until a transcript pipeline exists, it is labeled "experimental" and excluded from weighting rather than diluting the score with a potentially misleading signal.