"""Invoice-JSON dataset adapter -- scaffold, not yet wired. The ``GokulRajaR/invoice-ocr-json`` set pairs native invoice images with structured JSON ground truth (key-values covering invoice number, dates, and monetary totals) -- convenient for the eval harness because the labels are already close to the ``Document`` schema. Intended field mapping onto the ``Document`` schema (to implement when wired): - invoice number field -> ``invoice_number`` (critical) - invoice/issue date -> ``document_date`` - due date -> ``due_date`` - tax/VAT amount -> ``tax`` (critical) - grand total -> ``total`` (critical) - vendor/seller name -> ``vendor_name`` This is the dataset that would exercise ``invoice_number`` and ``tax`` -- the two critical fields SROIE does not label. It is intentionally left unwired for T10; ``load`` raises so a predict run cannot spend quota on an unvalidated mapping. """ from __future__ import annotations from collections.abc import Iterator from eval.datasets.base import GoldExample class InvoiceJsonAdapter: """Scaffold adapter for the invoice-OCR-JSON benchmark (not wired).""" name: str = "invoice_json" hf_id: str = "GokulRajaR/invoice-ocr-json" split: str = "train" labeled_fields: tuple[str, ...] = ( "vendor_name", "invoice_number", "document_date", "due_date", "tax", "total", ) def load(self, limit: int | None = None) -> Iterator[GoldExample]: """Not implemented -- this set is scaffolded but not wired for T10. Args: limit: Unused. Raises: NotImplementedError: Always; implement the JSON->Document mapping first. """ raise NotImplementedError( "invoice_json adapter is scaffolded but not wired (T10 is " "SROIE-first). Implement the JSON -> Document mapping and add " "'invoice_json' to WIRED_DATASETS before running predict against it." ) yield # pragma: no cover -- makes this a generator for the Protocol.