Skip to content

Flow Name: On Person Account: Members Buyer Groups assignment

Last Updated: 2025-08-13 Source Code: On_Person_Account_Members_Buyer_Groups_assignment.flow-meta.xml

API Name: On_Person_Account_Members_Buyer_Groups_assignment Status: Active Type: Custom Trigger: After Person Account create/update when buyer-related fields change

Business Purpose

Ensures Person Accounts are assigned to the correct buyer group based on their membership status and type, maintaining accurate pricing and product access. PR-33436 changed logic to ensure only one buyer group per account.

Process Flow

  1. Triggers when Person Account buyer-related fields change:
  2. Membership_category__c, Member_Type__c, Membership_status__c
  3. Is_a_Fellow__c, Fellow_Designation__c
  4. Buyer_Account_Created__c, Buyer_Account_Enabled__c, PersonMailingCountryCode

  5. Remove Old Assignments:

  6. Retrieves membership-related buyer groups (contains "Member" or "General Buyer")
  7. Gets all current BuyerGroupMember assignments
  8. Deletes existing assignments to ensure single group membership

  9. Determine New Buyer Group:

  10. Fellows: If Is_a_Fellow__c = true AND designation NOT "Deceased" or "Former" → "Fellow Buyer Group"
  11. Individual Non-Member: If status Expired/Never member AND country = US → "Individual Non Member"
  12. Associate Member: Member_Type__c = "Associate Member"
  13. Career Starter: Member_Type__c = "Career Starter Member"
  14. Licensed NP Student: Member_Type__c = "Licensed NP Student Member"
  15. Lifetime Member: Member_Type__c = "Lifetime Member"
  16. Student (Local): Category = "All Individual Members" AND type contains "Student" but NOT "International"
  17. NP Member: Member_Type__c = "NP Member"
  18. Retired Member: Member_Type__c = "Retired Member"

  19. Assign or Route to Country Groups:

  20. If matched to member type group: Creates BuyerGroupMember
  21. Else: Calls Country_Buyer_Group_Assignment subflow for international tier assignment
📊 Click to view Process Flow Diagram
flowchart TD
    Start([Start: Account Create/Update<br/>After Save<br/>Person Account & Buyer]) --> GetBuyerGroups[Get Membership Buyer Groups:<br/>Contains 'Member' or 'General Buyer']

    GetBuyerGroups --> CheckBuyerGroups{Buyer Groups<br/>Found?}
    CheckBuyerGroups -->|No| End([End])
    CheckBuyerGroups -->|Yes| GetAssignments[Get Existing BuyerGroupMember<br/>Records for this Account]

    GetAssignments --> CheckAssignments{Assignments<br/>Found?}
    CheckAssignments -->|Yes| Unassign[Delete Existing<br/>BuyerGroupMember Records]
    CheckAssignments -->|No| CheckNonMember{Check Status}

    Unassign --> CheckNonMember

    CheckNonMember -->|Fellow Active| GetFellow[Get Fellow Buyer Group]
    CheckNonMember -->|Expired/Never Member<br/>& US Address| GetNonMember[Get Individual Non-Member<br/>Buyer Group]
    CheckNonMember -->|Active Member| CheckMemberType{Member Type?}

    CheckMemberType -->|Associate Member| GetAssociate[Get Associate Member Group]
    CheckMemberType -->|Career Starter| GetCareer[Get Career Starter Group]
    CheckMemberType -->|Licensed NP Student| GetLicensed[Get Licensed NP Student Group]
    CheckMemberType -->|Lifetime Member| GetLifetime[Get Lifetime Member Group]
    CheckMemberType -->|Student Local| GetStudent[Get Student Member Group]
    CheckMemberType -->|NP Member| GetNP[Get NP Member Group]
    CheckMemberType -->|Retired Member| GetRetired[Get Retired Member Group]
    CheckMemberType -->|Other| BuyerGroupFound{Any Group Found?}

    GetFellow --> BuyerGroupFound
    GetNonMember --> BuyerGroupFound
    GetAssociate --> BuyerGroupFound
    GetCareer --> BuyerGroupFound
    GetLicensed --> BuyerGroupFound
    GetLifetime --> BuyerGroupFound
    GetStudent --> BuyerGroupFound
    GetNP --> BuyerGroupFound
    GetRetired --> BuyerGroupFound

    BuyerGroupFound -->|Yes| CreateAssignment[Create BuyerGroupMember:<br/>Assign Account to Group]
    BuyerGroupFound -->|No| CallCountry[Call Subflow:<br/>Country_Buyer_Group_Assignment]

    CreateAssignment --> CallCountry
    CallCountry --> End

    style Start fill:#e1f5ff
    style GetBuyerGroups fill:#f0e1ff
    style GetAssignments fill:#f0e1ff
    style GetFellow fill:#f0e1ff
    style GetNonMember fill:#f0e1ff
    style GetAssociate fill:#f0e1ff
    style GetCareer fill:#f0e1ff
    style GetLicensed fill:#f0e1ff
    style GetLifetime fill:#f0e1ff
    style GetStudent fill:#f0e1ff
    style GetNP fill:#f0e1ff
    style GetRetired fill:#f0e1ff
    style CheckBuyerGroups fill:#fff4e1
    style CheckAssignments fill:#fff4e1
    style CheckNonMember fill:#fff4e1
    style CheckMemberType fill:#fff4e1
    style BuyerGroupFound fill:#fff4e1
    style Unassign fill:#ffe1e1
    style CreateAssignment fill:#ffe1e1
    style CallCountry fill:#f0e1ff
    style End fill:#e1f5ff

Key Business Rules

  • Only processes Person Accounts (IsPersonAccount = true)
  • Requires IsBuyer = true
  • Account can have only ONE buyer group at a time (PR-33436)
  • Fellows take priority over all other assignments
  • Individual Non-Member only applies to US accounts with expired/never member status
  • Falls back to country-based international tier if no member type matches

Dependencies

  • Objects: Account (Person), BuyerGroup, BuyerGroupMember
  • Subflows: Country_Buyer_Group_Assignment
  • Buyer Groups: Fellow, Individual Non Member, Associate Member, Career Starter, Licensed NP Student, Lifetime Member, Student Member, NP Member, Retired Member, General Buyer
  • Fields: Member_Type__c, Membership_category__c, Membership_status__c, Is_a_Fellow__c, Fellow_Designation__c

Changes

PR-33436: Changed buyer group logic to ensure only one buyer group per account.

⚠️ Pre-Go-Live Concerns

CRITICAL - Fix Before Go-Live

  • Hardcoded Buyer Group Names: All buyer group names are hardcoded strings - should use Custom Metadata
  • Missing Error Handling: No fault paths for buyer group creation failures
  • Race Condition Risk: Rapid field changes could cause multiple group assignments before delete completes

HIGH - Address Soon After Go-Live

  • Incomplete Member Types: Flow assumes all possible member types are covered - new types require flow update
  • Performance: Deletes ALL membership buyer groups before assigning new one - could be inefficient
  • No Validation: Doesn't verify buyer groups exist before attempting assignment

MEDIUM - Future Enhancement

  • Logging: Add error logging when buyer groups not found
  • Audit Trail: Track buyer group changes for compliance reporting
  • Flexible Configuration: Use Custom Metadata to define buyer group assignment rules

LOW - Monitor

  • Missing Assignments: Monitor for accounts without buyer groups (edge cases)
  • Multiple Groups: Verify PR-33436 fix works - check for accounts with multiple buyer groups
  • Country Subflow: Ensure Country_Buyer_Group_Assignment subflow is active

Maintenance Notes

Complexity: High - Complex decision tree with 8+ member type paths plus subflow call Review Schedule: Review monthly when new member types or buyer groups are added Critical Business Logic: Controls pricing and product access - changes must be carefully tested PR-33436 Impact: Major logic change to enforce single group - verify no regression