mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-15 10:43:07 +00:00
651 lines
14 KiB
TypeScript
651 lines
14 KiB
TypeScript
/**
|
||
* Official Bahia Territórios de Identidade configuration for the 2024–2027 PPA.
|
||
*
|
||
* Consolidated source (SEPLAN, configuration in force since 2016; accessed 2026-07-17):
|
||
* https://www.ba.gov.br/seplan/iniciativas/acesse-informacoes-sobre-territorios-de-identidade-planejamento-e-gestao-territorial-0
|
||
*
|
||
* Official municipal lists (SECULT Bahia; accessed 2026-07-17):
|
||
* https://www.ba.gov.br/cultura/314/divisao-territorial-da-bahia
|
||
*
|
||
* Counts and codes were validated against the official SEI 2024 map, whose source is the
|
||
* political-administrative division dated 2024-12-20:
|
||
* https://ftp.sei.ba.gov.br/Geoinformacao/mapas/estado/mapa_ti_ba_1v5m_2024_cor.pdf
|
||
*
|
||
* Municipality spelling follows the canonical application names. SECULT/SEI typographical
|
||
* variants were reconciled to those names; the resulting normalized 417-municipality set and all
|
||
* per-territory assignments are independently checked by the official test evidence fixture.
|
||
*/
|
||
export const bahiaIdentityTerritoryRecords = [
|
||
{
|
||
code: '01',
|
||
name: 'Irecê',
|
||
municipalityCount: 20,
|
||
municipalities: [
|
||
'América Dourada',
|
||
'Barra do Mendes',
|
||
'Barro Alto',
|
||
'Cafarnaum',
|
||
'Canarana',
|
||
'Central',
|
||
'Gentio do Ouro',
|
||
'Ibipeba',
|
||
'Ibititá',
|
||
'Ipupiara',
|
||
'Irecê',
|
||
'Itaguaçu da Bahia',
|
||
'João Dourado',
|
||
'Jussara',
|
||
'Lapão',
|
||
'Mulungu do Morro',
|
||
'Presidente Dutra',
|
||
'São Gabriel',
|
||
'Uibaí',
|
||
'Xique-Xique',
|
||
],
|
||
},
|
||
{
|
||
code: '02',
|
||
name: 'Velho Chico',
|
||
municipalityCount: 16,
|
||
municipalities: [
|
||
'Barra',
|
||
'Bom Jesus da Lapa',
|
||
'Brotas de Macaúbas',
|
||
'Carinhanha',
|
||
'Feira da Mata',
|
||
'Ibotirama',
|
||
'Igaporã',
|
||
'Malhada',
|
||
'Matina',
|
||
'Morpará',
|
||
'Muquém de São Francisco',
|
||
'Oliveira dos Brejinhos',
|
||
'Paratinga',
|
||
'Riacho de Santana',
|
||
'Serra do Ramalho',
|
||
'Sítio do Mato',
|
||
],
|
||
},
|
||
{
|
||
code: '03',
|
||
name: 'Chapada Diamantina',
|
||
municipalityCount: 24,
|
||
municipalities: [
|
||
'Abaíra',
|
||
'Andaraí',
|
||
'Barra da Estiva',
|
||
'Boninal',
|
||
'Bonito',
|
||
'Ibicoara',
|
||
'Ibitiara',
|
||
'Iramaia',
|
||
'Iraquara',
|
||
'Itaeté',
|
||
'Jussiape',
|
||
'Lençóis',
|
||
'Marcionílio Souza',
|
||
'Morro do Chapéu',
|
||
'Mucugê',
|
||
'Nova Redenção',
|
||
'Novo Horizonte',
|
||
'Palmeiras',
|
||
'Piatã',
|
||
'Rio de Contas',
|
||
'Seabra',
|
||
'Souto Soares',
|
||
'Utinga',
|
||
'Wagner',
|
||
],
|
||
},
|
||
{
|
||
code: '04',
|
||
name: 'Sisal',
|
||
municipalityCount: 20,
|
||
municipalities: [
|
||
'Araci',
|
||
'Barrocas',
|
||
'Biritinga',
|
||
'Candeal',
|
||
'Cansanção',
|
||
'Conceição do Coité',
|
||
'Ichu',
|
||
'Itiúba',
|
||
'Lamarão',
|
||
'Monte Santo',
|
||
'Nordestina',
|
||
'Queimadas',
|
||
'Quijingue',
|
||
'Retirolândia',
|
||
'Santaluz',
|
||
'São Domingos',
|
||
'Serrinha',
|
||
'Teofilândia',
|
||
'Tucano',
|
||
'Valente',
|
||
],
|
||
},
|
||
{
|
||
code: '05',
|
||
name: 'Litoral Sul',
|
||
municipalityCount: 26,
|
||
municipalities: [
|
||
'Almadina',
|
||
'Arataca',
|
||
'Aurelino Leal',
|
||
'Barro Preto',
|
||
'Buerarema',
|
||
'Camacan',
|
||
'Canavieiras',
|
||
'Coaraci',
|
||
'Floresta Azul',
|
||
'Ibicaraí',
|
||
'Ilhéus',
|
||
'Itabuna',
|
||
'Itacaré',
|
||
'Itaju do Colônia',
|
||
'Itajuípe',
|
||
'Itapé',
|
||
'Itapitanga',
|
||
'Jussari',
|
||
'Maraú',
|
||
'Mascote',
|
||
'Pau Brasil',
|
||
'Santa Luzia',
|
||
'São José da Vitória',
|
||
'Ubaitaba',
|
||
'Una',
|
||
'Uruçuca',
|
||
],
|
||
},
|
||
{
|
||
code: '06',
|
||
name: 'Baixo Sul',
|
||
municipalityCount: 15,
|
||
municipalities: [
|
||
'Aratuípe',
|
||
'Cairu',
|
||
'Camamu',
|
||
'Gandu',
|
||
'Ibirapitanga',
|
||
'Igrapiúna',
|
||
'Ituberá',
|
||
'Jaguaripe',
|
||
'Nilo Peçanha',
|
||
'Piraí do Norte',
|
||
'Presidente Tancredo Neves',
|
||
'Taperoá',
|
||
'Teolândia',
|
||
'Valença',
|
||
'Wenceslau Guimarães',
|
||
],
|
||
},
|
||
{
|
||
code: '07',
|
||
name: 'Extremo Sul',
|
||
municipalityCount: 13,
|
||
municipalities: [
|
||
'Alcobaça',
|
||
'Caravelas',
|
||
'Ibirapuã',
|
||
'Itamaraju',
|
||
'Itanhém',
|
||
'Jucuruçu',
|
||
'Lajedão',
|
||
'Medeiros Neto',
|
||
'Mucuri',
|
||
'Nova Viçosa',
|
||
'Prado',
|
||
'Teixeira de Freitas',
|
||
'Vereda',
|
||
],
|
||
},
|
||
{
|
||
code: '08',
|
||
name: 'Médio Sudoeste da Bahia',
|
||
municipalityCount: 13,
|
||
municipalities: [
|
||
'Caatiba',
|
||
'Firmino Alves',
|
||
'Ibicuí',
|
||
'Iguaí',
|
||
'Itambé',
|
||
'Itapetinga',
|
||
'Itarantim',
|
||
'Itororó',
|
||
'Macarani',
|
||
'Maiquinique',
|
||
'Nova Canaã',
|
||
'Potiraguá',
|
||
'Santa Cruz da Vitória',
|
||
],
|
||
},
|
||
{
|
||
code: '09',
|
||
name: 'Vale do Jiquiriçá',
|
||
municipalityCount: 20,
|
||
municipalities: [
|
||
'Amargosa',
|
||
'Brejões',
|
||
'Cravolândia',
|
||
'Elísio Medrado',
|
||
'Irajuba',
|
||
'Itaquara',
|
||
'Itiruçu',
|
||
'Jaguaquara',
|
||
'Jiquiriçá',
|
||
'Lafaiete Coutinho',
|
||
'Laje',
|
||
'Lajedo do Tabocal',
|
||
'Maracás',
|
||
'Milagres',
|
||
'Mutuípe',
|
||
'Nova Itarana',
|
||
'Planaltino',
|
||
'Santa Inês',
|
||
'São Miguel das Matas',
|
||
'Ubaíra',
|
||
],
|
||
},
|
||
{
|
||
code: '10',
|
||
name: 'Sertão do São Francisco',
|
||
municipalityCount: 10,
|
||
municipalities: [
|
||
'Campo Alegre de Lourdes',
|
||
'Canudos',
|
||
'Casa Nova',
|
||
'Curaçá',
|
||
'Juazeiro',
|
||
'Pilão Arcado',
|
||
'Remanso',
|
||
'Sento Sé',
|
||
'Sobradinho',
|
||
'Uauá',
|
||
],
|
||
},
|
||
{
|
||
code: '11',
|
||
name: 'Bacia do Rio Grande',
|
||
municipalityCount: 14,
|
||
municipalities: [
|
||
'Angical',
|
||
'Baianópolis',
|
||
'Barreiras',
|
||
'Buritirama',
|
||
'Catolândia',
|
||
'Cotegipe',
|
||
'Cristópolis',
|
||
'Formosa do Rio Preto',
|
||
'Luís Eduardo Magalhães',
|
||
'Mansidão',
|
||
'Riachão das Neves',
|
||
'Santa Rita de Cássia',
|
||
'São Desidério',
|
||
'Wanderley',
|
||
],
|
||
},
|
||
{
|
||
code: '12',
|
||
name: 'Bacia do Paramirim',
|
||
municipalityCount: 8,
|
||
municipalities: [
|
||
'Boquira',
|
||
'Botuporã',
|
||
'Caturama',
|
||
'Érico Cardoso',
|
||
'Ibipitanga',
|
||
'Macaúbas',
|
||
'Paramirim',
|
||
'Rio do Pires',
|
||
],
|
||
},
|
||
{
|
||
code: '13',
|
||
name: 'Sertão Produtivo',
|
||
municipalityCount: 20,
|
||
municipalities: [
|
||
'Brumado',
|
||
'Caculé',
|
||
'Caetité',
|
||
'Candiba',
|
||
'Contendas do Sincorá',
|
||
'Dom Basílio',
|
||
'Guanambi',
|
||
'Ibiassucê',
|
||
'Ituaçu',
|
||
'Iuiú',
|
||
'Lagoa Real',
|
||
'Livramento de Nossa Senhora',
|
||
'Malhada de Pedras',
|
||
'Palmas de Monte Alto',
|
||
'Pindaí',
|
||
'Rio do Antônio',
|
||
'Sebastião Laranjeiras',
|
||
'Tanhaçu',
|
||
'Tanque Novo',
|
||
'Urandi',
|
||
],
|
||
},
|
||
{
|
||
code: '14',
|
||
name: 'Piemonte do Paraguaçu',
|
||
municipalityCount: 13,
|
||
municipalities: [
|
||
'Boa Vista do Tupim',
|
||
'Iaçu',
|
||
'Ibiquera',
|
||
'Itaberaba',
|
||
'Itatim',
|
||
'Lajedinho',
|
||
'Macajuba',
|
||
'Mundo Novo',
|
||
'Piritiba',
|
||
'Rafael Jambeiro',
|
||
'Ruy Barbosa',
|
||
'Santa Teresinha',
|
||
'Tapiramutá',
|
||
],
|
||
},
|
||
{
|
||
code: '15',
|
||
name: 'Bacia do Jacuípe',
|
||
municipalityCount: 15,
|
||
municipalities: [
|
||
'Baixa Grande',
|
||
'Capela do Alto Alegre',
|
||
'Capim Grosso',
|
||
'Gavião',
|
||
'Ipirá',
|
||
'Mairi',
|
||
'Nova Fátima',
|
||
'Pé de Serra',
|
||
'Pintadas',
|
||
'Quixabeira',
|
||
'Riachão do Jacuípe',
|
||
'São José do Jacuípe',
|
||
'Serra Preta',
|
||
'Várzea da Roça',
|
||
'Várzea do Poço',
|
||
],
|
||
},
|
||
{
|
||
code: '16',
|
||
name: 'Piemonte da Diamantina',
|
||
municipalityCount: 9,
|
||
municipalities: [
|
||
'Caém',
|
||
'Jacobina',
|
||
'Miguel Calmon',
|
||
'Mirangaba',
|
||
'Ourolândia',
|
||
'Saúde',
|
||
'Serrolândia',
|
||
'Umburanas',
|
||
'Várzea Nova',
|
||
],
|
||
},
|
||
{
|
||
code: '17',
|
||
name: 'Semiárido Nordeste II',
|
||
municipalityCount: 18,
|
||
municipalities: [
|
||
'Adustina',
|
||
'Antas',
|
||
'Banzaê',
|
||
'Cícero Dantas',
|
||
'Cipó',
|
||
'Coronel João Sá',
|
||
'Euclides da Cunha',
|
||
'Fátima',
|
||
'Heliópolis',
|
||
'Jeremoabo',
|
||
'Nova Soure',
|
||
'Novo Triunfo',
|
||
'Paripiranga',
|
||
'Pedro Alexandre',
|
||
'Ribeira do Amparo',
|
||
'Ribeira do Pombal',
|
||
'Santa Brígida',
|
||
'Sítio do Quinto',
|
||
],
|
||
},
|
||
{
|
||
code: '18',
|
||
name: 'Litoral Norte e Agreste Baiano',
|
||
municipalityCount: 20,
|
||
municipalities: [
|
||
'Acajutiba',
|
||
'Alagoinhas',
|
||
'Aporá',
|
||
'Araças',
|
||
'Aramari',
|
||
'Cardeal da Silva',
|
||
'Catu',
|
||
'Conde',
|
||
'Crisópolis',
|
||
'Entre Rios',
|
||
'Esplanada',
|
||
'Inhambupe',
|
||
'Itanagra',
|
||
'Itapicuru',
|
||
'Jandaíra',
|
||
'Olindina',
|
||
'Ouriçangas',
|
||
'Pedrão',
|
||
'Rio Real',
|
||
'Sátiro Dias',
|
||
],
|
||
},
|
||
{
|
||
code: '19',
|
||
name: 'Portal do Sertão',
|
||
municipalityCount: 17,
|
||
municipalities: [
|
||
'Água Fria',
|
||
'Amélia Rodrigues',
|
||
'Anguera',
|
||
'Antônio Cardoso',
|
||
'Conceição da Feira',
|
||
'Conceição do Jacuípe',
|
||
'Coração de Maria',
|
||
'Feira de Santana',
|
||
'Ipecaetá',
|
||
'Irará',
|
||
'Santa Bárbara',
|
||
'Santanópolis',
|
||
'Santo Estêvão',
|
||
'São Gonçalo dos Campos',
|
||
'Tanquinho',
|
||
'Teodoro Sampaio',
|
||
'Terra Nova',
|
||
],
|
||
},
|
||
{
|
||
code: '20',
|
||
name: 'Sudoeste Baiano',
|
||
municipalityCount: 24,
|
||
municipalities: [
|
||
'Anagé',
|
||
'Aracatu',
|
||
'Barra do Choça',
|
||
'Belo Campo',
|
||
'Bom Jesus da Serra',
|
||
'Caetanos',
|
||
'Cândido Sales',
|
||
'Caraíbas',
|
||
'Condeúba',
|
||
'Cordeiros',
|
||
'Encruzilhada',
|
||
'Guajeru',
|
||
'Jacaraci',
|
||
'Licínio de Almeida',
|
||
'Maetinga',
|
||
'Mirante',
|
||
'Mortugaba',
|
||
'Piripá',
|
||
'Planalto',
|
||
'Poções',
|
||
'Presidente Jânio Quadros',
|
||
'Ribeirão do Largo',
|
||
'Tremedal',
|
||
'Vitória da Conquista',
|
||
],
|
||
},
|
||
{
|
||
code: '21',
|
||
name: 'Recôncavo',
|
||
municipalityCount: 19,
|
||
municipalities: [
|
||
'Cabaceiras do Paraguaçu',
|
||
'Cachoeira',
|
||
'Castro Alves',
|
||
'Conceição do Almeida',
|
||
'Cruz das Almas',
|
||
'Dom Macedo Costa',
|
||
'Governador Mangabeira',
|
||
'Maragogipe',
|
||
'Muniz Ferreira',
|
||
'Muritiba',
|
||
'Nazaré',
|
||
'Salinas da Margarida',
|
||
'Santo Amaro',
|
||
'Santo Antônio de Jesus',
|
||
'São Felipe',
|
||
'São Félix',
|
||
'Sapeaçu',
|
||
'Saubara',
|
||
'Varzedo',
|
||
],
|
||
},
|
||
{
|
||
code: '22',
|
||
name: 'Médio Rio de Contas',
|
||
municipalityCount: 16,
|
||
municipalities: [
|
||
'Aiquara',
|
||
'Apuarema',
|
||
'Barra do Rocha',
|
||
'Boa Nova',
|
||
'Dário Meira',
|
||
'Gongogi',
|
||
'Ibirataia',
|
||
'Ipiaú',
|
||
'Itagi',
|
||
'Itagibá',
|
||
'Itamari',
|
||
'Jequié',
|
||
'Jitaúna',
|
||
'Manoel Vitorino',
|
||
'Nova Ibiá',
|
||
'Ubatã',
|
||
],
|
||
},
|
||
{
|
||
code: '23',
|
||
name: 'Bacia do Rio Corrente',
|
||
municipalityCount: 11,
|
||
municipalities: [
|
||
'Brejolândia',
|
||
'Canápolis',
|
||
'Cocos',
|
||
'Coribe',
|
||
'Correntina',
|
||
'Jaborandi',
|
||
'Santa Maria da Vitória',
|
||
'Santana',
|
||
'São Félix do Coribe',
|
||
'Serra Dourada',
|
||
'Tabocas do Brejo Velho',
|
||
],
|
||
},
|
||
{
|
||
code: '24',
|
||
name: 'Itaparica',
|
||
municipalityCount: 6,
|
||
municipalities: ['Abaré', 'Chorrochó', 'Glória', 'Macururé', 'Paulo Afonso', 'Rodelas'],
|
||
},
|
||
{
|
||
code: '25',
|
||
name: 'Piemonte Norte do Itapicuru',
|
||
municipalityCount: 9,
|
||
municipalities: [
|
||
'Andorinha',
|
||
'Antônio Gonçalves',
|
||
'Caldeirão Grande',
|
||
'Campo Formoso',
|
||
'Filadélfia',
|
||
'Jaguarari',
|
||
'Pindobaçu',
|
||
'Ponto Novo',
|
||
'Senhor do Bonfim',
|
||
],
|
||
},
|
||
{
|
||
code: '26',
|
||
name: 'Metropolitano de Salvador',
|
||
municipalityCount: 13,
|
||
municipalities: [
|
||
'Camaçari',
|
||
'Candeias',
|
||
"Dias d'Ávila",
|
||
'Itaparica',
|
||
'Lauro de Freitas',
|
||
'Madre de Deus',
|
||
'Mata de São João',
|
||
'Pojuca',
|
||
'Salvador',
|
||
'São Francisco do Conde',
|
||
'São Sebastião do Passé',
|
||
'Simões Filho',
|
||
'Vera Cruz',
|
||
],
|
||
},
|
||
{
|
||
code: '27',
|
||
name: 'Costa do Descobrimento',
|
||
municipalityCount: 8,
|
||
municipalities: [
|
||
'Belmonte',
|
||
'Eunápolis',
|
||
'Guaratinga',
|
||
'Itabela',
|
||
'Itagimirim',
|
||
'Itapebi',
|
||
'Porto Seguro',
|
||
'Santa Cruz Cabrália',
|
||
],
|
||
},
|
||
] as const
|
||
|
||
export type BahiaIdentityTerritory = (typeof bahiaIdentityTerritoryRecords)[number]['name']
|
||
|
||
export const bahiaIdentityTerritories = bahiaIdentityTerritoryRecords.map(({ name }) => name)
|
||
|
||
export const bahiaMunicipalities: readonly string[] = bahiaIdentityTerritoryRecords
|
||
.flatMap(({ municipalities }) => municipalities)
|
||
.sort((left, right) => left.localeCompare(right, 'pt-BR'))
|
||
|
||
const bahiaIdentityTerritorySet = new Set<string>(bahiaIdentityTerritories)
|
||
const bahiaMunicipalitySet = new Set<string>(bahiaMunicipalities)
|
||
|
||
export const isBahiaIdentityTerritory = (value: string): value is BahiaIdentityTerritory =>
|
||
bahiaIdentityTerritorySet.has(value)
|
||
|
||
export const isBahiaMunicipality = (value: string): boolean => bahiaMunicipalitySet.has(value)
|
||
|
||
const territoryByCity = new Map<string, BahiaIdentityTerritory>(
|
||
bahiaIdentityTerritoryRecords.flatMap(({ name, municipalities }) =>
|
||
municipalities.map((city) => [city, name]),
|
||
),
|
||
)
|
||
|
||
export const territoryForCity = (city: string): BahiaIdentityTerritory | undefined =>
|
||
territoryByCity.get(city)
|
||
|
||
export const validateBahiaTerritoryPair = (
|
||
territory: string | null | undefined,
|
||
city: string | null | undefined,
|
||
): boolean => !territory || !city || territoryByCity.get(city) === territory
|
||
|
||
export const citiesForTerritory = (territory: BahiaIdentityTerritory): readonly string[] =>
|
||
bahiaIdentityTerritoryRecords.find(({ name }) => name === territory)?.municipalities ?? []
|