Mutabiq reports MTB-STRUCT-00 when the uploaded file could not be read as XML — too large, nested too deeply, carrying a document type declaration, or not well-formed — so no rule ran and nothing in the invoice was checked. Its severity is Error: a document that could not be read cannot be said to have passed.
Recorded in Mutabiq's decisions log under “2026-09-07 — Verdict is binary in v1; MTB-STRUCT-00 is ERROR for every parse refusal”.
Five checks a month on the Free plan. The file is checked in memory and is never stored.
What Mutabiq reports
One entry for each way this rule can be reported.
Reported as
What kind of value was found — empty, not_15_digits and the like — never the value itself.
File too large to check
Reported asparse_failure.too_largetoo large to check
What is wrong
The uploaded file is larger than the 5 MB limit Mutabiq accepts, so it was never opened and none of the checks were run. This is a statement about the file, not about the invoice inside it: the invoice has not been checked at all.
What to check in your ERP
Export a single invoice rather than a batch or an archive. If your ERP embeds attachments, logos or a PDF copy inside the XML, turn that off for the export - the UBL document on its own is normally a few hundred kilobytes. To submit several invoices at once, upload a ZIP holding separate files.
File carries a document type declaration
Reported asparse_failure.doctype_presentcarries a document type declaration
What is wrong
The file contains an XML document type declaration (a <!DOCTYPE ...> line). Mutabiq does not accept one, because it can instruct a parser to fetch or expand outside content, so the file was never opened and none of the checks were run.
What to check in your ERP
A ZATCA UBL 2.1 invoice never needs a DOCTYPE. Check the export template or the XML writer in your system: it should emit the XML declaration line and then the <Invoice> root element, and nothing between them. A DOCTYPE usually comes from a general setting on a serialiser or from a post-processing step, not from the invoice data.
File nested too deeply to check
Reported asparse_failure.max_depth_exceedednested too deeply to check
What is wrong
Elements in the file are nested more than 64 levels deep, and Mutabiq stops reading at that point as a safety limit. The rest of the file was therefore never read and none of the checks were run. This is a limit of the checker, not a finding about the invoice.
What to check in your ERP
A ZATCA UBL invoice is around ten levels deep, so this usually means the file is not one UBL invoice document - several invoices inside a single envelope, for instance, or an invoice embedded in another export format. Export one <Invoice> document per file, straight from the e-invoicing module rather than from a general-purpose XML export.
Too many elements to check
Reported asparse_failure.too_many_elementstoo many elements to check
What is wrong
The file holds more than 250,000 XML elements, and Mutabiq stops reading at that point as a safety limit. The rest of the file was therefore never read and none of the checks were run. This is a limit of the checker, not a finding about the invoice.
What to check in your ERP
That is far more than one invoice needs: an invoice with 5,000 lines comes to about 80,000 elements. Check whether the export has gathered many invoices into one file, or repeated a block of elements once per record. Export one invoice per file and upload them together in a ZIP.
File is not well-formed XML
Reported asparse_failure.not_well_formednot well-formed XML
What is wrong
The file could not be read as XML - a tag left unclosed, an ampersand or angle bracket that was not escaped, or a file that is not XML at all. Because it could not be read, none of the checks were run.
What to check in your ERP
Confirm the export is the UBL 2.1 XML file itself, and not a PDF, a spreadsheet, a signed envelope, or an XML file that was edited by hand afterwards. If your system writes invoice text - customer names, item descriptions, addresses - straight into the XML, make sure it escapes &, < and >. Unescaped text is the most common cause.