diff --git a/README.md b/README.md index 636b88b..38feb4f 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,10 @@ O provedor é resolvido pelo **prefixo da sigla da pasta** no GeoGrid (não há - `s-...` → **Sothis** (rede própria). - `p-...` → **parceiro**; o provedor é o nome que vem depois do `-` (ex.: `p-Vivo` → `Vivo`). -- Um segmento `sub` após o `-` marca rede **subterrânea** e prefixa `(Subterrâneo)` no provedor (ex.: `s-sub-Barueri` → `(Subterrâneo) Sothis`). +- **Meio de transmissão** (marcador logo após o prefixo): + - `sub` → rede **subterrânea**, prefixa `(Subterrâneo)` (ex.: `s-sub-Barueri` → `(Subterrâneo) Sothis`). + - `a` → **Aéreo**, sufixa ` - Aéreo` (ex.: `S-A-ABC` → `Sothis - Aéreo`). + - `r` → **Rádio**, sufixa ` - Rádio` (ex.: `P-R-Vivo` → `Vivo - Rádio`). - Qualquer sigla fora dessa convenção é considerada **não elegível** (ignorada). ## 3. Rodando a Aplicação diff --git a/src/shared/apis/geogridService.js b/src/shared/apis/geogridService.js index 631ac67..587ad30 100644 --- a/src/shared/apis/geogridService.js +++ b/src/shared/apis/geogridService.js @@ -38,28 +38,48 @@ const fetchRegistros = async (lat, lon) => { }; // Classificação da sigla da pasta por convenção de PREFIXO: -// "s-..." => Sothis (rede própria) -// "p-..." => Parceiro; o provedor é o nome que vem depois do "-" -// segmento "sub" após "-" => subterrâneo; prefixa "(Subterrâneo) " no provedor -// Exemplos: "s-Barueri" => "Sothis"; "p-Vivo" => "Vivo"; "s-sub-Barueri" => "(Subterrâneo) Sothis". +// "s-..." => Sothis (rede própria) +// "p-..." => Parceiro; o provedor é o nome que vem depois do "-" +// Marcador de MEIO DE TRANSMISSÃO logo após o prefixo: +// "a" => Aéreo (sufixo " - Aéreo") +// "r" => Rádio (sufixo " - Rádio") +// "sub" => Subterrâneo (prefixa "(Subterrâneo) ") +// Exemplos: "s-Barueri" => "Sothis"; "p-Vivo" => "Vivo"; "s-sub-Barueri" => "(Subterrâneo) Sothis"; +// "S-A-ABC" => "Sothis - Aéreo"; "P-R-Vivo" => "Vivo - Rádio". // Qualquer outra coisa => não elegível (tipo "nenhum"). const classificarSigla = (sigla) => { const partes = String(sigla || '').split('-').map(p => p.trim()).filter(Boolean); const prefixo = (partes[0] || '').toLowerCase(); - const subterraneo = partes.slice(1).some(p => p.toLowerCase() === 'sub'); - const resto = partes.slice(1).filter(p => p.toLowerCase() !== 'sub'); - let tipo, nome; - if (prefixo === 's') { - tipo = 'autorizado'; - nome = 'Sothis'; - } else if (prefixo === 'p') { - tipo = 'parceiro'; + let tipo; + if (prefixo === 's') tipo = 'autorizado'; + else if (prefixo === 'p') tipo = 'parceiro'; + else return { tipo: 'nenhum', provedor: sigla || 'Desconhecido' }; + + // Marcador de meio de transmissão logo após o prefixo (partes[1]). + const marcador = (partes[1] || '').toLowerCase(); + const aereo = marcador === 'a'; + const radio = marcador === 'r'; + const subterraneo = partes.slice(1).some(p => p.toLowerCase() === 'sub'); + + // Nome: Sothis é fixo; parceiro = segmentos após o prefixo, sem os marcadores. + let nome = 'Sothis'; + if (tipo === 'parceiro') { + const resto = partes.slice(1).filter((p, i) => { + const pl = p.toLowerCase(); + if (pl === 'sub') return false; + if (i === 0 && (pl === 'a' || pl === 'r')) return false; // marcador de meio + return true; + }); nome = resto.join(' ') || 'Parceiro'; - } else { - return { tipo: 'nenhum', provedor: sigla || 'Desconhecido' }; } - return { tipo, provedor: subterraneo ? `(Subterrâneo) ${nome}` : nome }; + + // Formatação: subterrâneo prefixa "(Subterrâneo)"; aéreo/rádio sufixam " - Meio". + let provedor = subterraneo ? `(Subterrâneo) ${nome}` : nome; + if (aereo) provedor = `${provedor} - Aéreo`; + else if (radio) provedor = `${provedor} - Rádio`; + + return { tipo, provedor }; }; const ehAutorizado = (sigla) => classificarSigla(sigla).tipo === 'autorizado'; diff --git a/test/viabilidade.test.js b/test/viabilidade.test.js index b70e204..bb9eaf2 100644 --- a/test/viabilidade.test.js +++ b/test/viabilidade.test.js @@ -158,6 +158,10 @@ test('classificarSigla: convenção de prefixos s-/p-/sub', () => { assert.deepEqual(geogridService.classificarSigla('p-Vivo'), { tipo: 'parceiro', provedor: 'Vivo' }); assert.deepEqual(geogridService.classificarSigla('s-sub-Barueri'), { tipo: 'autorizado', provedor: '(Subterrâneo) Sothis' }); assert.deepEqual(geogridService.classificarSigla('p-sub-Vivo'), { tipo: 'parceiro', provedor: '(Subterrâneo) Vivo' }); + // meio de transmissão: aéreo / rádio (marcador logo após o prefixo) + assert.deepEqual(geogridService.classificarSigla('S-A-ABC'), { tipo: 'autorizado', provedor: 'Sothis - Aéreo' }); + assert.deepEqual(geogridService.classificarSigla('P-R-Vivo'), { tipo: 'parceiro', provedor: 'Vivo - Rádio' }); + assert.deepEqual(geogridService.classificarSigla('p-a-Vivo'), { tipo: 'parceiro', provedor: 'Vivo - Aéreo' }); assert.equal(geogridService.classificarSigla('Sub Alameda Santos').tipo, 'nenhum'); assert.equal(geogridService.classificarSigla('São Paulo - SP').tipo, 'nenhum'); // convenção antiga não é mais elegível assert.equal(geogridService.classificarSigla('S-SP').provedor, 'Sothis'); // case-insensitive