I can address all three aspects of your issue systematically:
1. Custom termination reason codes not updating asset status:
The core problem is that your custom reason codes are missing the integration event trigger configuration. Standard Workday reason codes have built-in event triggers that automatically fire status update processes, but custom reason codes require explicit event binding. Navigate to Lease Management Setup > Reason Code Configuration and for each custom code, you need to add an event trigger:
<ReasonCode id="CONTRACT_RENEGOTIATION">
<TargetStatus>PENDING_RENEWAL</TargetStatus>
<AssetAction>HOLD</AssetAction>
<EventTrigger>ASSET_STATUS_UPDATE</EventTrigger>
<TriggerTiming>IMMEDIATE</TriggerTiming>
</ReasonCode>
Without the EventTrigger element, the termination completes but no downstream status update process is initiated.
2. Standard codes work as expected:
Standard codes work because they’re pre-configured with all necessary event bindings and status transition mappings in Workday’s base configuration. When you create custom reason codes, you’re essentially creating new data values without the associated process automation unless you explicitly configure it. The standard codes also have default fallback logic that ensures status updates happen even if some configuration is missing, which custom codes don’t benefit from.
3. Checked mapping and routing:
Your status mapping looks correct, but mapping alone isn’t sufficient. You also need to verify the routing configuration in the termination business process. Go to Business Process Configuration > Lease Termination and check the “Asset Status Update” step. There should be a condition that determines which reason codes trigger this step:
<ProcessStep id="UPDATE_ASSET_STATUS">
<Condition>
<ReasonCodeList>
<Include>STANDARD_CODES</Include>
<Include>CONTRACT_RENEGOTIATION</Include>
<Include>ASSET_UPGRADE</Include>
</ReasonCodeList>
</Condition>
</ProcessStep>
If your custom codes aren’t explicitly listed in the Include section, the status update step will be skipped for those terminations.
Additionally, check the asset lifecycle configuration. Custom status values like PENDING_RENEWAL need to be defined not just in the picklist but also in the asset lifecycle state machine. Navigate to Asset Management > Lifecycle Configuration and ensure PENDING_RENEWAL is registered as a valid lifecycle state with the appropriate entry and exit conditions.
The most critical missing piece is likely the event trigger configuration on your custom reason codes. Add that first, then verify your business process includes your custom codes in the routing logic, and finally ensure your custom status values are properly registered in the asset lifecycle state machine. After making these changes, test with a new termination - existing terminated assets may need manual status correction.