Skip to the content
The engine

One engine opens any public register from a one‑page description, with a receipt on every record.

Pansofica builds one engine that turns any public register into a receipted, searchable, agent-readable corpus from a one-page description. The data stays public and open; the method is the company's and is licensed. Data companies that onboard registers by hand license the engine to run their own sources; register keepers that do not yet publish their own register as a door license it to do so; labs and agent products read the door and cite what it serves. The corpus on this door is the engine's proof, not the product.

Spain – Repair and maintenance services of medical and surgical equipment – Servicio de mantenimiento de equipos electromédicos del Hospital La Paz, Hospital de Cantoblanco, Hospital Carlos III y Centros adscritos

Title
Spain – Repair and maintenance services of medical and surgical equipment – Servicio de mantenimiento de equipos electromédicos del Hospital La Paz, Hospital de Cantoblanco, Hospital Carlos III y Centros adscritos
Notice type
can-standard
Buyer
Servicio Madrileno de Salud, Hospital Universitario La Paz
Buyer country
ESP
Published
2026-09-25+02:00
Deadline by lot
not on file
CPV
50420000, 50420000
Nature
services, services
Procedure
open
Estimated value
not on file
Currency
not on file
Place of performance
ES300, ESP, ES300, ESP
Winner
IBÉRICA DE MANTENIMIENTO, S.A. (IBERMANSA)
Awarded value
278727.04
TED publication number
661338-2026
The engine

A register is a page.

This is the page for TED, the European Union's tender notices, as the engine read it today. Each parameter on the left produced the lit fields on the right. The receipt under each record is the one the door serves.

eu-ted-notices.yaml14 parameters, 259 lines
  • registerwho keeps it, where, and under what terms
      id: eu-ted-notices
      name: TED (Tenders Electronic Daily), notices since 2026-09-15
      publisher: Publications Office of the European Union
      homepage: https://ted.europa.eu/
      store: true
      terms:
        text: >-
          TED data may be reused under the Commission's reuse policy (Decision 2011/833/EU) per the TED legal notice;
          the API is open at developer.ted.europa.eu.
        url: https://ted.europa.eu/en/legal-notice
        read_on: "2026-10-04"
  • sourcethe file, its shape and how it pages
  • subjectwhat one row is and what names it
      kind: eu_tender_notice
      one_row_is: subject
      key:
        from: identifier
        scheme: ted_publication_number
      display_name:
        - "{notice-title.eng}"
        - "{publication-number}"
  • identifiersthe keeper's own ids and their shape
  • namesthe columns a search lands on
      - column: notice-title.eng
        role: display
        why: "The notice title in English; TED translates every title, so the English member is always present (100 of 100 sampled)."
      - column: buyer-name.*
        role: display
        why: >-
          The buyer's name as the notice prints it, in the buyer's own language (4 of 100 sampled notices carry an
          English member, so the whole map is read); the search "who is buying" lands here.
      - column: winner-name.*
        role: display
        why: >-
          The awardee's name as printed, in every language the notice carries, on award notices (41 of 100 sampled);
          the search "who won" lands here, and it is the join to the company registers.
  • datesthe keeper's dates, as printed
  • attributesevery other column kept, with the reason
  • wallswhat the terms forbid: never stored
  • dropcolumns left out
  • searchwhich ids and names answer a query
  • recordthe fields a record page shows, in order
  • holdingshow the count and the as-of are read
  • refreshhow often and how change is detected
  • connector_specthe grammar version

names produced 9 fields in 3 records

Read the whole page, 259 lines
connector_spec: "0.2"

# THE CONTRACTS SEARCH, source 4 (owner 2026-10-04). TED, the EU's Tenders Electronic Daily, through its Search API v3:
# contract notices, social-regime notices, award notices and prior information notices published since 2026-09-15
# (3,625 notices on a weekday, 1,869 of them contract notices, measured 2026-10-02). POST with a typed body (query,
# limit, fields, paginationMode ITERATION) and the next page's token read back from the body. Titles and names are
# language maps; the English member is declared beside the whole map. The read date is the header Date: TED's own
# publication date is on every notice (`publication-date`, printed as YYYY-MM-DD+HH:MM, kept as an attribute).

register:
  id: eu-ted-notices
  name: TED (Tenders Electronic Daily), notices since 2026-09-15
  publisher: Publications Office of the European Union
  homepage: https://ted.europa.eu/
  store: true
  terms:
    text: >-
      TED data may be reused under the Commission's reuse policy (Decision 2011/833/EU) per the TED legal notice;
      the API is open at developer.ted.europa.eu.
    url: https://ted.europa.eu/en/legal-notice
    read_on: "2026-10-04"

source:
  kind: api
  url: https://api.ted.europa.eu/v3/notices/search
  format: json
  encoding: utf8
  header: false
  columns:
    - publication-number
    - publication-date
    - notice-type
    - notice-title
    - notice-title.eng
    - buyer-name
    - buyer-name.*
    - buyer-country
    - organisation-country-buyer
    - classification-cpv
    - contract-nature
    - procedure-type
    - deadline-receipt-tender-date-lot
    - estimated-value-glo
    - estimated-value-cur-glo
    - place-of-performance
    - winner-name
    - winner-name.*
    - winner-country
    - tender-value
    - tender-value-cur
    - links
  compression: none
  published_at:
    from: header
    header: Date
  json:
    rows: "notices[]"
  api:
    protocol: rest
    method: POST
    query: {}
    body:
      query: "PD>=20260915 AND notice-type IN (cn-standard cn-social can-standard pin-cfc-standard)"
      limit: 100
      paginationMode: ITERATION
      fields:
        - publication-number
        - publication-date
        - notice-type
        - notice-title
        - buyer-name
        - buyer-country
        - organisation-country-buyer
        - classification-cpv
        - contract-nature
        - procedure-type
        - deadline-receipt-tender-date-lot
        - estimated-value-glo
        - estimated-value-cur-glo
        - place-of-performance
        - winner-name
        - winner-country
        - tender-value
        - tender-value-cur
    auth: none
    paging:
      mode: cursor
      cursor_param: iterationNextToken
      next_cursor_path: iterationNextToken

subject:
  kind: eu_tender_notice
  one_row_is: subject
  key:
    from: identifier
    scheme: ted_publication_number
  display_name:
    - "{notice-title.eng}"
    - "{publication-number}"

identifiers:
  - scheme: ted_publication_number
    column: publication-number
    shape: '^\d+-\d{4}$'
    unique: true
    why: "TED's own publication number, one per notice: the key."

names:
  - column: notice-title.eng
    role: display
    why: "The notice title in English; TED translates every title, so the English member is always present (100 of 100 sampled)."
  - column: buyer-name.*
    role: display
    why: >-
      The buyer's name as the notice prints it, in the buyer's own language (4 of 100 sampled notices carry an
      English member, so the whole map is read); the search "who is buying" lands here.
  - column: winner-name.*
    role: display
    why: >-
      The awardee's name as printed, in every language the notice carries, on award notices (41 of 100 sampled);
      the search "who won" lands here, and it is the join to the company registers.

dates: []

attributes:
  - column: publication-date
    as: published
    type: string
    why: "TED's publication date as printed (YYYY-MM-DD with an offset)."
  - column: notice-type
    as: notice_type
    type: string
    why: "cn-standard, cn-social, can-standard, pin-cfc-standard: contract, social-regime, award, prior information."
  - column: notice-title
    as: title_by_language
    type: string
    why: "The title in every language TED prints (JSON map)."
  - column: buyer-name
    as: buyer_by_language
    type: string
    why: "The buyer name by language (JSON map)."
  - column: buyer-country
    as: buyer_country
    type: string
    why: "The buyer's country code(s)."
  - column: organisation-country-buyer
    as: buyer_organisation_country
    type: string
    why: "The buyer organisation's country code(s)."
  - column: classification-cpv
    as: cpv
    type: string
    why: "The CPV codes (JSON list)."
  - column: contract-nature
    as: contract_nature
    type: string
    why: "works, supplies or services (JSON list)."
  - column: procedure-type
    as: procedure_type
    type: string
    why: "open, restricted, negotiated and the rest as coded."
  - column: deadline-receipt-tender-date-lot
    as: deadline_by_lot
    type: string
    why: "The tender receipt deadline per lot (JSON list)."
  - column: estimated-value-glo
    as: estimated_value
    type: string
    why: "The estimated value, as printed."
  - column: estimated-value-cur-glo
    as: estimated_value_currency
    type: string
    why: "The estimated value's currency."
  - column: place-of-performance
    as: place_of_performance
    type: string
    why: "NUTS and country codes of the place of performance (JSON list)."
  - column: winner-name
    as: winner_by_language
    type: string
    why: "The winner name by language (JSON map), on an award notice: the incumbent."
  - column: winner-country
    as: winner_country
    type: string
    why: "The winner's country code(s)."
  - column: tender-value
    as: award_value
    type: string
    why: "The awarded value, as printed."
  - column: tender-value-cur
    as: award_value_currency
    type: string
    why: "The awarded value's currency."
  - column: links
    as: links
    type: string
    why: "TED's own links to the notice as XML and PDF per language (JSON map): the receipt's pointer to the keeper."

drop: []

walls:
  never_stored: []
  forbidden_shapes: []

search:
  identifiers:
    - ted_publication_number
  # The title is the display name and already leads the search fold; listing it again doubled the fold and pushed
  # the buyer and winner past the byte cap on 71% of notices (measured 2026-10-04).
  names:
    - buyer-name.*
    - winner-name.*
  native_script: true
  min_chars: 3
  # A title register (lesson #1033): the fuzzy stage is full-text over the fold, not trigram similarity.
  text: true

record:
  fields:
    - from: "name:notice-title.eng"
      label: Title
    - from: "attribute:notice_type"
      label: Notice type
    - from: "name:buyer-name.*"
      label: Buyer
    - from: "attribute:buyer_country"
      label: Buyer country
    - from: "attribute:published"
      label: Published
    - from: "attribute:deadline_by_lot"
      label: Deadline by lot
    - from: "attribute:cpv"
      label: CPV
    - from: "attribute:contract_nature"
      label: Nature
    - from: "attribute:procedure_type"
      label: Procedure
    - from: "attribute:estimated_value"
      label: Estimated value
    - from: "attribute:estimated_value_currency"
      label: Currency
    - from: "attribute:place_of_performance"
      label: Place of performance
    - from: "name:winner-name.*"
      label: Winner
    - from: "attribute:award_value"
      label: Awarded value
    - from: "identifier:ted_publication_number"
      label: TED publication number

holdings:
  count: subjects
  updated_at: provenance

refresh:
  cadence: daily
  mode: append
  detect: both

connector_spec 0.2: the fourteen parameters above are the whole grammar.

Spain – Repair and maintenance services of medical and surgical equipment – Servicio de mantenimiento de equipos electromédicos del Hospital La Paz, Hospital de Cantoblanco, Hospital Carlos III y Centros adscritos

Title
Spain – Repair and maintenance services of medical and surgical equipment – Servicio de mantenimiento de equipos electromédicos del Hospital La Paz, Hospital de Cantoblanco, Hospital Carlos III y Centros adscritos
Notice type
can-standard
Buyer
Servicio Madrileno de Salud, Hospital Universitario La Paz
Buyer country
ESP
Published
2026-09-25+02:00
Deadline by lot
not on file
CPV
50420000, 50420000
Nature
services, services
Procedure
open
Estimated value
not on file
Currency
not on file
Place of performance
ES300, ESP, ES300, ESP
Winner
IBÉRICA DE MANTENIMIENTO, S.A. (IBERMANSA)
Awarded value
278727.04
TED publication number
661338-2026
registerTED (Tenders Electronic Daily), notices since 2026-09-15filepages.jsonsha256cef5c1d7d0fae7c650787679b5abc7dbea13959128d8209b18be3f1c15eab9e9read2026-10-04 18:13ZtermsTED data may be reused under the Commission's reuse policy (Decision 2011/833/EU) per the TED legal notice; the API is open at developer.ted.europa.eu.

Ireland – Laboratory, optical and precision equipments (excl. glasses) – The Provision of a Coagulation Analytical Platform for the St James’s Hospital Coagulation Laboratory incorporating the National Centre for Hereditary Coagulation Disorders. at St James’s Hospital.

Title
Ireland – Laboratory, optical and precision equipments (excl. glasses) – The Provision of a Coagulation Analytical Platform for the St James’s Hospital Coagulation Laboratory incorporating the National Centre for Hereditary Coagulation Disorders. at St James’s Hospital.
Notice type
cn-standard
Buyer
St James's Hospital
Buyer country
IRL
Published
2026-09-24+02:00
Deadline by lot
2026-10-28+01:00
CPV
38000000, 33696500, 51430000, 38000000, 33696500, 51430000
Nature
supplies, supplies
Procedure
open
Estimated value
not on file
Currency
not on file
Place of performance
IE061, IRL, IE061, IRL
Winner
Awarded value
not on file
TED publication number
658876-2026

Portugal – Hospital linen – Aquisição de Roupa Hospitalar, por lotes, para um prazo de 3 (três) anos, para o Hospital Divino Espírito Santo de Ponta Delgada, EPER.

Title
Portugal – Hospital linen – Aquisição de Roupa Hospitalar, por lotes, para um prazo de 3 (três) anos, para o Hospital Divino Espírito Santo de Ponta Delgada, EPER.
Notice type
can-standard
Buyer
Hospital do Divino Espírito Santo de Ponta Delgada, EPER
Buyer country
PRT
Published
2026-10-02+02:00
Deadline by lot
not on file
CPV
39518000, 39518000, 39518000
Nature
supplies, supplies, supplies
Procedure
open
Estimated value
not on file
Currency
not on file
Place of performance
anyw, anyw, anyw
Winner
MADRIGALE, TÊXTEIS, UNIPESSOAL LDA.
Awarded value
1800, 1515
TED publication number
679732-2026

eu-ted-notices.yaml, 14 top-level parameters, 259 lines, written October 4, 2026. The file it names: pages.json, 406,905,474 bytes, fingerprint cef5c1d7d0fa, read 2026-10-04 18:13Z.

The fingerprint of this register's file. cef5c1d7d0fae7c650787679b5abc7dbea13959128d8209b18be3f1c15eab9e9

pages.json is the engine's assembly of the keeper's API pages, 406,905,474 bytes. The kept bytes are served at a door address when that lands; until then the fingerprint is the door's.

Recompute one here. The OIG exclusions list is one public file, 15,608,468 bytes, and its page says two columns must never be stored.

curl -sL https://oig.hhs.gov/exclusions/downloadables/UPDATED.csv | sha256sum

From the keeper's file to records with receipts.

A second page, run: the OIG exclusions list, one public file with two columns its page says must never be stored. Rows of the keeper's file become records; each step is the engine's, on the real data.

Measured.

Every number here has a method and a date. Where there is no measurement yet, the line says so.

Numbers on this page: Oct 5, 2026 for the door's; Oct 3, 2026 for the measurement; Oct 5, 2026 for the pages.

  • Register pages written25

    one file per register, counted by git date from the engine's repository and committed with its as-of (Oct 5, 2026); 2 · 5 · 3 · 2 · 13 by day from September 26.

  • Public kinds on the door24

    GET corpora, Oct 5, 2026.

  • Records on the door71.3 million

    GET corpora, Oct 5, 2026; current records only, history kept behind them.

  • From page to door2 h 55 min

    TED, October 4, 2026: page written about 15:20Z, dry run clean 15:54Z, loaded 17:52Z, public 18:15Z, including two engine fixes made on the way. Find a Tender and Contracts Finder followed the same afternoon.

  • Parameters per page14

    the union of top-level parameters across the register pages (attributes, connector_spec, dates, drop, holdings, identifiers, names, record, refresh, register, search, source, subject, walls); a page is 123 to 883 lines (123 to 883 on 2026-10-04, read from the files).

  • Description against readingabout 14,300 tokens against about 475 million

    seven registers, 173,130 records, 1.52 GB of source files: the seven pages total about 14,300 tokens; a model reading every source row once would read an estimated 475 million (o200k_base; the exclusions CSV tokenized whole, the rest measured on a 20 MB sample and scaled by bytes). A cut of 99.997 percent in what has to be read. Measured October 3, 2026.

  • Proof of the compile685 of 690

    the engine's own verify runs: row counts equal to the source on all seven registers; 685 of 690 sampled fields identical, one differing (CPSC).

  • The reading sidenot claimed

    an agent reading the door's record instead of the keeper's own payload was measured on 25 records across five kinds: 40 percent smaller overall, but providers and manufacturers are larger on the door because a record carries every field and its receipt. This variant failed and is not claimed.

  • Resolution precisionmeasured and published here when it is

    where several keepers hold entries about the same thing, the engine holds them under a bound it keeps and keeps a doubt rather than a guess; the bound's precision against labeled data has not been measured. No percentage is claimed for it.

  • Cost saved for a licenseemeasured and published here when it is

    one register owner's or one data company's own source through the engine against its pipeline, two numbers published: time to onboard and precision with doubts.

Methods: docs/features/CONNECTOR-TOKEN-CLAIM.md in the engine's repository; the door's own GET corpora and door/status.

Why it is clever.

Six properties, in plain words, each beside the measurement that backs it where one exists.

  • One program, many pages. A register is fourteen parameters, not a project.

    25 pages, one engine, since September 26

  • The record and its receipt are one object, bound to the kept bytes. The fingerprint is one anyone can recompute.

    71.3 million records, each with a SHA-256 of its file

  • Nothing is deleted. A keeper's new file supersedes a record and the old one keeps its dates, so every past answer stays reproducible.

    valid_from and valid_to on every record

  • Walls are declared in the page. What the terms forbid is never stored, so there is nothing to take down later.

    two registers held at zero records by their own terms

  • Where several keepers hold entries about the same thing, the engine holds them under a bound it keeps, and a doubt is kept instead of a guess.

    the bound's precision: measured and published here when it is

  • One door serves code and agents the same record: JSON over HTTPS, a Model Context Protocol server, a page per record.

    24 kinds through one door

ENGINE-MODEL.md §2 to §7; "two registers held at zero by their terms" is USADA and HISA (§2, the wall).

What is not in one place anywhere else.

Each of these exists somewhere. We have not found them together.

  • The walls and the accounting rule in the page itself: one declarative page turns a register into a corpus with what must never be stored declared before the first row is read.

  • Receipts bound to the kept bytes, with a public validator.

  • Entries about the same thing from several keepers held under a bound the engine keeps, with doubts kept, not resolved by a guess.

  • One door for code and for agents, the same record.

  • And one record that is only possible once the above holds: a dated log of contradictions between keepers, both documents kept, both receipts shown.

    Read the contradictions log
  • The receipt is a published specification with a validator. A second party can issue receipts to it and anyone can check them.

    Standard
WhoWhat it doesWhat the engine adds beside itRead
Senzingan embeddable resolution engine licensed per record to data companies and governmentsa public receipt per record bound to kept source bytes, with a public validatorsenzing.com, 2026-10-03
Quantexadecision intelligence over entity networks for banks and governmentsa declarative page per source and a public, dated contradictions logquantexa.com, 2026-10-03
OpenSanctionsa commons of sanctions and persons of interest, open crawlers and per-dataset metadata, with a business licensean engine a keeper or a data company licenses to run its own registeropensanctions.org, 2026-10-03
Airbyte and Singeropen-source connectors, a declarative builder manifest per sourceterms walls, the accounting rule, kept bytes and receipts in the declarationdocs.airbyte.com, 2026-10-03

Read on the date shown from each party's own site; named as what each does, not as a comparison of results.

Who runs it.

  • Run your register through it

    You keep a register and publish a file. The engine opens it as a searchable, citable door under your name, with receipts and a correction rail, and keeps it on your clock. A page, written with you; nothing to install; your file stays where it is.

  • Run your sources through it

    You onboard registers by hand, one pipeline per source. Write the page, run the engine against your pipeline, and measure the two numbers that come out: time to onboard and precision with doubts.

  • Read what it produced

    One door, one record shape, one receipt, through a Model Context Protocol server or JSON over HTTPS. Run your eval against the door; the records you cite carry their receipt.

What it never does.

  • Guess. A fact it cannot source is not served; a doubt is kept as a doubt.

  • Delete. A keeper's new file supersedes a record; the old one keeps its dates.

  • Store what the terms forbid. The wall is in the page, before the first row is read.

  • Resell a record without its receipt. Every record leaves the door with the register, the file, the fingerprint, the dates and the terms.

  • Decide about a person. A record is what a keeper published; the correction rail is for the person it is about.

One engine opens any public register from a one‑page description.