"work" is a dubious concept if data that should be in parameters are hard-coded.
I have been in a similar position with a client. They were offering a service which processed data received via XML. I could see that one coming. The XML documents were going to be sufficiently large due to large numbers of work orders in each that they would bust the machine's memory if they were processed as a whole. A SAX parse would process the document an order at a time and throw it into the rest of the system with no problems but does need to have the element names hard-coded.
The solution was to run the incoming data through XSLT (Saxon can handle the file sizes to do that) and rewrite it into a dedicated namespace which is what the SAX parser used.
Next customer with a similar job but their own XML schema - no problem, just change the stylesheet. Give or take some minor tweaks (back-compatible) the core could remain common to multiple contracts.