{
  "anna-jensen": {
    "id": "anna-jensen",
    "header": {
      "initials": "AJ",
      "name": "Anna Jensen",
      "customerSince": "2023-05-15",
      "tags": ["stamkunde", "farve"],
      "bookingAllowed": true,
      "facts": {
        "visits": 24,
        "avgIntervalDays": 28,
        "preferredHairdresser": "Nina K.",
        "totalRevenue": 18750
      }
    },
    "contact": {
      "phone": "+45 22 33 44 55",
      "email": "anna.j@hotmail.dk",
      "address": "Skovvej 8",
      "zip": "2800",
      "city": "Lyngby"
    },
    "profile": [
      { "title": "Hårtype", "value": "Tykt - Glat" },
      { "title": "Porøsitet", "value": "Lav" },
      { "title": "Hovedbund", "value": "Normal" },
      { "title": "Naturlig farve", "value": "Mørkebrun (4)" },
      { "title": "Nuværende farve", "value": "Varm brun med highlights" }
    ],
    "marketing": { "emailOptIn": true, "smsOptIn": true },
    "payment": { "requirePrepayment": false, "allowPartialPayment": true },
    "preferences": {
      "preferredHairdresser": "Nina K.",
      "preferredDays": "Fredag",
      "specialRequests": "Ønsker altid en kop te under behandling. Foretrækker varme toner."
    },
    "warnings": [
      { "title": "Hårskade", "value": "Let skadet i spidserne fra tidligere afblegning - vær forsigtig med kemiske behandlinger" }
    ],
    "group": { "groupId": "premium", "groupName": "Premium" },
    "relations": [
      { "id": "peter-jensen", "name": "Peter Jensen", "initials": "PJ", "type": "Ægtefælle" },
      { "id": "mille-jensen", "name": "Mille Jensen", "initials": "MJ", "type": "Datter" }
    ],
    "statistics": {
      "attendance": { "attended": 24, "cancelled": 2, "noShow": 0, "reliabilityPercent": 92 },
      "topServices": [
        { "name": "Klip + Farve", "count": 14 },
        { "name": "Highlights", "count": 6 },
        { "name": "Klip", "count": 4 }
      ],
      "topProducts": [
        { "name": "Olaplex No. 3", "count": 8 },
        { "name": "Kerastase Elixir", "count": 4 },
        { "name": "Hårkur", "count": 3 }
      ],
      "bookingBehavior": {
        "avgBookingNoticeDays": 10,
        "preferredDay": "Fredag",
        "preferredTimeSlot": "14:00 - 16:00",
        "onlineBookingRate": 85,
        "avgCancellationNoticeDays": 3
      },
      "loyalty": { "customerSinceYears": 1.7, "daysSinceLastVisit": 18, "churnRisk": "low", "avgIntervalDays": 28 }
    },
    "journal": [
      {
        "id": "aj-entry-1",
        "type": "note",
        "tag": "Note",
        "subtags": [],
        "text": "Anna er meget tilfreds med den nye varme farvetone. Hun ønsker at holde denne stil fremover. Husk te med mælk!",
        "date": "2026-01-06",
        "author": "Nina"
      },
      {
        "id": "aj-entry-2",
        "type": "colorFormula",
        "tag": "Farveformel",
        "subtags": [],
        "text": "Måltone: Varm brun med kobber-highlights\nBund: 5/7 + 5/3 (2:1)\nHighlights: 8/43\nOxidant: 6% (bund), 9% (highlights)\nVirketid: 40 min\nPlacering: Bund hele håret, highlights i ansigtsindrammende partier\n\nResultat: Perfekt! Anna elskede det varme skær.",
        "date": "2026-01-06",
        "author": "Nina"
      },
      {
        "id": "aj-entry-3",
        "type": "note",
        "tag": "Advarsel",
        "subtags": ["Hårskade"],
        "text": "OBS: Let hårskade i spidserne fra gammel afblegning (før hun kom til os). Undgå aggressive behandlinger og tilbyd altid Olaplex.",
        "date": "2023-06-20",
        "author": "Emma"
      },
      {
        "id": "aj-entry-4",
        "type": "analysis",
        "tag": "Håranalyse",
        "subtags": [],
        "text": "Tilstand: God i rod og midterlængder, spidser let tørre\nPorøsitet: Lav til medium\nElasticitet: God\nHovedbudstilstand: Sund, ingen tørhed\n\nAnbefaling: Fortsat Olaplex hver behandling. Klip 1-2 cm af for at fjerne mest skadet område.",
        "date": "2025-09-15",
        "author": "Nina"
      },
      {
        "id": "aj-entry-5",
        "type": "colorFormula",
        "tag": "Farveformel",
        "subtags": ["Tidligere"],
        "text": "Måltone: Varm chokoladebrun\nFormel: 4/7 + 5/3 (1:1)\nOxidant: 6%\nVirketid: 35 min\nPlacering: Hele håret\n\nResultat: God dækning, kunde ønsker lidt lysere næste gang.",
        "date": "2025-06-12",
        "author": "Nina"
      },
      {
        "id": "aj-entry-6",
        "type": "note",
        "tag": "Note",
        "subtags": ["Produkt"],
        "text": "Anbefalet Kerastase Elixir til hjemmebrug. Anna købte og er meget glad for resultatet. Fortsæt anbefaling.",
        "date": "2025-04-18",
        "author": "Nina"
      }
    ],
    "appointments": {
      "upcoming": [
        {
          "date": "2026-02-07",
          "time": "14:00",
          "service": "Klip + Farve + Olaplex",
          "hairdresser": "Nina K.",
          "duration": "2t 30m"
        },
        {
          "date": "2026-03-21",
          "time": "15:00",
          "service": "Klip + Highlights",
          "hairdresser": "Nina K.",
          "duration": "2t 45m"
        }
      ],
      "history": [
        { "date": "2026-01-06", "service": "Klip + Farve + Olaplex", "hairdresser": "Nina K.", "duration": "2t 30m", "price": 1850 },
        { "date": "2025-12-06", "service": "Klip", "hairdresser": "Nina K.", "duration": "45 min", "price": 550 },
        { "date": "2025-10-25", "service": "Klip + Farve", "hairdresser": "Nina K.", "duration": "2 timer", "price": 1450 },
        { "date": "2025-09-15", "service": "Håranalyse + Behandling", "hairdresser": "Nina K.", "duration": "1 time", "price": 650 },
        { "date": "2025-08-08", "service": "Highlights + Klip", "hairdresser": "Nina K.", "duration": "2t 45m", "price": 1950 },
        { "date": "2025-06-12", "service": "Klip + Farve", "hairdresser": "Nina K.", "duration": "2 timer", "price": 1450 },
        { "date": "2025-04-18", "service": "Klip + Olaplex", "hairdresser": "Nina K.", "duration": "1t 15m", "price": 850 },
        { "date": "2025-02-28", "service": "Klip + Farve", "hairdresser": "Nina K.", "duration": "2 timer", "price": 1450 },
        { "date": "2025-01-10", "service": "Highlights", "hairdresser": "Emma L.", "duration": "2t 30m", "price": 1750 },
        { "date": "2024-11-15", "service": "Klip + Farve", "hairdresser": "Nina K.", "duration": "2 timer", "price": 1400 }
      ]
    },
    "giftcards": {
      "active": [
        {
          "id": "GK-2025-1234",
          "type": "giftcard",
          "label": "Gavekort #GK-2025-1234",
          "originalValue": 1000,
          "currentBalance": 650,
          "expiresAt": "2026-06-15"
        },
        {
          "id": "klip-5",
          "type": "punchcard",
          "label": "5-klip kort",
          "totalPunches": 5,
          "usedPunches": 3,
          "expiresAt": "2026-12-31"
        }
      ],
      "expired": [
        {
          "id": "GK-2023-0567",
          "type": "giftcard",
          "label": "Gavekort #GK-2023-0567",
          "originalValue": 500,
          "currentBalance": 0,
          "expiresAt": "2024-12-01"
        }
      ]
    },
    "economy": {
      "currentYear": { "year": 2025, "total": 12450 },
      "lastYear": { "year": 2024, "total": 9800 },
      "avgPerVisit": 889,
      "avgPerMonth": 1038,
      "chartData": {
        "categories": ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
        "series": [
          {
            "name": "Services",
            "color": "#00897b",
            "data": [
              { "x": "Feb", "y": 1450 },
              { "x": "Apr", "y": 1200 },
              { "x": "Jun", "y": 1450 },
              { "x": "Aug", "y": 1950 },
              { "x": "Okt", "y": 550 },
              { "x": "Nov", "y": 1200 },
              { "x": "Dec", "y": 1450 }
            ]
          },
          {
            "name": "Produkter",
            "color": "#1976d2",
            "data": [
              { "x": "Mar", "y": 349 },
              { "x": "Maj", "y": 180 },
              { "x": "Sep", "y": 425 },
              { "x": "Dec", "y": 349 }
            ]
          }
        ]
      },
      "purchases": [
        { "invoice": "#1892", "date": "2025-12-09", "time": "14:30", "employee": "Nina K.", "services": "Klip + Farve", "type": "service", "amount": 1450 },
        { "invoice": "#1892", "date": "2025-12-09", "time": "14:30", "employee": "Nina K.", "services": "Olaplex No. 3", "type": "product", "amount": 349 },
        { "invoice": "#1845", "date": "2025-11-12", "time": "10:00", "employee": "Nina K.", "services": "Farve", "type": "service", "amount": 1200 },
        { "invoice": "#1798", "date": "2025-10-15", "time": "15:45", "employee": "Nina K.", "services": "Klip", "type": "service", "amount": 550 },
        { "invoice": "#1756", "date": "2025-09-20", "time": "11:15", "employee": "Emma L.", "services": "Kerastase Elixir", "type": "product", "amount": 425 },
        { "invoice": "#1701", "date": "2025-08-08", "time": "13:00", "employee": "Nina K.", "services": "Highlights + Klip", "type": "service", "amount": 1950 }
      ]
    },
    "activity": [
      {
        "date": "2026-01-22",
        "time": "10:30",
        "type": "communication",
        "icon": "chat-text",
        "title": "SMS påmindelse sendt om aftale d. 7. februar",
        "actor": "System",
        "badges": ["auto"]
      },
      {
        "date": "2026-01-06",
        "time": "16:40",
        "type": "payment",
        "icon": "credit-card",
        "title": "Betaling modtaget — 1.850 kr",
        "actor": "Dankort ****4521",
        "badges": []
      },
      {
        "date": "2026-01-06",
        "time": "16:35",
        "type": "edit",
        "icon": "note-pencil",
        "title": "Farveformel opdateret med ny varm tone",
        "actor": "Nina K.",
        "badges": []
      },
      {
        "date": "2026-01-06",
        "time": "16:30",
        "type": "booking",
        "icon": "check-circle",
        "title": "Booking gennemført",
        "actor": "Klip + Farve + Olaplex · Nina K.",
        "badges": []
      },
      {
        "date": "2026-01-06",
        "time": "14:00",
        "type": "customer",
        "icon": "key",
        "title": "Kunde ankom til aftale",
        "actor": null,
        "badges": []
      },
      {
        "date": "2026-01-03",
        "time": "19:22",
        "type": "booking",
        "icon": "calendar-plus",
        "title": "Ny booking oprettet via online booking",
        "actor": "7. feb 2026 kl. 14:00",
        "badges": ["online"]
      },
      {
        "date": "2025-12-20",
        "time": "11:15",
        "type": "communication",
        "icon": "envelope",
        "title": "Julehilsen email sendt",
        "actor": "System",
        "badges": ["auto", "marketing"]
      },
      {
        "date": "2025-12-06",
        "time": "15:50",
        "type": "payment",
        "icon": "credit-card",
        "title": "Betaling modtaget — 550 kr",
        "actor": "MobilePay",
        "badges": []
      },
      {
        "date": "2025-12-06",
        "time": "15:45",
        "type": "booking",
        "icon": "check-circle",
        "title": "Booking gennemført",
        "actor": "Klip · Nina K.",
        "badges": []
      },
      {
        "date": "2025-10-25",
        "time": "17:05",
        "type": "payment",
        "icon": "credit-card",
        "title": "Betaling modtaget — 1.100 kr (350 kr fra gavekort)",
        "actor": "Dankort ****4521",
        "badges": ["gavekort"]
      },
      {
        "date": "2025-10-25",
        "time": "17:00",
        "type": "edit",
        "icon": "gift",
        "title": "Gavekort #GK-2025-1234 tilføjet - Gave fra ægtefælle",
        "actor": "Reception",
        "badges": []
      },
      {
        "date": "2025-09-15",
        "time": "11:30",
        "type": "edit",
        "icon": "clipboard-text",
        "title": "Håranalyse udført og gemt",
        "actor": "Nina K.",
        "badges": []
      },
      {
        "date": "2025-08-01",
        "time": "09:00",
        "type": "customer",
        "icon": "star",
        "title": "Opgraderet til Premium kundegruppe",
        "actor": "System",
        "badges": []
      },
      {
        "date": "2023-06-20",
        "time": "10:45",
        "type": "warning",
        "icon": "warning",
        "title": "Advarsel registreret — Hårskade noteret",
        "actor": "Emma L.",
        "badges": []
      },
      {
        "date": "2023-05-15",
        "time": "14:00",
        "type": "customer",
        "icon": "user-plus",
        "title": "Kunde oprettet via telefon",
        "actor": "Reception",
        "badges": []
      }
    ]
  },

  "camilla-holm": {
    "id": "camilla-holm",
    "header": {
      "initials": "CH",
      "name": "Camilla Holm",
      "customerSince": "2022-12-01",
      "tags": ["vip"],
      "bookingAllowed": true,
      "facts": {
        "visits": 25,
        "avgIntervalDays": 35,
        "preferredHairdresser": "Emma L.",
        "totalRevenue": 28500
      }
    },
    "contact": {
      "phone": "+45 66 77 88 99",
      "email": "camilla.h@outlook.dk",
      "address": "Strandvejen 45",
      "zip": "2900",
      "city": "Hellerup"
    },
    "profile": [
      { "title": "Hartype", "value": "Fint - Bolget" },
      { "title": "Porositet", "value": "Hoj" },
      { "title": "Hovedbund", "value": "Tor" },
      { "title": "Naturlig farve", "value": "Lysblond (8)" }
    ],
    "marketing": { "emailOptIn": true, "smsOptIn": true },
    "payment": { "requirePrepayment": false, "allowPartialPayment": false },
    "preferences": {
      "preferredHairdresser": "Emma L.",
      "preferredDays": "Tirsdag",
      "specialRequests": "Onsker altid en kop kaffe"
    },
    "warnings": [],
    "group": { "groupId": "premium", "groupName": "Premium" },
    "relations": [],
    "statistics": {
      "attendance": { "attended": 25, "cancelled": 1, "noShow": 0, "reliabilityPercent": 96 },
      "topServices": [
        { "name": "Klip + Farve", "count": 15 },
        { "name": "Behandling", "count": 8 },
        { "name": "Klip", "count": 2 }
      ],
      "topProducts": [
        { "name": "Olaplex No. 3", "count": 4 },
        { "name": "Harkur", "count": 3 }
      ],
      "bookingBehavior": {
        "avgBookingNoticeDays": 14,
        "preferredDay": "Tirsdag",
        "preferredTimeSlot": "10:00 - 12:00",
        "onlineBookingRate": 60,
        "avgCancellationNoticeDays": 5
      },
      "loyalty": { "customerSinceYears": 2.1, "daysSinceLastVisit": 88, "churnRisk": "low", "avgIntervalDays": 35 }
    },
    "journal": [],
    "appointments": { "upcoming": [], "history": [] },
    "giftcards": { "active": [], "expired": [] },
    "activity": []
  },

  "emma-larsen": {
    "id": "emma-larsen",
    "header": {
      "initials": "EL",
      "name": "Emma Larsen",
      "customerSince": "2024-06-01",
      "tags": [],
      "bookingAllowed": true,
      "facts": {
        "visits": 8,
        "avgIntervalDays": 30,
        "preferredHairdresser": "Nina K.",
        "totalRevenue": 5600
      }
    },
    "contact": {
      "phone": "+45 12 34 56 78",
      "email": "emma.l@gmail.com",
      "address": "Norrebrogade 100",
      "zip": "2200",
      "city": "Kobenhavn N"
    },
    "profile": [
      { "title": "Hartype", "value": "Medium - Glat" },
      { "title": "Porositet", "value": "Medium" },
      { "title": "Hovedbund", "value": "Normal" },
      { "title": "Naturlig farve", "value": "Morkbrun (3)" }
    ],
    "marketing": { "emailOptIn": true, "smsOptIn": false },
    "payment": { "requirePrepayment": false, "allowPartialPayment": false },
    "preferences": {
      "preferredHairdresser": "Nina K.",
      "preferredDays": "Lordag",
      "specialRequests": ""
    },
    "warnings": [],
    "group": { "groupId": "standard", "groupName": "Standard" },
    "relations": [],
    "statistics": {
      "attendance": { "attended": 8, "cancelled": 0, "noShow": 0, "reliabilityPercent": 100 },
      "topServices": [
        { "name": "Klip", "count": 6 },
        { "name": "Fon", "count": 2 }
      ],
      "topProducts": [],
      "bookingBehavior": {
        "avgBookingNoticeDays": 5,
        "preferredDay": "Lordag",
        "preferredTimeSlot": "11:00 - 13:00",
        "onlineBookingRate": 100,
        "avgCancellationNoticeDays": 0
      },
      "loyalty": { "customerSinceYears": 0.6, "daysSinceLastVisit": 50, "churnRisk": "low", "avgIntervalDays": 30 }
    },
    "journal": [],
    "appointments": { "upcoming": [], "history": [] },
    "giftcards": { "active": [], "expired": [] },
    "activity": []
  },

  "freja-christensen": {
    "id": "freja-christensen",
    "header": {
      "initials": "FC",
      "name": "Freja Christensen",
      "customerSince": "2022-08-01",
      "tags": ["vip", "allergi"],
      "bookingAllowed": true,
      "facts": {
        "visits": 31,
        "avgIntervalDays": 28,
        "preferredHairdresser": "Emma L.",
        "totalRevenue": 42000
      }
    },
    "contact": {
      "phone": "+45 55 66 77 88",
      "email": "freja.c@outlook.dk",
      "address": "Frederiksberggade 50",
      "zip": "1459",
      "city": "Kobenhavn K"
    },
    "profile": [
      { "title": "Hartype", "value": "Tykt - Krollet" },
      { "title": "Porositet", "value": "Hoj" },
      { "title": "Hovedbund", "value": "Sensitiv" },
      { "title": "Naturlig farve", "value": "Rod (7)" }
    ],
    "marketing": { "emailOptIn": true, "smsOptIn": true },
    "payment": { "requirePrepayment": false, "allowPartialPayment": false },
    "preferences": {
      "preferredHairdresser": "Emma L.",
      "preferredDays": "Onsdag",
      "specialRequests": "Skal altid have allergitjek for farve"
    },
    "warnings": [
      { "title": "Allergi", "value": "Allergisk over for PPD - brug kun PPD-fri farver" }
    ],
    "group": { "groupId": "premium", "groupName": "Premium" },
    "relations": [],
    "statistics": {
      "attendance": { "attended": 31, "cancelled": 2, "noShow": 0, "reliabilityPercent": 94 },
      "topServices": [
        { "name": "Klip + Farve", "count": 20 },
        { "name": "Behandling", "count": 8 },
        { "name": "Klip", "count": 3 }
      ],
      "topProducts": [
        { "name": "Sensitiv Shampoo", "count": 6 },
        { "name": "Harkur", "count": 4 }
      ],
      "bookingBehavior": {
        "avgBookingNoticeDays": 10,
        "preferredDay": "Onsdag",
        "preferredTimeSlot": "09:00 - 11:00",
        "onlineBookingRate": 80,
        "avgCancellationNoticeDays": 3
      },
      "loyalty": { "customerSinceYears": 2.4, "daysSinceLastVisit": 65, "churnRisk": "low", "avgIntervalDays": 28 }
    },
    "journal": [
      {
        "id": "entry-1",
        "type": "note",
        "tag": "Advarsel",
        "subtags": ["Allergi"],
        "text": "PPD ALLERGI - Brug KUN PPD-fri farver. Kunden havde allergisk reaktion i 2021.",
        "date": "2022-08-15",
        "author": "Emma"
      }
    ],
    "appointments": { "upcoming": [], "history": [] },
    "giftcards": { "active": [], "expired": [] },
    "activity": []
  },

  "ida-andersen": {
    "id": "ida-andersen",
    "header": {
      "initials": "IA",
      "name": "Ida Andersen",
      "customerSince": "2025-10-01",
      "tags": ["ny"],
      "bookingAllowed": true,
      "facts": {
        "visits": 3,
        "avgIntervalDays": 21,
        "preferredHairdresser": "Sofie M.",
        "totalRevenue": 1650
      }
    },
    "contact": {
      "phone": "+45 11 22 33 44",
      "email": "ida@firma.dk",
      "address": "Osterbrogade 80",
      "zip": "2100",
      "city": "Kobenhavn O"
    },
    "profile": [
      { "title": "Hartype", "value": "Fint - Glat" },
      { "title": "Porositet", "value": "Lav" },
      { "title": "Hovedbund", "value": "Normal" },
      { "title": "Naturlig farve", "value": "Blond (7)" }
    ],
    "marketing": { "emailOptIn": true, "smsOptIn": false },
    "payment": { "requirePrepayment": false, "allowPartialPayment": false },
    "preferences": {
      "preferredHairdresser": "Sofie M.",
      "preferredDays": "Torsdag",
      "specialRequests": ""
    },
    "warnings": [],
    "group": { "groupId": "standard", "groupName": "Standard" },
    "relations": [],
    "statistics": {
      "attendance": { "attended": 3, "cancelled": 0, "noShow": 0, "reliabilityPercent": 100 },
      "topServices": [
        { "name": "Klip", "count": 3 }
      ],
      "topProducts": [],
      "bookingBehavior": {
        "avgBookingNoticeDays": 3,
        "preferredDay": "Torsdag",
        "preferredTimeSlot": "16:00 - 18:00",
        "onlineBookingRate": 100,
        "avgCancellationNoticeDays": 0
      },
      "loyalty": { "customerSinceYears": 0.2, "daysSinceLastVisit": 57, "churnRisk": "medium", "avgIntervalDays": 21 }
    },
    "journal": [],
    "appointments": { "upcoming": [], "history": [] },
    "giftcards": { "active": [], "expired": [] },
    "activity": []
  },

  "katrine-berg": {
    "id": "katrine-berg",
    "header": {
      "initials": "KB",
      "name": "Katrine Berg",
      "customerSince": "2024-04-01",
      "tags": [],
      "bookingAllowed": true,
      "facts": {
        "visits": 12,
        "avgIntervalDays": 28,
        "preferredHairdresser": "Nina K.",
        "totalRevenue": 9600
      }
    },
    "contact": {
      "phone": "+45 55 66 77 88",
      "email": "katrine.b@firma.dk",
      "address": "Vesterbrogade 120",
      "zip": "1620",
      "city": "Kobenhavn V"
    },
    "profile": [
      { "title": "Hartype", "value": "Medium - Bolget" },
      { "title": "Porositet", "value": "Medium" },
      { "title": "Hovedbund", "value": "Normal" },
      { "title": "Naturlig farve", "value": "Morkblond (6)" }
    ],
    "marketing": { "emailOptIn": true, "smsOptIn": true },
    "payment": { "requirePrepayment": false, "allowPartialPayment": false },
    "preferences": {
      "preferredHairdresser": "Nina K.",
      "preferredDays": "Mandag",
      "specialRequests": ""
    },
    "warnings": [],
    "group": { "groupId": "standard", "groupName": "Standard" },
    "relations": [],
    "statistics": {
      "attendance": { "attended": 12, "cancelled": 1, "noShow": 0, "reliabilityPercent": 92 },
      "topServices": [
        { "name": "Klip", "count": 8 },
        { "name": "Farve", "count": 4 }
      ],
      "topProducts": [],
      "bookingBehavior": {
        "avgBookingNoticeDays": 7,
        "preferredDay": "Mandag",
        "preferredTimeSlot": "10:00 - 12:00",
        "onlineBookingRate": 75,
        "avgCancellationNoticeDays": 2
      },
      "loyalty": { "customerSinceYears": 0.8, "daysSinceLastVisit": 84, "churnRisk": "medium", "avgIntervalDays": 28 }
    },
    "journal": [],
    "appointments": { "upcoming": [], "history": [] },
    "giftcards": { "active": [], "expired": [] },
    "activity": []
  },

  "line-frost": {
    "id": "line-frost",
    "header": {
      "initials": "LF",
      "name": "Line Frost",
      "customerSince": "2024-05-01",
      "tags": ["sensitiv"],
      "bookingAllowed": true,
      "facts": {
        "visits": 9,
        "avgIntervalDays": 35,
        "preferredHairdresser": "Nina K.",
        "totalRevenue": 7200
      }
    },
    "contact": {
      "phone": "+45 88 99 00 11",
      "email": "line.f@mail.dk",
      "address": "Amagerbrogade 55",
      "zip": "2300",
      "city": "Kobenhavn S"
    },
    "profile": [
      { "title": "Hartype", "value": "Fint - Glat" },
      { "title": "Porositet", "value": "Hoj" },
      { "title": "Hovedbund", "value": "Sensitiv" },
      { "title": "Naturlig farve", "value": "Lysblond (8)" }
    ],
    "marketing": { "emailOptIn": false, "smsOptIn": false },
    "payment": { "requirePrepayment": false, "allowPartialPayment": false },
    "preferences": {
      "preferredHairdresser": "Nina K.",
      "preferredDays": "Tirsdag",
      "specialRequests": "Sensitiv hovedbund - brug milde produkter"
    },
    "warnings": [
      { "title": "Sensitiv hovedbund", "value": "Brug kun milde, parfumefri produkter" }
    ],
    "group": { "groupId": "standard", "groupName": "Standard" },
    "relations": [],
    "statistics": {
      "attendance": { "attended": 9, "cancelled": 0, "noShow": 0, "reliabilityPercent": 100 },
      "topServices": [
        { "name": "Klip", "count": 7 },
        { "name": "Behandling", "count": 2 }
      ],
      "topProducts": [
        { "name": "Sensitiv Shampoo", "count": 2 }
      ],
      "bookingBehavior": {
        "avgBookingNoticeDays": 10,
        "preferredDay": "Tirsdag",
        "preferredTimeSlot": "13:00 - 15:00",
        "onlineBookingRate": 90,
        "avgCancellationNoticeDays": 0
      },
      "loyalty": { "customerSinceYears": 0.7, "daysSinceLastVisit": 101, "churnRisk": "medium", "avgIntervalDays": 35 }
    },
    "journal": [],
    "appointments": { "upcoming": [], "history": [] },
    "giftcards": { "active": [], "expired": [] },
    "activity": []
  },

  "louise-hansen": {
    "id": "louise-hansen",
    "header": {
      "initials": "LH",
      "name": "Louise Hansen",
      "customerSince": "2023-02-01",
      "tags": ["stamkunde"],
      "bookingAllowed": true,
      "facts": {
        "visits": 18,
        "avgIntervalDays": 42,
        "preferredHairdresser": "Emma L.",
        "totalRevenue": 18900
      }
    },
    "contact": {
      "phone": "+45 33 44 55 66",
      "email": "louise.h@gmail.com",
      "address": "Gammel Kongevej 80",
      "zip": "1850",
      "city": "Frederiksberg C"
    },
    "profile": [
      { "title": "Hartype", "value": "Tykt - Bolget" },
      { "title": "Porositet", "value": "Medium" },
      { "title": "Hovedbund", "value": "Normal" },
      { "title": "Naturlig farve", "value": "Brun (5)" }
    ],
    "marketing": { "emailOptIn": true, "smsOptIn": true },
    "payment": { "requirePrepayment": false, "allowPartialPayment": false },
    "preferences": {
      "preferredHairdresser": "Emma L.",
      "preferredDays": "Onsdag/Torsdag",
      "specialRequests": ""
    },
    "warnings": [],
    "group": { "groupId": "standard", "groupName": "Standard" },
    "relations": [],
    "statistics": {
      "attendance": { "attended": 18, "cancelled": 1, "noShow": 0, "reliabilityPercent": 95 },
      "topServices": [
        { "name": "Klip + Farve", "count": 10 },
        { "name": "Klip", "count": 6 },
        { "name": "Fon", "count": 2 }
      ],
      "topProducts": [
        { "name": "Harkur", "count": 3 }
      ],
      "bookingBehavior": {
        "avgBookingNoticeDays": 14,
        "preferredDay": "Onsdag",
        "preferredTimeSlot": "10:00 - 12:00",
        "onlineBookingRate": 50,
        "avgCancellationNoticeDays": 4
      },
      "loyalty": { "customerSinceYears": 1.9, "daysSinceLastVisit": 75, "churnRisk": "low", "avgIntervalDays": 42 }
    },
    "journal": [],
    "appointments": { "upcoming": [], "history": [] },
    "giftcards": { "active": [], "expired": [] },
    "activity": []
  },

  "maja-petersen": {
    "id": "maja-petersen",
    "header": {
      "initials": "MP",
      "name": "Maja Petersen",
      "customerSince": "2023-01-01",
      "tags": ["stamkunde"],
      "bookingAllowed": true,
      "facts": {
        "visits": 22,
        "avgIntervalDays": 35,
        "preferredHairdresser": "Emma L.",
        "totalRevenue": 24200
      }
    },
    "contact": {
      "phone": "+45 98 76 54 32",
      "email": "maja.p@mail.dk",
      "address": "Jagtvej 150",
      "zip": "2200",
      "city": "Kobenhavn N"
    },
    "profile": [
      { "title": "Hartype", "value": "Medium - Glat" },
      { "title": "Porositet", "value": "Medium" },
      { "title": "Hovedbund", "value": "Normal" },
      { "title": "Naturlig farve", "value": "Morkblond (6)" }
    ],
    "marketing": { "emailOptIn": true, "smsOptIn": true },
    "payment": { "requirePrepayment": false, "allowPartialPayment": false },
    "preferences": {
      "preferredHairdresser": "Emma L.",
      "preferredDays": "Fredag",
      "specialRequests": ""
    },
    "warnings": [],
    "group": { "groupId": "standard", "groupName": "Standard" },
    "relations": [],
    "statistics": {
      "attendance": { "attended": 22, "cancelled": 2, "noShow": 0, "reliabilityPercent": 92 },
      "topServices": [
        { "name": "Klip + Farve", "count": 12 },
        { "name": "Klip", "count": 8 },
        { "name": "Behandling", "count": 2 }
      ],
      "topProducts": [
        { "name": "Olaplex No. 3", "count": 4 },
        { "name": "Shampoo", "count": 2 }
      ],
      "bookingBehavior": {
        "avgBookingNoticeDays": 10,
        "preferredDay": "Fredag",
        "preferredTimeSlot": "14:00 - 16:00",
        "onlineBookingRate": 70,
        "avgCancellationNoticeDays": 3
      },
      "loyalty": { "customerSinceYears": 2.0, "daysSinceLastVisit": 54, "churnRisk": "low", "avgIntervalDays": 35 }
    },
    "journal": [],
    "appointments": { "upcoming": [], "history": [] },
    "giftcards": { "active": [], "expired": [] },
    "activity": []
  },

  "maria-olsen": {
    "id": "maria-olsen",
    "header": {
      "initials": "MO",
      "name": "Maria Olsen",
      "customerSince": "2025-11-01",
      "tags": ["ny"],
      "bookingAllowed": true,
      "facts": {
        "visits": 2,
        "avgIntervalDays": 14,
        "preferredHairdresser": "Sofie M.",
        "totalRevenue": 1100
      }
    },
    "contact": {
      "phone": "+45 44 55 66 77",
      "email": "maria.o@mail.dk",
      "address": "Istedgade 30",
      "zip": "1650",
      "city": "Kobenhavn V"
    },
    "profile": [
      { "title": "Hartype", "value": "Fint - Bolget" },
      { "title": "Porositet", "value": "Medium" },
      { "title": "Hovedbund", "value": "Normal" },
      { "title": "Naturlig farve", "value": "Blond (7)" }
    ],
    "marketing": { "emailOptIn": true, "smsOptIn": false },
    "payment": { "requirePrepayment": false, "allowPartialPayment": false },
    "preferences": {
      "preferredHairdresser": "Sofie M.",
      "preferredDays": "Lordag",
      "specialRequests": ""
    },
    "warnings": [],
    "group": { "groupId": "standard", "groupName": "Standard" },
    "relations": [],
    "statistics": {
      "attendance": { "attended": 2, "cancelled": 0, "noShow": 0, "reliabilityPercent": 100 },
      "topServices": [
        { "name": "Klip", "count": 2 }
      ],
      "topProducts": [],
      "bookingBehavior": {
        "avgBookingNoticeDays": 2,
        "preferredDay": "Lordag",
        "preferredTimeSlot": "10:00 - 12:00",
        "onlineBookingRate": 100,
        "avgCancellationNoticeDays": 0
      },
      "loyalty": { "customerSinceYears": 0.1, "daysSinceLastVisit": 80, "churnRisk": "high", "avgIntervalDays": 14 }
    },
    "journal": [],
    "appointments": { "upcoming": [], "history": [] },
    "giftcards": { "active": [], "expired": [] },
    "activity": []
  },

  "rikke-skov": {
    "id": "rikke-skov",
    "header": {
      "initials": "RS",
      "name": "Rikke Skov",
      "customerSince": "2025-08-01",
      "tags": [],
      "bookingAllowed": true,
      "facts": {
        "visits": 4,
        "avgIntervalDays": 28,
        "preferredHairdresser": "Sofie M.",
        "totalRevenue": 2800
      }
    },
    "contact": {
      "phone": "+45 77 88 99 00",
      "email": "rikke.s@gmail.com",
      "address": "Valby Langgade 100",
      "zip": "2500",
      "city": "Valby"
    },
    "profile": [
      { "title": "Hartype", "value": "Medium - Glat" },
      { "title": "Porositet", "value": "Lav" },
      { "title": "Hovedbund", "value": "Normal" },
      { "title": "Naturlig farve", "value": "Brun (4)" }
    ],
    "marketing": { "emailOptIn": true, "smsOptIn": true },
    "payment": { "requirePrepayment": false, "allowPartialPayment": false },
    "preferences": {
      "preferredHairdresser": "Sofie M.",
      "preferredDays": "Torsdag",
      "specialRequests": ""
    },
    "warnings": [],
    "group": { "groupId": "standard", "groupName": "Standard" },
    "relations": [],
    "statistics": {
      "attendance": { "attended": 4, "cancelled": 0, "noShow": 0, "reliabilityPercent": 100 },
      "topServices": [
        { "name": "Klip", "count": 4 }
      ],
      "topProducts": [],
      "bookingBehavior": {
        "avgBookingNoticeDays": 5,
        "preferredDay": "Torsdag",
        "preferredTimeSlot": "15:00 - 17:00",
        "onlineBookingRate": 100,
        "avgCancellationNoticeDays": 0
      },
      "loyalty": { "customerSinceYears": 0.4, "daysSinceLastVisit": 96, "churnRisk": "medium", "avgIntervalDays": 28 }
    },
    "journal": [],
    "appointments": { "upcoming": [], "history": [] },
    "giftcards": { "active": [], "expired": [] },
    "activity": []
  },

  "sofie-nielsen": {
    "id": "sofie-nielsen",
    "header": {
      "initials": "SN",
      "name": "Sofie Nielsen",
      "customerSince": "2024-03-01",
      "tags": ["vip"],
      "bookingAllowed": true,
      "facts": {
        "visits": 14,
        "avgIntervalDays": 32,
        "preferredHairdresser": "Emma L.",
        "totalRevenue": 12450
      }
    },
    "economy": {
      "currentYear": { "year": 2025, "total": 8450 },
      "lastYear": { "year": 2024, "total": 4000 },
      "avgPerVisit": 604,
      "avgPerMonth": 704,
      "chartData": {
        "categories": ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
        "series": [
          {
            "name": "Services",
            "color": "#00897b",
            "data": [
              { "x": "Mar", "y": 550 },
              { "x": "Jun", "y": 1200 },
              { "x": "Aug", "y": 1600 },
              { "x": "Okt", "y": 550 },
              { "x": "Nov", "y": 1200 },
              { "x": "Dec", "y": 1450 }
            ]
          },
          {
            "name": "Produkter",
            "color": "#1976d2",
            "data": [
              { "x": "Apr", "y": 250 },
              { "x": "Sep", "y": 349 }
            ]
          }
        ]
      },
      "purchases": [
        { "invoice": "#1893", "date": "2025-12-09", "time": "10:30", "employee": "Emma L.", "services": "Klip + Farve", "type": "service", "amount": 1450 },
        { "invoice": "#1846", "date": "2025-11-12", "time": "14:00", "employee": "Emma L.", "services": "Farve", "type": "service", "amount": 1200 },
        { "invoice": "#1799", "date": "2025-10-15", "time": "11:45", "employee": "Emma L.", "services": "Klip", "type": "service", "amount": 550 },
        { "invoice": "#1757", "date": "2025-09-20", "time": "16:00", "employee": "Nina K.", "services": "Olaplex No. 3", "type": "product", "amount": 349 },
        { "invoice": "#1702", "date": "2025-08-15", "time": "09:30", "employee": "Emma L.", "services": "Farve + Klip", "type": "service", "amount": 1600 }
      ]
    },
    "contact": {
      "phone": "+45 23 45 67 89",
      "email": "sofie@email.dk",
      "address": "Hovedgaden 12",
      "zip": "2100",
      "city": "Kobenhavn O"
    },
    "profile": [
      { "title": "Hartype", "value": "Medium - Bolget" },
      { "title": "Porositet", "value": "Medium" },
      { "title": "Hovedbund", "value": "Normal" },
      { "title": "Naturlig farve", "value": "Morkblond (6)" }
    ],
    "marketing": { "emailOptIn": true, "smsOptIn": false },
    "payment": { "requirePrepayment": false, "allowPartialPayment": false },
    "preferences": {
      "preferredHairdresser": "Emma L.",
      "preferredDays": "Tirsdag/Torsdag",
      "specialRequests": "Foretraekker kold tone, ikke for mork"
    },
    "warnings": [
      { "title": "Allergier / Folsomhed", "value": "Parfumeallergi - brug uparfumerede produkter" }
    ],
    "group": { "groupId": "standard", "groupName": "Standard" },
    "relations": [
      { "id": "emil-nielsen", "name": "Emil Nielsen", "initials": "EN", "type": "Barn" },
      { "id": "luna-nielsen", "name": "Luna Nielsen", "initials": "LN", "type": "Barn" }
    ],
    "statistics": {
      "attendance": { "attended": 47, "cancelled": 3, "noShow": 1, "reliabilityPercent": 92 },
      "topServices": [
        { "name": "Klip + Farve", "count": 12 },
        { "name": "Farve", "count": 8 },
        { "name": "Klip", "count": 6 }
      ],
      "topProducts": [
        { "name": "Olaplex No. 3", "count": 5 },
        { "name": "Shampoo", "count": 3 },
        { "name": "Harkur", "count": 2 }
      ],
      "bookingBehavior": {
        "avgBookingNoticeDays": 5,
        "preferredDay": "Tirsdag",
        "preferredTimeSlot": "10:00 - 12:00",
        "onlineBookingRate": 78,
        "avgCancellationNoticeDays": 2
      },
      "loyalty": { "customerSinceYears": 1.8, "daysSinceLastVisit": 13, "churnRisk": "low", "avgIntervalDays": 32 }
    },
    "journal": [
      {
        "id": "entry-1",
        "type": "note",
        "tag": "Note",
        "subtags": [],
        "text": "Kunden foretraekker naturlige farver og onsker lidt ekstra tid til konsultation. Husk at tjekke allergistatus inden farvebehandling.",
        "date": "2025-12-09",
        "author": "Emma"
      },
      {
        "id": "entry-2",
        "type": "note",
        "tag": "Advarsel",
        "subtags": ["Allergi"],
        "text": "PARFUMEALLERGI - Brug kun uparfumerede produkter. Havde reaktion pa standard shampoo ved forste besog.",
        "date": "2024-03-15",
        "author": "Nina"
      },
      {
        "id": "entry-3",
        "type": "colorFormula",
        "tag": "Farveformel",
        "subtags": [],
        "text": "Maltone: Kold\nOxidant: 6%\nFormel: 7/1 + 7/0 (1:1)\nVirketid: 35 min\nPlacering: Hele haret\n\nResultat: Flot ensartet farve, kunden meget tilfreds",
        "date": "2025-11-12",
        "author": "Emma"
      },
      {
        "id": "entry-4",
        "type": "analysis",
        "tag": "Haranalyse",
        "subtags": [],
        "text": "Tilstand: God, let tort i spidserne\nPorositet: Medium\nElasticitet: Normal\n\nAnbefaling: Olaplex behandling hver 6. uge",
        "date": "2025-10-01",
        "author": "Maria"
      }
    ],
    "appointments": {
      "upcoming": [
        {
          "date": "2026-01-14",
          "time": "10:00",
          "service": "Klip + Farve",
          "hairdresser": "Emma L.",
          "duration": "2 timer"
        }
      ],
      "history": [
        { "date": "2025-12-09", "service": "Klip + Farve", "hairdresser": "Emma L.", "duration": "2 timer", "price": 1450 },
        { "date": "2025-11-12", "service": "Farve", "hairdresser": "Emma L.", "duration": "1t 30m", "price": 1200 },
        { "date": "2025-10-15", "service": "Klip", "hairdresser": "Emma L.", "duration": "45 min", "price": 550 },
        { "date": "2025-09-20", "service": "Klip + Behandling", "hairdresser": "Nina K.", "duration": "1t 15m", "price": 750 },
        { "date": "2025-08-15", "service": "Farve + Klip", "hairdresser": "Emma L.", "duration": "2t 15m", "price": 1600 }
      ]
    },
    "giftcards": {
      "active": [
        {
          "id": "GK-2024-0892",
          "type": "giftcard",
          "label": "Gavekort #GK-2024-0892",
          "originalValue": 500,
          "currentBalance": 350,
          "expiresAt": "2026-03-15"
        },
        {
          "id": "10-klip",
          "type": "punchcard",
          "label": "10-klip kort",
          "totalPunches": 10,
          "usedPunches": 7,
          "expiresAt": null
        }
      ],
      "expired": []
    },
    "activity": [
      {
        "date": "2025-12-10",
        "time": "14:00",
        "type": "communication",
        "icon": "chat-text",
        "title": "SMS pamindelse sendt om aftale i morgen",
        "actor": "System",
        "badges": ["auto"]
      },
      {
        "date": "2025-12-10",
        "time": "09:15",
        "type": "customer",
        "icon": "key",
        "title": "Kunde loggede ind via online booking",
        "actor": null,
        "badges": ["online"]
      },
      {
        "date": "2025-12-09",
        "time": "12:30",
        "type": "booking",
        "icon": "check-circle",
        "title": "Booking gennemfort",
        "actor": "Farve + Behandling - Emma L.",
        "badges": []
      },
      {
        "date": "2025-12-09",
        "time": "12:45",
        "type": "edit",
        "icon": "note-pencil",
        "title": "Note tilfojet - Farveformel opdateret",
        "actor": "Emma L.",
        "badges": []
      },
      {
        "date": "2025-11-15",
        "time": "10:00",
        "type": "warning",
        "icon": "warning",
        "title": "Allergi registreret - Parfumeallergi tilfojet til profil",
        "actor": "Nina K.",
        "badges": []
      },
      {
        "date": "2024-03-01",
        "time": "14:22",
        "type": "customer",
        "icon": "user-plus",
        "title": "Kunde oprettet via online booking",
        "actor": "System",
        "badges": []
      }
    ]
  }
}
