Transform not working as expected

Hello,

This morning I came across the following situation. We have a group of users who have and end date of 2023-09-26. In one of our Workday sources it would have moved this user to a PreTerm lifecycle state on 2023-09-27. When the same logic was applied to our SecZetta Source it moved the users to PreTerm on 2023-09-26. This in turn caused the users Active Directory to be disabled. The workday logic is working exactly as we would expect it to be working. I am trying to figure out why these 2 identity profiles are behaving so differently while using the exact same logic.

SecZetta Transform

{
    "id": "1bb23791-6bfd-43bb-aea1-4bd3986f77bf",
    "name": "Transform - DateCompare - SecZetta Preterm LCS",
    "type": "dateCompare",
    "attributes": {
        "firstDate": {
            "type": "dateFormat",
            "attributes": {
                "input": {
                    "attributes": {
                        "input": {
                            "attributes": {
                                "expression": "+1d/h",
                                "roundUp": true,
                                "input": {
                                    "attributes": {
                                        "input": {
                                            "attributes": {
                                                "values": [
                                                    {
                                                        "attributes": {
                                                            "attributeName": "engagement_end_date",
                                                            "sourceName": "SecZetta Assignments"
                                                        },
                                                        "type": "accountAttribute"
                                                    },
                                                    "2999-12-13"
                                                ]
                                            },
                                            "type": "firstValid"
                                        },
                                        "inputFormat": "yyyy-MM-dd",
                                        "outputFormat": "ISO8601"
                                    },
                                    "type": "dateFormat"
                                }
                            },
                            "type": "dateMath"
                        },
                        "begin": 0,
                        "end": 10
                    },
                    "type": "substring"
                },
                "inputFormat": "yyyy-MM-dd",
                "outputFormat": "ISO8601"
            }
        },
        "secondDate": {
            "attributes": {
                "id": "Transform - DateMath - getCurrentDate"
            },
            "type": "reference"
        },
        "operator": "gt",
        "positiveCondition": "active",
        "negativeCondition": "preterm"
    },
    "internal": false
}

Workday Transform

{
    "id": "8683196e-e6a4-4851-aaa7-32bf5cbfd499",
    "name": "Transform - DateCompare - Determine Preterm LCS",
    "type": "dateCompare",
    "attributes": {
        "firstDate": {
            "type": "dateFormat",
            "attributes": {
                "input": {
                    "attributes": {
                        "input": {
                            "attributes": {
                                "expression": "+1d/h",
                                "roundUp": true,
                                "input": {
                                    "attributes": {
                                        "input": {
                                            "attributes": {
                                                "values": [
                                                    {
                                                        "attributes": {
                                                            "attributeName": "Term Date__c",
                                                            "sourceName": "Workday Production"
                                                        },
                                                        "type": "accountAttribute"
                                                    },
                                                    "2999-12-13"
                                                ]
                                            },
                                            "type": "firstValid"
                                        },
                                        "inputFormat": "yyyy-MM-dd",
                                        "outputFormat": "ISO8601"
                                    },
                                    "type": "dateFormat"
                                }
                            },
                            "type": "dateMath"
                        },
                        "begin": 0,
                        "end": 10
                    },
                    "type": "substring"
                },
                "inputFormat": "yyyy-MM-dd",
                "outputFormat": "ISO8601"
            }
        },
        "secondDate": {
            "attributes": {
                "id": "Transform - DateMath - getCurrentDate"
            },
            "type": "reference"
        },
        "operator": "gt",
        "positiveCondition": "active",
        "negativeCondition": "preterm"
    },
    "internal": false
}

Literally, makes no sense as codes are identical. At what time these agregations occurs? I had problems but in a WS after operation rule, where date filter was completed from system date. I realized that VA time was in GMT-0, so as aggregation was triggered everyday at 10pm, code resulted in next day, because for VA it was the next day at 1am (we are in gmt-3). Our solution was simply trigger aggregation at 8.59pm. Strange is that if it was the case, it should happen to both sources.

Based on the logs both the WD and SZ triggers were at 4am CDT.

From my experience, I heard there is some concerns over Time zone in Workday, did you check this issue with Workday team, if yes then what is their response.

since the Workday data center is on the west coast (Portland OR), there is sometimes a 2 hour diff showing on screen referring to transactions, etc. but mostly they reflect the “user” or ISU time. The API time/dates are usually shown with a -7 or -8 GMT offset, so time-zone neutral

If you are just using dates, then yeah, it doesn’t make sense as to why those are processing differently (unless the date that appears via UI isn’t the same date that gets passed to the transform, for some reason? :woman_shrugging:) .

If you are using the active/inactive flag as well as dates – then Workday only considers a user inactive at midnight the day after their end date (Workday system time). I don’t know about SecZetta, but I would assume a similar situation with an active/inactive flag, but they set the user to inactive on the user end date instead.

Workday end date = 9/26, flag changes from active–>inactive @ midnight PST on 9/27
SecZetta end date = 9/26, flag changes from active–>inactive @ (some time on) 9/26

That would make since. I know that we do pull in the termination event from Workday.