In one of our test accounts, we have a non-consumable in-app purchase that has been refunded (so the user should not get the benefits of said IAP) but the codeless IAP system still reports the IAP as purchased.
The refund has been requested on friday (and rightfully granted by Google the same day). Even if there is some cache involved, three days seem quite long.
The maximum caching period is indeed 3 days. The receipt for the product should be empty when the purchase state is refreshed. I’m not sure how codeless validates that, but when using scripting each product has a .hasReceipt property which then returns false.