teqo-backup/src/lib/bahiaTseCityCodes.ts
Francisco Ignácio Fontoura Solla c2381cecde Deliver A7 Fase 2 cityCode TSE geography filters and absorb simplify debts.
Switch election geography queries from cityName to TSE cityCode via a static Bahia map and nucleusElectionGeography module, with simplify cleanup and plan updates for F3–F5 follow-ups.
2026-07-19 22:48:08 -03:00

449 lines
12 KiB
TypeScript

/**
* Official Bahia municipality name → TSE city code (CD_MUNICIPIO) mapping.
*
* Source (TSE open data — Results 2022, detalhe da apuração por município e zona, UF BA; accessed 2026-07-20):
* https://cdn.tse.jus.br/estatistica/sead/odsele/detalhe_votacao_munzona/detalhe_votacao_munzona_2022.zip
* Download SHA-256: 945741952e161453a8991c5a6f241f6ab8dc3992ae2060ea020cd24cfecf3b29
* CSV entry: detalhe_votacao_munzona_2022_BA.csv
*
* This is the TSE electoral municipality code — NOT the IBGE 7-digit codarea
* (see bahiaMunicipalityCodes.ts). Election collections filter by this code.
*
* Municipality spellings follow the canonical application names in bahiaTerritories.
* TSE variants were reconciled via canonicalizeMunicipalityName. Coverage is
* independently checked by the official test evidence fixture.
*/
import { isBahiaMunicipality } from '@/lib/bahiaTerritories'
export const bahiaTseCityCodes: Readonly<Record<string, string>> = {
"Abaíra": "33014",
"Abaré": "33030",
"Acajutiba": "33057",
"Adustina": "33065",
"Água Fria": "33073",
"Aiquara": "33111",
"Alagoinhas": "33138",
"Alcobaça": "33154",
"Almadina": "33170",
"Amargosa": "33197",
"Amélia Rodrigues": "33219",
"América Dourada": "30716",
"Anagé": "33235",
"Andaraí": "33251",
"Andorinha": "33260",
"Angical": "33278",
"Anguera": "33294",
"Antas": "33316",
"Antônio Cardoso": "33332",
"Antônio Gonçalves": "33359",
"Aporá": "33375",
"Apuarema": "33405",
"Araças": "33383",
"Aracatu": "33391",
"Araci": "33413",
"Aramari": "33430",
"Arataca": "30732",
"Aratuípe": "33456",
"Aurelino Leal": "33472",
"Baianópolis": "33499",
"Baixa Grande": "33510",
"Banzaê": "33529",
"Barra": "33537",
"Barra da Estiva": "33553",
"Barra do Choça": "33570",
"Barra do Mendes": "33596",
"Barra do Rocha": "33618",
"Barreiras": "33634",
"Barro Alto": "30759",
"Barro Preto": "33650",
"Barrocas": "30775",
"Belmonte": "33677",
"Belo Campo": "33693",
"Biritinga": "33715",
"Boa Nova": "33731",
"Boa Vista do Tupim": "33758",
"Bom Jesus da Lapa": "33774",
"Bom Jesus da Serra": "33782",
"Boninal": "33790",
"Bonito": "33804",
"Boquira": "33812",
"Botuporã": "33839",
"Brejões": "33855",
"Brejolândia": "33871",
"Brotas de Macaúbas": "33898",
"Brumado": "33910",
"Buerarema": "33936",
"Buritirama": "30791",
"Caatiba": "33952",
"Cabaceiras do Paraguaçu": "33960",
"Cachoeira": "33979",
"Caculé": "33995",
"Caém": "34010",
"Caetanos": "34029",
"Caetité": "34037",
"Cafarnaum": "34053",
"Cairu": "34070",
"Caldeirão Grande": "34096",
"Camacan": "34118",
"Camaçari": "34134",
"Camamu": "34150",
"Campo Alegre de Lourdes": "34177",
"Campo Formoso": "34193",
"Canápolis": "34215",
"Canarana": "34231",
"Canavieiras": "34258",
"Candeal": "34274",
"Candeias": "34290",
"Candiba": "34312",
"Cândido Sales": "34339",
"Cansanção": "34355",
"Canudos": "30856",
"Capela do Alto Alegre": "30813",
"Capim Grosso": "30830",
"Caraíbas": "34363",
"Caravelas": "34371",
"Cardeal da Silva": "34398",
"Carinhanha": "34410",
"Casa Nova": "34436",
"Castro Alves": "34452",
"Catolândia": "34479",
"Catu": "34495",
"Caturama": "34509",
"Central": "34517",
"Chorrochó": "34533",
"Cícero Dantas": "34550",
"Cipó": "34576",
"Coaraci": "34592",
"Cocos": "34614",
"Conceição da Feira": "34630",
"Conceição do Almeida": "34657",
"Conceição do Coité": "34673",
"Conceição do Jacuípe": "34690",
"Conde": "34711",
"Condeúba": "34738",
"Contendas do Sincorá": "34754",
"Coração de Maria": "34770",
"Cordeiros": "34797",
"Coribe": "34819",
"Coronel João Sá": "34835",
"Correntina": "34851",
"Cotegipe": "34878",
"Cravolândia": "34894",
"Crisópolis": "34916",
"Cristópolis": "34932",
"Cruz das Almas": "34959",
"Curaçá": "34975",
"Dário Meira": "34991",
"Dias d'Ávila": "30872",
"Dom Basílio": "35017",
"Dom Macedo Costa": "35033",
"Elísio Medrado": "35050",
"Encruzilhada": "35076",
"Entre Rios": "35092",
"Érico Cardoso": "33090",
"Esplanada": "35114",
"Euclides da Cunha": "35130",
"Eunápolis": "30058",
"Fátima": "30899",
"Feira da Mata": "35149",
"Feira de Santana": "35157",
"Filadélfia": "30910",
"Firmino Alves": "35173",
"Floresta Azul": "35190",
"Formosa do Rio Preto": "35211",
"Gandu": "35238",
"Gavião": "30937",
"Gentio do Ouro": "35254",
"Glória": "35270",
"Gongogi": "35297",
"Governador Mangabeira": "35319",
"Guajeru": "30953",
"Guanambi": "35335",
"Guaratinga": "35351",
"Heliópolis": "30970",
"Iaçu": "35378",
"Ibiassucê": "35394",
"Ibicaraí": "35416",
"Ibicoara": "35432",
"Ibicuí": "35459",
"Ibipeba": "35475",
"Ibipitanga": "35513",
"Ibiquera": "35530",
"Ibirapitanga": "35556",
"Ibirapuã": "35572",
"Ibirataia": "35599",
"Ibitiara": "35610",
"Ibititá": "35637",
"Ibotirama": "35653",
"Ichu": "35670",
"Igaporã": "35696",
"Igrapiúna": "35700",
"Iguaí": "35718",
"Ilhéus": "35734",
"Inhambupe": "35750",
"Ipecaetá": "35777",
"Ipiaú": "35793",
"Ipirá": "35815",
"Ipupiara": "35831",
"Irajuba": "35858",
"Iramaia": "35874",
"Iraquara": "35890",
"Irará": "35912",
"Irecê": "35939",
"Itabela": "35947",
"Itaberaba": "35955",
"Itabuna": "35971",
"Itacaré": "35998",
"Itaeté": "36013",
"Itagi": "36030",
"Itagibá": "36056",
"Itagimirim": "36072",
"Itaguaçu da Bahia": "36080",
"Itaju do Colônia": "36099",
"Itajuípe": "36110",
"Itamaraju": "36137",
"Itamari": "36153",
"Itambé": "36170",
"Itanagra": "36196",
"Itanhém": "36218",
"Itaparica": "36234",
"Itapé": "36250",
"Itapebi": "36277",
"Itapetinga": "36293",
"Itapicuru": "36315",
"Itapitanga": "36331",
"Itaquara": "36358",
"Itarantim": "36374",
"Itatim": "36382",
"Itiruçu": "36390",
"Itiúba": "36412",
"Itororó": "36439",
"Ituaçu": "36455",
"Ituberá": "36471",
"Iuiú": "30660",
"Jaborandi": "30678",
"Jacaraci": "36498",
"Jacobina": "36510",
"Jaguaquara": "36536",
"Jaguarari": "36552",
"Jaguaripe": "36579",
"Jandaíra": "36595",
"Jequié": "36617",
"Jeremoabo": "36633",
"Jiquiriçá": "36650",
"Jitaúna": "36676",
"João Dourado": "30996",
"Juazeiro": "36692",
"Jucuruçu": "36706",
"Jussara": "36714",
"Jussari": "30694",
"Jussiape": "36730",
"Lafaiete Coutinho": "36757",
"Lagoa Real": "36765",
"Laje": "36773",
"Lajedão": "36790",
"Lajedinho": "36811",
"Lajedo do Tabocal": "36820",
"Lamarão": "36838",
"Lapão": "39730",
"Lauro de Freitas": "36854",
"Lençóis": "36870",
"Licínio de Almeida": "36897",
"Livramento de Nossa Senhora": "36919",
"Luís Eduardo Magalhães": "30007",
"Macajuba": "36935",
"Macarani": "36951",
"Macaúbas": "36978",
"Macururé": "36994",
"Madre de Deus": "39748",
"Maetinga": "39756",
"Maiquinique": "37010",
"Mairi": "37036",
"Malhada": "37052",
"Malhada de Pedras": "37079",
"Manoel Vitorino": "37095",
"Mansidão": "39772",
"Maracás": "37117",
"Maragogipe": "37133",
"Maraú": "37150",
"Marcionílio Souza": "37176",
"Mascote": "37192",
"Mata de São João": "37214",
"Matina": "37222",
"Medeiros Neto": "37230",
"Miguel Calmon": "37257",
"Milagres": "37273",
"Mirangaba": "37290",
"Mirante": "37303",
"Monte Santo": "37311",
"Morpará": "37338",
"Morro do Chapéu": "37354",
"Mortugaba": "37370",
"Mucugê": "37397",
"Mucuri": "37419",
"Mulungu do Morro": "37427",
"Mundo Novo": "37435",
"Muniz Ferreira": "37451",
"Muquém de São Francisco": "37460",
"Muritiba": "37478",
"Mutuípe": "37494",
"Nazaré": "37516",
"Nilo Peçanha": "37532",
"Nordestina": "39799",
"Nova Canaã": "37559",
"Nova Fátima": "37567",
"Nova Ibiá": "39969",
"Nova Itarana": "37575",
"Nova Redenção": "37583",
"Nova Soure": "37591",
"Nova Viçosa": "37613",
"Novo Horizonte": "39942",
"Novo Triunfo": "37621",
"Olindina": "37630",
"Oliveira dos Brejinhos": "37656",
"Ouriçangas": "37672",
"Ourolândia": "37680",
"Palmas de Monte Alto": "37699",
"Palmeiras": "37710",
"Paramirim": "37737",
"Paratinga": "37753",
"Paripiranga": "37770",
"Pau Brasil": "37796",
"Paulo Afonso": "37818",
"Pé de Serra": "39810",
"Pedrão": "37834",
"Pedro Alexandre": "37850",
"Piatã": "37877",
"Pilão Arcado": "37893",
"Pindaí": "37915",
"Pindobaçu": "37931",
"Pintadas": "39837",
"Piraí do Norte": "37940",
"Piripá": "37958",
"Piritiba": "37974",
"Planaltino": "37990",
"Planalto": "38016",
"Poções": "38032",
"Pojuca": "38059",
"Ponto Novo": "38067",
"Porto Seguro": "38075",
"Potiraguá": "38091",
"Prado": "38113",
"Presidente Dutra": "38130",
"Presidente Jânio Quadros": "38156",
"Presidente Tancredo Neves": "38164",
"Queimadas": "38172",
"Quijingue": "38199",
"Quixabeira": "39845",
"Rafael Jambeiro": "39853",
"Remanso": "38210",
"Retirolândia": "38237",
"Riachão das Neves": "38253",
"Riachão do Jacuípe": "38270",
"Riacho de Santana": "38296",
"Ribeira do Amparo": "38318",
"Ribeira do Pombal": "38334",
"Ribeirão do Largo": "38342",
"Rio de Contas": "38350",
"Rio do Antônio": "38377",
"Rio do Pires": "38393",
"Rio Real": "38415",
"Rodelas": "38431",
"Ruy Barbosa": "38458",
"Salinas da Margarida": "38474",
"Salvador": "38490",
"Santa Bárbara": "38512",
"Santa Brígida": "38539",
"Santa Cruz Cabrália": "38555",
"Santa Cruz da Vitória": "38571",
"Santa Inês": "38598",
"Santa Luzia": "39870",
"Santa Maria da Vitória": "38636",
"Santa Rita de Cássia": "35491",
"Santa Teresinha": "38695",
"Santaluz": "38610",
"Santana": "38652",
"Santanópolis": "38679",
"Santo Amaro": "38717",
"Santo Antônio de Jesus": "38733",
"Santo Estêvão": "38750",
"São Desidério": "38776",
"São Domingos": "38806",
"São Felipe": "38814",
"São Félix": "38792",
"São Félix do Coribe": "38822",
"São Francisco do Conde": "38830",
"São Gabriel": "39896",
"São Gonçalo dos Campos": "38857",
"São José da Vitória": "39926",
"São José do Jacuípe": "38865",
"São Miguel das Matas": "38873",
"São Sebastião do Passé": "38890",
"Sapeaçu": "38911",
"Sátiro Dias": "38938",
"Saubara": "38946",
"Saúde": "38954",
"Seabra": "38970",
"Sebastião Laranjeiras": "38997",
"Senhor do Bonfim": "39012",
"Sento Sé": "39039",
"Serra do Ramalho": "39047",
"Serra Dourada": "39055",
"Serra Preta": "39071",
"Serrinha": "39098",
"Serrolândia": "39110",
"Simões Filho": "39136",
"Sítio do Mato": "39144",
"Sítio do Quinto": "39900",
"Sobradinho": "39985",
"Souto Soares": "39152",
"Tabocas do Brejo Velho": "39179",
"Tanhaçu": "39195",
"Tanque Novo": "39918",
"Tanquinho": "39217",
"Taperoá": "39233",
"Tapiramutá": "39250",
"Teixeira de Freitas": "39934",
"Teodoro Sampaio": "39276",
"Teofilândia": "39292",
"Teolândia": "39314",
"Terra Nova": "39330",
"Tremedal": "39357",
"Tucano": "39373",
"Uauá": "39390",
"Ubaíra": "39411",
"Ubaitaba": "39438",
"Ubatã": "39454",
"Uibaí": "39470",
"Umburanas": "39489",
"Una": "39497",
"Urandi": "39519",
"Uruçuca": "39535",
"Utinga": "39551",
"Valença": "39578",
"Valente": "39594",
"Várzea da Roça": "39977",
"Várzea do Poço": "39616",
"Várzea Nova": "39950",
"Varzedo": "39624",
"Vera Cruz": "39632",
"Vereda": "39640",
"Vitória da Conquista": "39659",
"Wagner": "39675",
"Wanderley": "39993",
"Wenceslau Guimarães": "39691",
"Xique-Xique": "39713",
}
export const tseCityCodeForMunicipality = (name: string): string | undefined => {
if (!isBahiaMunicipality(name)) return undefined
return bahiaTseCityCodes[name]
}
const municipalityByTseCityCode = new Map(
Object.entries(bahiaTseCityCodes).map(([name, code]) => [code, name]),
)
export const municipalityForTseCityCode = (cityCode: string): string | undefined =>
municipalityByTseCityCode.get(cityCode)