I think this might do what you need, it's adapted from something I put together on a list where I had a hidden Title field that I generated based on several fields, and another workflow that was ran at the same time would always create tasks with a value under related item of "(no title)", so I made it wait for the title before starting. Expanding on that concept, I came up with this:
Create two "single line of text" fields with a default of blank. Set them to Hidden so the user doesn't put anything in them. Name them "isExistingFile" and "newFileProcess".
Workflow #1 - when new document is added:
[Whatever steps you want the workflow to do]
then
Wait for Current Item:newFileProcess
to not be empty
then
Set Current Item:isExistingFile
to "Indeed"
Workflow #2 - when document is modified:
If Current Item:isExistingFile
is not empty
[Whatever steps you want the workflow to do]
Else
Set Current Item:newFileProcess
to "Splendid!"
When a new file is uploaded and triggers both workflows, #2 will see that isExistingFile
is empty and know that this is a new file, so it shouldn't follow the edited file steps; instead, it will just set newFileProcess
so that #1 can finish. #1 will do what it's supposed to do on a new file, then it will wait however long it has to for #2 to finish before it sets the isExistingFile
value, guaranteeing that #2 won't see that value the first time it runs for a given file.
Later, when a file is actually modified, #2 will find a value in isExistingFile
and will carry out the normal steps for a previously-added, newly-modified file.
Transition to stage
portion.