1. We must ask the source to provide unique id for the import.
2. Even if there is no unique id on the file, if it is manageable with combination of property. We can import that in a staging module.
3. Apply business rules/logic to select the valid records, create list, hierarchy from the valid records
In my humble opinion, this is a case of selecting valid transactions from a list having duplicate transactions using business rules. I would not recommend complicating it with more imports and actions. Esp, they when they are not scalable and sustainable, what happens when the business rule changes, it should be manageable without changing imports.
Reason I like spending time with our community is that we get to know how one thing can be achieved in multiple ways. Amazing! All the points that you raised are valid.
Point 1 is the best case scenario.
Point 2 we try to avoid most of the times as it goes against best practices.
Point 3 Your approach relied on IsFirstOccurrence. This has its own limitations, can't use this on a data set more than 10 million transactions. Also there is a performance issue if the data set is more than a million. Now that's debatable if we should use IsFirstOccurrence on Transactional data