In your example, you have:
If the month of Compliance Date is December, your formula is going to try to use 23 as the month parameter, which is invalid. You have to check for year rollover.
But keep in mind that this is only computed when the list item is added or updated. You aren’t comparing against the current date, but if you were, it would not dynamically update each day. Only on a save of the list item.
One way around that is to write a script that touches (saves) every list item every day. It’s brute force... but that’s SharePoint.