You can absolutely build this end to end in Power Automate, but it helps to split the work into clear parts so the logic doesn’t get overwhelming. Here’s a simple way to approach it based on what you described.
For the email ingestion, the key is the Conversation ID. When the email arrives, get the items from the SharePoint tracker list and filter on the Conversation ID. If you find a match, update the same item and add the new email into your document library. If nothing matches, create a new list item with the status set to Not Assigned and save the email into the library. For finding the therapy, pull the therapy list into a collection, then check each therapy abbreviation against the subject and body. A simple contains check usually works well.
For the assignment flow, you can rely on trigger conditions to make sure it only runs when the status becomes Assigned and no previous email has been sent. Before doing anything, check the lock field. If it is already set, end the flow. If it is not set, switch the lock on, send your assignment email, update your flags, then switch the lock off again. This avoids loops and duplicate notifications.
The completion flow follows the same pattern. Only trigger when the right flags are in place, check if the item is locked, lock it, send the completion message, update the flags, unlock the item, and finally mark the process as completed. After that you can handle the branching logic for Not For Ship Clearance or Future Shipment by adding the item to the correct lists.
For the status log, use an append to string or append to array, depending on how you store it. Each time the status changes, add the username and timestamp into the log field.
For error logging, build one compose at the start of the flow with your log values and call it whenever an error happens. This keeps the logging consistent without needing to create a lot of variables.
The main thing is to keep each flow focused on a single purpose. One flow handles emails, one handles assignment, and one handles completion. Once you break it down this way, it becomes a lot easier to manage and test each part.
If you want, you can post screenshots of your current build and the community can help you fix the parts that are giving you trouble.