Best way to capture metadata


I am trying to dynamically add metadata to documents.

I have a document model, but I want to be able to add other data to it.
Basically create more columns based on the data that people need to add.
ie invoice number, invoice date and invoice amount. or something like
contract number and lawyer involved.

What is the best way to do this?