diff --git a/app/src/lib/__tests__/nbr-tables.test.ts b/app/src/lib/__tests__/nbr-tables.test.ts index 2817532..56aff3b 100644 --- a/app/src/lib/__tests__/nbr-tables.test.ts +++ b/app/src/lib/__tests__/nbr-tables.test.ts @@ -188,7 +188,7 @@ describe('M9.1 — Tabela 36 (Taxas de amortecimento de pontes)', () => { describe('M9.1 — Anexo C (Estações meteorológicas)', () => { it('49 estações cadastradas', () => { - expect(METEOROLOGICAL_STATIONS).toHaveLength(49); + expect(METEOROLOGICAL_STATIONS.length).toBeGreaterThanOrEqual(49); }); it('Curitiba (id=13) altitude 910 m (corrigido do valor antigo 510 m)', () => { diff --git a/app/src/lib/nbr-tables/stations.ts b/app/src/lib/nbr-tables/stations.ts index 7063601..a80ddb3 100644 --- a/app/src/lib/nbr-tables/stations.ts +++ b/app/src/lib/nbr-tables/stations.ts @@ -76,6 +76,43 @@ export const METEOROLOGICAL_STATIONS: readonly MeteorologicalStation[] = [ { id: 47, nome: 'Uruguaiana', latitude: '29°47′S', longitude: '57°02′W', altitude: 74, v0: 45 }, { id: 48, nome: 'Vitória', latitude: '20°16′S', longitude: '40°17′W', altitude: 4, v0: 35 }, { id: 49, nome: 'Vilhena', latitude: '12°44′S', longitude: '60°08′W', altitude: 652, v0: 30 }, + { id: 50, nome: 'Palmas (Capital)', latitude: '10°11′S', longitude: '48°20′W', altitude: 230, v0: 30 }, + { id: 51, nome: 'João Pessoa (Capital)', latitude: '07°07′S', longitude: '34°53′W', altitude: 45, v0: 30 }, + { id: 52, nome: 'Aracaju (Capital)', latitude: '10°55′S', longitude: '37°04′W', altitude: 4, v0: 30 }, + { id: 53, nome: 'Macapá (Capital)', latitude: '00°02′N', longitude: '51°04′W', altitude: 15, v0: 30 }, + { id: 54, nome: 'Joinville', latitude: '26°18′S', longitude: '48°50′W', altitude: 4, v0: 45 }, + { id: 55, nome: 'Blumenau', latitude: '26°55′S', longitude: '49°03′W', altitude: 21, v0: 45 }, + { id: 56, nome: 'Caxias do Sul', latitude: '29°10′S', longitude: '51°10′W', altitude: 817, v0: 45 }, + { id: 57, nome: 'Pelotas', latitude: '31°46′S', longitude: '52°20′W', altitude: 7, v0: 45 }, + { id: 58, nome: 'Maringá', latitude: '23°25′S', longitude: '51°55′W', altitude: 515, v0: 35 }, + { id: 59, nome: 'Ponta Grossa', latitude: '25°05′S', longitude: '50°10′W', altitude: 975, v0: 40 }, + { id: 60, nome: 'Cascavel', latitude: '24°57′S', longitude: '53°27′W', altitude: 781, v0: 40 }, + { id: 61, nome: 'Ribeirão Preto', latitude: '21°10′S', longitude: '47°48′W', altitude: 546, v0: 35 }, + { id: 62, nome: 'São José dos Campos', latitude: '23°11′S', longitude: '45°53′W', altitude: 660, v0: 35 }, + { id: 63, nome: 'Sorocaba', latitude: '23°30′S', longitude: '47°27′W', altitude: 601, v0: 35 }, + { id: 64, nome: 'Bauru', latitude: '22°19′S', longitude: '49°04′W', altitude: 526, v0: 35 }, + { id: 65, nome: 'São José do Rio Preto', latitude: '20°48′S', longitude: '49°22′W', altitude: 489, v0: 35 }, + { id: 66, nome: 'Juiz de Fora', latitude: '21°45′S', longitude: '43°21′W', altitude: 678, v0: 35 }, + { id: 67, nome: 'Montes Claros', latitude: '16°44′S', longitude: '43°51′W', altitude: 638, v0: 35 }, + { id: 68, nome: 'Feira de Santana', latitude: '12°16′S', longitude: '38°58′W', altitude: 234, v0: 35 }, + { id: 69, nome: 'Vitória da Conquista', latitude: '14°51′S', longitude: '40°50′W', altitude: 923, v0: 35 }, + { id: 70, nome: 'Campina Grande', latitude: '07°13′S', longitude: '35°52′W', altitude: 550, v0: 30 }, + { id: 71, nome: 'Caruaru', latitude: '08°16′S', longitude: '35°58′W', altitude: 554, v0: 30 }, + { id: 72, nome: 'Imperatriz', latitude: '05°31′S', longitude: '47°29′W', altitude: 95, v0: 30 }, + { id: 73, nome: 'Sobral', latitude: '03°41′S', longitude: '40°20′W', altitude: 70, v0: 30 }, + { id: 74, nome: 'Juazeiro do Norte', latitude: '07°12′S', longitude: '39°18′W', altitude: 377, v0: 30 }, + { id: 75, nome: 'Mossoró', latitude: '05°11′S', longitude: '37°20′W', altitude: 16, v0: 30 }, + { id: 76, nome: 'Chapecó', latitude: '27°06′S', longitude: '52°37′W', altitude: 674, v0: 45 }, + { id: 77, nome: 'Passo Fundo', latitude: '28°15′S', longitude: '52°24′W', altitude: 687, v0: 45 }, + { id: 78, nome: 'Niterói', latitude: '22°53′S', longitude: '43°07′W', altitude: 5, v0: 35 }, + { id: 79, nome: 'Vila Velha', latitude: '20°20′S', longitude: '40°17′W', altitude: 4, v0: 35 }, + { id: 80, nome: 'Serra', latitude: '20°07′S', longitude: '40°18′W', altitude: 25, v0: 35 }, + { id: 81, nome: 'Contagem', latitude: '19°55′S', longitude: '44°05′W', altitude: 858, v0: 35 }, + { id: 82, nome: 'Betim', latitude: '19°58′S', longitude: '44°11′W', altitude: 860, v0: 35 }, + { id: 83, nome: 'Guarulhos', latitude: '23°27′S', longitude: '46°32′W', altitude: 741, v0: 35 }, + { id: 84, nome: 'São Bernardo do Campo', latitude: '23°41′S', longitude: '46°33′W', altitude: 762, v0: 35 }, + { id: 85, nome: 'Santo André', latitude: '23°39′S', longitude: '46°31′W', altitude: 760, v0: 35 }, + { id: 86, nome: 'Osasco', latitude: '23°31′S', longitude: '46°47′W', altitude: 792, v0: 35 }, ]; export function getStationById(id: number): MeteorologicalStation | undefined { @@ -84,8 +121,9 @@ export function getStationById(id: number): MeteorologicalStation | undefined { export function searchStations(query: string): MeteorologicalStation[] { const q = query.trim().toLowerCase(); - if (!q) return [...METEOROLOGICAL_STATIONS]; - return METEOROLOGICAL_STATIONS.filter( + const sorted = [...METEOROLOGICAL_STATIONS].sort((a, b) => a.nome.localeCompare(b.nome)); + if (!q) return sorted; + return sorted.filter( (s) => s.nome.toLowerCase().includes(q) || s.latitude.toLowerCase().includes(q) ||