"""Piezas comunes de A1 (referencias, provincias, cociente). Sin red. Lo usan e2_hechos.py (implementación 1) y, SOLO para leer las tablas de referencia, nada más: la 2.ª implementación (f2_impl2.py) reescribe el cálculo aparte.""" import csv, bisect, datetime as dt, re, unicodedata P = '/p' if __import__('os').path.isdir('/p/salidas') else '/precios' def norm(t): t = (t or '').lower() return ''.join(ch for ch in unicodedata.normalize('NFKD', t) if not unicodedata.combining(ch)) NUTS_INE = {'ES111':'15','ES112':'27','ES113':'32','ES114':'36','ES120':'33','ES130':'39','ES211':'01','ES212':'20','ES213':'48', 'ES220':'31','ES230':'26','ES241':'22','ES242':'44','ES243':'50','ES300':'28','ES411':'05','ES412':'09','ES413':'24','ES414':'34', 'ES415':'37','ES416':'40','ES417':'42','ES418':'47','ES419':'49','ES421':'02','ES422':'13','ES423':'16','ES424':'19','ES425':'45', 'ES431':'06','ES432':'10','ES511':'08','ES512':'17','ES513':'25','ES514':'43','ES521':'03','ES522':'12','ES523':'46','ES531':'07', 'ES532':'07','ES533':'07','ES611':'04','ES612':'11','ES613':'14','ES614':'18','ES615':'21','ES616':'23','ES617':'29','ES618':'41', 'ES620':'30','ES630':'51','ES640':'52','ES703':'38','ES704':'35','ES705':'35','ES706':'38','ES707':'38','ES708':'35','ES709':'38'} NOMBRE_INE = {'alava':'01','araba':'01','araba/alava':'01','albacete':'02','alicante':'03','alacant':'03','alicante/alacant':'03', 'almeria':'04','avila':'05','badajoz':'06','baleares':'07','illes balears':'07','balears':'07','islas baleares':'07', 'barcelona':'08','burgos':'09','caceres':'10','cadiz':'11','castellon':'12','castello':'12','castellon/castello':'12', 'ciudad real':'13','cordoba':'14','a coruna':'15','coruna':'15','la coruna':'15','coruna, a':'15','cuenca':'16','girona':'17', 'gerona':'17','granada':'18','guadalajara':'19','gipuzkoa':'20','guipuzcoa':'20','huelva':'21','huesca':'22','jaen':'23', 'leon':'24','lleida':'25','lerida':'25','la rioja':'26','rioja':'26','rioja, la':'26','lugo':'27','madrid':'28','malaga':'29', 'murcia':'30','navarra':'31','nafarroa':'31','ourense':'32','orense':'32','asturias':'33','palencia':'34','las palmas':'35', 'palmas, las':'35','pontevedra':'36','salamanca':'37','santa cruz de tenerife':'38','cantabria':'39','segovia':'40', 'sevilla':'41','soria':'42','tarragona':'43','teruel':'44','toledo':'45','valencia':'46','valencia/valencia':'46', 'valladolid':'47','bizkaia':'48','vizcaya':'48','zamora':'49','zaragoza':'50','ceuta':'51','melilla':'52'} FUERA_PROV = {'35', '38', '51', '52'} # Canarias, Ceuta y Melilla: otros impuestos (IGIC, IPSI) def provincia_ine(nuts, provincia): c = NUTS_INE.get((nuts or '')[:5]) if c: return c return NOMBRE_INE.get(norm(provincia).strip()) def leer_wob(): w = {} for r in csv.DictReader(open(f'{P}/salidas/03_wob_es_semanal.csv')): w[dt.date.fromisoformat(r['fecha'])] = {k: float(v) for k, v in r.items() if k != 'fecha' and v} return w def leer_geo(fichero='03_geoportal_provincias.csv'): g = {} for r in csv.DictReader(open(f'{P}/salidas/{fichero}')): g.setdefault(dt.date.fromisoformat(r['fecha']), {})[r['id_provincia']] = r return g