Prospect to Customer Conversion Flow

Oversigt over konverteringsprocessen fra Salg til Kunde

flowchart TD
    Start([Start: convertToCustomer]) --> Verify{Skip Market<br/>Verification?}
    Verify -->|No| MarketVerify[Verify Prospect Delivery<br/>with Market Service]
    Verify -->|Yes| PrepareData
    MarketVerify --> PrepareData
    
    PrepareData[Prepare Customer Data<br/>from Prospect] --> FindCustomer{Find Existing Customer}
    
    FindCustomer --> CheckAltNo{Has alternative_<br/>customer_number?}
    CheckAltNo -->|Yes| SearchAltNo[Search by<br/>alternative_customer_number]
    CheckAltNo -->|No| CheckCustNo
    
    SearchAltNo --> CustomerFound{Found?}
    
    CheckCustNo{Has customer_<br/>number?} -->|Yes| SearchCustNo[Search by<br/>customer_number]
    CheckCustNo -->|No| CheckCVR
    
    SearchCustNo --> CreateWithNo[Create new Customer<br/>with given customer_number]
    
    CheckCVR{Has CVR?} -->|Yes| CheckDummyCVR{Is Dummy CVR?<br/>11111111/00000000}
    CheckCVR -->|No| CheckCPR
    
    CheckDummyCVR -->|Yes| NewCustomer[New Customer Instance]
    CheckDummyCVR -->|No| SearchCVR[Search by CVR]
    SearchCVR --> CustomerFound
    
    CheckCPR{Has CPR?<br/>birthdate + last 4} --> CheckDummyCPR{Is Dummy CPR?<br/>1111/0000/xxxx}
    CheckDummyCPR -->|Yes| NewCustomer
    CheckDummyCPR -->|No| SearchCPR[Search by<br/>birthdate + cpr_last_four]
    SearchCPR --> CustomerFound
    
    CustomerFound -->|Found| ExistingCustomer[Use Existing Customer]
    CustomerFound -->|Not Found| NewCustomer
    CreateWithNo --> NewCustomer
    
    ExistingCustomer --> UpdateCustomer{Update Customer Data}
    NewCustomer --> UpdateCustomer
    
    UpdateCustomer --> IsNew{Is New<br/>Customer?}
    IsNew -->|Yes| GenerateNo[Generate customer_number<br/>Generate password<br/>Set newsletter preference]
    IsNew -->|No| KeepExisting[Keep existing<br/>customer_number & password]
    
    GenerateNo --> UpdateFields
    KeepExisting --> UpdateFields[Update fields if dummy/null:<br/>- CPR if dummy<br/>- CVR if dummy/null<br/>- Alternative CPR if dummy<br/>- industry_code if null<br/>- customer_type if null]
    
    UpdateFields --> SaveCustomer[Save Customer]
    SaveCustomer --> HandleAddress
    
    HandleAddress{Handle Address} --> CheckDAR{Same DAR<br/>reference?}
    CheckDAR -->|Yes & Customer exists| ReuseAddr[Reuse Customer's<br/>existing address]
    CheckDAR -->|No| CreateAddr[Create new Address]
    
    ReuseAddr --> CheckAltAddr
    CreateAddr --> CheckAltAddr
    
    CheckAltAddr{Has alternative_<br/>address in sale?} -->|Yes| CreateAltAddr[Create new Alternative<br/>Address record]
    CheckAltAddr -->|No| NoAltAddr[No alternative address]
    
    CreateAltAddr --> DecideAgreement
    NoAltAddr --> DecideAgreement
    
    DecideAgreement{Decide Agreement} --> CheckAgrNo{agreement.number<br/>value?}
    
    CheckAgrNo -->|null| CreateNewAgr
    CheckAgrNo -->|'new'| CreateNewAgr
    CheckAgrNo -->|'use_latest'| HasAgreements{Customer has<br/>agreements?}
    CheckAgrNo -->|specific number| AgrExists{Agreement<br/>exists?}
    
    HasAgreements -->|Yes| ReuseLatest[Reuse latest<br/>standard agreement]
    HasAgreements -->|No| CreateNewAgr
    
    AgrExists -->|Yes| ReuseSpecific[Reuse specific<br/>agreement]
    AgrExists -->|No| CreateNewAgr[Create New Agreement]
    
    CreateNewAgr --> SetReminderNew{Set reminder_template}
    SetReminderNew -->|'use_latest'| UseConfig[Use config default]
    SetReminderNew -->|Other| UseSale[Use from sale or config]
    
    UseConfig --> NewAgrData[New Agreement Data:<br/>- billing_interval<br/>- binding_period<br/>- payment_term<br/>- billing_type<br/>- reminder_template<br/>etc.]
    UseSale --> NewAgrData
    
    NewAgrData --> UseAltAddr{Has alternative_<br/>address?}
    UseAltAddr -->|Yes| SetBillingAlt[Set billing address to<br/>alternative address]
    UseAltAddr -->|No| SetBillingMain[Set billing address to<br/>main address]
    
    SetBillingAlt --> AddToAgreement
    SetBillingMain --> AddToAgreement
    
    ReuseLatest --> KeepAgrSettings[Keep existing<br/>agreement settings<br/>including reminder_template]
    ReuseSpecific --> KeepAgrSettings
    
    KeepAgrSettings --> AddToAgreement[Add to Agreement:<br/>- Subscriptions<br/>- Collection Subscriptions<br/>- Delivery<br/>- Product Timeline]
    
    AddToAgreement --> CheckBank{Should create<br/>bank account?}
    
    CheckBank -->|Customer has no<br/>bank accounts &<br/>sale has bank data| CreateBank[Create Bank Account]
    CheckBank -->|Customer already<br/>has bank account| SkipBank[Skip bank account]
    CheckBank -->|No bank data<br/>in sale| SkipBank
    
    CreateBank --> CopyLogs
    SkipBank --> CopyLogs[Copy logs from<br/>prospect to customer]
    
    CopyLogs --> MarkTransferred[Mark prospect as<br/>transferred_at = now]
    
    MarkTransferred --> FireEvents[Fire Events:<br/>- ConvertedToCustomer<br/>- CustomerCreatedEvent]
    
    FireEvents --> End([Return Customer])
    
    style Start fill:#e1f5e1
    style End fill:#e1f5e1
    style NewCustomer fill:#ffe1e1
    style ExistingCustomer fill:#e1e5ff
    style CreateNewAgr fill:#fff4e1
    style ReuseLatest fill:#e1f5ff
    style ReuseSpecific fill:#e1f5ff

Nøgleregler

Kunde-matching (prioriteret rækkefølge)

  1. alternative_customer_number → firstOrNew
  2. customer_number → firstOrNew (opretter ny med dette nummer hvis ikke fundet)
  3. CVR (ikke dummy) → firstOrNew
  4. CPR (ikke dummy) → firstOrNew
  5. Dummy-værdier → Opret altid ny kunde

Dummy-værdier

  • CVR dummy: 11111111, 00000000
  • CPR dummy: 1111, 0000, xxxx, null
  • Fødselsdato dummy: 111111, 000000, xxxxxx, null

Aftale-logik

  • Ny aftale oprettes hvis: null, 'new', kunde har ingen aftaler, eller specifikt nummer ikke findes
  • Aftale genbruges hvis: 'use_latest' eller specifikt eksisterende aftalenummer
  • Ved genbrug: reminder_template og andre indstillinger forbliver uændrede
  • Ved ny aftale: reminder_template sættes fra salg eller config

Adresse-logik

  • Hovedadresse genbruges kun hvis samme DAR-reference
  • Alternativ adresse oprettes altid som ny record hvis angivet i salg
  • Ved ny aftale: Alternativ adresse bruges som billing-adresse
  • Ved genbrugt aftale: Alternativ adresse oprettes men bruges ikke

Bankkonto

  • Oprettes kun hvis kunde IKKE har nogen bankkonti og salget har bankdata
  • Eksisterende bankkonti genbruges altid

Fandt du hvad du søgte?

Vi bestræber os på at denne side kan besvare de fleste spørgsmål du måtte have om CUBS. Hvis du alligevel mangler noget, så er du velkommen til at kontakte vores support.

Mangler du noget indhold, som var i den gamle wiki? Klik her for gammel wiki

Kontakt support