In your code you have at least two locationsdeclarations without data location while it's required. Reference types require the data location notation, according to solidity document:
Status status = unmarshalStatus(_status);
should become "reference types comprise structs, arrays and mappings":
Status memory status = unmarshalStatus(_status);
uint[] id = certificates.length;
should become:
uint[] memory id = certificates.length;
Status status = unmarshalStatus(_status);
should become:Status memory status = unmarshalStatus(_status);
uint[] id = certificates.length;
should become:uint[] memory id = certificates.length;
For the second one, I don't think you mean to use array because the length
could be integer.
So you may use uint id = certificates.length;
depends on the logic of your contract.
Read more : Data location