Data-quality diagnostics
The reconciler walks every canonical dataset and reports coverage, verification status, and last-known-good timestamps. Editorial placeholders are explicitly counted as demo so we never accidentally render them as live data. Private user data (portfolio, watchlist, alerts) is never inspected by this view.
Generated 2026-05-23T17:11:58Z. Server-rendered fresh on every request.
Driven by env var NKOSUO_ALLOW_DEMO_DATA = (unset). To force OFF, set it to "false".
| Schema | Rows | Verified | Source-linked | Derived | Scheduled | Unverified | Demo | Status |
|---|---|---|---|---|---|---|---|---|
SourceMetadata Shared provenance contract. Every external-origin entity embeds it. rawnormalizedderiveddisplayeduser-entereddemo | 1 | 1 | — | — | — | — | — | Fully verified |
DataQualityStatus Enum drives FreshnessLabel rendering across the platform. derived | 1 | 1 | — | — | — | — | — | Fully verified |
MarketMetric Discriminated union over IndexValue / SecurityPrice / MacroMetric / TBillAuction / FXRate. rawdisplayed | 51 | — | — | — | — | — | 51 | All demo |
Instrument Coverage is the tracked universe — not every GSE listing. Confidence high → editor reconciled; medium → source-linked; low → synthesised from STOCKS dataset. normalized | 33 | 19 | 2 | — | — | 12 | — | Partial coverage newest 2026-04-24 |
SecurityPrice Static editorial dataset until a live GSE feed adapter lands (Phase 3). rawdisplayed | 33 | — | — | — | — | — | 33 | All demo |
IndexValue GSE-CI + GSE-FSI placeholders. Replace with verified end-of-day feed (Phase 3). rawdisplayed | 2 | — | — | — | — | — | 2 | All demo newest 2026-04-24 · oldest 2023-08-30 |
MacroMetric BoG / GSS / WB / FRED adapters required to flip rows from demo to live. rawnormalizeddisplayed | 13 | — | — | — | — | — | 13 | All demo newest 2026-04-23 · oldest 2026-03-31 |
TBillAuction Auction figures captured manually. `lib/live/bog.ts` parses official notices when available. rawdisplayed | 3 | — | — | — | — | — | 3 | All demo newest 2026-04-18 |
FXRate Currently embedded in MacroMetric rows. Dedicated FX adapter pending (Phase 3). raw | 3 | — | — | — | — | — | 3 | All demo |
CorporateAction Announcements live on the Stock object today. Source URL on file but not formally reconciled. raw | 8 | — | 8 | — | — | — | — | Unverified |
CorporateCalendarEvent Derived from issuer announcements + BoG calendar. Verification per-row. deriveddisplayed | 44 | 4 | — | 32 | 8 | — | — | Partial coverage newest 2026-11-24 · oldest 2026-03-11 |
CompanyFundamental Tracked issuers: 3 of 33. Source documents needed to flip rows from demo/source-linked to verified. normalizeddisplayed | 3 | — | — | — | — | — | 3 | All demo |
FinancialStatementMetric Schema declared. Per-line-item statements arrive in Phase 4. raw | 0 | — | — | — | — | — | — | Schema declared |
NewsItem Streamed at request time from RSS feeds (Joy Business, B&FT, Citi Business, Business24, GhanaWeb). Falls back to editorial picks when upstreams are unreachable. rawdisplayed | 0 | — | — | — | — | — | — | Schema declared |
NewsMatch Computed at request time over the latest news pull and the instrument master. derived | 0 | — | — | — | — | — | — | Schema declared |
SECNotice Editorial fallback until SEC Ghana publishes a structured feed. rawdisplayed | 7 | — | — | — | — | — | 7 | All demo newest 2026-04-24 |
PortfolioHolding Derived client-side from PortfolioTransaction[]. deriveduser-entered | 0 | — | — | — | — | — | — | Schema declared |
PortfolioTransaction Private user data. Stored only in the user's browser; never read by the reconciler. user-entered | 0 | — | — | — | — | — | — | Schema declared |
PortfolioSnapshot Computed on every ledger update. Provenance: user transactions + end-of-day prices. derived | 0 | — | — | — | — | — | — | Schema declared |
ValuationModelInput Per-stock DDM / DCF / yield-comparison / peer-multiples seeded from fundamentals. user-enteredderived | 3 | — | 3 | — | — | — | — | Unverified |
ValuationModelOutput Educational scenarios. Confidence is per-output via fv.confident. deriveddisplayed | 3 | — | — | 3 | — | — | — | Unverified |
AIExplanation Streamed at render time. Guardrail validator + rule-based fallback per kind. deriveddisplayed | 0 | — | — | — | — | — | — | Schema declared |
CorrectionReport Submitted via /corrections form. No backend storage today; mailto draft only. user-entered | 0 | — | — | — | — | — | — | Schema declared |
How to read this
- Verified: an editor reconciled the row against a primary source.
- Source-linked: source URL on file but the row has not been editorially reconciled.
- Derived: computed from a verified input (e.g. ex-date inferred from a dividend announcement).
- Scheduled: cadence-based event (weekly T-Bill auction) where the exact date may shift.
- Unverified: lacks source metadata. We label these clearly so users never mistake them for official data.
- Demo: editorial placeholder. Always rendered with a Demo freshness badge.
What's not here
Private user data — portfolio transactions, watchlists, alerts — is never read by the reconciler. The PortfolioHolding / Transaction / Snapshot rows in the table above are intentionally zero. See the privacy policy for what we collect, store, and never share.
Internal diagnostics page. Linked from methodology. If a row looks wrong, please report it via /corrections.