Càlcul i format dels valors
Com s'explica al Model de dades, les taules de valors emmagatzemen dades en brut (value = numerador, value2 = denominador) i no el número final que es mostra. Aquesta pàgina documenta com es transforma aquesta dada en brut en el valor visible, i quants decimals s'apliquen.
On viu aquesta lògica
La definició està duplicada en dos llocs que han d'estar sincronitzats:
| Capa | Fitxer | Ús |
|---|---|---|
| Backend | src/Util/IndicatorCalculator.php | Càlcul en exportacions CSV i processos interns |
| Frontend | src/utils/indicators.js | Càlcul del valor mostrat a la UI (mapes, gràfics, taules) |
Mantenir-los sincronitzats
Si afegiu o modifiqueu el càlcul d'un indicador, heu d'aplicar el canvi als dos fitxers. Una divergència fa que el CSV exportat i la UI mostrin números diferents.
Funcions de càlcul
Cada indicador té assignada una funció que rep la fila de dades (d, amb d.value i d.value2) i retorna el valor a mostrar. Les funcions de ràtio fan fallback a value quan no hi ha value2.
| Funció | Fórmula | Quan s'usa |
|---|---|---|
simple | value | El valor ja és el final (renda, índex, recompte) |
simplePerHundred | value × 100 | El valor és una fracció 0–1 que es vol en % |
simplePerThousand | value × 1000 | Fracció que es vol per mil |
percent | (value × 100) / value2 | Percentatges i "per cada 100 habitants" |
percentMonthly | (value × 12 × 100) / value2 | Percentatge a partir de dada mensual anualitzada |
perThousand | (value × 1000) / value2 | Taxes per mil habitants |
perTenThousand | (value × 10000) / value2 | Taxes per 10.000 habitants |
perHundredThousand | (value × 100000) / value2 | Taxes per 100.000 habitants |
perUnit | value / value2 | Ràtios sense escalar (p. ex. ràtio alumne/professor) |
diff | value − value2 | Diferència entre dos valors (p. ex. bretxa de gènere) |
diffPercent | ((value − value2) × 100) / (value + value2) | Diferència relativa percentual |
genderGap | ((value − value2) × 100) / value | Bretxa de gènere estàndard (Eurostat): quant menys és value2 respecte value |
Funcions de format textual
Alguns indicadors no mostren un número sinó una etiqueta. S'apliquen amb la propietat textFormat (a sobre del calculation, que sol ser simple):
| Funció | Mapatge |
|---|---|
baixaAlta | 1→LOW · 2→MEDIUM · 3→HIGH · 4→VERY_HIGH |
siNo | 0→NO · 1→SI |
actualitzat | 0→NO_ACTUALITZAT · 1→ACTUALITZAT |
(El text final que veu l'usuari per a cada etiqueta —p. ex. "Baixa", "Alta"— es resol via les etiquetes de llengua.)
Decimals
Cada indicador defineix tres valors de decimals:
| Clau | Aplica a |
|---|---|
decimals | El valor calculat/mostrat |
decimals1 | El numerador (value) quan es mostra desglossat |
decimals2 | El denominador (value2) quan es mostra desglossat |
Mapatge complet indicador → càlcul
Aquesta taula reflecteix src/utils/indicators.js. La columna "Família" indica el tipus segons el model de valors.
Les tres columnes d'unitats (U. numerador, U. denominador, U. final) no surten del backend, sinó del fitxer d'idioma del frontend src/locales/ca.json, per a cada indicador:
- U. numerador →
SDGS.{ods}.TARGETS.{fita}.INDICATORS.{indicador}.VALUES.1.UNIT— unitat del numerador (value). - U. denominador →
SDGS.{ods}.TARGETS.{fita}.INDICATORS.{indicador}.VALUES.2.UNIT— unitat del denominador (value2); buida en els indicadors simples, que no tenenvalue2. - U. final →
SDGS.{ods}.TARGETS.{fita}.INDICATORS.{indicador}.UNIT— unitat del valor final ja calculat.
Un guió (—) indica que aquella unitat és buida al ca.json. Les mateixes claus existeixen a es.json i en.json amb la traducció corresponent; aquesta taula mostra el català.
| Indicador | Funció | Família | U. numerador | U. denominador | U. final | decimals | decimals1 | decimals2 | Format text |
|---|---|---|---|---|---|---|---|---|---|
| 1.1.1 | simple | Simple | — | — | % | 1 | 1 | 0 | |
| 1.2.1 | simple | Simple | % | — | % | 2 | 2 | 0 | |
| 1.2.2 | simple | Simple | € | — | € | 0 | 0 | 0 | |
| 1.2.3 | perThousand | Ràtio | socis/es | persones | socis/es/1.000 hab. | 2 | 0 | 0 | |
| 1.3.1 | perTenThousand | Ràtio | persones | persones | persones/10.000 hab. | 2 | 0 | 0 | |
| 1.3.2 | percent | Ràtio | persones (0-14 i 65+) | persones (15-64) | % | 1 | 0 | 0 | Índex de dependència (des de 2021) |
| 1.4.1 | percent | Ràtio | persones | persones | % | 2 | 0 | 1 | |
| 1.4.2 | percent | Ràtio | pensions | persones | % | 2 | 0 | 0 | |
| 1.5.1 | perTenThousand | Ràtio | refugis | persones | refugis/10.000 hab. | 2 | 0 | 0 | |
| 2.1.1 | percent | Ràtio | ha | ha | % | 2 | 2 | 2 | |
| 2.3.1 | percent | Ràtio | ha | persones | ha/100 hab. | 2 | 2 | 0 | |
| 2.3.2 | percent | Ràtio | persones | persones | % | 2 | 1 | 1 | |
| 2.3.3 | percent | Ràtio | ha | ha | % | 2 | 0 | 0 | |
| 2.3.4 | percent | Ràtio | explotacions | explotacions | % | 2 | 0 | 0 | |
| 3.4.1 | percent | Ràtio | persones | persones | % | 2 | 0 | 0 | |
| 3.4.2 | simple | Simple | anys | — | anys | 2 | 2 | 0 | |
| 3.4.3 | perTenThousand | Ràtio | equipaments | persones | equipaments/10.000 hab. | 2 | 0 | 0 | |
| 3.6.1 | perTenThousand | Ràtio | persones | persones | persones/10.000 hab. | 2 | 0 | 0 | |
| 3.9.1 | simple | Simple | µg/m³ | — | µg/m³ | 1 | 1 | 0 | Mitjana anual NO₂ per ZQA |
| 3.9.2 | simple | Simple | µg/m³ | — | µg/m³ | 1 | 1 | 0 | Mitjana anual PM10 per ZQA |
| 3.9.3 | simple | Simple | µg/m³ | — | µg/m³ | 1 | 1 | 0 | Mitjana anual PM2.5 per ZQA |
| 4.1.1 | percent | Ràtio | persones | persones | % | 2 | 0 | 0 | |
| 4.1.2 | percent | Ràtio | alumnes | alumnes | % | 2 | 0 | 0 | |
| 4.2.1 | percent | Ràtio | persones | persones | % | 2 | 0 | 0 | |
| 4.4.1 | percent | Ràtio | persones | persones | % | 2 | 0 | 0 | |
| 4.4.2 | percent | Ràtio | persones | persones | % | 2 | 0 | 0 | |
| 4.4.3 | percent | Ràtio | persones | persones | % | 2 | 0 | 0 | |
| 4.4.4 | percent | Ràtio | persones | persones | % | 2 | 0 | 0 | |
| 4.5.1 | perUnit | Ràtio | dones | homes | — | 2 | 0 | 0 | |
| 4.a.1 | perUnit | Ràtio | alumnes | professor/es | alumn./prof. | 2 | 0 | 0 | |
| 5.1.1 | diff | Diferència | % | % | p.p. | 2 | 2 | 2 | |
| 5.1.2 | genderGap | Pensioner-weighted | € (homes) | € (dones) | % | 1 | 0 | 0 | Agrupacions: pool ponderat per pensionistes |
| 5.5.1 | percent | Ràtio | càrrecs | càrrecs | % | 2 | 0 | 0 | |
| 5.c.1 | percent | Ràtio | dones | dones | % | 2 | 1 | 1 | |
| 5.c.2 | percent | Ràtio | dones | dones | % | 2 | 1 | 0 | |
| 6.1.1 | simple | Simple | €/m³ | — | €/m³ | 3 | 3 | 0 | |
| 6.4.1 | perUnit | Ràtio | m³ | persones | m³/hab. | 2 | 0 | 0 | |
| 7.1.1 | percent | Ràtio | € | € | % | 2 | 2 | 2 | |
| 7.2.1 | percent | Ràtio | kWh | kWh | % | 2 | 1 | 1 | |
| 7.2.2 | perThousand | Ràtio | punts | persones | punts/1.000 hab. | 2 | 0 | 0 | |
| 7.2.3 | perTenThousand | Ràtio | matriculacions | persones | matriculacions/10.000 hab. | 2 | 0 | 0 | |
| 7.2.4 | perThousand | Ràtio | kW | persones | kW/1.000 hab. | 2 | 0 | 0 | |
| 7.3.1 | perUnit | Ràtio | kWh | persones | kWh/hab. | 2 | 1 | 0 | |
| 7.3.2 | percent | Ràtio | habitatges | habitatges | % | 2 | 0 | 0 | |
| 8.2.1 | simple | Simple | € | — | € | 0 | 0 | 0 | |
| 8.3.1 | percent | Ràtio | persones | persones | % | 2 | 0 | 0 | |
| 8.3.2 | perThousand | Ràtio | establiments | persones | establiments/1.000 hab. | 2 | 0 | 0 | |
| 8.3.3 | simple | Simple | — | — | % | 1 | 1 | 0 | |
| 8.3.4 | percent | Ràtio | empreses | empreses | % | 2 | 0 | 0 | |
| 8.5.1 | percent | Ràtio | persones | persones | % | 2 | 1 | 0 | |
| 8.5.2 | percent | Ràtio | persones | persones | % | 2 | 1 | 0 | |
| 8.9.1 | perTenThousand | Ràtio | places | persones | places/10.000 hab. | 2 | 0 | 0 | |
| 9.1.1 | simplePerHundred | Simple | — | — | % | 2 | 2 | 0 | |
| 9.2.1 | percent | Ràtio | persones | persones | % | 2 | 0 | 0 | |
| 9.5.1 | perTenThousand | Ràtio | empreses | persones | empreses/10.000 hab. | 2 | 0 | 0 | |
| 9.5.2 | percent | Ràtio | persones | persones | % | 2 | 0 | 0 | |
| 9.c.1 | simplePerHundred | Simple | — | — | % | 2 | 2 | 0 | |
| 10.1.1 | simple | Simple | % | — | % | 1 | 1 | 0 | |
| 10.1.2 | simple | Simple | — | — | — | 1 | 1 | 0 | |
| 10.1.3 | simple | Simple | — | — | — | 1 | 1 | 0 | |
| 10.1.4 | simple | Simple | — | — | €/habitant | 0 | 0 | 0 | |
| 10.4.1 | simple | Simple | % | — | % | 2 | 2 | 0 | |
| 10.4.2 | simple | Simple | — | — | % | 2 | 2 | 0 | |
| 11.1.1 | percentMonthly | Ràtio | € | € | % | 2 | 2 | 0 | |
| 11.2.1 | perTenThousand | Ràtio | persones | persones | persones/10.000 hab. | 2 | 0 | 0 | |
| 11.3.1 | percent | Ràtio | ha | ha | % | 2 | 2 | 2 | |
| 11.3.2 | simple | Simple | m²/hab. | — | m²/hab. | 2 | 2 | 0 | |
| 11.4.1 | perUnit | Ràtio | m² | persones | m²/hab | 2 | 2 | 0 | |
| 11.4.2 | perTenThousand | Ràtio | equipaments | persones | equip./10.000 habitants | 2 | 0 | 0 | |
| 11.6.1 | perThousand | Ràtio | t | persones | kg/hab/any | 2 | 2 | 0 | |
| 11.6.2 | percent | Ràtio | t | t | % | 2 | 2 | 2 | |
| 11.7.1 | perUnit | Ràtio | m² | habitants | m²/hab | 2 | 2 | 0 | |
| 12.1.1 | perHundredThousand | Ràtio | instal·lacions | habitants | instal·lacions/100.000 hab. | 2 | 0 | 0 | |
| 12.5.1 | percent | Ràtio | t | t | % | 2 | 2 | 2 | |
| 12.5.2 | perThousand | Ràtio | t | persones | kg/hab/any | 2 | 2 | 0 | |
| 13.1.1 | simple | Simple | — | — | — | 0 | 0 | 0 | baixaAlta |
| 13.2.1 | perUnit | Ràtio | kgCO₂ | persones | kgCO₂/hab. | 2 | 2 | 0 | |
| 13.2.2 | simple | Simple | kgCO₂/kWh | — | kgCO₂/kWh | 2 | 2 | 0 | |
| 14.1.1 | simple | Simple | % | — | % | 2 | 2 | 0 | |
| 14.2.1 | simple | Simple | % | — | % | 2 | 2 | 0 | |
| 15.1.1 | simple | Simple | % | — | % | 2 | 2 | 0 | |
| 15.1.2 | simple | Simple | % | — | % | 2 | 2 | 0 | |
| 15.2.1 | simple | Simple | % | — | % | 2 | 2 | 0 | |
| 15.4.1 | percent | Ràtio | ha | ha | % | 2 | 2 | 2 | |
| 16.6.1 | simple | Simple | — | — | — | 2 | 0 | 0 | |
| 16.7.1 | percent | Ràtio | persones | persones | % | 2 | 0 | 0 | |
| 16.7.2 | simple | Simple | — | — | — | 0 | 0 | 0 | actualitzat |
| 16.10.1 | simple | Simple | — | — | — | 1 | 1 | 0 | |
| 17.1.1 | perUnit | Ràtio | € | persones | €/hab | 2 | 2 | 0 | |
| 17.1.2 | perUnit | Ràtio | € | persones | €/hab | 2 | 2 | 0 | |
| 17.2.1 | perUnit | Ràtio | € | persones | €/hab. | 2 | 2 | 0 | |
| 17.17.1 | perHundredThousand | Ràtio | entitats | persones | entitats/100.000 hab. | 2 | 0 | 0 | |
| 17.17.2 | perHundredThousand | Ràtio | entitats | persones | entitats/100.000 hab. | 2 | 0 | 0 |
Exemple complet
L'indicador 3.4.1 ("% de població de 65 anys o més sobre el total") es defineix com percent:
- L'importador ETL emmagatzema, per a cada municipi i any:
value= població de 65+ anys (numerador)value2= població total (denominador)
- El frontend aplica
percent:(value × 100) / value2→ p. ex.(3.200 × 100) / 16.000 = 20,00 % - Es mostra amb
decimals: 2→ 20,00 % - Per a una comarca, l'estratègia d'agrupació suma tots els
valuei tots elsvalue2dels municipis del grup abans de dividir, de manera que el percentatge comarcal és correcte (i no una mitjana de percentatges).