Companii din Romania
Bundle de cunostinte OKF despre structura companiilor din Romania - denumiri oficiale, branduri, grupuri
Open source Repository Open in the app JSON README (API)
About
# Companii din Romania
Acest bundle documenteaza cunostinte despre structura si identitatea companiilor din Romania, intr-un format portabil si agent-friendly conform standardului Open Knowledge Format (OKF) v0.1.
## Concepte
- [Denumirea oficiala](companies/denumire-oficiala.md) - Cum identificam denumirea legala a unei firme
- [Brand](companies/brand.md) - Ce inseamna un brand si cum difera de denumirea firmei
- [Grup](companies/group.md) - Cum se organizeaza companiile in grupuri
## Despre acest bundle
Acest bundle este destinat echipelor care lucreaza cu date despre companii din Romania si au nevoie de un context structurat despre:
- Cum se numesc oficial firmele si unde verificam asta
- Diferenta dintre brand si entitate legala
- Cum sunt organizate companiile in grupuri corporatiste
Fiecare concept este documentat ca un fisier markdown independent, cu metadate YAML frontmatter, conform OKF v0.1.
Details
- Kind
- OKF bundles
- Topic
- Files & documents
- Publisher
- peviitor-ro
- Origin
- okf_github
- Category
- dados
- Version
- 0.1
- Stars
- 1
- Forks
- 1
- Open pull requests
- 1
- Last push
- 2026-07-17T09:41:27Z
- Repository state
- ativo
- Language
- PHP
- Added
- 2026-09-08 22:10:17
- Updated
- 2026-09-08 22:10:17
- Origin id
peviitor-ro/peviitor_core:knowledge/index.md
README
# peviitor_core Here is the core of the peviitor project. Mostly, it's about **data** and the **quality of data**. But it's also about getting the data you are searching for using a full-text indexed search engine. Workflows, pipelines and code that is validating the rules, keeping the index up-to-date is also part of peviitor_core. ## Job Model Schema | Field | Type | Required | Description and rules | |----------------|----------|----------|----------------------| | url | string | Yes | Full URL to the job detail page. unique. **url** must be valid HTTP/HTTPS URL, canonical job detail page| | title | string | Yes | Exact position title. **title** max 200 chars, no HTML, trimmed whitespace, **DIACRITICS ACCEPTED** (ăâîșțĂÂÎȘȚ)| | company | string | No | Name of the hiring company. Real name. Full name. Use uppercase always. not just a brand or a code. Legal name. **company** must match exactly Company.name (case insensitive, **DIACR[...] | cif | string | No | CIF/CUI. Due to the fact that Systematic SRL exist with same name in 3 different counties Bihor, Arad, Timis | | location | string[] | No | Location or detailed address. **location** Romanian cities/addresses, **DIACRITICS ACCEPTED** (ex: "București", "Cluj-Napoca"). multi-valued, stored as array| | tags | string[] | No | Tag-uri skills/educație/experiență. **tags** lowercase, max 20 entries, standardized values only, **NO DIACRITICS**| | workmode | string | No | "remote", "on-site", "hybrid". **workmode** only: "remote", "on-site", "hybrid"| | date | date | No | Data scrape/indexare (ISO8601). **date** = UTC ISO8601 timestamp of scrape (ex: "2026-01-18T10:00:00Z")| | status | string | No | "scraped", "tested", "published", "verified". **status** starts "scraped", progresses: scraped → tested → published → verified| | vdate | date | No | Verified date (ISO8601). **vdate** set only when validation="verified"| | expirationdate | date | No | Data expirare estimată job. **expirationdate** = vdate + 30 days max, or extract from job page| | salary | string | No | Interval salarial + currency (ex: "5000-8000 RON", "4000 EUR"). **salary** format: "MIN-MAX CURRENCY" ; must be a string not an array.| ## Job Status Flow Job status follows this progression: `scraped` → (`tested` OR `verified`) → `published` | Status | Meaning | When to Use | |--------|---------|-------------| | `scraped` | Newly scraped, not validated yet | Default after scraping | | `tested` | URL works, job exists but couldn't extract full details | Page blocked by CAPTCHA, didn't load properly, missing salary/tags/workmode | | `verified` | Fully scraped with all details | All fields extracted: company, cif, salary, tags, workmode | | `published` | Imported from jobs core | Old validator flow - jobs imported to main job index | Notes: - tested jobs can be re-validated later when more data becomes available - vdate (verified date) is set only when status becomes tested or verified - Jobs with status verified are considered valid and ready for publication > **Note**: Fields marked as `string[]` are multi-valued arrays. In SOLR/OpenSearch these are stored as arrays (e.g., `["București", "Cluj-Napoca"]`). ## Company Model Schema | Field | Type | Required | Description | |-----------|----------|----------|-------------| | id | string | Yes | CIF/CUI of the company (e.g. "12345678"). **id** = exact CIF/CUI 8 digits (no RO prefix). | | company | string | Yes | Exact name for job matching. **company** = legal name from Trade Register, **DIACRITICS REQUIRED** (e.g. "Tehnologia Informației"). Use uppercase| | brand | string | No | Commercial brand name (e.g. "ORANGE", "EPAM"). Used for display purposes. | | group | string | No | Parent company group (e.g. "Orange Group", "EPAM Systems"). | | status | string | No | Status: "activ", "suspendat", "inactiv", "radiat". If company status is not active, remove jobs; also remove company. **status** only: "activ", "suspendat", "inactiv", "radiat". | | location | string[] | No | Location or detailed address. **location** Romanian cities/addresses, **DIACRITICS ACCEPTED** (e.g. "București", "Cluj-Napoca"). multi-valued, stored as array | | website | string[] | No | Official company website. **website** must be a valid HTTP/HTTPS URL, preferably canonical, without trailing slash (e.g. "https://www.example.ro"). multi-valued, stored as array | | career | string[] | No | Official company career page. **career** must be a valid HTTP/HTTPS URL, preferably canonical, without trailing slash, pointing to the jobs/careers section (e.g. "https://www.example.ro/careers"). multi-valued, stored as array | | lastScraped | string | No | Date of last scrape in ISO8601 format (e.g. "2026-02-20"). Used for tracking. | | scraperFile | string | No | Name of the scraper file used (e.g. "epam.md", "orange.md"). Used for reference. | > **Note**: Fields marked as `string[]` are multi-valued arrays. In SOLR/OpenSearch these are stored as arrays (e.g., `["https://example.com", "https://careers.example.com"]`). ## Technologies ### Search & Indexing Engines | Technology | Status | Use Case | Notes | |------------|--------|----------|-------| | **Apache SOLR** | ✅ Primary | Production indexing, diacritics RO, complex schemas | Job/Company/Auth models, cron integration | | **OpenSearch** | ✅ Primary | SOLR alternative, AWS compatible | Same schema, managed hosting | | **Elasticsearch** | ⚠️ Secondary | Legacy compatibility | Existing peviitor scrapers | | **Typesense** | 🚀 MVP/Prototype | Ultra-fast UI search (<50ms) | Typo-tolerant, developer friendly | ## Notes - Project is **OPEN SOURCE**. - Security and procedures related to ways of working will be part of the project. - How to connect and how to use it will be captured in **documentation**. - All pull requests will be **documented**. - peviitor core is not a closed project but an **extensible** one. ## Key Benefits **Performance, reliability, recovery from disaster, scalability, and validity** are the most valuable benefits this project delivers. ### SOLR/OpenSearch Note * analyzer: "romanian" preserves diacritics ȘȚĂÂÎ * search: "Bucuresti" matches "București" automatically **Purpose**: Remove expired job listings automatically **Schedule**: Daily @ 02:00 AM EET **Logic**: - DELETE jobs WHERE `expirationdate` < NOW() AND `validation`="verified" - SOLR/OpenSearch: `delete_by_query` range query on `expirationdate` **Purpose**: Validate job URLs are still active **DAILY** **Schedule**: Daily @ 06:00 AM EET **Workflow**: 1. SELECT jobs WHERE `validation`="verified" AND `date` > 1 day ago 2. Parallel HTTP HEAD requests (max 1000 concurrent) to `job_link` 3. **404** → DELETE job immediately 4. **200 OK** → Parse content for "expirat"/"ocupat"/"închis"/"no longer available"/"filled" 5. **Invalid content** → SET `validation`="tested", schedule recheck in 24h 6. **Valid** → UPDATE `validation`="verified", `vdate`=NOW() **Max batch**: 50k jobs/day, prioritize newest first ## Plugins The following components are considered **plugins** for the peviitor core project: - BFF API — Backend-for-Frontend API layers that tailor data and endpoints for different clients. - UI — Web or mobile user interfaces and frontend components. - Scrapers — Automated data collectors that fetch and normalize job and company data. - Manual data validator — Tools or interfaces used by humans to validate and correct data. - Integrations — Connectors to external services (analytics, exporters, auth providers, etc.). #SOLR prod: https://solr.peviitor.ro