{
  "manifestVersion": 1,
  "dataset": {
    "id": "anaf-company-register",
    "name": "Romanian company register (ONRC identity data republished by ANAF)",
    "description": "Romanian companies and other taxpayers with the identity fields ANAF republishes from the Trade Register: the ONRC registration number, the CAEN activity code, the legal and organisational form, the registered office, the competent tax office and the VAT / inactive status. Alongside it, the daily snapshot of ANAF's register of taxpayers on the VAT-cash-accounting regime (TVA la încasare), which ANAF publishes as a complete file every day, together with that register's event history. PERSONAL DATA WARNING: a large share of Romanian CUIs belong to PFA, individual enterprises and professionals, where the entity name is a natural person's name and the registered office is often a home address. The source is ANAF because data.gov.ro, where ONRC publishes the full bulk download, was not responding when this connector was built.",
    "descriptions": {
      "ro": "Firmele și ceilalți contribuabili din România, cu datele de identificare pe care ANAF le republică din Registrul Comerțului: numărul de înregistrare la ONRC, codul CAEN, forma juridică și de organizare, sediul social, administrația fiscală competentă și starea de înregistrare în scopuri de TVA. Se adaugă fotografia zilnică a Registrului persoanelor impozabile care aplică sistemul TVA la încasare, publicat de ANAF ca fișier complet în fiecare zi, împreună cu istoricul operațiunilor din acest registru. ATENȚIE, DATE CU CARACTER PERSONAL: o parte însemnată dintre CUI-urile din România aparțin unor PFA, întreprinderi individuale și profesii liberale, unde denumirea este numele unei persoane fizice, iar sediul declarat este adesea domiciliul acesteia. Sursa este ANAF, pentru că portalul data.gov.ro, unde ONRC publică descărcarea integrală, nu răspundea la momentul construirii acestui conector.",
      "en": "Romanian companies and other taxpayers with the identity fields ANAF republishes from the Trade Register: the ONRC registration number, the CAEN activity code, the legal and organisational form, the registered office, the competent tax office and the VAT / inactive status. Alongside it, the daily snapshot of ANAF's register of taxpayers on the VAT-cash-accounting regime (TVA la încasare), which ANAF publishes as a complete file every day, together with that register's event history. PERSONAL DATA WARNING: a large share of Romanian CUIs belong to PFA, individual enterprises and professionals, where the entity name is a natural person's name and the registered office is often a home address. The source is ANAF because data.gov.ro, where ONRC publishes the full bulk download, was not responding when this connector was built."
    },
    "names": {
      "ro": "Registrul firmelor din România (date ONRC republicate de ANAF)",
      "en": "Romanian company register (ONRC identity data republished by ANAF)"
    },
    "sourceUrl": "https://static.anaf.ro/static/10/Anaf/TVA_incasare/modalitati_consultare_registrul_contribuabili.htm",
    "license": {
      "id": "ro-official-acts-public-domain",
      "name": "Romanian official acts and public-interest information — outside copyright",
      "url": "https://legislatie.just.ro/Public/DetaliiDocument/7816",
      "attribution": "Date despre firme din registrele publice ANAF — Agenția Națională de Administrare Fiscală (anaf.ro)",
      "notes": "Legea 8/1996 privind dreptul de autor, art. 9, excludes from copyright both official texts of an administrative nature and simple facts and data. The company register fields republished here — denumire, numărul de înregistrare la registrul comerțului, codul CAEN, sediul, starea de înregistrare — are both: they are the official record of an administrative act, and the entries themselves are bare facts. They are also public-interest information under Legea 544/2001 and re-usable public-sector information under Legea 179/2022, which transposes the EU Open Data Directive — note that this is a REUSE RIGHT held against a public body, not a copyright licence granted to the world. ANAF states that the VAT-cash register is public, on the page this dataset takes it from: \"acest registru va fi public pentru contribuabili\" (https://static.anaf.ro/static/10/Anaf/TVA_incasare/modalitati_consultare_registrul_contribuabili.htm). ANAF's web-service documentation (http://static.anaf.ro/static/10/Anaf/Informatii_R/doc_WS_V6.txt) imposes technical limits on the per-CUI service — \"Un client poate executa maxim 1 request pe secunda\", \"Un request poate contine maxim 500 de CUI-uri\" — and warns that \"orice tentativa de suprasolicitare a serverului va fi pedepsita conform reglementarilor in vigoare\". This connector honours both: strictly sequential requests, at most 500 CUIs each, never faster than one per second, and one run refreshes a deterministic slice of the CUI universe rather than sweeping all of it. ANAF publishes no dataset-specific licence for either surface, so anyone republishing this data should make their own assessment rather than relying on this note. PERSONAL DATA (GDPR): a large share of Romanian CUIs belong to PFA, întreprinderi individuale, întreprinderi familiale and individual professionals. For those the entity name IS a natural person's name, and the registered office IS very often that person's home address, including the apartment number in `address_details`. Publishing the trade-register record is lawful in Romania, but a reuser is processing personal data and owes the corresponding duties — purpose limitation, and in particular not assembling it into a profile of a private individual. WHAT IS DELIBERATELY NOT PUBLISHED: the bank account (`iban`) ANAF returns for every taxpayer, which is a payment credential and is needed by nothing this dataset is for, and the fax number. `phone` is published because it is the taxpayer's declared business contact field, and it is NULL for the large majority of rows. The VAT-cash register is republished in full because ANAF publishes it in full, as a complete daily file intended for exactly this kind of local consultation."
    },
    "cadence": "daily",
    "tags": [
      "romania",
      "companies",
      "business-register",
      "onrc",
      "anaf",
      "caen",
      "vat",
      "tax",
      "open-data"
    ],
    "sources": []
  },
  "ingest": {
    "id": "01M5H0M8XKYN3BWY4GC5WBT2SF",
    "startedAt": "2026-10-22T05:16:34.099Z",
    "snapshotDate": "2026-10-22",
    "catalogSnapshotId": 13,
    "params": {
      "seed": "register",
      "shards": 1,
      "batchSize": 500,
      "delayMs": 1000,
      "lookupLimit": 0
    }
  },
  "baseUrl": "https://data-directory.fsn1.your-objectstorage.com/public/anaf-company-register",
  "catalog": {
    "url": "https://data-directory.fsn1.your-objectstorage.com/catalog/anaf-company-register/v/01M5H0M8XKYN3BWY4GC5WBT2SF/catalog.ducklake",
    "latestUrl": "https://data-directory.fsn1.your-objectstorage.com/catalog/anaf-company-register/catalog.ducklake",
    "sha256": "86aea104c0d54051f43ece44445a1fe9e7bc45b3829172860dfa70a345048928",
    "duckdbVersion": "v1.5.5",
    "attachExample": "ATTACH 'ducklake:https://data-directory.fsn1.your-objectstorage.com/catalog/anaf-company-register/catalog.ducklake' AS lake (READ_ONLY); SELECT * FROM lake.main.companies LIMIT 5;"
  },
  "queryHints": {
    "examples": [
      {
        "title": "Find a company by name and get its Trade Register number",
        "sql": "SELECT cui, name, reg_com_number, caen_code, county, registration_status\nFROM companies\nWHERE name_lc >= 'dante' AND name_lc < 'dante' || chr(255)\nORDER BY name_lc\nLIMIT 25",
        "description": "The one query the companies table is physically sorted for. name_lc is the folded name, so the prefix predicate is a range on the sort column and row-group statistics prune the file instead of scanning it — and \"dante\" finds \"DANTE\" as well as \"Dănţe\"."
      },
      {
        "title": "Who entered and who left the VAT-cash register between two days",
        "sql": "WITH today AS (\n  SELECT cui, name FROM vat_cash_register WHERE snapshot_date = DATE '2026-09-03'\n), yesterday AS (\n  SELECT cui FROM vat_cash_register WHERE snapshot_date = DATE '2026-09-02'\n)\nSELECT t.cui, t.name\nFROM today t\nLEFT JOIN yesterday y USING (cui)\nWHERE y.cui IS NULL",
        "description": "The register is republished in full every day, so the difference between two snapshots is the movement. Both sides prune to one day because snapshot_date leads the sort order."
      },
      {
        "title": "The regime history of one taxpayer, in ANAF’s own operation codes",
        "sql": "SELECT event_id, operation_code, start_date, end_date, published_date\nFROM vat_cash_events\nWHERE snapshot_date = (SELECT max(snapshot_date) FROM vat_cash_events)\n  AND cui = '10545790'\nORDER BY event_id",
        "description": "\"I\" is entering the regime, \"D\" is removal, \"E\" is the correction of an earlier entry. Filtering on snapshot_date and cui together is a range inside a range, which is exactly what this table is sorted for."
      },
      {
        "title": "How fresh is the company data, slice by slice",
        "sql": "SELECT snapshot_date, shard, shards, count(*) AS batches,\n       count(*) FILTER (WHERE failure_reason IS NOT NULL) AS unreached,\n       sum(requested) AS requested, sum(found) AS found\nFROM lookup_coverage\nGROUP BY 1, 2, 3\nORDER BY snapshot_date DESC\nLIMIT 30",
        "description": "A run refreshes one slice of the CUI universe, so this is the honest answer to \"how current is companies\". It reads only lookup_coverage, never the companies table. unreached counts the batches ANAF did not answer at all — a maintenance page, a 5xx, a rate-limit interstitial — whose CUIs therefore kept whatever last_seen_date an earlier run gave them; failure_reason on those rows says exactly what came back."
      },
      {
        "title": "The most common activities among companies in one county",
        "sql": "SELECT caen_code, count(*) AS companies\nFROM companies\nWHERE county_plate = 'CJ' AND caen_code IS NOT NULL\nGROUP BY 1\nORDER BY companies DESC\nLIMIT 20",
        "description": "A column scan rather than a pruned read — county is not the sort column and cannot be, because name search is the dominant query. Parquet is columnar, so this reads two VARCHAR columns rather than the whole table."
      }
    ]
  },
  "tables": [
    {
      "name": "companies",
      "description": "One row per Romanian taxpayer (CUI), carrying the identity fields ANAF republishes from the Trade Register: the ONRC registration number, the CAEN activity code, the legal and organisational form, the registered office, the competent tax office and the VAT / inactive status. Rows are upserted, so first_seen_date and last_seen_date widen over time while every other column reflects the most recent lookup. PERSONAL DATA WARNING: a large share of Romanian CUIs belong to PFA, II, IF and individual professionals (lawyers, doctors, notaries, authorised natural persons). For those, `name` IS a natural person's name and the registered office IS very often that person's home address. This table is published because Romanian law treats the trade-register record as public information, but anyone reusing it is processing personal data and owes the GDPR duties that come with it. The bank account (IBAN) ANAF also returns is deliberately not published here. A run refreshes one deterministic slice of the CUI universe, not all of it — see lookup_coverage for exactly which.",
      "descriptions": {
        "ro": "Câte un rând pentru fiecare contribuabil (CUI) din România, cu datele de identificare pe care ANAF le republică din Registrul Comerțului: numărul de înregistrare la ONRC, codul CAEN, forma juridică și de organizare, sediul social, organul fiscal competent și starea în scopuri de TVA sau de inactivitate. Rândurile se actualizează prin upsert, așa că first_seen_date și last_seen_date se lărgesc în timp, iar restul coloanelor reflectă ultima interogare. ATENȚIE, DATE CU CARACTER PERSONAL: o parte însemnată dintre CUI-urile din România aparțin unor PFA, II, IF și profesii liberale (avocați, medici, notari). Pentru acestea `name` ESTE numele unei persoane fizice, iar sediul declarat ESTE de multe ori domiciliul ei. Tabelul este publicat pentru că legea română tratează înregistrarea din registrul comerțului drept informație publică, dar oricine reutilizează aceste date prelucrează date cu caracter personal și își asumă obligațiile GDPR care decurg din aceasta. Contul bancar (IBAN) pe care ANAF îl returnează nu este publicat aici. O rulare împrospătează o felie determinată din spațiul de CUI-uri, nu tot spațiul — vezi lookup_coverage pentru a ști exact care.",
        "en": "One row per Romanian taxpayer (CUI), carrying the identity fields ANAF republishes from the Trade Register: the ONRC registration number, the CAEN activity code, the legal and organisational form, the registered office, the competent tax office and the VAT / inactive status. Rows are upserted, so first_seen_date and last_seen_date widen over time while every other column reflects the most recent lookup. PERSONAL DATA WARNING: a large share of Romanian CUIs belong to PFA, II, IF and individual professionals (lawyers, doctors, notaries, authorised natural persons). For those, `name` IS a natural person's name and the registered office IS very often that person's home address. This table is published because Romanian law treats the trade-register record as public information, but anyone reusing it is processing personal data and owes the GDPR duties that come with it. The bank account (IBAN) ANAF also returns is deliberately not published here. A run refreshes one deterministic slice of the CUI universe, not all of it — see lookup_coverage for exactly which."
      },
      "rowCount": 522032,
      "lastRunRows": 522000,
      "totalBytes": 32516185,
      "sortBy": [
        "name_lc"
      ],
      "searchColumns": [
        "name"
      ],
      "primaryKey": [
        "cui"
      ],
      "writeMode": "upsert",
      "storage": "lake",
      "columns": [
        {
          "name": "cui",
          "type": "VARCHAR",
          "nullable": false,
          "description": "The taxpayer identification code (cod unic de înregistrare), as text without the \"RO\" prefix. Text rather than a number because a CUI is an identifier: it is written \"RO14399840\" when the holder is VAT-registered, is quoted with leading zeros on many official documents, and is never summed. Join key for vat_cash_register and vat_cash_events.",
          "descriptions": {
            "ro": "Codul unic de înregistrare al contribuabilului, ca text, fără prefixul \"RO\". Este text, nu număr, pentru că un CUI este un identificator: se scrie \"RO14399840\" atunci când titularul este înregistrat în scopuri de TVA, apare cu zerouri în față pe multe documente oficiale și nu se adună niciodată. Este cheia de legătură cu vat_cash_register și vat_cash_events.",
            "en": "The taxpayer identification code (cod unic de înregistrare), as text without the \"RO\" prefix. Text rather than a number because a CUI is an identifier: it is written \"RO14399840\" when the holder is VAT-registered, is quoted with leading zeros on many official documents, and is never summed. Join key for vat_cash_register and vat_cash_events."
          },
          "distinctApprox": 502093
        },
        {
          "name": "name",
          "type": "TEXT",
          "nullable": false,
          "description": "The registered name of the taxpayer, exactly as ANAF returns it (denumire). For a PFA or an individual professional this is a natural person's name.",
          "descriptions": {
            "ro": "Denumirea înregistrată a contribuabilului, exact cum o returnează ANAF (denumire). Pentru un PFA sau o profesie liberală aceasta este numele unei persoane fizice.",
            "en": "The registered name of the taxpayer, exactly as ANAF returns it (denumire). For a PFA or an individual professional this is a natural person's name."
          }
        },
        {
          "name": "name_lc",
          "type": "VARCHAR",
          "nullable": false,
          "description": "name, lowercased and accent-folded (NFD, combining marks removed), so that a prefix search is a range on a sorted column and \"Bucuresti\" finds \"București\". This is the physical sort order of the table.",
          "descriptions": {
            "ro": "Coloana name, trecută la litere mici și fără diacritice (NFD, semnele combinatorii eliminate), pentru ca o căutare după prefix să fie un interval pe o coloană sortată, iar \"Bucuresti\" să găsească \"București\". Aceasta este ordinea fizică a tabelului.",
            "en": "name, lowercased and accent-folded (NFD, combining marks removed), so that a prefix search is a range on a sorted column and \"Bucuresti\" finds \"București\". This is the physical sort order of the table."
          },
          "min": "\" alexandru iofciulescu - cabinet de avocat\"",
          "max": "„ tiril si asociatii ” - societate civila de avocati"
        },
        {
          "name": "reg_com_number",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The Registrul Comerțului (Trade Register) registration number — the ONRC identifier this dataset exists for. ANAF emits it in two shapes and neither is rewritten here: the human-readable \"J40/1234/2000\" and the run-together \"J2002000372404\" (letter, year, six-digit sequence, two-digit county). Absent for taxpayers that are not registered with the Trade Register at all, such as public institutions and some professional forms.",
          "descriptions": {
            "ro": "Numărul de înregistrare la Registrul Comerțului (ONRC) — identificatorul pentru care există acest set de date. ANAF îl scrie în două forme și niciuna nu este rescrisă aici: forma lizibilă \"J40/1234/2000\" și forma lipită \"J2002000372404\" (literă, an, secvență de șase cifre, cod de județ din două cifre). Lipsește pentru contribuabilii care nu sunt înregistrați la Registrul Comerțului, cum sunt instituțiile publice și unele forme de exercitare a profesiilor.",
            "en": "The Registrul Comerțului (Trade Register) registration number — the ONRC identifier this dataset exists for. ANAF emits it in two shapes and neither is rewritten here: the human-readable \"J40/1234/2000\" and the run-together \"J2002000372404\" (letter, year, six-digit sequence, two-digit county). Absent for taxpayers that are not registered with the Trade Register at all, such as public institutions and some professional forms."
          }
        },
        {
          "name": "caen_code",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The four-digit CAEN Rev. 2 code of the principal declared activity, as ANAF returns it (cod_CAEN). Not a label — join it to a CAEN nomenclature for the activity name.",
          "descriptions": {
            "ro": "Codul CAEN Rev. 2 din patru cifre al activității principale declarate, așa cum îl returnează ANAF (cod_CAEN). Nu este o denumire — pentru denumirea activității se face join cu un nomenclator CAEN.",
            "en": "The four-digit CAEN Rev. 2 code of the principal declared activity, as ANAF returns it (cod_CAEN). Not a label — join it to a CAEN nomenclature for the activity name."
          }
        },
        {
          "name": "legal_form",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The legal form (forma_juridica) in ANAF's own Romanian wording, e.g. \"SOCIETATE COMERCIALĂ PE ACŢIUNI\", \"SOCIETATE CU RASPUNDERE LIMITATA\", \"PERSOANA FIZICA AUTORIZATA\". Verbatim, diacritics and all, so it can be matched against other copies of ANAF data.",
          "descriptions": {
            "ro": "Forma juridică (forma_juridica), în formularea proprie a ANAF, de exemplu \"SOCIETATE COMERCIALĂ PE ACŢIUNI\", \"SOCIETATE CU RASPUNDERE LIMITATA\", \"PERSOANA FIZICA AUTORIZATA\". Textual, cu tot cu diacritice, ca să poată fi corelată cu alte copii ale datelor ANAF.",
            "en": "The legal form (forma_juridica) in ANAF's own Romanian wording, e.g. \"SOCIETATE COMERCIALĂ PE ACŢIUNI\", \"SOCIETATE CU RASPUNDERE LIMITATA\", \"PERSOANA FIZICA AUTORIZATA\". Verbatim, diacritics and all, so it can be matched against other copies of ANAF data."
          }
        },
        {
          "name": "organisation_form",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The organisational form (forma_organizare): whether the taxpayer is a legal person, a natural person, or a form without legal personality.",
          "descriptions": {
            "ro": "Forma de organizare (forma_organizare): dacă este vorba de o persoană juridică, de o persoană fizică sau de o formă fără personalitate juridică.",
            "en": "The organisational form (forma_organizare): whether the taxpayer is a legal person, a natural person, or a form without legal personality."
          }
        },
        {
          "name": "ownership_form",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The ownership form (forma_de_proprietate): private domestic capital, private foreign capital, state ownership, and the mixtures ANAF distinguishes.",
          "descriptions": {
            "ro": "Forma de proprietate (forma_de_proprietate): capital privat autohton, capital privat străin, proprietate de stat și combinațiile pe care ANAF le distinge.",
            "en": "The ownership form (forma_de_proprietate): private domestic capital, private foreign capital, state ownership, and the mixtures ANAF distinguishes."
          }
        },
        {
          "name": "registration_status",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The registration status sentence ANAF returns verbatim (stare_inregistrare). It is prose, not a code, and it carries its own date inside it — \"INREGISTRAT din data 29.08.2006\", \"RADIAT din data 12.03.2019\". Kept unparsed because the wording is the source's own statement of the fact; registration_date holds the machine-readable date separately.",
          "descriptions": {
            "ro": "Fraza de stare a înregistrării, returnată textual de ANAF (stare_inregistrare). Este text, nu cod, și conține data în interiorul ei — \"INREGISTRAT din data 29.08.2006\", \"RADIAT din data 12.03.2019\". Este păstrată neinterpretată pentru că formularea este chiar declarația sursei; data prelucrabilă se află separat în registration_date.",
            "en": "The registration status sentence ANAF returns verbatim (stare_inregistrare). It is prose, not a code, and it carries its own date inside it — \"INREGISTRAT din data 29.08.2006\", \"RADIAT din data 12.03.2019\". Kept unparsed because the wording is the source's own statement of the fact; registration_date holds the machine-readable date separately."
          }
        },
        {
          "name": "registration_date",
          "type": "DATE",
          "nullable": true,
          "description": "The fiscal registration date (data_inregistrare) — when the taxpayer was entered in the fiscal register. A Europe/Bucharest calendar day: it is the day named by a Romanian administrative act, and ANAF publishes it with no time and no offset. Not necessarily the Trade Register incorporation date.",
          "descriptions": {
            "ro": "Data înregistrării fiscale (data_inregistrare) — momentul în care contribuabilul a fost înscris în registrul fiscal. Este o zi calendaristică Europe/Bucharest: este ziua numită de un act administrativ românesc, iar ANAF o publică fără oră și fără decalaj. Nu este neapărat data înmatriculării la Registrul Comerțului.",
            "en": "The fiscal registration date (data_inregistrare) — when the taxpayer was entered in the fiscal register. A Europe/Bucharest calendar day: it is the day named by a Romanian administrative act, and ANAF publishes it with no time and no offset. Not necessarily the Trade Register incorporation date."
          }
        },
        {
          "name": "tax_office",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The competent tax administration (organFiscalCompetent) the taxpayer files with, in ANAF's own wording, e.g. \"Administraţia Sector 2 a Finanţelor Publice\".",
          "descriptions": {
            "ro": "Organul fiscal competent (organFiscalCompetent) la care depune contribuabilul, în formularea ANAF, de exemplu \"Administraţia Sector 2 a Finanţelor Publice\".",
            "en": "The competent tax administration (organFiscalCompetent) the taxpayer files with, in ANAF's own wording, e.g. \"Administraţia Sector 2 a Finanţelor Publice\"."
          }
        },
        {
          "name": "address_full",
          "type": "TEXT",
          "nullable": true,
          "description": "The single-line address ANAF prints for the taxpayer (date_generale.adresa) — usually the fiscal domicile, upper-cased, with no consistent internal structure. The parsed components of the REGISTERED OFFICE are in the county/locality/street columns below and may name a different place.",
          "descriptions": {
            "ro": "Adresa pe un singur rând pe care ANAF o tipărește pentru contribuabil (date_generale.adresa) — de regulă domiciliul fiscal, cu majuscule și fără o structură internă constantă. Componentele SEDIULUI SOCIAL, descompuse, se află în coloanele de județ, localitate și stradă de mai jos și pot indica un alt loc.",
            "en": "The single-line address ANAF prints for the taxpayer (date_generale.adresa) — usually the fiscal domicile, upper-cased, with no consistent internal structure. The parsed components of the REGISTERED OFFICE are in the county/locality/street columns below and may name a different place."
          }
        },
        {
          "name": "county",
          "type": "VARCHAR",
          "nullable": true,
          "description": "County (județ) of the registered office, as ANAF names it (sdenumire_Judet). Bucharest is \"MUNICIPIUL BUCUREŞTI\".",
          "descriptions": {
            "ro": "Județul sediului social, așa cum îl denumește ANAF (sdenumire_Judet). Bucureștiul apare ca \"MUNICIPIUL BUCUREŞTI\".",
            "en": "County (județ) of the registered office, as ANAF names it (sdenumire_Judet). Bucharest is \"MUNICIPIUL BUCUREŞTI\"."
          }
        },
        {
          "name": "county_code",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The county's numeric SIRUTA-style code in ANAF's own nomenclature (scod_Judet), as text because leading zeros are meaningful in it.",
          "descriptions": {
            "ro": "Codul numeric al județului în nomenclatorul ANAF (scod_Judet), ca text, pentru că zerourile din față sunt semnificative.",
            "en": "The county's numeric SIRUTA-style code in ANAF's own nomenclature (scod_Judet), as text because leading zeros are meaningful in it."
          }
        },
        {
          "name": "county_plate",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The two-letter vehicle-registration county code (scod_JudetAuto) — \"B\" for Bucharest, \"CJ\" for Cluj. The code most Romanian datasets key counties by.",
          "descriptions": {
            "ro": "Codul auto al județului, din două litere (scod_JudetAuto) — \"B\" pentru București, \"CJ\" pentru Cluj. Este codul după care majoritatea seturilor de date românești identifică județele.",
            "en": "The two-letter vehicle-registration county code (scod_JudetAuto) — \"B\" for Bucharest, \"CJ\" for Cluj. The code most Romanian datasets key counties by."
          }
        },
        {
          "name": "locality",
          "type": "VARCHAR",
          "nullable": true,
          "description": "Locality of the registered office (sdenumire_Localitate). For Bucharest this names the sector, e.g. \"Sector 6 Mun. Bucureşti\".",
          "descriptions": {
            "ro": "Localitatea sediului social (sdenumire_Localitate). Pentru București aceasta denumește sectorul, de exemplu \"Sector 6 Mun. Bucureşti\".",
            "en": "Locality of the registered office (sdenumire_Localitate). For Bucharest this names the sector, e.g. \"Sector 6 Mun. Bucureşti\"."
          }
        },
        {
          "name": "street",
          "type": "VARCHAR",
          "nullable": true,
          "description": "Street name of the registered office (sdenumire_Strada), including the Romanian street-type abbreviation ANAF writes with it.",
          "descriptions": {
            "ro": "Denumirea străzii sediului social (sdenumire_Strada), inclusiv abrevierea tipului de arteră pe care ANAF o scrie împreună cu ea.",
            "en": "Street name of the registered office (sdenumire_Strada), including the Romanian street-type abbreviation ANAF writes with it."
          }
        },
        {
          "name": "street_number",
          "type": "VARCHAR",
          "nullable": true,
          "description": "Street number of the registered office (snumar_Strada). Text, because it is routinely \"148A\" or \"12 BIS\".",
          "descriptions": {
            "ro": "Numărul poștal al sediului social (snumar_Strada). Este text, pentru că în mod curent apare ca \"148A\" sau \"12 BIS\".",
            "en": "Street number of the registered office (snumar_Strada). Text, because it is routinely \"148A\" or \"12 BIS\"."
          }
        },
        {
          "name": "address_details",
          "type": "TEXT",
          "nullable": true,
          "description": "The free-text remainder of the registered office (sdetalii_Adresa): building, staircase, floor, apartment, office. For a PFA this is frequently an apartment number in a home.",
          "descriptions": {
            "ro": "Restul adresei sediului social, ca text liber (sdetalii_Adresa): bloc, scară, etaj, apartament, spațiu. Pentru un PFA este frecvent numărul unui apartament de locuit.",
            "en": "The free-text remainder of the registered office (sdetalii_Adresa): building, staircase, floor, apartment, office. For a PFA this is frequently an apartment number in a home."
          }
        },
        {
          "name": "postal_code",
          "type": "VARCHAR",
          "nullable": true,
          "description": "Postal code of the registered office (scod_Postal). Text: Romanian postal codes are six digits and may begin with a zero.",
          "descriptions": {
            "ro": "Codul poștal al sediului social (scod_Postal). Este text: codurile poștale din România au șase cifre și pot începe cu zero.",
            "en": "Postal code of the registered office (scod_Postal). Text: Romanian postal codes are six digits and may begin with a zero."
          }
        },
        {
          "name": "is_vat_registered",
          "type": "BOOLEAN",
          "nullable": true,
          "description": "True when the taxpayer is registered for VAT purposes on the lookup date (inregistrare_scop_Tva.scpTVA) — i.e. when its CUI is correctly written with the \"RO\" prefix.",
          "descriptions": {
            "ro": "Adevărat când contribuabilul este înregistrat în scopuri de TVA la data interogării (inregistrare_scop_Tva.scpTVA) — adică atunci când CUI-ul lui se scrie corect cu prefixul \"RO\".",
            "en": "True when the taxpayer is registered for VAT purposes on the lookup date (inregistrare_scop_Tva.scpTVA) — i.e. when its CUI is correctly written with the \"RO\" prefix."
          }
        },
        {
          "name": "is_vat_cash_accounting",
          "type": "BOOLEAN",
          "nullable": true,
          "description": "True when the taxpayer applies the VAT-cash-accounting regime (TVA la încasare) on the lookup date (inregistrare_RTVAI.statusTvaIncasare). The same fact the vat_cash_register table snapshots from the bulk file, reached the other way round.",
          "descriptions": {
            "ro": "Adevărat când contribuabilul aplică sistemul TVA la încasare la data interogării (inregistrare_RTVAI.statusTvaIncasare). Este același fapt pe care tabelul vat_cash_register îl fotografiază din fișierul complet, ajuns pe cealaltă cale.",
            "en": "True when the taxpayer applies the VAT-cash-accounting regime (TVA la încasare) on the lookup date (inregistrare_RTVAI.statusTvaIncasare). The same fact the vat_cash_register table snapshots from the bulk file, reached the other way round."
          }
        },
        {
          "name": "is_inactive",
          "type": "BOOLEAN",
          "nullable": true,
          "description": "True when the taxpayer is on ANAF's register of inactive taxpayers (stare_inactiv.statusInactivi) — a declared-inactive company whose invoices carry no deduction right for its counterparties.",
          "descriptions": {
            "ro": "Adevărat când contribuabilul figurează în registrul contribuabililor inactivi (stare_inactiv.statusInactivi) — o firmă declarată inactivă, ale cărei facturi nu dau drept de deducere partenerilor.",
            "en": "True when the taxpayer is on ANAF's register of inactive taxpayers (stare_inactiv.statusInactivi) — a declared-inactive company whose invoices carry no deduction right for its counterparties."
          }
        },
        {
          "name": "is_split_vat",
          "type": "BOOLEAN",
          "nullable": true,
          "description": "True when the taxpayer applies split VAT payment (inregistrare_SplitTVA.statusSplitTVA). The regime was made optional after 2020, so this is almost always false and is kept because ANAF still publishes it.",
          "descriptions": {
            "ro": "Adevărat când contribuabilul aplică plata defalcată a TVA (inregistrare_SplitTVA.statusSplitTVA). Regimul a devenit opțional după 2020, așa că valoarea este aproape întotdeauna falsă; coloana se păstrează pentru că ANAF o publică în continuare.",
            "en": "True when the taxpayer applies split VAT payment (inregistrare_SplitTVA.statusSplitTVA). The regime was made optional after 2020, so this is almost always false and is kept because ANAF still publishes it."
          }
        },
        {
          "name": "is_efactura_registered",
          "type": "BOOLEAN",
          "nullable": true,
          "description": "True when the taxpayer is entered in the RO e-Factura register (date_generale.statusRO_e_Factura).",
          "descriptions": {
            "ro": "Adevărat când contribuabilul este înscris în Registrul RO e-Factura (date_generale.statusRO_e_Factura).",
            "en": "True when the taxpayer is entered in the RO e-Factura register (date_generale.statusRO_e_Factura)."
          }
        },
        {
          "name": "phone",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The contact telephone number ANAF holds for the taxpayer (date_generale.telefon), as a string. Blank for most taxpayers, and NULL here when blank. For a PFA it may be a personal number — treat it as personal data. ANAF also returns a fax number and an IBAN; neither is published here.",
          "descriptions": {
            "ro": "Numărul de telefon de contact pe care ANAF îl deține pentru contribuabil (date_generale.telefon), ca text. Este gol pentru majoritatea contribuabililor și devine NULL aici când este gol. Pentru un PFA poate fi un număr personal — tratați-l ca dată cu caracter personal. ANAF returnează și un număr de fax și un IBAN; niciunul nu este publicat aici.",
            "en": "The contact telephone number ANAF holds for the taxpayer (date_generale.telefon), as a string. Blank for most taxpayers, and NULL here when blank. For a PFA it may be a personal number — treat it as personal data. ANAF also returns a fax number and an IBAN; neither is published here."
          }
        },
        {
          "name": "first_seen_date",
          "type": "DATE",
          "nullable": false,
          "description": "The first snapshot day (UTC) on which this CUI was looked up successfully — a UTC day, because it is this platform's own run date rather than anything ANAF stated. Maintained by the framework: the upsert takes the earlier of the stored and incoming values, so it only ever moves backwards.",
          "descriptions": {
            "ro": "Prima zi de fotografiere (UTC) în care acest CUI a fost interogat cu succes — este o zi UTC, pentru că este data de rulare a acestei platforme, nu ceva declarat de ANAF. Este întreținută de framework: upsert-ul păstrează valoarea mai veche dintre cea stocată și cea nouă, deci se poate deplasa numai înapoi în timp.",
            "en": "The first snapshot day (UTC) on which this CUI was looked up successfully — a UTC day, because it is this platform's own run date rather than anything ANAF stated. Maintained by the framework: the upsert takes the earlier of the stored and incoming values, so it only ever moves backwards."
          }
        },
        {
          "name": "last_seen_date",
          "type": "DATE",
          "nullable": false,
          "description": "The most recent snapshot day (UTC) on which this CUI was looked up successfully — a UTC day, because it is this platform's own run date. Because a run refreshes one slice of the CUI universe, a company being stale here means its slice has not come round yet, not that it has disappeared.",
          "descriptions": {
            "ro": "Cea mai recentă zi de fotografiere (UTC) în care acest CUI a fost interogat cu succes — este o zi UTC, pentru că este data de rulare a acestei platforme. Pentru că o rulare împrospătează o singură felie din spațiul de CUI-uri, o firmă veche aici înseamnă că nu i-a venit încă rândul feliei, nu că a dispărut.",
            "en": "The most recent snapshot day (UTC) on which this CUI was looked up successfully — a UTC day, because it is this platform's own run date. Because a run refreshes one slice of the CUI universe, a company being stale here means its slice has not come round yet, not that it has disappeared."
          }
        },
        {
          "name": "snapshot_date",
          "type": "DATE",
          "nullable": false,
          "description": "The snapshot day (UTC) of the run that last wrote this row — the same date sent to ANAF as the lookup date, so every status column is the status AS OF this day.",
          "descriptions": {
            "ro": "Ziua de fotografiere (UTC) a rulării care a scris ultima dată acest rând — aceeași dată trimisă la ANAF ca dată de interogare, deci toate coloanele de stare sunt starea LA această zi.",
            "en": "The snapshot day (UTC) of the run that last wrote this row — the same date sent to ANAF as the lookup date, so every status column is the status AS OF this day."
          }
        },
        {
          "name": "ingested_at",
          "type": "TIMESTAMP",
          "nullable": false,
          "description": "When this row was produced by the ingest run (UTC).",
          "descriptions": {
            "ro": "Momentul (UTC) în care rândul a fost produs de rularea de ingestie.",
            "en": "When this row was produced by the ingest run (UTC)."
          }
        }
      ],
      "files": [
        {
          "url": "https://data-directory.fsn1.your-objectstorage.com/public/anaf-company-register/v/01M5H0M8XKYN3BWY4GC5WBT2SF/companies.parquet",
          "sizeBytes": 32516185,
          "rowCount": 522032,
          "etag": "\"c52fa472f71a418b043f8632cc6edf56\"",
          "stats": {
            "name_lc": {
              "min": "\" alexandru iofciulescu - cabinet de avocat\"",
              "max": "„ tiril si asociatii ” - societate civila de avocati"
            }
          }
        }
      ],
      "example": [
        {
          "cui": "22225560",
          "name": "\" ALEXANDRU IOFCIULESCU - CABINET DE AVOCAT\"",
          "name_lc": "\" alexandru iofciulescu - cabinet de avocat\"",
          "reg_com_number": null,
          "caen_code": "6910",
          "legal_form": null,
          "organisation_form": null,
          "ownership_form": null,
          "registration_status": "INREGISTRAT din data 07.08.2007",
          "registration_date": "2007-08-07T00:00:00.000Z",
          "tax_office": "Administraţia Sector 3 a Finanţelor Publice",
          "address_full": "MUNICIPIUL BUCUREŞTI, SECTOR 2, STR. CONSTANTIN KIRIŢESCU, NR.1, ET.P, AP.1",
          "county": "MUNICIPIUL BUCUREŞTI",
          "county_code": "40",
          "county_plate": "B",
          "locality": "Sector 2 Mun. Bucureşti",
          "street": "Str. Constantin Kiriţescu",
          "street_number": "1",
          "address_details": null,
          "postal_code": "24037",
          "is_vat_registered": false,
          "is_vat_cash_accounting": false,
          "is_inactive": false,
          "is_split_vat": false,
          "is_efactura_registered": true,
          "phone": "0726743310",
          "first_seen_date": "2026-09-04T00:00:00.000Z",
          "last_seen_date": "2026-10-22T00:00:00.000Z",
          "snapshot_date": "2026-10-22T00:00:00.000Z",
          "ingested_at": "2026-10-22T05:16:34.099Z"
        },
        {
          "cui": "25492006",
          "name": "\" ALINA-NORA ENE - CABINET DE AVOCAT \"",
          "name_lc": "\" alina-nora ene - cabinet de avocat \"",
          "reg_com_number": null,
          "caen_code": "6910",
          "legal_form": null,
          "organisation_form": null,
          "ownership_form": null,
          "registration_status": "TRANSFER(SOSIRE) din data 04.07.2017",
          "registration_date": "2009-04-28T00:00:00.000Z",
          "tax_office": "Administraţia Sector 2 a Finanţelor Publice",
          "address_full": "MUNICIPIUL BUCUREŞTI, SECTOR 3, BLD. THEODOR PALLADY, NR.66A, BL.7, ET.3, AP.58",
          "county": "MUNICIPIUL BUCUREŞTI",
          "county_code": "40",
          "county_plate": "B",
          "locality": "Sector 3 Mun. Bucureşti",
          "street": "Bld. Theodor Pallady",
          "street_number": "66A",
          "address_details": null,
          "postal_code": null,
          "is_vat_registered": false,
          "is_vat_cash_accounting": false,
          "is_inactive": false,
          "is_split_vat": false,
          "is_efactura_registered": false,
          "phone": "0723534971",
          "first_seen_date": "2026-09-04T00:00:00.000Z",
          "last_seen_date": "2026-10-22T00:00:00.000Z",
          "snapshot_date": "2026-10-22T00:00:00.000Z",
          "ingested_at": "2026-10-22T05:16:34.099Z"
        }
      ]
    },
    {
      "name": "vat_cash_register",
      "description": "The daily snapshot of ANAF's Registrul persoanelor impozabile care aplică sistemul TVA la încasare — the register of taxpayers on the VAT-cash-accounting regime — one row per taxpayer per day, read from the agenti.txt file inside ultim_<yyyymmdd>.zip. On 2026-09-03 it listed 520,477 taxpayers. This is a real register in its own right, and it is NOT a list of all Romanian companies: only taxpayers who apply the cash-accounting regime are in it. Because a full snapshot is republished every day, comparing two days shows exactly who entered and who left.",
      "descriptions": {
        "ro": "Fotografia zilnică a Registrului persoanelor impozabile care aplică sistemul TVA la încasare, ținut de ANAF — câte un rând pentru fiecare contribuabil, în fiecare zi, citit din fișierul agenti.txt aflat în arhiva ultim_<aaaallzz>.zip. La 3 septembrie 2026 cuprindea 520.477 de contribuabili. Este un registru de sine stătător și NU este lista tuturor firmelor din România: în el se află numai contribuabilii care aplică sistemul TVA la încasare. Pentru că fișierul complet se republică în fiecare zi, comparația a două zile arată exact cine a intrat și cine a ieșit.",
        "en": "The daily snapshot of ANAF's Registrul persoanelor impozabile care aplică sistemul TVA la încasare — the register of taxpayers on the VAT-cash-accounting regime — one row per taxpayer per day, read from the agenti.txt file inside ultim_<yyyymmdd>.zip. On 2026-09-03 it listed 520,477 taxpayers. This is a real register in its own right, and it is NOT a list of all Romanian companies: only taxpayers who apply the cash-accounting regime are in it. Because a full snapshot is republished every day, comparing two days shows exactly who entered and who left."
      },
      "rowCount": 3652277,
      "lastRunRows": 522065,
      "totalBytes": 71399617,
      "sortBy": [
        "snapshot_date",
        "cui"
      ],
      "searchColumns": [
        "name"
      ],
      "primaryKey": [
        "snapshot_date",
        "cui"
      ],
      "writeMode": "snapshot_history",
      "storage": "lake",
      "columns": [
        {
          "name": "snapshot_date",
          "type": "DATE",
          "nullable": false,
          "description": "The register day (UTC) this snapshot is for. It is the date in the archive file name — ANAF publishes the file for day D on the afternoon of D-1.",
          "descriptions": {
            "ro": "Ziua (UTC) la care se referă această fotografie a registrului. Este data din numele arhivei — ANAF publică fișierul zilei D în după-amiaza zilei D-1.",
            "en": "The register day (UTC) this snapshot is for. It is the date in the archive file name — ANAF publishes the file for day D on the afternoon of D-1."
          },
          "min": "2026-09-04",
          "max": "2026-10-22",
          "distinctApprox": 7
        },
        {
          "name": "cui",
          "type": "VARCHAR",
          "nullable": false,
          "description": "The taxpayer identification code, verbatim from the file's cod_fiscal field. Joins to companies.cui.",
          "descriptions": {
            "ro": "Codul unic de înregistrare, textual din câmpul cod_fiscal al fișierului. Se leagă de companies.cui.",
            "en": "The taxpayer identification code, verbatim from the file's cod_fiscal field. Joins to companies.cui."
          },
          "min": "10000326",
          "max": "9999999986",
          "distinctApprox": 502093
        },
        {
          "name": "name",
          "type": "TEXT",
          "nullable": false,
          "description": "The taxpayer name, verbatim from the file's denumire field. ANAF declares it as nvarchar(250) and writes it without quoting, so a name containing \"#\" keeps it.",
          "descriptions": {
            "ro": "Denumirea contribuabilului, textual din câmpul denumire al fișierului. ANAF îl declară nvarchar(250) și îl scrie fără ghilimele, așa că o denumire care conține \"#\" îl păstrează.",
            "en": "The taxpayer name, verbatim from the file's denumire field. ANAF declares it as nvarchar(250) and writes it without quoting, so a name containing \"#\" keeps it."
          }
        },
        {
          "name": "name_lc",
          "type": "VARCHAR",
          "nullable": false,
          "description": "name, lowercased and accent-folded, so a prefix search over the register is a range predicate rather than a pattern match.",
          "descriptions": {
            "ro": "Coloana name, cu litere mici și fără diacritice, pentru ca o căutare după prefix în registru să fie un interval, nu o potrivire de tipar.",
            "en": "name, lowercased and accent-folded, so a prefix search over the register is a range predicate rather than a pattern match."
          }
        },
        {
          "name": "ingested_at",
          "type": "TIMESTAMP",
          "nullable": false,
          "description": "When this row was produced by the ingest run (UTC).",
          "descriptions": {
            "ro": "Momentul (UTC) în care rândul a fost produs de rularea de ingestie.",
            "en": "When this row was produced by the ingest run (UTC)."
          }
        }
      ],
      "files": [
        {
          "url": "https://data-directory.fsn1.your-objectstorage.com/public/anaf-company-register/v/01M5H0M8XKYN3BWY4GC5WBT2SF/vat_cash_register.parquet",
          "sizeBytes": 71399617,
          "rowCount": 3652277,
          "etag": "\"e507f0e9090b895ab600195048435584\"",
          "stats": {
            "snapshot_date": {
              "min": "2026-09-04",
              "max": "2026-10-22"
            },
            "cui": {
              "min": "10000326",
              "max": "9999999986"
            }
          }
        }
      ],
      "example": [
        {
          "snapshot_date": "2026-09-04T00:00:00.000Z",
          "cui": "10000326",
          "name": "CORYGABRIEL COM SRL",
          "name_lc": "corygabriel com srl",
          "ingested_at": "2026-09-04T07:58:47.547Z"
        },
        {
          "snapshot_date": "2026-09-04T00:00:00.000Z",
          "cui": "10000334",
          "name": "WESTSILVANIA PRODCOM SRL",
          "name_lc": "westsilvania prodcom srl",
          "ingested_at": "2026-09-04T07:58:47.547Z"
        }
      ]
    },
    {
      "name": "vat_cash_events",
      "description": "The event history of the VAT-cash-accounting register: one row per register operation per daily snapshot, read from the istoric.txt file inside ultim_<yyyymmdd>.zip (958,093 rows on 2026-09-03). One event is a taxpayer entering the regime, leaving it, or having an earlier entry corrected, with the dates the operation applies from, was published and was processed. The column names are ANAF's own: the RTVAI application ANAF publishes alongside the register ships the schema of this file in its HSQLDB script (ISTORIC_TAB) and its loader SQL, so nothing here is inferred from the shape of the data.",
      "descriptions": {
        "ro": "Istoricul operațiunilor din Registrul TVA la încasare: câte un rând pentru fiecare operațiune, în fiecare fotografie zilnică, citit din fișierul istoric.txt aflat în arhiva ultim_<aaaallzz>.zip (958.093 de rânduri la 3 septembrie 2026). O operațiune înseamnă intrarea unui contribuabil în sistem, ieșirea lui din sistem sau îndreptarea unei înregistrări anterioare, cu datele de la care se aplică, de publicare și de prelucrare. Denumirile coloanelor sunt chiar ale ANAF: aplicația RTVAI pe care ANAF o publică alături de registru conține structura acestui fișier în scriptul ei HSQLDB (ISTORIC_TAB) și în comenzile SQL de încărcare, deci nimic de aici nu este dedus din forma datelor.",
        "en": "The event history of the VAT-cash-accounting register: one row per register operation per daily snapshot, read from the istoric.txt file inside ultim_<yyyymmdd>.zip (958,093 rows on 2026-09-03). One event is a taxpayer entering the regime, leaving it, or having an earlier entry corrected, with the dates the operation applies from, was published and was processed. The column names are ANAF's own: the RTVAI application ANAF publishes alongside the register ships the schema of this file in its HSQLDB script (ISTORIC_TAB) and its loader SQL, so nothing here is inferred from the shape of the data."
      },
      "rowCount": 6723574,
      "lastRunRows": 961054,
      "totalBytes": 54320073,
      "sortBy": [
        "snapshot_date",
        "cui",
        "event_id"
      ],
      "searchColumns": [],
      "primaryKey": [
        "snapshot_date",
        "event_id"
      ],
      "writeMode": "snapshot_history",
      "storage": "lake",
      "columns": [
        {
          "name": "snapshot_date",
          "type": "DATE",
          "nullable": false,
          "description": "The register day (UTC) this snapshot is for, from the archive file name. The whole history is republished every day, so an event appears once per snapshot it survives in.",
          "descriptions": {
            "ro": "Ziua (UTC) la care se referă această fotografie a registrului, din numele arhivei. Întregul istoric se republică zilnic, așa că o operațiune apare o dată în fiecare fotografie în care supraviețuiește.",
            "en": "The register day (UTC) this snapshot is for, from the archive file name. The whole history is republished every day, so an event appears once per snapshot it survives in."
          },
          "min": "2026-09-04",
          "max": "2026-10-22",
          "distinctApprox": 7
        },
        {
          "name": "event_id",
          "type": "BIGINT",
          "nullable": false,
          "description": "ANAF's own primary key for the register event (ISTORIC_TAB.ID). Stable across snapshots, which is what makes \"what changed yesterday\" an anti-join on this column.",
          "descriptions": {
            "ro": "Cheia primară proprie a ANAF pentru operațiunea din registru (ISTORIC_TAB.ID). Este stabilă de la o fotografie la alta, ceea ce face ca întrebarea \"ce s-a schimbat ieri\" să fie un anti-join pe această coloană.",
            "en": "ANAF's own primary key for the register event (ISTORIC_TAB.ID). Stable across snapshots, which is what makes \"what changed yesterday\" an anti-join on this column."
          },
          "min": "1",
          "max": "99999",
          "distinctApprox": 943987
        },
        {
          "name": "cui",
          "type": "VARCHAR",
          "nullable": false,
          "description": "The taxpayer identification code the event belongs to (cod_fiscal). Joins to companies.cui and vat_cash_register.cui.",
          "descriptions": {
            "ro": "Codul unic de înregistrare al contribuabilului la care se referă operațiunea (cod_fiscal). Se leagă de companies.cui și de vat_cash_register.cui.",
            "en": "The taxpayer identification code the event belongs to (cod_fiscal). Joins to companies.cui and vat_cash_register.cui."
          },
          "min": "10000326",
          "max": "9999999986"
        },
        {
          "name": "start_date",
          "type": "DATE",
          "nullable": true,
          "description": "data_inceput — the Europe/Bucharest calendar day the operation takes effect from, i.e. the first day the taxpayer applies (or stops applying) the regime under this act. The source writes it as yyyymmdd with no time and no offset; it is a Romanian administrative date.",
          "descriptions": {
            "ro": "data_inceput — ziua calendaristică Europe/Bucharest de la care se aplică operațiunea, adică prima zi în care contribuabilul aplică (sau încetează să aplice) sistemul în baza acestui act. Sursa o scrie ca aaaallzz, fără oră și fără decalaj; este o dată administrativă românească.",
            "en": "data_inceput — the Europe/Bucharest calendar day the operation takes effect from, i.e. the first day the taxpayer applies (or stops applying) the regime under this act. The source writes it as yyyymmdd with no time and no offset; it is a Romanian administrative date."
          }
        },
        {
          "name": "end_date",
          "type": "DATE",
          "nullable": true,
          "description": "data_sfarsit — the Europe/Bucharest calendar day the taxpayer leaves the regime under this act. Empty in the source, and NULL here, for an entry that is still open.",
          "descriptions": {
            "ro": "data_sfarsit — ziua calendaristică Europe/Bucharest la care contribuabilul iese din sistem în baza acestui act. În sursă este gol, iar aici NULL, pentru o înregistrare încă deschisă.",
            "en": "data_sfarsit — the Europe/Bucharest calendar day the taxpayer leaves the regime under this act. Empty in the source, and NULL here, for an entry that is still open."
          }
        },
        {
          "name": "published_date",
          "type": "DATE",
          "nullable": true,
          "description": "data_publicare — the Europe/Bucharest calendar day the operation was published in the public register.",
          "descriptions": {
            "ro": "data_publicare — ziua calendaristică Europe/Bucharest la care operațiunea a fost publicată în registru.",
            "en": "data_publicare — the Europe/Bucharest calendar day the operation was published in the public register."
          }
        },
        {
          "name": "processed_date",
          "type": "DATE",
          "nullable": true,
          "description": "data_prelucrare — the Europe/Bucharest calendar day ANAF processed the operation internally. Normally the day before publication.",
          "descriptions": {
            "ro": "data_prelucrare — ziua calendaristică Europe/Bucharest la care ANAF a prelucrat intern operațiunea. De regulă ziua dinaintea publicării.",
            "en": "data_prelucrare — the Europe/Bucharest calendar day ANAF processed the operation internally. Normally the day before publication."
          }
        },
        {
          "name": "operation_code",
          "type": "VARCHAR",
          "nullable": true,
          "description": "tip_operatie — the one-character operation code, verbatim. ANAF publishes the column but not the code list, so the meanings below were confirmed by looking the same taxpayer up in ANAF's own v9 web service, which returns a tipActTvaInc label for the same act: \"I\" = Inregistrare (entered the regime), \"D\" = Radiere (removed from the regime), \"E\" = Indreptare eroare materiala (an earlier entry corrected). A fourth code, \"S\", occurs twice in 958,093 rows and the web service returns no label for it, so it is published as-is and deliberately not interpreted.",
          "descriptions": {
            "ro": "tip_operatie — codul operațiunii, o singură literă, textual. ANAF publică această coloană, dar nu și lista codurilor, așa că înțelesurile de mai jos au fost confirmate interogând același contribuabil în serviciul web v9 al ANAF, care returnează o etichetă tipActTvaInc pentru același act: \"I\" = Inregistrare (a intrat în sistem), \"D\" = Radiere (a fost scos din sistem), \"E\" = Indreptare eroare materiala (o înregistrare anterioară a fost corectată). Un al patrulea cod, \"S\", apare de două ori în 958.093 de rânduri, iar serviciul web nu returnează nicio etichetă pentru el, așa că este publicat ca atare și nu este interpretat.",
            "en": "tip_operatie — the one-character operation code, verbatim. ANAF publishes the column but not the code list, so the meanings below were confirmed by looking the same taxpayer up in ANAF's own v9 web service, which returns a tipActTvaInc label for the same act: \"I\" = Inregistrare (entered the regime), \"D\" = Radiere (removed from the regime), \"E\" = Indreptare eroare materiala (an earlier entry corrected). A fourth code, \"S\", occurs twice in 958,093 rows and the web service returns no label for it, so it is published as-is and deliberately not interpreted."
          }
        },
        {
          "name": "ingested_at",
          "type": "TIMESTAMP",
          "nullable": false,
          "description": "When this row was produced by the ingest run (UTC).",
          "descriptions": {
            "ro": "Momentul (UTC) în care rândul a fost produs de rularea de ingestie.",
            "en": "When this row was produced by the ingest run (UTC)."
          }
        }
      ],
      "files": [
        {
          "url": "https://data-directory.fsn1.your-objectstorage.com/public/anaf-company-register/v/01M5H0M8XKYN3BWY4GC5WBT2SF/vat_cash_events.parquet",
          "sizeBytes": 54320073,
          "rowCount": 6723574,
          "etag": "\"e407c27f542867fe6328b647612d1fe0\"",
          "stats": {
            "snapshot_date": {
              "min": "2026-09-04",
              "max": "2026-10-22"
            },
            "cui": {
              "min": "10000326",
              "max": "9999999986"
            },
            "event_id": {
              "min": "1",
              "max": "99999"
            }
          }
        }
      ],
      "example": [
        {
          "snapshot_date": "2026-09-04T00:00:00.000Z",
          "event_id": 157459,
          "cui": "10000326",
          "start_date": "2013-01-01T00:00:00.000Z",
          "end_date": null,
          "published_date": "2012-12-28T00:00:00.000Z",
          "processed_date": "2012-12-27T00:00:00.000Z",
          "operation_code": "I",
          "ingested_at": "2026-09-04T07:58:47.547Z"
        },
        {
          "snapshot_date": "2026-09-04T00:00:00.000Z",
          "event_id": 617516,
          "cui": "10000326",
          "start_date": "2013-01-01T00:00:00.000Z",
          "end_date": "2014-04-01T00:00:00.000Z",
          "published_date": "2014-03-07T00:00:00.000Z",
          "processed_date": "2014-03-06T00:00:00.000Z",
          "operation_code": "D",
          "ingested_at": "2026-09-04T07:58:47.547Z"
        }
      ]
    },
    {
      "name": "lookup_coverage",
      "description": "One row per batch of CUIs sent to ANAF's per-CUI service, so the coverage of every run is a fact in the data rather than something a reader has to reconstruct from the calendar. A run refreshes one deterministic slice of the CUI universe (cui modulo `shards` equals `shard`), because ANAF permits one request a second and 500 CUIs per request; consecutive days take consecutive slices, so a daily schedule walks the whole universe once every `shards` days. This table is what lets a reader say \"the companies rows for this slice are as of that day\" — and, when ANAF did not answer, exactly which stretch of CUIs went unrefreshed and why: a batch whose failure_reason is not NULL was requested and never usably answered, so it produced no companies rows at all.",
      "descriptions": {
        "ro": "Câte un rând pentru fiecare pachet de CUI-uri trimis către serviciul ANAF pe CUI, astfel încât acoperirea fiecărei rulări să fie un fapt înscris în date, nu ceva ce cititorul trebuie să reconstituie din calendar. O rulare împrospătează o felie determinată din spațiul de CUI-uri (cui modulo `shards` egal cu `shard`), pentru că ANAF permite o cerere pe secundă și 500 de CUI-uri pe cerere; zilele consecutive iau felii consecutive, așa încât o programare zilnică parcurge tot spațiul o dată la `shards` zile. Acest tabel este cel care permite afirmația \"rândurile din companies pentru această felie sunt de la acea zi\" — iar atunci când ANAF nu a răspuns, arată exact ce porțiune de CUI-uri a rămas neîmprospătată și de ce: un pachet al cărui failure_reason nu este NULL a fost cerut și nu a primit niciodată un răspuns utilizabil, deci nu a produs niciun rând în companies.",
        "en": "One row per batch of CUIs sent to ANAF's per-CUI service, so the coverage of every run is a fact in the data rather than something a reader has to reconstruct from the calendar. A run refreshes one deterministic slice of the CUI universe (cui modulo `shards` equals `shard`), because ANAF permits one request a second and 500 CUIs per request; consecutive days take consecutive slices, so a daily schedule walks the whole universe once every `shards` days. This table is what lets a reader say \"the companies rows for this slice are as of that day\" — and, when ANAF did not answer, exactly which stretch of CUIs went unrefreshed and why: a batch whose failure_reason is not NULL was requested and never usably answered, so it produced no companies rows at all."
      },
      "rowCount": 7308,
      "lastRunRows": 1045,
      "totalBytes": 26453,
      "sortBy": [
        "snapshot_date",
        "cui_from"
      ],
      "searchColumns": [],
      "primaryKey": [
        "snapshot_date",
        "cui_from",
        "cui_to"
      ],
      "writeMode": "snapshot_history",
      "storage": "lake",
      "columns": [
        {
          "name": "snapshot_date",
          "type": "DATE",
          "nullable": false,
          "description": "The snapshot day (UTC) of the run that made this batch.",
          "descriptions": {
            "ro": "Ziua de fotografiere (UTC) a rulării care a făcut acest pachet.",
            "en": "The snapshot day (UTC) of the run that made this batch."
          },
          "min": "2026-09-04",
          "max": "2026-10-22",
          "distinctApprox": 7
        },
        {
          "name": "source",
          "type": "VARCHAR",
          "nullable": false,
          "description": "Where the CUIs in this batch came from: \"register\" when they were read from that day's VAT-cash register file, \"range\" when the run swept a numeric CUI interval directly.",
          "descriptions": {
            "ro": "De unde provin CUI-urile din pachet: \"register\" când au fost citite din fișierul registrului TVA la încasare al zilei, \"range\" când rularea a parcurs direct un interval numeric de CUI-uri.",
            "en": "Where the CUIs in this batch came from: \"register\" when they were read from that day's VAT-cash register file, \"range\" when the run swept a numeric CUI interval directly."
          }
        },
        {
          "name": "shard",
          "type": "INTEGER",
          "nullable": false,
          "description": "Which slice of the CUI universe this run covered — the value of cui modulo `shards` every CUI in the run satisfies. When the run was not given one explicitly it is derived from the snapshot date, so consecutive days cover consecutive slices.",
          "descriptions": {
            "ro": "Ce felie din spațiul de CUI-uri a acoperit rularea — valoarea lui cui modulo `shards` pe care o îndeplinește fiecare CUI din rulare. Când rularea nu a primit-o explicit, ea este dedusă din data fotografierii, astfel încât zilele consecutive să acopere felii consecutive.",
            "en": "Which slice of the CUI universe this run covered — the value of cui modulo `shards` every CUI in the run satisfies. When the run was not given one explicitly it is derived from the snapshot date, so consecutive days cover consecutive slices."
          }
        },
        {
          "name": "shards",
          "type": "INTEGER",
          "nullable": false,
          "description": "How many slices the CUI universe was divided into for this run. With the default of 30 and a daily schedule, every CUI is refreshed once a month.",
          "descriptions": {
            "ro": "În câte felii a fost împărțit spațiul de CUI-uri pentru această rulare. Cu valoarea implicită de 30 și o programare zilnică, fiecare CUI este împrospătat o dată pe lună.",
            "en": "How many slices the CUI universe was divided into for this run. With the default of 30 and a daily schedule, every CUI is refreshed once a month."
          }
        },
        {
          "name": "cui_from",
          "type": "BIGINT",
          "nullable": false,
          "description": "The smallest CUI in this batch, as a number. Numeric here — unlike companies.cui — because this column describes an interval of the CUI space rather than identifying a taxpayer.",
          "descriptions": {
            "ro": "Cel mai mic CUI din pachet, ca număr. Aici este numeric — spre deosebire de companies.cui — pentru că această coloană descrie un interval din spațiul de CUI-uri, nu identifică un contribuabil.",
            "en": "The smallest CUI in this batch, as a number. Numeric here — unlike companies.cui — because this column describes an interval of the CUI space rather than identifying a taxpayer."
          },
          "min": "10029004",
          "max": "9957401",
          "distinctApprox": 4390
        },
        {
          "name": "cui_to",
          "type": "BIGINT",
          "nullable": false,
          "description": "The largest CUI in this batch, as a number.",
          "descriptions": {
            "ro": "Cel mai mare CUI din pachet, ca număr.",
            "en": "The largest CUI in this batch, as a number."
          },
          "distinctApprox": 3995
        },
        {
          "name": "requested",
          "type": "INTEGER",
          "nullable": false,
          "description": "How many CUIs the request carried. Never more than 500, which is ANAF's documented ceiling.",
          "descriptions": {
            "ro": "Câte CUI-uri a purtat cererea. Niciodată mai mult de 500, plafonul documentat de ANAF.",
            "en": "How many CUIs the request carried. Never more than 500, which is ANAF's documented ceiling."
          }
        },
        {
          "name": "found",
          "type": "INTEGER",
          "nullable": false,
          "description": "How many of them ANAF returned data for — the length of the response's `found` array, and the number of companies rows this batch produced. Zero when failure_reason is set, because a batch that was never usably answered returned nothing.",
          "descriptions": {
            "ro": "Pentru câte dintre ele a returnat ANAF date — lungimea tabloului `found` din răspuns și numărul de rânduri companies produse de acest pachet. Zero atunci când failure_reason este completat, pentru că un pachet fără răspuns utilizabil nu a returnat nimic.",
            "en": "How many of them ANAF returned data for — the length of the response's `found` array, and the number of companies rows this batch produced. Zero when failure_reason is set, because a batch that was never usably answered returned nothing."
          }
        },
        {
          "name": "not_found",
          "type": "INTEGER",
          "nullable": false,
          "description": "How many of them ANAF did not know — the length of the response's `notFound` array. A batch where this equals `requested` is answered with HTTP 404 by design, which is a normal empty result and not an error. Zero when failure_reason is set: an unanswered batch says nothing about whether ANAF knows those CUIs.",
          "descriptions": {
            "ro": "Câte dintre ele nu au fost găsite de ANAF — lungimea tabloului `notFound` din răspuns. Un pachet în care această valoare este egală cu `requested` primește, prin construcție, răspuns HTTP 404, ceea ce este un rezultat gol normal, nu o eroare. Zero atunci când failure_reason este completat: un pachet fără răspuns nu spune nimic despre faptul că ANAF ar cunoaște sau nu acele CUI-uri.",
            "en": "How many of them ANAF did not know — the length of the response's `notFound` array. A batch where this equals `requested` is answered with HTTP 404 by design, which is a normal empty result and not an error. Zero when failure_reason is set: an unanswered batch says nothing about whether ANAF knows those CUIs."
          }
        },
        {
          "name": "failure_reason",
          "type": "VARCHAR",
          "nullable": true,
          "description": "NULL when ANAF answered this batch — the ordinary case, including the HTTP 404 that means \"found is empty\". Otherwise the plain-words reason the batch was never usably answered, naming the HTTP status, the content type and the first 200 characters of what came back: a maintenance or rate-limit page where JSON was promised, a 5xx the transport gave up retrying, a gateway error document. Those batches produced NO companies rows, so their CUIs still carry whatever last_seen_date an earlier run gave them — this column is how a reader tells \"ANAF says nothing changed\" apart from \"ANAF was not reachable\". A run in which more than half the batches failed, or twenty failed in a row, fails outright and publishes nothing, so a coverage table that exists is never mostly holes.",
          "descriptions": {
            "ro": "NULL atunci când ANAF a răspuns la acest pachet — cazul obișnuit, inclusiv răspunsul HTTP 404 care înseamnă \"found este gol\". Altfel, motivul, în cuvinte simple, pentru care pachetul nu a primit niciodată un răspuns utilizabil, cu starea HTTP, tipul de conținut și primele 200 de caractere din ce a venit înapoi: o pagină de mentenanță sau de limitare a traficului acolo unde se promitea JSON, un 5xx pe care transportul a renunțat să îl mai reia, un document de eroare al unui gateway. Aceste pachete nu au produs niciun rând în companies, deci CUI-urile lor păstrează last_seen_date pe care li l-a dat o rulare anterioară — această coloană este modul în care cititorul deosebește \"ANAF spune că nu s-a schimbat nimic\" de \"ANAF nu a fost accesibil\". O rulare în care au eșuat mai mult de jumătate dintre pachete, sau douăzeci la rând, eșuează în întregime și nu publică nimic, așa că un tabel de acoperire care există nu este niciodată alcătuit în majoritate din goluri.",
            "en": "NULL when ANAF answered this batch — the ordinary case, including the HTTP 404 that means \"found is empty\". Otherwise the plain-words reason the batch was never usably answered, naming the HTTP status, the content type and the first 200 characters of what came back: a maintenance or rate-limit page where JSON was promised, a 5xx the transport gave up retrying, a gateway error document. Those batches produced NO companies rows, so their CUIs still carry whatever last_seen_date an earlier run gave them — this column is how a reader tells \"ANAF says nothing changed\" apart from \"ANAF was not reachable\". A run in which more than half the batches failed, or twenty failed in a row, fails outright and publishes nothing, so a coverage table that exists is never mostly holes."
          }
        },
        {
          "name": "ingested_at",
          "type": "TIMESTAMP",
          "nullable": false,
          "description": "When this row was produced by the ingest run (UTC).",
          "descriptions": {
            "ro": "Momentul (UTC) în care rândul a fost produs de rularea de ingestie.",
            "en": "When this row was produced by the ingest run (UTC)."
          }
        }
      ],
      "files": [
        {
          "url": "https://data-directory.fsn1.your-objectstorage.com/public/anaf-company-register/v/01M5H0M8XKYN3BWY4GC5WBT2SF/lookup_coverage.parquet",
          "sizeBytes": 26453,
          "rowCount": 7308,
          "etag": "\"1be66cf7921d996c95428fc4e977bcdb\"",
          "stats": {
            "snapshot_date": {
              "min": "2026-09-04",
              "max": "2026-10-22"
            },
            "cui_from": {
              "min": "10029004",
              "max": "9957401"
            }
          }
        }
      ],
      "example": [
        {
          "snapshot_date": "2026-09-04T00:00:00.000Z",
          "source": "register",
          "shard": 0,
          "shards": 1,
          "cui_from": 94,
          "cui_to": 35602,
          "requested": 500,
          "found": 500,
          "not_found": 0,
          "failure_reason": null,
          "ingested_at": "2026-09-04T07:58:47.547Z"
        },
        {
          "snapshot_date": "2026-09-04T00:00:00.000Z",
          "source": "register",
          "shard": 0,
          "shards": 1,
          "cui_from": 35734,
          "cui_to": 68324,
          "requested": 500,
          "found": 500,
          "not_found": 0,
          "failure_reason": null,
          "ingested_at": "2026-09-04T07:58:47.547Z"
        }
      ]
    }
  ],
  "generatedAt": "2026-10-22T06:45:23.004Z"
}
