menjometre-cli
v2.1.0
Published
CLI tool for querying Menjometre public transparency data
Maintainers
Readme
menjometre-cli
Eina de línia de comandes per consultar les dades públiques de Menjometre — l'observatori independent de subvencions i contractes públics a Catalunya.
Totes les dades provenen de fonts oficials i públiques (RAISC, BORME, Dades Obertes de Catalunya).
IMPORTANT PER A AGENTS: Usa sempre --json per obtenir sortida estructurada parsejable. La sortida per defecte és una taula formatejada per humans.
Instal·lació ràpida
npm install -g menjometre-cli # instal·lació global
npx menjometre-cli stats # o executar sense instal·larRequereix Node.js >= 18. No cal autenticació ni clau API.
Arbre de decisió per a agents
Vull informació sobre una entitat concreta?
├── Tinc el CIF (ex: G08000011) → menjometre entity G08000011 --json
├── Tinc el slug (ex: ENTITAT-EXEMPLE) → menjometre entity ENTITAT-EXEMPLE --json
├── Tinc només el nom → menjometre search "nom entitat" --json
│ └── Agafa el camp `identifier` del primer resultat
│ └── menjometre entity <identifier> --json
└── Vull les subvencions/contractes individuals?
├── menjometre grants <identifier> --json
└── menjometre contracts <identifier> --json
Vull dades globals?
├── Xifres del dataset → menjometre stats --json
├── Ranking d'entitats → menjometre top --limit 50 --json
├── Xarxa de contactes → menjometre xarxa --limit 20 --json
│ └── Resultat en data.contacts[] (max --limit 100)
│ ├── Paginar → menjometre xarxa --limit 50 --offset 50 --json
│ └── Filtrar per conflicte → menjometre xarxa --vincle-filter conflicte_directe --json
├── Perfil complet d'una persona → menjometre persona "Nom Cognom" --json
├── Convenis d'una entitat → menjometre convenis <identifier> --json
├── Transferències pressupostàries → menjometre pressupostos <identifier> --json
├── Estats financers anuals → menjometre financials <identifier> --json
├── Exportació massiva → menjometre export --format json
└── Equivalències d'un import → menjometre equivalencies 5000000 --json
Vull dades d'un càrrec públic?
├── Perfil i puntuació → menjometre politician "nom cognom" --json
├── Vincles amb entitats → menjometre vincles "nom cognom" --json
├── Declaracions patrimonials → menjometre declarations "nom cognom" --json
└── Dades per partits → menjometre politics --view parties --json
└── menjometre politics --view politicians --party "PSC" --json
Vull enviar feedback?
└── menjometre feedback bug "descripció del problema amb almenys 20 caràcters"Conceptes clau
Identificadors d'entitat
Cada entitat té fins a 3 identificadors. L'API accepta qualsevol dels tres:
| Tipus | Exemple | Descripció |
|---|---|---|
| Slug | ENTITAT-EXEMPLE | Nom normalitzat (majúscules, sense accents, guions). És el més comú. |
| CIF | G08000011 | Codi d'identificació fiscal. Pot ser null (~85% entitats no en tenen). |
| Slug en minúscules | entitat-exemple | També funciona, es resol automàticament. |
L'API resol l'identificador en 4 passos: CIF → slug exacte → slug en majúscules → taula de redireccions de slugs antics.
Què és el Menjometre Score
Puntuació de 0 a 100 que mesura patrons estadístics en la distribució de fons públics. Llindar mínim: 25.000 € en fons públics totals. Per sota, menjometre_score = 0.
Veure metodologia completa: menjometre.cat/metodologia
Referència de comandes
search — Cercar entitats i persones
Cerca per nom o CIF. Retorna fins a 8 resultats ordenats per import total descendent.
menjometre search "nom entitat" --jsonResposta JSON (array):
[
{
"type": "entity",
"identifier": "ENTITAT-EXEMPLE",
"name": "Entitat Exemple",
"cif": "G08000011",
"total_amount": 1500000,
"municipality": "Barcelona",
"entity_count": null
},
{
"type": "person",
"identifier": "nom-cognom",
"name": "Nom Cognom",
"cif": null,
"total_amount": 500000,
"municipality": null,
"entity_count": 5
}
]| Camp | Descripció |
|---|---|
| type | "entity" o "person" — indica el tipus de resultat |
| identifier | Slug (entitats) o nom (persones) — per passar a entity |
| entity_count | Nombre d'entitats vinculades (només per a persones, null per a entitats) |
entity — Perfil complet d'una entitat
Accepta CIF, slug o slug en minúscules.
menjometre entity ENTITAT-EXEMPLE --json
menjometre entity G08000011 --jsonResposta JSON (objecte):
{
"name": "Entitat Exemple",
"cif": "G08000011",
"slug": "ENTITAT-EXEMPLE",
"beneficiary_type": "JSA",
"org_type": null,
"municipality": "Barcelona",
"comarca": "Barcelonès",
"vegueria": null,
"total_amount": 1500000,
"total_grants": 45,
"first_grant_year": 2019,
"last_grant_year": 2025,
"total_contracts": 12,
"total_contract_amount": 300000,
"sole_source_pct": 25.0,
"fragmentation_risk": false,
"total_public_funds": 1800000,
"menjometre_score": 52.3,
"score_volume": 65.0,
"score_frequency": 70.0,
"score_concentration": 48.5,
"score_recurrence": 80.0,
"score_dominance": 30.0,
"score_accountability": 20.0,
"rank": 5000,
"percentile": 98.5,
"is_premsa": false,
"is_tercer_sector": true,
"is_person": false,
"website": "https://exemple.cat",
"org_description": null,
"equivalencies": [
{ "label": "Mestres d'escola/any", "icon": "👩🏫", "count": 42, "annual_cost": 42000 }
],
"url": "https://menjometre.cat/entitat/entitat-exemple"
}Camps importants per a agents:
| Camp | Tipus | Notes |
|---|---|---|
| total_public_funds | number | Xifra principal: subvencions + contractes combinats |
| menjometre_score | number | 0-100, 0 = per sota del llindar o sense puntuar |
| rank | number|null | Posició al ranking per fons públics. null si no rankejat |
| percentile | number|null | Percentil (98.5 = top 1.5%) |
| sole_source_pct | number|null | % contractes per procediment negociat sense publicitat (0-100) |
| equivalencies | array | Llista d'equivalències en serveis públics per total_public_funds |
| url | string | Enllaç directe a la fitxa web de l'entitat |
| cif | string|null | Pot ser null — ~85% d'entitats no tenen CIF |
| score_accountability | number|null | null = no hi ha dades de rendició de comptes |
top — Ranking d'entitats
menjometre top --json # top 10 per puntuació
menjometre top --limit 50 --sort amount --json # top 50 per import
menjometre top --type premsa --json # només mitjans de comunicació
menjometre top --type tercer_sector --json # només tercer sector
menjometre top --type partit_sindicat --json # partits i sindicats
menjometre top --type admin_publica --json # administracions públiques
menjometre top --sort contracts --json # per import de contractes
menjometre top --year 2024 --json # entitats actives el 2024| Paràmetre | Valors | Per defecte |
|---|---|---|
| --limit | 1-100 | 10 |
| --sort | score, amount, contracts | score |
| --type | all, premsa, tercer_sector, partit_sindicat, admin_publica | all |
| --year | Any (1900-2100) | (tots) |
stats — Resum del dataset
menjometre stats --jsonResposta JSON (objecte):
{
"total_entities": 216659,
"total_grants": 19496300,
"total_amount": 25402449638,
"total_contracts": 1542714,
"total_contract_amount": 75767672755,
"scored_entities": 276487,
"date_range": { "first_year": 2026, "last_year": 2028 },
"last_sync": null
}| Camp | Descripció |
|---|---|
| total_amount | EUR totals en subvencions (no inclou contractes) |
| total_contract_amount | EUR totals en contractes públics |
| scored_entities | Entitats amb menjometre_score > 0 |
| date_range | Rang d'anys del dataset |
| last_sync | Timestamp ISO de l'última sincronització, o null |
equivalencies — Calculadora d'equivalències
Converteix un import en EUR a equivalències en serveis públics catalans. Càlcul pur, no consulta la base de dades.
menjometre equivalencies 1000000 --jsonResposta JSON:
{
"amount": 1000000,
"equivalencies": [
{ "key": "t_jove", "label": "Abonaments T-jove anuals", "icon": "🚌", "count": 5681, "annual_cost": 176, "tier": "personal", "source": "ATM, 44€/trimestre × 4" },
{ "key": "teachers", "label": "Mestres d'escola/any", "icon": "👩🏫", "count": 23, "annual_cost": 42000, "tier": "professional", "source": "Dept. Educació 2024" }
]
}Només retorna equivalències amb count >= 1. Ordenades de menor a major cost anual.
grants — Llistat de subvencions
menjometre grants ENTITAT-EXEMPLE --json
menjometre grants ENTITAT-EXEMPLE --year 2024 --jsonResposta JSON (array):
[
{
"year": 2024,
"amount": 150000,
"department": "Departament d'Empresa i Treball",
"purpose": "Foment de l'ocupació",
"bdns_code": "123456",
"source": "RAISC"
}
]contracts — Llistat de contractes
menjometre contracts ENTITAT-EXEMPLE --json
menjometre contracts G08000011 --year 2023 --jsonResposta JSON (array):
[
{
"year": 2023,
"amount": 85000,
"amount_with_vat": 102850,
"organ": "Ajuntament exemple",
"contract_type": "Serveis",
"procedure_type": "Obert",
"num_bidders": 4,
"description": "Servei de manteniment"
}
]xarxa — Xarxa de contactes
Consulta persones vinculades a múltiples entitats a partir de dades oficials (BORME, registres públics).
menjometre xarxa --json # top 20 contactes
menjometre xarxa --limit 50 --json # top 50
menjometre xarxa --search "nom" --json # filtrar per nom
menjometre xarxa --offset 20 --limit 20 --json # paginació| Paràmetre | Descripció | Per defecte |
|---|---|---|
| --search | Filtrar per nom de persona | (tots) |
| --limit | Nombre de resultats (max 100) | 20 |
| --offset | Desplaçament per paginació | 0 |
| --vincle-filter | Filtre de vincle (veure sota) | (cap) |
Valors acceptats per --vincle-filter:
| Valor | Descripció |
|---|---|
| concurrent_privat | Persones amb rol actiu al sector privat |
| restringit | Rols restringits segons la Llei 13/2005 |
| qualsevol | Qualsevol vincle detectat |
| conflicte_directe | Conflicte d'interès directe amb l'entitat |
| conflicte_potencial | Conflicte d'interès potencial |
Resposta JSON:
{
"contacts": [
{
"person_name": "Nom Cognom",
"entity_count": 12,
"total_connections": 12,
"max_strength": 3,
"total_amount": 5000000,
"entity_slugs": ["ENTITAT-A", "ENTITAT-B"],
"entity_names": ["Entitat A", "Entitat B"]
}
],
"total_count": 5964
}persona — Perfil complet d'una persona
Retorna totes les entitats vinculades a una persona (per rols BORME o polítics) i el seu historial de càrrecs al registre mercantil. La resolució es fa per nom exacte: si no el coneixes, cerca'l abans amb xarxa --search o search.
menjometre persona "Nom Cognom" --json
menjometre persona "Nom Cognom" # taula formatejada
menjometre persona "Nom Cognom" --csv # només la llista d'entitatsResposta JSON:
{
"name": "Nom Cognom",
"entity_count": 2,
"total_public_funds": 1500000,
"total_grants": 500000,
"total_contracts": 1000000,
"entities": [
{
"entity_slug": "ENTITAT-EXEMPLE",
"entity_name": "Entitat Exemple",
"total_amount": 500000,
"total_grants": 12,
"total_contract_amount": 1000000,
"total_contracts": 8,
"total_public_funds": 1500000,
"menjometre_score": 55.0,
"sole_source_pct": 0,
"roles": ["Administrador únic"],
"role_source": "BORME"
}
],
"borme_roles": [
{
"company_name": "Empresa Exemple SL",
"company_nif": "B12345678",
"relation_type": "Administrador",
"date_start": "2019-05-10",
"date_end": null,
"is_active": true
}
]
}| Camp | Descripció |
|---|---|
| entities[].roles | Array de càrrecs d'aquella persona en l'entitat |
| entities[].role_source | Font del càrrec (ex: BORME, Parlament) |
| borme_roles[].company_nif | Només CIFs corporatius (A-W). NIFs personals es retornen com a null per RGPD |
--csvexporta només la llistaentitiesperquèborme_rolesté una forma diferent.
export — Exportació massiva
Exporta dades de fins a 10.000 entitats.
menjometre export --json # totes les entitats amb subvencions
menjometre export --type premsa --json # només mitjans de comunicació
menjometre export --format csv # format CSV| Paràmetre | Valors | Per defecte |
|---|---|---|
| --type | all, premsa | all |
| --format | json, csv | json |
feedback — Enviar feedback
Envia suggeriments o reporta errors directament a l'equip de Menjometre.
menjometre feedback bug "El resultat de cerca no mostra el municipi correcte per a l'entitat X"
menjometre feedback feature "Seria útil poder filtrar subvencions per departament"| Paràmetre | Valors |
|---|---|
| category | bug, feature, improvement, other |
| description | Mínim 20 caràcters |
convenis — Convenis de cooperació
Llista els convenis de cooperació d'una entitat amb la Generalitat.
menjometre convenis ENTITAT-EXEMPLE --json
menjometre convenis ENTITAT-EXEMPLE --year 2024 --jsonResposta JSON (array):
[
{
"year": 2024,
"date": "2024-03-15",
"title": "Conveni de col·laboració per a serveis socials",
"department": "Departament de Drets Socials",
"category": "Serveis socials",
"amount": 150000,
"amount_generalitat": 100000,
"document_url": "https://...",
"is_active": true,
"expiry_date": "2025-12-31"
}
]financials — Estats financers anuals
Mostra els estats financers anuals d'una entitat (ingressos, subvencions, personal, dependència).
menjometre financials ENTITAT-EXEMPLE --jsonResposta JSON (array):
[
{
"year": 2024,
"revenue": 500000,
"grant_income": 300000,
"personnel_cost": 200000,
"grant_dependency_pct": 60.0,
"personnel_cost_pct": 40.0,
"source": "SODA"
}
]politician — Perfil de càrrec públic
Consulta el perfil d'un càrrec públic amb puntuacions. Les dades provenen del Parlament de Catalunya i registres públics.
menjometre politician "nom cognom" --jsonResposta JSON (objecte):
{
"name": "Nom Cognom",
"party": "Partit",
"position": "Diputat/ada",
"department": null,
"salary_eur": 85000,
"score_total": 45.2,
"score_opacitat": 60.0,
"score_conflicte": 30.0,
"score_efecte_carrec": 20.0,
"score_acumulacio": 50.0,
"score_retribucio": 70.0,
"vincles_count": 3,
"declarations_count": 2
}vincles — Vincles entre càrrec públic i entitats
Mostra els vincles entre un càrrec públic i entitats que reben fons públics (dades BORME).
menjometre vincles "nom cognom" --jsonResposta JSON (array):
[
{
"company_name": "Empresa SL",
"company_nif": "B12345678",
"borme_role": "Administrador",
"borme_role_type": "private",
"entity_name": "Entitat vinculada",
"grants_eur": 500000,
"contracts_eur": 200000,
"total_public_funds": 700000,
"date_start": "2020-01-15",
"date_end": null
}
]declarations — Declaracions patrimonials
Mostra les declaracions patrimonials d'un càrrec públic (dades del Parlament de Catalunya).
menjometre declarations "nom cognom" --jsonResposta JSON (array):
[
{
"legislature": 14,
"declaration_date": "2024-03-15",
"real_estate_count": 2,
"real_estate_total": 350000,
"financial_assets_total": 50000,
"vehicles_count": 1,
"debts_total": 120000,
"total_assets": 400000,
"total_patrimony_net": 280000
}
]Formats de sortida
| Flag | Format | Ús |
|---|---|---|
| (cap) | Taula formatejada amb colors | Lectura humana al terminal |
| --json | JSON estructurat | Agents, scripts, pipelines |
| --csv | CSV amb capçaleres | Fulls de càlcul, anàlisi de dades |
# Exportar ranking a CSV
menjometre top --limit 100 --csv > ranking.csvConfiguració
# Per defecte: producció
export MENJOMETRE_API_BASE=https://menjometre.cat
# Desenvolupament local
export MENJOMETRE_API_BASE=http://localhost:3000No cal autenticació. L'API és pública amb CORS obert.
Gestió d'errors
| Codi HTTP | Significat | Acció recomanada |
|---|---|---|
| 400 | Paràmetre invàlid | Revisar paràmetres |
| 404 | Entitat no trobada | Provar search primer per verificar que existeix |
| 429 | Massa peticions | Esperar i reintentar |
| 500 | Error intern del servidor | Reintentar després d'uns segons |
Errors retornen: {"error": "missatge descriptiu"}
API REST directa
Si prefereixes HTTP en lloc de la CLI:
| Endpoint | Equivalent CLI |
|---|---|
| GET /api/search?q=nom | menjometre search "nom" --json |
| GET /api/entity/SLUG | menjometre entity SLUG --json |
| GET /api/top?limit=10&sort_by=score | menjometre top --json |
| GET /api/stats | menjometre stats --json |
| GET /api/equivalencies?amount=5000000 | menjometre equivalencies 5000000 --json |
| GET /api/export/entity?identifier=SLUG&type=grants&format=json | menjometre grants SLUG --json |
| GET /api/export/entity?identifier=SLUG&type=contracts&format=json | menjometre contracts SLUG --json |
| GET /api/xarxa/contacts?limit=20 | menjometre xarxa --json |
| GET /api/xarxa/contacts?vincle_filter=conflicte_directe | menjometre xarxa --vincle-filter conflicte_directe --json |
| GET /api/xarxa/persona/NOM | menjometre persona "NOM" --json |
| GET /api/export?format=json | menjometre export --json |
| GET /api/export/entity?identifier=SLUG&type=convenis&format=json | menjometre convenis SLUG --json |
| GET /api/entity/SLUG/financials | menjometre financials SLUG --json |
| GET /api/politician/NOM | menjometre politician "NOM" --json |
| GET /api/politician/NOM/vincles | menjometre vincles "NOM" --json |
| GET /api/politician/NOM/declarations | menjometre declarations "NOM" --json |
| POST /api/feedback | menjometre feedback <category> <description> |
Base URL: https://menjometre.cat
Legal i RGPD
Aquesta eina consulta registres públics oficials:
- RAISC — Registre d'Ajuts i Subvencions de Catalunya (Generalitat de Catalunya)
- Dades Obertes de Catalunya — Contractació pública (Generalitat de Catalunya)
- BORME — Boletín Oficial del Registro Mercantil (Ministeri de Justícia)
- Declaracions patrimonials del Parlament de Catalunya
Base jurídica: Art. 6.1.e RGPD per a subvencions i contractes (missió d'interès públic, Llei 19/2014 de transparència); Art. 6.1.f RGPD per a dades del BORME (interès legítim, TJUE C-398/15). Cap dada personal és emmagatzemada per la CLI.
Les puntuacions son indicadors estadístics, no judicis ni acusacions. No han d'usar-se per a decisions creditícies, contractuals, laborals o administratives vinculants.
Drets RGPD (accés, rectificació, supressió, oposició): [email protected]
Codi font
- CLI: https://gitlab.com/menjometre/menjometre-cli (AGPL-3.0)
- Web + API: https://gitlab.com/menjometre/menjometre (AGPL-3.0)
