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/migrationunder "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/migrationmed "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 viamcp__prod-db__execute. PowerShellGet-Content -Raw | sshmister æ/ø/å. - 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.