Vés al contingut

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:

CapaFitxerÚs
Backendsrc/Util/IndicatorCalculator.phpCàlcul en exportacions CSV i processos interns
Frontendsrc/utils/indicators.jsCà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órmulaQuan s'usa
simplevalueEl valor ja és el final (renda, índex, recompte)
simplePerHundredvalue × 100El valor és una fracció 0–1 que es vol en %
simplePerThousandvalue × 1000Fracció que es vol per mil
percent(value × 100) / value2Percentatges i "per cada 100 habitants"
percentMonthly(value × 12 × 100) / value2Percentatge a partir de dada mensual anualitzada
perThousand(value × 1000) / value2Taxes per mil habitants
perTenThousand(value × 10000) / value2Taxes per 10.000 habitants
perHundredThousand(value × 100000) / value2Taxes per 100.000 habitants
perUnitvalue / value2Ràtios sense escalar (p. ex. ràtio alumne/professor)
diffvalue − value2Diferència entre dos valors (p. ex. bretxa de gènere)
diffPercent((value − value2) × 100) / (value + value2)Diferència relativa percentual
genderGap((value − value2) × 100) / valueBretxa 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
baixaAlta1→LOW · 2→MEDIUM · 3→HIGH · 4→VERY_HIGH
siNo0→NO · 1→SI
actualitzat0→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:

ClauAplica a
decimalsEl valor calculat/mostrat
decimals1El numerador (value) quan es mostra desglossat
decimals2El 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. numeradorSDGS.{ods}.TARGETS.{fita}.INDICATORS.{indicador}.VALUES.1.UNIT — unitat del numerador (value).
  • U. denominadorSDGS.{ods}.TARGETS.{fita}.INDICATORS.{indicador}.VALUES.2.UNIT — unitat del denominador (value2); buida en els indicadors simples, que no tenen value2.
  • U. finalSDGS.{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à.

IndicadorFuncióFamíliaU. numeradorU. denominadorU. finaldecimalsdecimals1decimals2Format text
1.1.1simpleSimple%110
1.2.1simpleSimple%%220
1.2.2simpleSimple000
1.2.3perThousandRàtiosocis/espersonessocis/es/1.000 hab.200
1.3.1perTenThousandRàtiopersonespersonespersones/10.000 hab.200
1.3.2percentRàtiopersones (0-14 i 65+)persones (15-64)%100Índex de dependència (des de 2021)
1.4.1percentRàtiopersonespersones%201
1.4.2percentRàtiopensionspersones%200
1.5.1perTenThousandRàtiorefugispersonesrefugis/10.000 hab.200
2.1.1percentRàtiohaha%222
2.3.1percentRàtiohapersonesha/100 hab.220
2.3.2percentRàtiopersonespersones%211
2.3.3percentRàtiohaha%200
2.3.4percentRàtioexplotacionsexplotacions%200
3.4.1percentRàtiopersonespersones%200
3.4.2simpleSimpleanysanys220
3.4.3perTenThousandRàtioequipamentspersonesequipaments/10.000 hab.200
3.6.1perTenThousandRàtiopersonespersonespersones/10.000 hab.200
3.9.1simpleSimpleµg/m³µg/m³110Mitjana anual NO₂ per ZQA
3.9.2simpleSimpleµg/m³µg/m³110Mitjana anual PM10 per ZQA
3.9.3simpleSimpleµg/m³µg/m³110Mitjana anual PM2.5 per ZQA
4.1.1percentRàtiopersonespersones%200
4.1.2percentRàtioalumnesalumnes%200
4.2.1percentRàtiopersonespersones%200
4.4.1percentRàtiopersonespersones%200
4.4.2percentRàtiopersonespersones%200
4.4.3percentRàtiopersonespersones%200
4.4.4percentRàtiopersonespersones%200
4.5.1perUnitRàtiodoneshomes200
4.a.1perUnitRàtioalumnesprofessor/esalumn./prof.200
5.1.1diffDiferència%%p.p.222
5.1.2genderGapPensioner-weighted€ (homes)€ (dones)%100Agrupacions: pool ponderat per pensionistes
5.5.1percentRàtiocàrrecscàrrecs%200
5.c.1percentRàtiodonesdones%211
5.c.2percentRàtiodonesdones%210
6.1.1simpleSimple€/m³€/m³330
6.4.1perUnitRàtiopersonesm³/hab.200
7.1.1percentRàtio%222
7.2.1percentRàtiokWhkWh%211
7.2.2perThousandRàtiopuntspersonespunts/1.000 hab.200
7.2.3perTenThousandRàtiomatriculacionspersonesmatriculacions/10.000 hab.200
7.2.4perThousandRàtiokWpersoneskW/1.000 hab.200
7.3.1perUnitRàtiokWhpersoneskWh/hab.210
7.3.2percentRàtiohabitatgeshabitatges%200
8.2.1simpleSimple000
8.3.1percentRàtiopersonespersones%200
8.3.2perThousandRàtioestablimentspersonesestabliments/1.000 hab.200
8.3.3simpleSimple%110
8.3.4percentRàtioempresesempreses%200
8.5.1percentRàtiopersonespersones%210
8.5.2percentRàtiopersonespersones%210
8.9.1perTenThousandRàtioplacespersonesplaces/10.000 hab.200
9.1.1simplePerHundredSimple%220
9.2.1percentRàtiopersonespersones%200
9.5.1perTenThousandRàtioempresespersonesempreses/10.000 hab.200
9.5.2percentRàtiopersonespersones%200
9.c.1simplePerHundredSimple%220
10.1.1simpleSimple%%110
10.1.2simpleSimple110
10.1.3simpleSimple110
10.1.4simpleSimple€/habitant000
10.4.1simpleSimple%%220
10.4.2simpleSimple%220
11.1.1percentMonthlyRàtio%220
11.2.1perTenThousandRàtiopersonespersonespersones/10.000 hab.200
11.3.1percentRàtiohaha%222
11.3.2simpleSimplem²/hab.m²/hab.220
11.4.1perUnitRàtiopersonesm²/hab220
11.4.2perTenThousandRàtioequipamentspersonesequip./10.000 habitants200
11.6.1perThousandRàtiotpersoneskg/hab/any220
11.6.2percentRàtiott%222
11.7.1perUnitRàtiohabitantsm²/hab220
12.1.1perHundredThousandRàtioinstal·lacionshabitantsinstal·lacions/100.000 hab.200
12.5.1percentRàtiott%222
12.5.2perThousandRàtiotpersoneskg/hab/any220
13.1.1simpleSimple000baixaAlta
13.2.1perUnitRàtiokgCO₂personeskgCO₂/hab.220
13.2.2simpleSimplekgCO₂/kWhkgCO₂/kWh220
14.1.1simpleSimple%%220
14.2.1simpleSimple%%220
15.1.1simpleSimple%%220
15.1.2simpleSimple%%220
15.2.1simpleSimple%%220
15.4.1percentRàtiohaha%222
16.6.1simpleSimple200
16.7.1percentRàtiopersonespersones%200
16.7.2simpleSimple000actualitzat
16.10.1simpleSimple110
17.1.1perUnitRàtiopersones€/hab220
17.1.2perUnitRàtiopersones€/hab220
17.2.1perUnitRàtiopersones€/hab.220
17.17.1perHundredThousandRàtioentitatspersonesentitats/100.000 hab.200
17.17.2perHundredThousandRàtioentitatspersonesentitats/100.000 hab.200

Exemple complet

L'indicador 3.4.1 ("% de població de 65 anys o més sobre el total") es defineix com percent:

  1. L'importador ETL emmagatzema, per a cada municipi i any:
    • value = població de 65+ anys (numerador)
    • value2 = població total (denominador)
  2. El frontend aplica percent: (value × 100) / value2 → p. ex. (3.200 × 100) / 16.000 = 20,00 %
  3. Es mostra amb decimals: 220,00 %
  4. Per a una comarca, l'estratègia d'agrupació suma tots els value i tots els value2 dels municipis del grup abans de dividir, de manera que el percentatge comarcal és correcte (i no una mitjana de percentatges).

Publicat sota llicència MIT