This is not tested approach but theoretical seems possible: Import the contacts in an IDP project. Add an event on this IDP project if a new record is added or updated then do following tasks: Check if the survey is completed using ‘SurveyCompleted’ flag, if completed then using code task check if the lastInviteDate is passed 365 days from currect date, if passed then do distribution via directory task else stop the flow. If not completed then do distribution via directory task and capture the ‘lastInviteDate’ i.e. as current date. If not completed and lastInviteDate is not empty then check if it is greater than 30 days, if yes then do the distribution else stop the process.
On survey completion mark the ‘SurveyCompleted’ flag as true in the same dataset.
Since we don’t have if else condition in workflow condition, we will need to create multiple workflows for the above process.