In PolicyCenter v10 on-premise, I have this situation with a field (let's call it FieldA) on PolicyContactRole which is revisioned and account syncable.
The business would like the field on the account to only be updated if the PolicyChange is bound and I so far have found no way to prevent the Account level field from being updated when a draft PolicyChange is saved.
Does anyone know if there is a way to only allow updates to the account level field if the policy transaction is bound?
I have looked at all the documentation around this and in the AccountContactRoleToPolicyContactRoleSyncedField.gs
or PolicyNamedInsuredAccountSyncableImpl.gs
classes and I find no place where I could reasonably expect to be able to limit the syncing of the field to only when the PolicyChange is bound.
The code in gsrc/gw/api/domain/account/AbstractAccountSyncableImpl.gs controls the general orchestration of account syncables across the policy transaction lifecycle. In your question you say the sync happens when the draft is saved, but I believe it's more correct to say it happens when the transaction is quoted. You can override/edit the implementation of the prepareForQuoteImpl() method to not sync at all, or only under certain circumstances.
Customers who I've worked with who have made these type of changes have, in some cases, reverted those changes because the overall change in behavior wasn't workable for them. The issue you're flagging - that "what if" changes get sync'd to the account - is a known issue.
The better way to handle this is to NOT ALLOW users to overtype a contact or address. That way it doesn't overwrite the Account-level information. Address changes should ALWAYS be done by creating a new address and referencing that new address where appropriate. Contact changes (ie name, other sync'd fields) should ONLY be done if they are business-relevant (ie name change on marriage/divorce).