mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 06:43:06 +00:00
Ship TopoJSON meshes, IBGE code lookups, a re-runnable build script, and evidence tests so B3 can render Leaflet surfaces without PostGIS.
450 lines
13 KiB
TypeScript
450 lines
13 KiB
TypeScript
/**
|
|
* Official Bahia municipality name → IBGE 7-digit code (codarea) mapping.
|
|
*
|
|
* Source (IBGE Localidades API v1 — municípios da UF BA; accessed 2026-07-19):
|
|
* https://servicodados.ibge.gov.br/api/v1/localidades/estados/29/municipios
|
|
* Download SHA-256: ee2524f732a80d234f129b2e26a90f9bc080a52844a01e5359e789c613d7ee4f
|
|
*
|
|
* Mesh provenance (IBGE Malhas API v3 — qualidade intermediaria; accessed 2026-07-19):
|
|
* https://servicodados.ibge.gov.br/api/v3/malhas/estados/29?formato=application/vnd.geo+json&intrarregiao=municipio&qualidade=intermediaria
|
|
* Download SHA-256: 909017a4f91e7950cea123d2601a53b64c70acdb2b256548be25ca9e703cc572
|
|
*
|
|
* Municipality spellings follow the canonical application names in bahiaTerritories.
|
|
* IBGE variants (Araçás, Iuiu, Muquém do São Francisco, Santa Terezinha) were
|
|
* reconciled via canonicalizeMunicipalityName. Coverage is independently checked
|
|
* by the official test evidence fixture.
|
|
*/
|
|
|
|
import { isBahiaMunicipality } from '@/lib/bahiaTerritories'
|
|
|
|
export const bahiaMunicipalityCodes: Readonly<Record<string, string>> = {
|
|
"Abaíra": "2900108",
|
|
"Abaré": "2900207",
|
|
"Acajutiba": "2900306",
|
|
"Adustina": "2900355",
|
|
"Água Fria": "2900405",
|
|
"Aiquara": "2900603",
|
|
"Alagoinhas": "2900702",
|
|
"Alcobaça": "2900801",
|
|
"Almadina": "2900900",
|
|
"Amargosa": "2901007",
|
|
"Amélia Rodrigues": "2901106",
|
|
"América Dourada": "2901155",
|
|
"Anagé": "2901205",
|
|
"Andaraí": "2901304",
|
|
"Andorinha": "2901353",
|
|
"Angical": "2901403",
|
|
"Anguera": "2901502",
|
|
"Antas": "2901601",
|
|
"Antônio Cardoso": "2901700",
|
|
"Antônio Gonçalves": "2901809",
|
|
"Aporá": "2901908",
|
|
"Apuarema": "2901957",
|
|
"Araças": "2902054",
|
|
"Aracatu": "2902005",
|
|
"Araci": "2902104",
|
|
"Aramari": "2902203",
|
|
"Arataca": "2902252",
|
|
"Aratuípe": "2902302",
|
|
"Aurelino Leal": "2902401",
|
|
"Baianópolis": "2902500",
|
|
"Baixa Grande": "2902609",
|
|
"Banzaê": "2902658",
|
|
"Barra": "2902708",
|
|
"Barra da Estiva": "2902807",
|
|
"Barra do Choça": "2902906",
|
|
"Barra do Mendes": "2903003",
|
|
"Barra do Rocha": "2903102",
|
|
"Barreiras": "2903201",
|
|
"Barro Alto": "2903235",
|
|
"Barro Preto": "2903300",
|
|
"Barrocas": "2903276",
|
|
"Belmonte": "2903409",
|
|
"Belo Campo": "2903508",
|
|
"Biritinga": "2903607",
|
|
"Boa Nova": "2903706",
|
|
"Boa Vista do Tupim": "2903805",
|
|
"Bom Jesus da Lapa": "2903904",
|
|
"Bom Jesus da Serra": "2903953",
|
|
"Boninal": "2904001",
|
|
"Bonito": "2904050",
|
|
"Boquira": "2904100",
|
|
"Botuporã": "2904209",
|
|
"Brejões": "2904308",
|
|
"Brejolândia": "2904407",
|
|
"Brotas de Macaúbas": "2904506",
|
|
"Brumado": "2904605",
|
|
"Buerarema": "2904704",
|
|
"Buritirama": "2904753",
|
|
"Caatiba": "2904803",
|
|
"Cabaceiras do Paraguaçu": "2904852",
|
|
"Cachoeira": "2904902",
|
|
"Caculé": "2905008",
|
|
"Caém": "2905107",
|
|
"Caetanos": "2905156",
|
|
"Caetité": "2905206",
|
|
"Cafarnaum": "2905305",
|
|
"Cairu": "2905404",
|
|
"Caldeirão Grande": "2905503",
|
|
"Camacan": "2905602",
|
|
"Camaçari": "2905701",
|
|
"Camamu": "2905800",
|
|
"Campo Alegre de Lourdes": "2905909",
|
|
"Campo Formoso": "2906006",
|
|
"Canápolis": "2906105",
|
|
"Canarana": "2906204",
|
|
"Canavieiras": "2906303",
|
|
"Candeal": "2906402",
|
|
"Candeias": "2906501",
|
|
"Candiba": "2906600",
|
|
"Cândido Sales": "2906709",
|
|
"Cansanção": "2906808",
|
|
"Canudos": "2906824",
|
|
"Capela do Alto Alegre": "2906857",
|
|
"Capim Grosso": "2906873",
|
|
"Caraíbas": "2906899",
|
|
"Caravelas": "2906907",
|
|
"Cardeal da Silva": "2907004",
|
|
"Carinhanha": "2907103",
|
|
"Casa Nova": "2907202",
|
|
"Castro Alves": "2907301",
|
|
"Catolândia": "2907400",
|
|
"Catu": "2907509",
|
|
"Caturama": "2907558",
|
|
"Central": "2907608",
|
|
"Chorrochó": "2907707",
|
|
"Cícero Dantas": "2907806",
|
|
"Cipó": "2907905",
|
|
"Coaraci": "2908002",
|
|
"Cocos": "2908101",
|
|
"Conceição da Feira": "2908200",
|
|
"Conceição do Almeida": "2908309",
|
|
"Conceição do Coité": "2908408",
|
|
"Conceição do Jacuípe": "2908507",
|
|
"Conde": "2908606",
|
|
"Condeúba": "2908705",
|
|
"Contendas do Sincorá": "2908804",
|
|
"Coração de Maria": "2908903",
|
|
"Cordeiros": "2909000",
|
|
"Coribe": "2909109",
|
|
"Coronel João Sá": "2909208",
|
|
"Correntina": "2909307",
|
|
"Cotegipe": "2909406",
|
|
"Cravolândia": "2909505",
|
|
"Crisópolis": "2909604",
|
|
"Cristópolis": "2909703",
|
|
"Cruz das Almas": "2909802",
|
|
"Curaçá": "2909901",
|
|
"Dário Meira": "2910008",
|
|
"Dias d'Ávila": "2910057",
|
|
"Dom Basílio": "2910107",
|
|
"Dom Macedo Costa": "2910206",
|
|
"Elísio Medrado": "2910305",
|
|
"Encruzilhada": "2910404",
|
|
"Entre Rios": "2910503",
|
|
"Érico Cardoso": "2900504",
|
|
"Esplanada": "2910602",
|
|
"Euclides da Cunha": "2910701",
|
|
"Eunápolis": "2910727",
|
|
"Fátima": "2910750",
|
|
"Feira da Mata": "2910776",
|
|
"Feira de Santana": "2910800",
|
|
"Filadélfia": "2910859",
|
|
"Firmino Alves": "2910909",
|
|
"Floresta Azul": "2911006",
|
|
"Formosa do Rio Preto": "2911105",
|
|
"Gandu": "2911204",
|
|
"Gavião": "2911253",
|
|
"Gentio do Ouro": "2911303",
|
|
"Glória": "2911402",
|
|
"Gongogi": "2911501",
|
|
"Governador Mangabeira": "2911600",
|
|
"Guajeru": "2911659",
|
|
"Guanambi": "2911709",
|
|
"Guaratinga": "2911808",
|
|
"Heliópolis": "2911857",
|
|
"Iaçu": "2911907",
|
|
"Ibiassucê": "2912004",
|
|
"Ibicaraí": "2912103",
|
|
"Ibicoara": "2912202",
|
|
"Ibicuí": "2912301",
|
|
"Ibipeba": "2912400",
|
|
"Ibipitanga": "2912509",
|
|
"Ibiquera": "2912608",
|
|
"Ibirapitanga": "2912707",
|
|
"Ibirapuã": "2912806",
|
|
"Ibirataia": "2912905",
|
|
"Ibitiara": "2913002",
|
|
"Ibititá": "2913101",
|
|
"Ibotirama": "2913200",
|
|
"Ichu": "2913309",
|
|
"Igaporã": "2913408",
|
|
"Igrapiúna": "2913457",
|
|
"Iguaí": "2913507",
|
|
"Ilhéus": "2913606",
|
|
"Inhambupe": "2913705",
|
|
"Ipecaetá": "2913804",
|
|
"Ipiaú": "2913903",
|
|
"Ipirá": "2914000",
|
|
"Ipupiara": "2914109",
|
|
"Irajuba": "2914208",
|
|
"Iramaia": "2914307",
|
|
"Iraquara": "2914406",
|
|
"Irará": "2914505",
|
|
"Irecê": "2914604",
|
|
"Itabela": "2914653",
|
|
"Itaberaba": "2914703",
|
|
"Itabuna": "2914802",
|
|
"Itacaré": "2914901",
|
|
"Itaeté": "2915007",
|
|
"Itagi": "2915106",
|
|
"Itagibá": "2915205",
|
|
"Itagimirim": "2915304",
|
|
"Itaguaçu da Bahia": "2915353",
|
|
"Itaju do Colônia": "2915403",
|
|
"Itajuípe": "2915502",
|
|
"Itamaraju": "2915601",
|
|
"Itamari": "2915700",
|
|
"Itambé": "2915809",
|
|
"Itanagra": "2915908",
|
|
"Itanhém": "2916005",
|
|
"Itaparica": "2916104",
|
|
"Itapé": "2916203",
|
|
"Itapebi": "2916302",
|
|
"Itapetinga": "2916401",
|
|
"Itapicuru": "2916500",
|
|
"Itapitanga": "2916609",
|
|
"Itaquara": "2916708",
|
|
"Itarantim": "2916807",
|
|
"Itatim": "2916856",
|
|
"Itiruçu": "2916906",
|
|
"Itiúba": "2917003",
|
|
"Itororó": "2917102",
|
|
"Ituaçu": "2917201",
|
|
"Ituberá": "2917300",
|
|
"Iuiú": "2917334",
|
|
"Jaborandi": "2917359",
|
|
"Jacaraci": "2917409",
|
|
"Jacobina": "2917508",
|
|
"Jaguaquara": "2917607",
|
|
"Jaguarari": "2917706",
|
|
"Jaguaripe": "2917805",
|
|
"Jandaíra": "2917904",
|
|
"Jequié": "2918001",
|
|
"Jeremoabo": "2918100",
|
|
"Jiquiriçá": "2918209",
|
|
"Jitaúna": "2918308",
|
|
"João Dourado": "2918357",
|
|
"Juazeiro": "2918407",
|
|
"Jucuruçu": "2918456",
|
|
"Jussara": "2918506",
|
|
"Jussari": "2918555",
|
|
"Jussiape": "2918605",
|
|
"Lafaiete Coutinho": "2918704",
|
|
"Lagoa Real": "2918753",
|
|
"Laje": "2918803",
|
|
"Lajedão": "2918902",
|
|
"Lajedinho": "2919009",
|
|
"Lajedo do Tabocal": "2919058",
|
|
"Lamarão": "2919108",
|
|
"Lapão": "2919157",
|
|
"Lauro de Freitas": "2919207",
|
|
"Lençóis": "2919306",
|
|
"Licínio de Almeida": "2919405",
|
|
"Livramento de Nossa Senhora": "2919504",
|
|
"Luís Eduardo Magalhães": "2919553",
|
|
"Macajuba": "2919603",
|
|
"Macarani": "2919702",
|
|
"Macaúbas": "2919801",
|
|
"Macururé": "2919900",
|
|
"Madre de Deus": "2919926",
|
|
"Maetinga": "2919959",
|
|
"Maiquinique": "2920007",
|
|
"Mairi": "2920106",
|
|
"Malhada": "2920205",
|
|
"Malhada de Pedras": "2920304",
|
|
"Manoel Vitorino": "2920403",
|
|
"Mansidão": "2920452",
|
|
"Maracás": "2920502",
|
|
"Maragogipe": "2920601",
|
|
"Maraú": "2920700",
|
|
"Marcionílio Souza": "2920809",
|
|
"Mascote": "2920908",
|
|
"Mata de São João": "2921005",
|
|
"Matina": "2921054",
|
|
"Medeiros Neto": "2921104",
|
|
"Miguel Calmon": "2921203",
|
|
"Milagres": "2921302",
|
|
"Mirangaba": "2921401",
|
|
"Mirante": "2921450",
|
|
"Monte Santo": "2921500",
|
|
"Morpará": "2921609",
|
|
"Morro do Chapéu": "2921708",
|
|
"Mortugaba": "2921807",
|
|
"Mucugê": "2921906",
|
|
"Mucuri": "2922003",
|
|
"Mulungu do Morro": "2922052",
|
|
"Mundo Novo": "2922102",
|
|
"Muniz Ferreira": "2922201",
|
|
"Muquém de São Francisco": "2922250",
|
|
"Muritiba": "2922300",
|
|
"Mutuípe": "2922409",
|
|
"Nazaré": "2922508",
|
|
"Nilo Peçanha": "2922607",
|
|
"Nordestina": "2922656",
|
|
"Nova Canaã": "2922706",
|
|
"Nova Fátima": "2922730",
|
|
"Nova Ibiá": "2922755",
|
|
"Nova Itarana": "2922805",
|
|
"Nova Redenção": "2922854",
|
|
"Nova Soure": "2922904",
|
|
"Nova Viçosa": "2923001",
|
|
"Novo Horizonte": "2923035",
|
|
"Novo Triunfo": "2923050",
|
|
"Olindina": "2923100",
|
|
"Oliveira dos Brejinhos": "2923209",
|
|
"Ouriçangas": "2923308",
|
|
"Ourolândia": "2923357",
|
|
"Palmas de Monte Alto": "2923407",
|
|
"Palmeiras": "2923506",
|
|
"Paramirim": "2923605",
|
|
"Paratinga": "2923704",
|
|
"Paripiranga": "2923803",
|
|
"Pau Brasil": "2923902",
|
|
"Paulo Afonso": "2924009",
|
|
"Pé de Serra": "2924058",
|
|
"Pedrão": "2924108",
|
|
"Pedro Alexandre": "2924207",
|
|
"Piatã": "2924306",
|
|
"Pilão Arcado": "2924405",
|
|
"Pindaí": "2924504",
|
|
"Pindobaçu": "2924603",
|
|
"Pintadas": "2924652",
|
|
"Piraí do Norte": "2924678",
|
|
"Piripá": "2924702",
|
|
"Piritiba": "2924801",
|
|
"Planaltino": "2924900",
|
|
"Planalto": "2925006",
|
|
"Poções": "2925105",
|
|
"Pojuca": "2925204",
|
|
"Ponto Novo": "2925253",
|
|
"Porto Seguro": "2925303",
|
|
"Potiraguá": "2925402",
|
|
"Prado": "2925501",
|
|
"Presidente Dutra": "2925600",
|
|
"Presidente Jânio Quadros": "2925709",
|
|
"Presidente Tancredo Neves": "2925758",
|
|
"Queimadas": "2925808",
|
|
"Quijingue": "2925907",
|
|
"Quixabeira": "2925931",
|
|
"Rafael Jambeiro": "2925956",
|
|
"Remanso": "2926004",
|
|
"Retirolândia": "2926103",
|
|
"Riachão das Neves": "2926202",
|
|
"Riachão do Jacuípe": "2926301",
|
|
"Riacho de Santana": "2926400",
|
|
"Ribeira do Amparo": "2926509",
|
|
"Ribeira do Pombal": "2926608",
|
|
"Ribeirão do Largo": "2926657",
|
|
"Rio de Contas": "2926707",
|
|
"Rio do Antônio": "2926806",
|
|
"Rio do Pires": "2926905",
|
|
"Rio Real": "2927002",
|
|
"Rodelas": "2927101",
|
|
"Ruy Barbosa": "2927200",
|
|
"Salinas da Margarida": "2927309",
|
|
"Salvador": "2927408",
|
|
"Santa Bárbara": "2927507",
|
|
"Santa Brígida": "2927606",
|
|
"Santa Cruz Cabrália": "2927705",
|
|
"Santa Cruz da Vitória": "2927804",
|
|
"Santa Inês": "2927903",
|
|
"Santa Luzia": "2928059",
|
|
"Santa Maria da Vitória": "2928109",
|
|
"Santa Rita de Cássia": "2928406",
|
|
"Santa Teresinha": "2928505",
|
|
"Santaluz": "2928000",
|
|
"Santana": "2928208",
|
|
"Santanópolis": "2928307",
|
|
"Santo Amaro": "2928604",
|
|
"Santo Antônio de Jesus": "2928703",
|
|
"Santo Estêvão": "2928802",
|
|
"São Desidério": "2928901",
|
|
"São Domingos": "2928950",
|
|
"São Felipe": "2929107",
|
|
"São Félix": "2929008",
|
|
"São Félix do Coribe": "2929057",
|
|
"São Francisco do Conde": "2929206",
|
|
"São Gabriel": "2929255",
|
|
"São Gonçalo dos Campos": "2929305",
|
|
"São José da Vitória": "2929354",
|
|
"São José do Jacuípe": "2929370",
|
|
"São Miguel das Matas": "2929404",
|
|
"São Sebastião do Passé": "2929503",
|
|
"Sapeaçu": "2929602",
|
|
"Sátiro Dias": "2929701",
|
|
"Saubara": "2929750",
|
|
"Saúde": "2929800",
|
|
"Seabra": "2929909",
|
|
"Sebastião Laranjeiras": "2930006",
|
|
"Senhor do Bonfim": "2930105",
|
|
"Sento Sé": "2930204",
|
|
"Serra do Ramalho": "2930154",
|
|
"Serra Dourada": "2930303",
|
|
"Serra Preta": "2930402",
|
|
"Serrinha": "2930501",
|
|
"Serrolândia": "2930600",
|
|
"Simões Filho": "2930709",
|
|
"Sítio do Mato": "2930758",
|
|
"Sítio do Quinto": "2930766",
|
|
"Sobradinho": "2930774",
|
|
"Souto Soares": "2930808",
|
|
"Tabocas do Brejo Velho": "2930907",
|
|
"Tanhaçu": "2931004",
|
|
"Tanque Novo": "2931053",
|
|
"Tanquinho": "2931103",
|
|
"Taperoá": "2931202",
|
|
"Tapiramutá": "2931301",
|
|
"Teixeira de Freitas": "2931350",
|
|
"Teodoro Sampaio": "2931400",
|
|
"Teofilândia": "2931509",
|
|
"Teolândia": "2931608",
|
|
"Terra Nova": "2931707",
|
|
"Tremedal": "2931806",
|
|
"Tucano": "2931905",
|
|
"Uauá": "2932002",
|
|
"Ubaíra": "2932101",
|
|
"Ubaitaba": "2932200",
|
|
"Ubatã": "2932309",
|
|
"Uibaí": "2932408",
|
|
"Umburanas": "2932457",
|
|
"Una": "2932507",
|
|
"Urandi": "2932606",
|
|
"Uruçuca": "2932705",
|
|
"Utinga": "2932804",
|
|
"Valença": "2932903",
|
|
"Valente": "2933000",
|
|
"Várzea da Roça": "2933059",
|
|
"Várzea do Poço": "2933109",
|
|
"Várzea Nova": "2933158",
|
|
"Varzedo": "2933174",
|
|
"Vera Cruz": "2933208",
|
|
"Vereda": "2933257",
|
|
"Vitória da Conquista": "2933307",
|
|
"Wagner": "2933406",
|
|
"Wanderley": "2933455",
|
|
"Wenceslau Guimarães": "2933505",
|
|
"Xique-Xique": "2933604",
|
|
}
|
|
|
|
export const codeForMunicipality = (name: string): string | undefined => {
|
|
if (!isBahiaMunicipality(name)) return undefined
|
|
return bahiaMunicipalityCodes[name]
|
|
}
|
|
|
|
const municipalityByCode = new Map(
|
|
Object.entries(bahiaMunicipalityCodes).map(([name, code]) => [code, name]),
|
|
)
|
|
|
|
export const municipalityForCode = (codarea: string): string | undefined =>
|
|
municipalityByCode.get(codarea)
|