Skip to content

Source document yielded zero line items

You uploaded a DOCX or PDF; the parser ran but produced no XbrlLineItem rows. XbrlSourceDocument.parseStatus = FAILED.

What this means

The line-item extractor needs textual tables. If it cannot find any, it bails.

Causes (most common first)

  1. Rasterised PDF — the PDF is essentially a flat image. pdf-parse returns no text; table heuristics find nothing.
  2. DOCX without tables — the financial statements are embedded as text paragraphs, not Word tables. mammoth reads the paragraphs but the table extractor produces nothing.
  3. Non-standard section headings — the extractor looks for headings like Statement of Financial Position, Statement of Profit or Loss, Statement of Cash Flows. Headings in another language or non-standard wording miss.
  4. Encrypted or password-protected file — extractor fails before it begins.
  5. Source is the wrong document — e.g. a draft management letter, an audit working paper, a SOCE-only file.

Diagnose

sql
SELECT parse_status, page_count, mime_type
  FROM xbrl_source_documents WHERE xbrl_filing_id = '<filingId>';

If parse_status = FAILED, check the worker logs:

bash
docker logs breezycorp-monorepo-worker-1 2>&1 | grep -A 5 extract-line-items | tail -30

Look for the error class: NoTextLayer, NoTablesFound, EncryptedFile, etc.

Fix

  • Rasterised PDF: ask the client for the source DOCX (preferred) or a text-extractable PDF (some accounting platforms export both).
  • DOCX without tables: ask the client to provide a version with the statements in Word tables, not as flowing text. Or use Pull from FS engagement if the client also uses our FS module.
  • Non-standard headings: rare; the extractor's heading-detection is forgiving. If you're hitting this, check the source language and re-export in English where possible.
  • Encrypted file: ask the client to remove the password protection.

Cross-product alternative

When the same client has a FsEngagement at NOTES_COMPLETE for the same period, use Pull from FS engagement (Phase 3 path). This skips the DOCX parse entirely.

Internal use only — BreezyCorp