You're never ever ever going to get exactly what is in your mind out to the world without a lot of iteration. So don't waste your time writing pages of requirement vomit so you can blame the other guy when he gets it wrong.
Start with simple bullet points, use mockups or screenshots from the existing system to give them an idea of workflow and get them to implement a small feature. See how they do with this level of specification.
Give them some flexibility as they will come up with ideas and that will also keep them interested in your project.
In the end, your goal is to have a functioning system that approximates what you have in your head. Decide what is important and prioritize those things, leaving the other things up to the developer.
Not every single thing is necessarily important. If your workflow is too complicated, it's likely that it's wrong anyway unless you are creating apps for a bureaucracy in which case everything I said does not matter because I'd never do it myself!