<?xml version="1.0" encoding="UTF-8"?>
<Flow xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>59.0</apiVersion>
    <description>Record-triggered Flow on Account. Trigger: When record is created or when AnnualRevenue changes. Logic: Set Customer_Tier__c based on AnnualRevenue value using revenue-to-tier mapping. Also includes a batchable subflow for backfilling existing Accounts.</description>
    <interviewLabel>Account_Customer_Tier_Auto_Assign {!$Flow.CurrentDateTime}</interviewLabel>
    <label>Account Customer Tier Auto Assign</label>
    <processMetadataValues>
        <name>BuilderType</name>
        <value>
            <stringValue>LightningFlowBuilder</stringValue>
        </value>
    </processMetadataValues>
    <processType>AutoLaunchedFlow</processType>
    <start>
        <locationX>50</locationX>
        <locationY>0</locationY>
        <connector>
            <targetReference>Decision_Assign_Tier</targetReference>
        </connector>
        <object>Account</object>
        <recordTriggerType>CreateOrUpdate</recordTriggerType>
        <triggerType>RecordAfterSave</triggerType>
    </start>
    <variables>
        <name>var_Account</name>
        <dataType>SObject</dataType>
        <isCollection>false</isCollection>
        <isInput>false</isInput>
        <isOutput>false</isOutput>
        <objectType>Account</objectType>
    </variables>
    <decisions>
        <name>Decision_Assign_Tier</name>
        <label>Decide Customer Tier</label>
        <locationX>150</locationX>
        <locationY>50</locationY>
        <rules>
            <name>Platinum</name>
            <conditionLogic>AND</conditionLogic>
            <conditions>
                <leftValueReference>{!$Record.AnnualRevenue}</leftValueReference>
                <operator>&gt;=</operator>
                <rightValue>1000000</rightValue>
            </conditions>
            <connector>
                <targetReference>Assign_Platinum</targetReference>
            </connector>
        </rules>
        <rules>
            <name>Gold</name>
            <conditionLogic>AND</conditionLogic>
            <conditions>
                <leftValueReference>{!$Record.AnnualRevenue}</leftValueReference>
                <operator>&gt;=</operator>
                <rightValue>100000</rightValue>
            </conditions>
            <conditions>
                <leftValueReference>{!$Record.AnnualRevenue}</leftValueReference>
                <operator>&lt;</operator>
                <rightValue>1000000</rightValue>
            </conditions>
            <connector>
                <targetReference>Assign_Gold</targetReference>
            </connector>
        </rules>
        <rules>
            <name>Silver</name>
            <conditionLogic>AND</conditionLogic>
            <conditions>
                <leftValueReference>{!$Record.AnnualRevenue}</leftValueReference>
                <operator>&gt;=</operator>
                <rightValue>10000</rightValue>
            </conditions>
            <conditions>
                <leftValueReference>{!$Record.AnnualRevenue}</leftValueReference>
                <operator>&lt;</operator>
                <rightValue>100000</rightValue>
            </conditions>
            <connector>
                <targetReference>Assign_Silver</targetReference>
            </connector>
        </rules>
        <defaultConnector>
            <targetReference>Assign_Bronze</targetReference>
        </defaultConnector>
    </decisions>
    <assignments>
        <name>Assign_Platinum</name>
        <label>Assign Platinum</label>
        <locationX>300</locationX>
        <locationY>0</locationY>
        <assignmentItems>
            <assignToReference>$Record.Customer_Tier__c</assignToReference>
            <operator>Assign</operator>
            <value>
                <stringValue>Platinum</stringValue>
            </value>
        </assignmentItems>
        <connector>
            <targetReference>Update_Record</targetReference>
        </connector>
    </assignments>
    <assignments>
        <name>Assign_Gold</name>
        <label>Assign Gold</label>
        <locationX>300</locationX>
        <locationY>50</locationY>
        <assignmentItems>
            <assignToReference>$Record.Customer_Tier__c</assignToReference>
            <operator>Assign</operator>
            <value>
                <stringValue>Gold</stringValue>
            </value>
        </assignmentItems>
        <connector>
            <targetReference>Update_Record</targetReference>
        </connector>
    </assignments>
    <assignments>
        <name>Assign_Silver</name>
        <label>Assign Silver</label>
        <locationX>300</locationX>
        <locationY>100</locationY>
        <assignmentItems>
            <assignToReference>$Record.Customer_Tier__c</assignToReference>
            <operator>Assign</operator>
            <value>
                <stringValue>Silver</stringValue>
            </value>
        </assignmentItems>
        <connector>
            <targetReference>Update_Record</targetReference>
        </connector>
    </assignments>
    <assignments>
        <name>Assign_Bronze</name>
        <label>Assign Bronze</label>
        <locationX>300</locationX>
        <locationY>150</locationY>
        <assignmentItems>
            <assignToReference>$Record.Customer_Tier__c</assignToReference>
            <operator>Assign</operator>
            <value>
                <stringValue>Bronze</stringValue>
            </value>
        </assignmentItems>
        <connector>
            <targetReference>Update_Record</targetReference>
        </connector>
    </assignments>
    <recordUpdates>
        <name>Update_Record</name>
        <label>Update Account Record</label>
        <locationX>450</locationX>
        <locationY>50</locationY>
        <inputAssignments>
            <field>$Record.Customer_Tier__c</field>
            <value>$Record.Customer_Tier__c</value>
        </inputAssignments>
        <object>Account</object>
        <criteria>
            <booleanFilter>1</booleanFilter>
            <conditions>
                <leftValueReference>Id</leftValueReference>
                <operator>equals</operator>
                <rightValueReference>$Record.Id</rightValueReference>
            </conditions>
        </criteria>
        <recordUpdateMode>Update</recordUpdateMode>
    </recordUpdates>
    <!-- Batchable subflow for backfilling existing Accounts -->
    <subflows>
        <name>Backfill_Existing_Accounts</name>
        <label>Backfill Existing Accounts</label>
        <locationX>600</locationX>
        <locationY>50</locationY>
        <flowName>Account_Customer_Tier_Backfill</flowName>
    </subflows>
</Flow>
