Medlemsimport fra gammelt system

CSV-import af medlemmer fra YOGO, MomoYoga, Holdsport m.fl.

Sidst opdateret 2026-05-18·Admin-stier: Manuel proces — kontakt support med eksport-fil. Resultatet ses i /admin/members og /admin/memberships.

CSV/Excel-import af medlemmer fra Holdsport, Yogo, MomoYoga, Eversports m.fl. — vi gør det manuelt. Importerer brugere, aktive abonnementer, faste pladser og børnetilmeldinger; opretter familie-relationer via deltagerprofiler. Stripe-aftaler oprettes ved kundens første betalingslink-klik.

Kernebegreber

  • Medlemsimport vs. AI-migrering: Medlemsimport (denne guide) flytter MEDLEMSDATA via support. AI-migrering (migrering-guide) flytter STUDIO-OPSÆTNING (holdtyper/priser) under onboarding. Begge eksisterer parallelt.
  • First-login password: Importerede brugere oprettes UDEN password_hash. Når kunden taster email + valgfri adgangskode på login-siden, gemmes det indtastede password som deres rigtige password, og en bekræftelses-email sendes med 1-times auto-login-link.
  • Familie-modellering: Forælder bliver bruger, børn bliver deltagerprofiler under forælder. Børnenes season_registrations får participant_profile_id. 2+ voksne på samme email → primær voksen får email, øvrige får plus-adresseret email (local+navn@domain).
  • Migreret uden Stripe: Importerede medlemskaber er aktive men har ingen Stripe-aftale. payment_reference markerer dem så de fremgår i /admin/memberships/migration under "Uden betalingsaftale".

Sådan gør du

  • Bed kunden eksportere fra deres gamle system:
  • Holdsport: Klub → Klubmedlemmer → Eksport (CSV/.xlsx)
  • Yogo: People → Customers → Export (incl. Active memberships + punch cards)
  • MomoYoga: Backend → Reports → Members → CSV
  • Eversports: Studio Manager → Customers → Export (incl. Active products)
  • Modtag eksport via support-chat eller email; bed om ALLE relevante kolonner inkl. hold-tilmeldinger og status.
  • Mappér og importér (support-side): match holdnavne mod class_templates / season_classes; vælg startdato (typisk 1. i indeværende måned); generer SQL via reference-script.
  • Verificér i prod: SELECT count på users / memberships / fixed_spot_subscriptions / season_registrations / participant_profiles for tenant + payment_reference.
  • Kommunikér til kunden: Send "log ind på din normale email — første password du indtaster bliver gemt"-besked. Eller brug bulk-send fra /admin/memberships/migration med "Behold deres nuværende plan" → kunden auto-logges ind, kommer direkte til Stripe-checkout, ny subscription oprettes, gammelt importeret medlemskab markeres inaktivt.

Hvad bliver importeret

  • Bruger-konto: email, navn, telefon, fødselsdato (adresse gemmes IKKE — schema mangler felter)
  • Aktivt abonnement: matched mod tenantens pricing_plans (1 flexhold, 2 flexhold, 10-klippekort, Børn&Familie m.fl.)
  • Fast plads: fixed_spot_subscriptions linket til class_template + day_of_week + start_time
  • Sæson-tilmelding: season_registrations linket til season_class + participant_profile_id
  • Klubstab/instruktør-rolle hvis status-kolonne indikerer det

Hvad bliver IKKE importeret

  • Stripe/MobilePay-aftaler (oprettes ved kundens checkout via medlemskabsmigration-flow)
  • Adgangskoder (brugere oprettes med password_hash=NULL → first-login flow)
  • Bookinghistorik (vi kan importere fremtidige bookinger hvis CSV indeholder dem)
  • Brugte klippekort
  • Adresser (ingen felter i users-tabellen)

Regler / grænser

  • Email er unik pr. tenant: dubletter springes over (eller får plus-adresse hvis flere voksne).
  • Familie-modellering: forælder + 1-2 børn → 1 user + N+1 participant_profiles. 2+ voksne → primær voksen + N synthetic emails. memberships kan IKKE linkes til participant_profile (skema-begrænsning), så ekstra voksne SKAL have egen user.
  • start_date sættes typisk til 1. i indeværende måned (kunden har betalt i gammelt system); end_date til 1. i næste måned så Stripe-træk falder sammen med deres normale betalingsdag.
  • payment_reference="holdsport-import YYYY-MM-DD" eller tilsvarende på alle importerede records — bruges til filtrering i medlemskabsmigration-værktøjet.
  • UTF-8: SQL-filer skal eksekveres med cat | ssh "docker exec -i -e PGCLIENTENCODING=UTF8 ..." eller via mcp__prod-db__execute. PowerShell Get-Content -Raw | ssh mister æ/ø/å.
  • Pernille/admin skal færdiggøre Stripe Connect FØR bulk-send af invitation-emails — ellers fejler kundens checkout.

FAQ

  • Hvor lang tid tager en typisk import? — 100-250 medlemmer: 1-2 hverdage. Større lister eller komplekse familie-mappinger: lidt længere.
  • Hvornår starter de importerede medlemskaber? — 1. i indeværende måned (allerede betalt i gammelt system); første træk hos os = 1. i næste måned.
  • Hvad sker der hvis et medlem allerede findes hos jer? — Vi springer dem over (match på email). Manuelt tilføj importeret medlemskab fra medlemsprofilen hvis nødvendigt.
  • Importerer I bookinger? — Fremtidige bookinger ja hvis CSV indeholder dem; historiske typisk ikke.
  • Hvordan logger kunderne ind første gang? — De taster email + valgfri adgangskode på login-siden. Systemet gemmer det password og sender bekræftelses-email med 1-times auto-login-link. Næste gang er det normal email + password-login.
  • Hvad hvis kunderne ikke kan finde ud af det? — Send nulstillingslink fra medlemsprofilen, ELLER send bulk auto-login + checkout-link via /admin/memberships/migration (medlemskabsmigration-guide).
  • Hvordan håndteres familier? — Børn → deltagerprofiler under forælder. 2+ voksne på samme email → primær voksen får email, øvrige plus-adresseres (jane+anna@example.com). Test plus-addressing før go-live (ikke alle custom domæner understøtter det).
  • Kan kunden bruge sin gamle Yogo/Holdsport-adgangskode? — Nej. Vores system kender ikke gammelt password. Kunden taster bare en valgfri ny adgangskode første gang og den gemmes.

Klar til at prøve det selv?

14 dages gratis prøveperiode. Ingen kreditkort. Ingen binding.

Opret dit studio

Eller se alle 53 guides