Files
0pt/lib/services.ts
T
adminandClaude Opus 4.8 78e38e9add feat: full service catalog + custom-job intake (describe -> AI-assist -> order)
lib/services (11 categories: data, scraping, mapping, normalization, consolidation->CRM/ERP, documents/OCR, enrichment, ICP, ML, BI, feeds across the 3 flows); /tjanster catalog; /bestall/beskriv NL intake; /api/ai/parse (engine LLM or heuristic NL->config); CRM/ERP destinations; Tjänster in nav. Sells every custom data service through the platform. tsc 0, build green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 01:59:56 +02:00

43 lines
3.5 KiB
TypeScript

// The 0pt service catalog. Every sellable service maps to one of the three flows
// (docs/01): catalog product, custom job, subscription. Categories are tags within
// those flows — not separate machinery.
export type Flow = "catalog" | "custom" | "subscription";
export interface Service {
id: string;
name: string;
tagline: string; // terse, confident
covers: string; // one line of scope
flow: Flow;
deliverable: string;
mult: number; // price multiplier vs a base dataset job
}
export const SERVICES: Service[] = [
{ id: "data", name: "Dataleverans", tagline: "Färdig eller skräddarsydd.", covers: "Bolag, beslutsfattare, fordon, finansiellt — per fält med härkomst.", flow: "custom", deliverable: "CSV · Parquet · JSON · API", mult: 1.0 },
{ id: "scraping", name: "Webbskrapning", tagline: "Lagligt insamlat.", covers: "Officiella API:er och tydligt publika sidor. Aldrig bakom inloggning.", flow: "custom", deliverable: "Strukturerat dataset + källa per fält", mult: 1.1 },
{ id: "mapping", name: "Mappning & matchning", tagline: "Era data mot världen.", covers: "Koppla era poster mot orgnr/LEI och externa nycklar. Cross-border.", flow: "custom", deliverable: "Matchad fil + matchningskonfidens", mult: 1.2 },
{ id: "normalization", name: "Normalisering", tagline: "Städat. Standardiserat.", covers: "Format, dubbletter, validering (e-post/telefon), enhetlig taxonomi.", flow: "custom", deliverable: "Ren datamodell + kvalitetsrapport", mult: 1.1 },
{ id: "consolidation", name: "Konsolidering → CRM/ERP", tagline: "En sanning. Rätt system.", covers: "Slå ihop admindata och pusha till HubSpot, Salesforce, Dynamics, Pipedrive, FiveCRM.", flow: "custom", deliverable: "Konsoliderad data + push/sync", mult: 1.4 },
{ id: "documents", name: "Dokument & OCR", tagline: "Pixlar till poster.", covers: "PDF, bilder, scannade myndighetsdokument → strukturerade fält.", flow: "custom", deliverable: "Strukturerat dataset från dokument", mult: 1.3 },
{ id: "enrichment", name: "Berikning", tagline: "Fyll luckorna.", covers: "Kontakter, firmografik, finansiellt, köpsignaler — med laglig grund.", flow: "subscription", deliverable: "Berikad fil eller löpande flöde", mult: 1.2 },
{ id: "icp", name: "ICP & leads", tagline: "Rätt målgrupp.", covers: "Målgruppslistor med beslutsfattare, härkomst per kontakt.", flow: "catalog", deliverable: "Lead-lista + export till CRM", mult: 1.2 },
{ id: "ml", name: "ML-jobb", tagline: "Modeller på er data.", covers: "Scoring, matchning, prognos, klustring — tränat på era + våra data.", flow: "custom", deliverable: "Modell + prediktioner + API", mult: 1.8 },
{ id: "bi", name: "BI & marknadsanalys", tagline: "Beslut, inte bara siffror.", covers: "Dashboards, marknadsöversikter, konkurrent- och täckningsanalys.", flow: "custom", deliverable: "Metabase-dashboard + rapport", mult: 1.5 },
{ id: "feeds", name: "Flöden & övervakning", tagline: "Alltid färskt.", covers: "Återkommande leverans, freshness-bevakning, webhook vid förändring.", flow: "subscription", deliverable: "Webhook/feed + larm", mult: 1.3 },
];
export const FLOW_LABEL: Record<Flow, string> = {
catalog: "Katalog",
custom: "Skräddarsytt",
subscription: "Flöde",
};
// CRM/ERP destinations for the consolidation/push services.
export const DESTINATIONS_CRM = ["HubSpot", "Salesforce", "Microsoft Dynamics", "Pipedrive", "FiveCRM", "Google Sheets", "CSV / API"];
export function serviceById(id: string): Service | undefined {
return SERVICES.find((s) => s.id === id);
}