La fórmula en una línia.
score_global = Σ (factor_i × pes_i)
= 0.30 × concentracio_proveidor
+ 0.25 × negociats_sense_publi
+ 0.15 × baixa_baixa
+ 0.10 × prorrogues
+ 0.20 × eventualitat_rltCada factor és un número 0..1 (winsoritzat al p95 per estabilitzar outliers). El resultat es multiplica per 100 per llegir-se com a percentatge.
Baixa
< 30
Mitja
30–60
Alta
> 60
Els cinc factors.
Concentració proveïdor
pes 30%- Fórmula
max(% importe top-1 proveïdor) / 100- Fonts
- PSCP / PSCP-Cat + dim.proveedores
- Interpretació
- Si un únic proveïdor concentra >50% del volum adjudicat per un organisme, el factor satura al 100%. Mesura captura. No prejutja qualitat tècnica.
- ⚠ Caveat
- Organismes amb molt poc volum (n<5 contractes) sortiran inflats. Filtrem per >= 3 contractes en finestra de 3 anys.
Negociats sense publicitat
pes 25%- Fórmula
% contractes amb procedimiento = "negociado_sin_publicidad"- Fonts
- fact.contratos.procedimiento (camp tipificat al CODICE)
- Interpretació
- Procediment legal però d'excepció. Una proporció alta de manera sostinguda mereix preguntar per la motivació tècnica de cada un.
- ⚠ Caveat
- No incloem 'menors' (legalment exempts), només negociats sense publicitat que justifiquen criteris d'urgència o singularitat.
Baixa baixa nominal
pes 15%- Fórmula
% contractes amb baixa < 5% sobre import licitat- Fonts
- fact.contratos.importe_licitado vs importe_adjudicado
- Interpretació
- Una baixa molt curta sostinguda pot indicar baix nivell de competència real o licitacions ajustades a l'oferta del proveïdor. No és per si sol irregular.
- ⚠ Caveat
- Inaplicable en serveis amb preus oficials o en obres amb projecte tancat — aquests es filtren del càlcul.
Pròrrogues
pes 10%- Fórmula
% contractes amb >= 1 pròrroga registrada- Fonts
- fact.contratos_prorrogues
- Interpretació
- Pròrrogues encadenades retarden noves licitacions i mantenen el mateix proveïdor. Pes baix perquè pot tenir causes operatives legítimes.
- ⚠ Caveat
- Si la ingesta no captura totes les pròrrogues (publicades en perfils diferents) el valor estarà subestimat — tractem com a límit inferior.
Eventualitat RLT
pes 20%- Fórmula
% places eventuals sobre total places ocupades del RLT- Fonts
- dim.puestos_rlt + dim.persona_puesto
- Interpretació
- Plantilla amb molts eventuals indica gestió per excepció i obre la porta a personalisme polític. Compara any contra any per detectar pujades sobtades.
- ⚠ Caveat
- Algunes substitucions per maternitat o IT temporals s'etiqueten 'eventual'. Filtrem per durada > 6 mesos.
Com llegir-ho bé.
- Un score alt no és prova d'irregularitat — detecta concentració estructural. Sempre cal contrastar.
- Mira el desglossament: dos organismes amb score 70 poden tenir perfils molt diferents. Un dominat per concentració, l'altre per negociats: el periodisme és diferent.
- Compara amb organismes del mateix tipus i mida. Una EPE petita no és comparable amb un ajuntament gran.
- Mira l'evolució temporal: un score que puja és una història; un score alt estable pot ser estructural i conegut.
- Cross-ref amb el timeline i el BORME. Un canvi al consell d'administració just abans d'una adjudicació singular val la pena preguntar.
Reproduibilitat
El codi de càlcul viu a apps/micaco-dades/sql/migrations/0016_risc_concentracio.sql. Els pesos són constants documentades a la vista pub.v_risc_factors. Cada organ exposa el seu desglossament a l'API:
GET /v1/observatori/organ/{organo_id}