What algorithm to use for a specific 'Named Entity Recognition'/'Information extraction' problem I am trying to write a model that will extract certain details from financial documents.

It must be able to extract the; contract start date, contract duration, contract value and all named entities. Preferably it would also be able to categorise the named entities.

I have roughly 600 tagged documents that I can use for training and testing purposes.

What model should I use?

I have had a look at different named entity recognition models, such as the Skip-Gram model. However these models do not utilise the fact that each one of these documents will contain all of this information. To illustrate this, the Skip-Gram model is often implemented in such a way that only the words in the same sentence contribute to its semantic vector.
Assuming your financial documents have a consistent structure and format and despite the algorithm kind of becoming "unfashionable" as of late due to the prevalence of deep learning, I would suggest that you try using Conditional Random Fields (CRF). 

CRFs offer very competative performance in this space and are often used for named entity recognition, part of speech tagging and variants thereof.

Another great thing about CRFs is that they takes into account the position of the current 'field' in a document and also the preceeding and succeeding fields in order to calculate what the current class should be so you don't have to spend too much time engineering structural features into your model. 

I have had a great deal of success with the library  crfsuite in particular which is written in C but had a python wrapper.