{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/firmoscop-ro/json-schema/firmoscop-ro-company-profile-schema.json",
  "title": "CompanyProfile",
  "x-generated": "2026-11-08",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/_original/firmoscop-ro-api-openapi.json#/components/schemas/CompanyProfile",
  "type": "object",
  "properties": {
    "cui": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "registrationNumber": {
      "type": [
        "string",
        "null"
      ]
    },
    "county": {
      "type": [
        "string",
        "null"
      ]
    },
    "locality": {
      "type": [
        "string",
        "null"
      ]
    },
    "registeredAddress": {
      "type": [
        "string",
        "null"
      ],
      "description": "Adresa completă a sediului social (ONRC primar, ANAF fallback)."
    },
    "registeredAt": {
      "type": [
        "string",
        "null"
      ],
      "format": "date"
    },
    "ageYears": {
      "type": [
        "integer",
        "null"
      ]
    },
    "caenCode": {
      "type": [
        "string",
        "null"
      ]
    },
    "caenLabel": {
      "type": [
        "string",
        "null"
      ]
    },
    "registrationState": {
      "type": [
        "string",
        "null"
      ]
    },
    "inInsolvency": {
      "type": "boolean",
      "description": "Firma e într-o PROCEDURĂ de insolvență/faliment/reorganizare/lichidare. NU include radierea — vezi struckOff."
    },
    "struckOff": {
      "type": "boolean",
      "description": "Firma e radiată din registrul comerțului, deci nu mai există juridic. Raportat separat: radierea e de obicei sfârșit normal de viață, nu o procedură în curs."
    },
    "dissolved": {
      "type": "boolean",
      "description": "Firma a încetat să existe FĂRĂ insolvență — absorbită prin fuziune/divizare, ori dizolvată de drept. Distinct de insolvență și de radiere."
    },
    "stateKind": {
      "type": "string",
      "enum": [
        "radiata",
        "dizolvata-fuziune",
        "dizolvata",
        "faliment",
        "reorganizare",
        "lichidare",
        "insolventa",
        "activa"
      ],
      "description": "Starea reală din registru, normalizată. Sursa unică a etichetei afișate; „activa\" înseamnă fără niciun semnal de stare."
    },
    "vatRegistered": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "fiscallyInactive": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "largeTaxpayer": {
      "type": [
        "boolean",
        "null"
      ],
      "description": "Mare contribuabil (administrat de DGAMC) — semnal de mărime."
    },
    "ownershipForm": {
      "type": [
        "string",
        "null"
      ],
      "description": "Forma de proprietate ANAF (ex. capital privat autohton/străin/de stat)."
    },
    "website": {
      "type": [
        "string",
        "null"
      ]
    },
    "financials": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/FinancialYear"
      }
    },
    "health": {
      "$ref": "#/$defs/FinancialHealth"
    },
    "credit": {
      "$ref": "#/$defs/CreditGuidance"
    },
    "representatives": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "role": {
            "type": [
              "string",
              "null"
            ]
          },
          "otherCompanies": {
            "type": "integer",
            "description": "La câte ALTE firme apare acest NUME. Potrivirea e pe șir de caractere, fără identificator de persoană — pot fi mai mulți oameni diferiți."
          },
          "otherInsolvent": {
            "type": "integer",
            "description": "Câte dintre ele sunt într-o PROCEDURĂ de insolvență/faliment/reorganizare. Nu include radierile."
          },
          "otherStruckOff": {
            "type": "integer",
            "description": "Câte dintre ele sunt radiate. Raportat separat: radierea e de obicei sfârșit normal de viață, nu un semnal de risc."
          }
        }
      }
    },
    "publicContracts": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "count": {
          "type": "integer"
        },
        "totalValue": {
          "type": "integer",
          "description": "Suma contractelor REALE (de sine stătătoare + subsecvente), în lei. Plafoanele de acord-cadru NU sunt incluse — sunt valoarea maximă a acordului, nu bani încasați. La contractele câștigate în asociere, valoarea contractului e împărțită egal între câștigători (sursa nu spune cât revine fiecăruia)."
        },
        "frameworkCount": {
          "type": "integer",
          "description": "Câte locuri pe acorduri-cadru are firma."
        },
        "frameworkCeiling": {
          "type": "integer",
          "description": "Plafonul cumulat al acordurilor-cadru, în lei. NU se însumează cu totalValue — e o limită superioară partajată, nu venit."
        },
        "sharedCount": {
          "type": "integer",
          "description": "Câte dintre contracte au fost câștigate în asociere cu alte firme; la ele, partea firmei e estimată prin împărțire egală."
        },
        "lastDate": {
          "type": [
            "string",
            "null"
          ]
        },
        "topAuthorities": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "connections": {
      "type": [
        "object",
        "null"
      ],
      "description": "Firme la care apar persoane cu ACELAȘI NUME ca reprezentanții acestei firme. Nu e un grup corporativ confirmat.",
      "properties": {
        "total": {
          "type": "integer"
        },
        "insolvent": {
          "type": "integer",
          "description": "În procedură de insolvență."
        },
        "struckOff": {
          "type": "integer",
          "description": "Radiate. Separat de insolvență."
        },
        "commonNameWarning": {
          "type": "boolean"
        }
      }
    },
    "dataAsOf": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "description": "Cea mai recentă citire a firmei: anafCheckedAt dacă există, altfel data ONRC. Pentru data fiecărei surse, vezi câmpurile de mai jos."
    },
    "anafCheckedAt": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "description": "Când am citit ultima oară firma la ANAF. Indexul trece prin toate firmele în aproximativ o săptămână; o verificare (GET /api/v1/verify/{cui}) care citește sursele live o aduce la zi."
    },
    "onrcAsOf": {
      "type": [
        "string",
        "null"
      ],
      "format": "date",
      "description": "Data snapshotului ONRC (Registrul Comerțului) din care vin datele de registru. ONRC publică lunar. null pentru firmele pe care ONRC nu le-a publicat încă."
    }
  },
  "$defs": {
    "CreditGuidance": {
      "type": "object",
      "description": "Recomandare acțională de creditare, derivată din bonitate + semnale dure (insolvență, inactivitate fiscală). Orientativă, nu o garanție.",
      "properties": {
        "stance": {
          "type": "string",
          "enum": [
            "termen",
            "avans-partial",
            "doar-avans"
          ],
          "description": "Poziția recomandată față de un termen de plată."
        },
        "termDays": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Termenul net sugerat, în zile. null = fără cont deschis (doar avans)."
        },
        "exposureRon": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Plafonul de expunere orientativ (RON). null când nu se recomandă credit."
        },
        "summary": {
          "type": "string",
          "description": "Propoziție acțională, gata de afișat."
        }
      }
    },
    "FinancialHealth": {
      "type": "object",
      "description": "Scor de bonitate determinist, explicabil.",
      "properties": {
        "klass": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "Solidă",
            "Stabilă",
            "Fragilă",
            "Critică"
          ]
        },
        "score": {
          "type": [
            "integer",
            "null"
          ],
          "description": "0–100"
        }
      }
    },
    "FinancialYear": {
      "type": "object",
      "properties": {
        "year": {
          "type": "integer"
        },
        "turnover": {
          "type": [
            "integer",
            "null"
          ]
        },
        "netResult": {
          "type": [
            "integer",
            "null"
          ]
        },
        "totalDebt": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Datorii totale (bilanțul public MF nu separă curente de termen lung)."
        },
        "equity": {
          "type": [
            "integer",
            "null"
          ]
        },
        "employees": {
          "type": [
            "integer",
            "null"
          ]
        },
        "currentAssets": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Active circulante (I2). Poate lipsi pentru bilanțurile ingestate mai devreme."
        },
        "fixedAssets": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Active imobilizate (I1)."
        },
        "grossProfit": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Profit/pierdere brut(ă) (I16/I17)."
        },
        "subscribedCapital": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Capital subscris vărsat (I11)."
        }
      }
    }
  }
}