Cockpit
Four numbers, plain language, drill-down on click. The one-page health check before any customer demo. Translations, Mappings and Rule Precision are scoped to the active client (EMPET — All Rows). Concepts stay global.
Prospects
Evaluate revenue opportunity for prospective clients
Every number comes from SQL against this prospect's invoices. Click Show the math to see the exact query.
Onboard a new practice
Six steps. We'll walk you through each one.
Loading…
Scenario Modeller
Model realistic deployment
Choose which rules to deploy in each phase, set per-rule target compliance, and see revenue build up phase by phase. Save multiple scenarios and compare them side by side for board presentations.
Quick start: Select a prospect run, click "+ New scenario" to create from defaults, then adjust per-rule parameters. Revenue updates live as you edit.
Lab — experimental rules
NOT in scenarioThese rules are still in the lab. They came from Stage 4 discovery, blind mining, or the LLM proposer — but no clinician has signed off yet. They cannot appear in a customer scenario or carry a revenue figure until Senior Vet has reviewed them and they pass the audit gate (Phase 3 — ≥1 passing/warning audit in the last 7 days). Run an audit, then promote.
Click Refresh above to load experimental rules, or pick a source from the dropdown at the top.
Clients
Client portfolio
Each row is a veterinary group using Sweetfish. Click Dashboard to see performance data, upload monthly reports, and get Gemini analysis.
Class (ADR-035) tells you what the entity is: CUSTOMER (signed pilot or contract — popups flowing), PROSPECT (evaluating; uplift modelled, popups not yet), CORPUS (anonymised reference market for cross-market mining).
Reporting is a separate operational signal — green REPORTING means a monthly performance report has been uploaded; — means awaiting the first upload.
Sweetfish at a glance
Is the system OK? What changed this week? Where should I look?
Loading health snapshot…
Loading activity feed…
Library and runs
Loading…
Concept Triage
What is this?
Every clinic has tens of thousands of products. Most don't matter for billing accuracy — but a few hundred do, and getting their concept assignment right unlocks every rule downstream. This page ranks the top canonicals to review, so you spend the vet's time on the highest-value ones first.
How the rank is computed: 50% by money-weight (how often it's billed × typical price), 30% by audit flag (the rule auditor sees a problem with this concept), 20% by low embedding-confidence (it doesn't sit close to anything else, so the auto-mapper guessed). Vet-confirmed canonicals are excluded — no point re-reviewing them.
Bulk-edit is dry-run only in Phase 0. The pattern panel below shows what would change without writing anything. Phase 1 adds a commit option with cascade-revoke wiring.
Clinical Judge
What is this?
Gemini Pro reads stratified samples of real invoices and asks "what is clinically missing from this basket?" It surfaces patterns below the statistical threshold of pattern mining but above what a senior vet notices by inspection. Each finding below is an aggregated cluster — review and decide whether to promote it to a proposed clinical assertion (which can later become a rule), reject it, defer it, or flag it for the next Nic session.
Promote does NOT create a rule — it creates a proposed
clinical assertion. Authoring a rule from a confirmed assertion is a separate step
with its own dual-gate review.
Predicted Misses
What is this?
Every night the Stage 4a model scores yesterday's invoices and flags baskets where a rule's required item is probably missing. Each card below is one prediction. Decide whether the model got it right (accept), got it wrong (reject), or you'd like to come back to it later (defer). Every click writes a label that the next weekly retrain consumes — this is the closed-loop channel.
Plain English: p_accept = how confident the model is that this is a genuine miss (0 = definitely fine, 1 = definitely a miss). Predicted value = the typical line value of the missing item on this client. Rule = which rule fired. Missing concept = what the model thinks should have been on the invoice.
Keyboard: J / K to move between cards. A / R / D to accept / reject / defer the focused card. ? for help.
- J / K — next / previous card
- A — accept (was a real miss)
- R — reject (not a miss)
- D — defer
- ? — toggle this help
- Esc — close help
Cross-Market Suggestions
What is this?
Every night the Cross-Market engine reads acceptance data from other live markets (default: IVC ES + IVC PT) and flags rules where the target client's compliance is materially below what other markets have already achieved. Each card is one suggestion: "raise this rule's target — here's the gap-share estimated uplift if you do."
Plain English: Source acceptance = how often the popup is accepted in the source markets. Target current = the target client's current compliance for this rule. Proposed target = what we suggest raising it to. Estimated uplift = the §13 gap-share value (full_potential × (target − current) / (1 − current)) — never full × target. Norwegian-trap score = Build 7 trap-risk filter (we only show suggestions with score < 0.5).
Click ✓ Accept to write the proposed target through to the active scenario. Click ✗ Reject to dismiss. Click Compose Notion ask to copy a Q-S14-NN-style block to the clipboard for posting.
Suggestion caps (advanced) — limit what the engine may propose, per rule
What is a suggestion cap?
A suggestion cap limits the target the cross-market engine is allowed to propose for a rule. When a source market shows 100% acceptance (which happens when a rule fires sparingly), proposing 100% is unrealistic and inflates the estimated uplift. The cap is your judgement on the highest realistic compliance any client could hit for this rule.
This is not the customer target. The compliance target the customer is held to lives in the Scenario Modeller. This cap only bounds the suggestions shown above. Blank = no cap.
Side effect: changing a cap marks any pending
suggestions for that rule as superseded — re-run
derivation above to refresh.
Rule Scope
What is this?
Each rule can be scoped to a specific list of clients (markets). A rule with no scope is universal — it fires on every client. A rule with an explicit scope fires only on the listed clients; the engine, the simulator, the cross-market suggester, and the auditor all skip clients NOT in the list.
When to scope: when the rule's base concept is empty
on a client (e.g. ivft on IVC Spain, dispensing_fee
on EMPET-Headers) and the right fix is "this rule doesn't apply
here" rather than "populate the concept".
What this is NOT for: intentional clinical decisions ("Mediterranean parasites don't apply on Nordic clients"). Those need Senior Vet sign-off and a different audit trail; raise them via Notion.
Audit trail: every change emits an
audit.rule_events row with action
rule.client_scope_changed + before/after JSONB + the reason
you supply.
Blind Labelling
Label each product cold — from its name and price alone. Pick the one concept you would assign, or say you are unsure. You will not see the system's answer; that is the point. Every choice saves as you go, so you can stop and come back any time.
Coverage
Have we found all the products that should be under each concept? The page surfaces canonicals near a concept's centroid in embedding space that aren't yet mapped to it — review and accept to extend the concept.
Concepts to review
Clinical Knowledge
The brain behind the rules
Clinical assertions from your veterinary experts and guidelines. Every assertion feeds into Sweetfish's AI — improving rule generation, blind discovery triage, prospect analysis, and concept mapping.
How to use: Add a knowledge source (e.g. Nick), then paste a conversation transcript or upload a guideline. Gemini extracts structured assertions. Review and confirm each one — confirmed assertions immediately improve every AI call.
Add knowledge
Review queue
Confirmed assertions
Concept proposals are reviewed in the Global Concepts tab where you can see similar existing concepts side-by-side.
Rule Library
What is a rule?
A rule describes a billing pattern that should hold — e.g. every surgery should also have an anaesthesia line. When the pattern is violated on an invoice, the vet sees a pop-up at billing time.
Rule types explained:
Provenance badges: 🧠 Sweetfish Intelligence core Sweetfish-authored rules; ⬆ Promoted · <client> discovered by another customer and shared. Lifecycle (active / candidate / deprecated / etc.) shows in its own column.
Rule trust — per client
How much can we trust each rule for the selected client? A rule that is healthy in one market is not automatically healthy in another, so this lens is never pooled — pick a client and see that client's signal.
Health (live, from the nightly auditor): compliance %, a risk bucket, and the latest audit verdict. Precision band is the share of fires that were genuine misses. Precision is the Gemini self-audit number and is on the sunset path — it will be replaced by real popup feedback. Treat it as a hint, not ground truth.
Blind Discovery
What is this?
Statistical mining finds billing patterns nobody wrote as rules. For every concept pair, we compute co-occurrence confidence, lift, and support across all invoices. Gemini then triages each candidate with real invoice samples to classify it as leakage, bundle, clinical variation, or unclear.
Click any row to drill into the evidence: trigger/base products, sample invoices (compliant and violating), and Gemini's reasoning.
Global Concepts
The master clinical categories your rules use — affects all clients. L1 categories, L2 concepts: add, rename and edit here freely. (Merge & Retire are temporarily disabled — they arrive with the Phase 1 safety work: warnings + automatic recalculation.) Matching one client's products to these categories lives on the Product Mapping tab.
Product Mapping
Match one client's products to the master categories (the categories live on the Global Concepts tab).
Concept Review
Row-by-row review of borderline concept assignments and unmapped billed products.
What this surface is for
The system has flagged thousands of concept mappings as below 80% confidence, plus 6,765 unmapped products. To make this tractable we filter down to the genuinely impactful rows: mappings whose concept appears in an active or candidate rule, where the product has been billed at least once, plus all unmapped products that show up on real invoices.
Each row is one explicit decision. No bulk apply, no embedding propagation. Choices are: Keep (concept is right, just confirm) · Move (concept is wrong, pick a better one) · Unmap (this product shouldn't be in any concept). Every action lands in audit.rule_events and is reversible.
Loading...
Upload monthly report (advanced)
Rule Feedback
Live popup acceptance per rule — shown / accepted / dismissed and revenue retrieved, from real vet feedback (weekly_rule_stats).
Advanced: Manual retrain trigger
Runs the closed-loop learning cycle: aggregates popup events, auto-pauses low-performing rules, flags anomalies. In production this runs automatically.
Anomalies
What are rule anomalies?
If a rule's acceptance rate suddenly jumps or dips (by 10 percentage points or more week-over-week), something changed — a locum joined, a new accounting code appeared, a PMS update mangled a product category. Anomalies surface those jumps so you can investigate.
How to use: click Diagnose on a row; Gemini reads the before/after stats for that rule and returns a plain-English explanation. You don't need clinical knowledge — the diagnosis is written for an admin audience.
Rules whose week-over-week compliance moved by ≥10 pp. Click "Diagnose" to ask Gemini why.
System Debug checking…
Suggested-base matview
§10 KPI spot-check — do all surfaces agree on the headline?
Click Run check when you suspect a number on the UI is recomputed instead of read from the snapshot. Mismatches also land on the error log as warnings.
Source Data Inventory — ingest lossless check
Compares source-file row counts to what landed in each prospect schema. Drops > 5% with no documented reason render red — that's a §11 violation (the bug that hid 88% of EMPET's catalogue for weeks).
Client Data Inventory
Registered Users
⚑ Findings — the brain (cross-cutting insights tagged with patterns)
Patterns (durable) live in docs/findings/PATTERNS.md. Findings (dated, specific) are queryable here. Each finding tagged with one or more patterns. Click a row to open full body + evidence.
Error & Warning Log
Discovery Lab
Discovery Lab
Statistical mining combined with Gemini triage surfaces candidate billing patterns. Each card below is a pattern found in client data. Promote a pattern to make it a live rule, Investigate to drill deeper, or Reject to dismiss it.
Product Audit
Mapped vs Validated: "Mapped" means the AI assigned a concept; "Validated" means a human confirmed it. Low Validated % is normal — only borderline mappings get queued for human review (see Concept Review).
Documentation
User Manual (how to use Sweetfish) and Technical Documentation (what does what, where data lives, what depends on what). Updated every session per the end-session skill.