8000
Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
< 10BC8 div class="Skeleton Skeleton--text"> 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TE-DF - Sistema Integrado de Transporte Escolar do Distrito Federal

Versão Plataforma Licença


📌 Visão Geral

O TE-DF é uma plataforma robusta baseada em Google Apps Script, projetada para gerenciar o transporte escolar do Distrito Federal. O sistema integra Frontend moderno (HTML/JS), Backend escalável (GAS) e processamento avançado via Google Colab, oferecendo uma solução completa para gestão de rotas, frequências, eventos e relatórios inteligentes.

A arquitetura é modular e em camadas, garantindo separação de responsabilidades, testabilidade e facilidade de manutenção.


📋 Índice

  1. Visão Geral
  2. Destaques
  3. Arquitetura do Sistema
  4. Estrutura do Projeto
  5. Schemas de Dados
  6. Referência de Funções
  7. Endpoints de API
  8. Módulos MVP
  9. Módulos Frontend
  10. Ferramentas de Análise
  11. Rotinas de Manutenção
  12. Configuração e Deploy

✨ Destaques

  • Arquitetura Enterprise: Implementação em camadas (Frontend, API Gateway, Business Logic, Data Layer).
  • Autenticação Robusta: Sistema de login seguro com controle de sessão, auditoria e múltiplos níveis de permissão (Monitor, Secretário, Admin).
  • Módulos MVP: Funcionalidades de ponta a ponta para Rotas, Frequência, Alunos e Relatórios com IA.
  • Integração Colab: Processamento pesado e análise de dados via scripts Python integrados (Polling/Automated).
  • Design System: Interface moderna e responsiva com componentes reutilizáveis e feedback visual rico.
  • Ferramentas de Desenvolvimento: Suite completa de scripts Python para análise de código, detecção de erros e geração de documentação.
  • CRUD Robusto: Sistema genérico de operações CRUD com validação de schema e tratamento de erros.
  • Smart Caching: Cache multi-layer (Memory, Script Cache, Properties) com invalidação inteligente.
  • Circuit Breaker: Proteção contra falhas em cascata com degradação graciosa.

🏗️ Arquitetura do Sistema

O sistema TE-DF é uma aplicação Google Apps Script com arquitetura em camadas:

┌─────────────────────────────────────┐
│         Frontend (HTML/JS)          │
│   MVP Modules, Components, Styles   │
├─────────────────────────────────────┤
│          API Gateway (GAS)          │
│      Handlers, Router, Auth         │
├─────────────────────────────────────┤
│         Business Logic (GAS)        │
│    Services, Validators, Events     │
├─────────────────────────────────────┤
│         Data Layer (GAS)            │
│  Repository, DAL, SpreadsheetAPI    │
├─────────────────────────────────────┤
│       Google Sheets (Storage)       │
└─────────────────────────────────────┘

Componentes Principais

Camada Descrição Arquivos Principais
Config Configurações e constantes do sistema 00_Config.gs, 00_SectionConfig.gs
Core Utilitários, tratamento de erros, degradação 03_Utils.gs, 04_ErrorHandler.gs
Services Serviços de infraestrutura 10_LoggerService.gs, 12_CacheService.gs
Data Layer Camada de acesso a dados 20_SpreadsheetProvider.gs, 24_Repository.gs
Auth Autenticação, autorização e sessões 44_SessionManager.gs, 46_EnterpriseAuthService.gs, 47_AuthService.gs
Business Lógica de negócios e eventos 55_EventBus.gs, 56_EventService.gs
Features Funcionalidades específicas 73_CRUD_Functions.gs, 73_ChatbotService.gs
MVP Módulos MVP do sistema MVP_CRUD.gs, MVP_Eventos.gs, MVP_RelatorioIA.gs
Testing Framework de testes 85_TestFramework.gs, 91_TestRunner.gs

Integração Colab

O sistema possui integração com Google Colab para processamento avançado:

  • Colab_Automated.py: Processador de Jobs com Ativação Remota via webhook
  • Colab_Polling_Processor.py: Processador de Jobs via Polling (SEM WEBHOOK)

📂 Estrutura do Projeto

d:\TE-DF-PP
├── .clasp.json                 # Configuração do CLASP
├── appsscript.json             # Manifest do Apps Script
│
├── 00_*.gs                     # Configurações e constantes
├── 01_*.gs - 05_*.gs           # Core e utilitários
├── 10_*.gs - 13_*.gs           # Serviços de infraestrutura
├── 20_*.gs - 25_*.gs           # Data Layer
├── 30_*.gs - 38_*.gs           # Data Services
├── 40_*.gs - 48_*.gs           # Validação e Autenticação
├── 50_*.gs - 68_*.gs           # Business Logic e Infrastructure
├── 70_*.gs - 79_*.gs           # Sistema e Features
├── 80_*.gs - 89_*.gs           # Colab, Workflows e Testes
├── 90_*.gs - 99_*.gs           # Testes e Correções
├── MVP_*.gs                    # Módulos MVP Backend
│
├── Component-*.html            # Componentes HTML reutilizáveis
├── JS-*.html                   # Scripts frontend modularizados
├── Page-*.html                 # Páginas da aplicação
├── Styles-*.html               # Estilos CSS
├── index.html                  # Página principal (monolítica)
│
├── Colab_Automated.py          # Processador Colab com webhook
├── Colab_Polling_Processor.py  # Processador Colab com polling
│
├── docs/                       # Documentação gerada
│   ├── API_REFERENCE.md        # Referência de APIs
│   ├── ARCHITECTURE.md         # Arquitetura do sistema
│   ├── FUNCTIONS_REFERENCE.md  # Referência detalhada de funções
│   └── MVP_GUIDE.md            # Guia dos módulos MVP
│
├── tools/                      # Ferramentas de análise (Python)
│   ├── analyze_codebase.py
│   ├── check_best_practices.py
│   ├── detect_dependencies.py
│   ├── find_duplicates.py
│   └── generate_docs.py
│
└── tests/                      # Testes automatizados

💾 Schemas de Dados

O sistema utiliza schemas definidos em 43_SchemaMapping.gs para validação e estruturação dos dados:

Schema Planilha Descrição
Alunos Alunos Cadastro de alunos do transporte escolar
Usuarios Usuarios Usuários do sistema (admin, monitores, secretários)
Rotas Rotas Rotas de transporte com dados de otimização
Veiculos Veiculos Frota de veículos
Frequencia Frequencia Registro de frequência (IDA/VOLTA)
Eventos Eventos Eventos do calendário escolar
Incidentes Incidentes Registro de ocorrências
Pessoal Pessoal Cadastro de motoristas e monitores
Logs Logs Logs do sistema
Auditoria Auditoria Trilha de auditoria
Sessoes Sessoes Sessões de usuários
JobQueue JobQueue Fila de jobs assíncronos
FeatureFlags FeatureFlags Flags de funcionalidades

📖 Referência de Funções

Autenticação (Auth)

Auth_login(emailOrUsername, password) [PUBLIC]

Arquivo: 47_AuthService.gs

Função principal de autenticação, chamada pelo frontend via APIClient.run('Auth_login', email, password).

WORKFLOW ÚNICO:

  • Aceita Username OU Email
  • Senha em texto plano
  • Consulta aba Usuarios
// Exemplo de uso no frontend
APIClient.run('Auth_login', 'admin', 'minhasenha')
  .then(result => {
    if (result.success) {
      console.log('Logado como:', result.user.username);
      console.log('Token:', result.token);
    }
  });
  • @param {string} emailOrUsername - Email ou username do usuário
  • @param {string} password - Senha em texto plano
  • @return {Object} {success, user, token, message}

authenticateUser(credentialsOrUsername, password) [PUBLIC]

Arquivo: 47_AuthService.gs

Autentica usuário - WORKFLOW ÚNICO E PADRONIZADO.

FLUXO:

  1. Recebe Username OU Email + Password (texto plano)
  2. Consulta aba "Usuarios" na planilha centralizadora
  3. Busca por Username OU Email (case-insensitive)
  4. Compara senha em texto plano diretamente
  5. Retorna objeto padronizado
// Exemplo
authenticateUser('admin', 'minhasenha');
authenticateUser('admin@email.com', 'minhasenha');
authenticateUser({ username: 'admin', password: 'minhasenha' });
  • @param {Object|string} credentialsOrUsername - Username, Email ou {username, password}
  • @param {string} password - Senha em texto plano
  • @return {Object} {success, user, token, message}

getCurrentUser() [PUBLIC]

Arquivo: 47_AuthGlobals.gs

Obtém o usuário atualmente logado. Wrapper global para EnterpriseAuthService.getCurrentUser().

const result = getCurrentUser();
if (result.success) {
  console.log('Usuário:', result.user.username);
  console.log('Role:', result.user.role);
  console.log('Rota Vinculada:', result.user.idRotaVinculada);
}
  • @return {Object} { success, user: { id, username, email, role, permissions, idRotaVinculada }, message }

changePassword(username, currentPassword, newPassword, isFirstAccess) [PUBLIC]

Arquivo: 47_AuthService.gs

Troca de senha do usuário.

  • @param {string} username - Username ou Email
  • @param {string} currentPassword - Senha atual (texto plano)
  • @param {string} newPassword - Nova senha (texto plano)
  • @param {boolean} isFirstAccess - Se é primeiro acesso (ignora senha atual)
  • @return {Object} {success, message}

logout(token) [PUBLIC]

Arquivo: 47_AuthService.gs

Finaliza a sessão do usuário.

  • @param {string} token - Token da sessão
  • @return {Object} {success, message}

Gerenciamento de Sessão

createSession(user, options) [PUBLIC]

Arquivo: 44_SessionManager.gs

Cria nova sessão enterprise com recursos avançados.

ENTERPRISE FEATURES:

  • Session fingerprinting com device detection

  • Idle timeout com grace period

  • Concurrent session control com eviction policy

  • Token rotation automático

  • Activity tracking detalhado

  • @param {Object} user - Dados do usuário

  • @param {Object} options - Opções adicionais

  • @return {Object} {success, token, sessionId, refreshToken, expiresAt, expiresIn}


validateSession(token, options) [PUBLIC]

Arquivo: 44_SessionManager.gs

Valida se uma sessão é válida e ativa.

  • @param {string} token - Token da sessão
  • @param {Object} options - Opções de validação
  • @return {Object} {valid, session, user, newToken, error}

refreshSession(refreshToken) [PUBLIC]

Arquivo: 44_SessionManager.gs

Renova sessão usando refresh token.

  • @param {string} refreshToken - Refresh token
  • @return {Object} {success, token, refreshToken, expiresAt}

revokeSession(token) [PUBLIC]

Arquivo: 44_SessionManager.gs

Revoga uma sessão específica.

  • @param {string} token - Token da sessão
  • @return {Object} {succe 10BC8 ss, message}

revokeAllSessions(email) [PUBLIC]

Arquivo: 44_SessionManager.gs

Revoga todas as sessões de um usuário.

  • @param {string} email - Email do usuário
  • @return {Object} {success, count, message}

getUserActiveSessions(email) [PUBLIC]

Arquivo: 44_SessionManager.gs

Obtém sessões ativas de um usuário.

  • @param {string} email - Email do usuário
  • @return {Object} {success, sessions}

Autorização

hasPermission(permission) [PUBLIC]

Arquivo: 47_AuthService.gs

Verifica se o usuário atual possui a permissão solicitada.

  • @param {string} permission - Permissão a verificar
  • @return {boolean} True se permitido

hasRole(roles) [PUBLIC]

Arquivo: 47_AuthService.gs

Verifica se o usuário atual possui o role especificado.

  • @param {string|Array} roles - Role(s) a verificar
  • @return {boolean} True se possui o role

requireAuth() [PUBLIC]

Arquivo: 47_AuthGlobals.gs

Requer que o usuário esteja autenticado. Lança erro se não estiver.

  • @return {Object} { success, user } ou erro

requireRole(roles) [PUBLIC]

Arquivo: 47_AuthGlobals.gs

Requer que o usuário tenha um role específico.

  • @param {string|Array} roles - Role(s) permitido(s)
  • @return {Object} { success, user } ou erro

requireAdmin() [PUBLIC]

Arquivo: 47_AuthGlobals.gs

Requer que o usuário seja Administrador.

  • @return {Object} { success, user } ou erro

requireSecretario() [PUBLIC]

Arquivo: 47_AuthGlobals.gs

Requer que o usuário seja Secretário (ou Admin).

  • @return {Object} { success, user } ou erro

isAdmin() / isMonitor() / isSecretario() [PUBLIC]

Arquivo: 47_AuthGlobals.gs

Funções helper para verificar roles específicos.

  • @return {boolean}

CRUD Genérico

genericCreate(entityType, data, options) [PUBLIC]

Arquivo: 02_GenericCRUD.gs

Cria registro genérico. Substitui funções duplicadas como createAluno, createRota, createVeiculo.

genericCreate('Alunos', {
  Nome_Completo: 'João Silva',
  RA_Aluno: '12345',
  ID_Rota: 'ROTA-001'
});
  • @param {string} entityType - Tipo da entidade (Alunos, Rotas, etc)
  • @param {Object} data - Dados do registro
  • @param {Object} options - Opções adicionais
  • @return {Object} Resultado da operação

genericRead(entityType, filters, options) [PUBLIC]

Arquivo: 02_GenericCRUD.gs

Lê registros genéricos com filtros.

// Ler todos
genericRead('Alunos');

// Com filtros
genericRead('Alunos', { ID_Rota: 'ROTA-001', Status_Ativo: 'Ativo' });

// Com paginação
genericRead('Alunos', {}, { limit: 50, offset: 0 });
  • @param {string} entityType - Tipo da entidade
  • @param {Object} filters - Filtros de busca
  • @param {Object} options - Opções (limit, offset, orderBy)
  • @return {Object} Resultado com dados

genericUpdate(entityType, id, data, options) [PUBLIC]

Arquivo: 02_GenericCRUD.gs

Atualiza registro genérico.

  • @param {string} entityType - Tipo da entidade
  • @param {string} id - ID do registro
  • @param {Object} data - Novos dados
  • @param {Object} options - Opções adicionais
  • @return {Object} Resultado da operação

genericDelete(entityType, id, options) [PUBLIC]

Arquivo: 02_GenericCRUD.gs

Deleta registro genérico.

  • @param {string} entityType - Tipo da entidade
  • @param {string} id - ID do registro
  • @param {Object} options - Opções (softDelete, etc)
  • @return {Object} Resultado da operação

handleCRUDRobusto(sheetName, action, id, data, filters) [PUBLIC]

Arquivo: 99_CRUD_Fix.gs

Handler CRUD robusto que usa os headers reais da planilha para evitar discrepâncias de schema.

  • @param {string} sheetName - Nome da planilha
  • @param {string} action - Ação: 'create', 'read', 'update', 'delete'
  • @param {string} id - ID do registro
  • @param {Object} data - Dados do registro
  • @param {Object} filters - Filtros para read
  • @return {Object} Resultado da operação

Serviços de Dados

getData(sheetName, filters) [PUBLIC]

Arquivo: 73_APIHelpers.gs

Obtém dados de uma planilha.

// Frontend
google.script.run.getData('Alunos');
APIService.getData('Alunos');
  • @param {string} sheetName - Nome da planilha
  • @param {Object} [filters] - Filtros opcionais
  • @return {Object} { success: boolean, data?: Array, error?: string }

getRecordById(sheetName, id) [PUBLIC]

Arquivo: 73_APIHelpers.gs

Obtém registro por ID.

  • @param {string} sheetName - Nome da planilha
  • @param {string} id - ID do registro
  • @return {Object} { success: boolean, data?: Object, error?: string }

createRecordAPI(params) [PUBLIC]

Arquivo: 73_APIHelpers.gs

Cria registro - Aceita objeto params do frontend.

  • @param {Object} params - { sheetName, data }
  • @return {Object} { success, id, message }

updateRecordAPI(params) [PUBLIC]

Arquivo: 73_APIHelpers.gs

Atualiza registro.

  • @param {Object} params - { sheetName, id, data }
  • @return {Object} { success, message }

deleteRecordAPI(params) [PUBLIC]

Arquivo: 73_APIHelpers.gs

Deleta registro.

  • @param {Object} params - { sheetName, id }
  • @return {Object} { success, message }

readRecordsAPI(params) [PUBLIC]

Arquivo: 73_APIHelpers.gs

Lê registros - Aceita objeto params do frontend.

// Exemplos
readRecords({ sheetName: 'Alunos' });
readRecords({ sheetName: 'Alunos', id: 'ALU-001' });
readRecords({ sheetName: 'Alunos', filters: { Status: 'Ativo' } });
  • @param {Object|string} params - { sheetName, id?, filters? }
  • @return {Object} { success, data, count }

Frequência

getAlunosParaFrequenciaV2(idRota) [PUBLIC]

Arquivo: 99_FixFrequenciaAlunos.gs

Obtém alunos de uma rota específica para registro de frequência. Versão aprimorada com validação robusta.

  • @param {string} idRota - ID da rota selecionada
  • @return {Object} {success, alunos, total, debug}

getAlunosDaRotaCompleto(idRota) [PUBLIC]

Arquivo: 74_DataPopulatorService.gs

Obtém alunos de uma rota de forma robusta, tentando múltiplas estratégias de busca.

  • @param {string} idRota - ID da rota
  • @return {Object} {success, alunos, total, idRota}

salvarFrequenciaV2(dados) [PUBLIC]

Arquivo: 99_Frontend_Backend_Bridge.gs

Salva frequência V2 (chamado por MVP-Integration.html).

  • @param {Object} dados - Dados da frequência
  • @return {Object} Resultado da operação

getResumoFrequenciaDia(data) [PUBLIC]

Arquivo: 35_FrequenciaService.gs

Obtém resumo da frequência de um dia específico.

  • @param {string} [data] - Data no formato YYYY-MM-DD (default: hoje)
  • @return {Object} Resumo da frequência

getCardFrequenciaDia(data) [PUBLIC]

Arquivo: 74_DataPopulatorService.gs

Obtém dados para card de frequência do dia.

  • @param {string} [data] - Data no formato YYYY-MM-DD (default: hoje)
  • @return {Object} { success, card: {...} }

Eventos

getEvents(filter) [PUBLIC]

Arquivo: 99_Frontend_Backend_Bridge.gs

Obtém eventos com filtros opcionais.

  • @param {Object} filter - Filtros { tipo: '...' }
  • @return {Object} {success, data}

createEvent(payload) [PUBLIC]

Arquivo: 99_Frontend_Backend_Bridge.gs

Cria um novo evento a partir do modal.

  • @param {Object} payload - Dados do formulário

updateEvento(id, data) [PUBLIC]

Arquivo: MVP_Eventos.gs

Atualiza evento existente.


deleteEvento(id) [PUBLIC]

Arquivo: MVP_Eventos.gs

Remove evento.


getEventStats() [PUBLIC]

Arquivo: MVP_Eventos.gs

Obtém estatísticas de eventos.


Rotas e Otimização

getRotas() [PUBLIC]

Arquivo: 73_RealTimeTracking.gs

Obtém rotas ativas.

  • @return {Object} Lista de rotas

getRotasCompletas() [PUBLIC]

Arquivo: 99_Frontend_Backend_Bridge.gs

Obtém rotas com dados enriquecidos (contagem de alunos, veículo, motorista).

  • @return {Object} {success, data: Array}

getRotasEstatisticas() [PUBLIC]

Arquivo: 99_Frontend_Backend_Bridge.gs

Obtém estatísticas gerais de rotas para dashboard/KPIs.

  • @return {Object} {success, stats: {...}}

getAnaliseRotasCompleta() [PUBLIC]

Arquivo: 99_FrontendBackendIntegration.gs

Obtém análise completa de todas as rotas para o Mapa Avançado.

  • @return {Object} { success, resumo, rotas, timestamp }

getSugestoesOtimizacaoRota(idRota) [PUBLIC]

Arquivo: 99_FrontendBackendIntegration.gs

Obtém sugestões de otimização para uma rota específica.

  • @param {string} idRota - ID da rota
  • @return {Object} { success, sugestoes, analise }

getSobreposicoesRotas() [PUBLIC]

Arquivo: 99_FrontendBackendIntegration.gs

Detecta rotas com sobreposição.

  • @return {Object} { success, total, sobreposicoes }

Relatórios IA

gerarRelatorioIA(mes, idRota) [PUBLIC]

Arquivo: 99_FrontendBackendIntegration.gs

Gera relatório de frequência com análise de IA (Gemini).

🔒 AUTORIZAÇÃO:

  • Relatórios com IA (Gemini): Apenas Administradores

  • Relatórios básicos: Secretários e Administradores

  • @param {string} mes - Mês no formato YYYY-MM

  • @param {string} [idRota] - ID da rota (opcional)

  • @return {Object} Relatório completo com análise IA


getMesesComFrequencia() [PUBLIC]

Arquivo: 99_FrontendBackendIntegration.gs

Obtém lista de meses com dados de frequência.

  • @return {Object} { success, meses: ['2025-01', '2025-02', ...] }

getDadosRelatorioResumido(mes) [PUBLIC]

Arquivo: 99_FrontendBackendIntegration.gs

Obtém dados para dashboard de relatórios.

  • @param {string} mes - Mês de referência
  • @return {Object} Métricas resumidas

getStatusGeminiAPI() [PUBLIC]

Arquivo: 99_FrontendBackendIntegration.gs

Verifica se Gemini API está configurada.

  • @return {Object} { disponivel, mensagem }

Colab Integration

activateColabProcessor(options) [PUBLIC]

Arquivo: 82_ColabProcessorManager.gs

Ativa o processador Colab remotamente com retry e timeout.

  • @param {Object} options
    • options.interval - Intervalo entre verificações (segundos)
    • options.auto_stop_minutes - Auto-stop após X minutos
    • options.max_iterations - Máximo de iterações
    • options.maxRetries - Máximo de tentativas (padrão: 3)
    • options.timeout - Timeout em segundos (padrão: 30)
  • @return {Object} Resultado da ativação

deactivateColabProcessor() [PUBLIC]

Arquivo: 82_ColabProcessorManager.gs

Desativa o processador Colab remotamente.

  • @return {Object} Resultado da desativação

getColabProcessorStatus() [PUBLIC]

Arquivo: 82_ColabProcessorManager.gs

Verifica o status do processador Colab.

  • @return {Object} Status detalhado

autoActivateColabIfNeeded() [PUBLIC]

Arquivo: 82_ColabProcessorManager.gs

Ativa o processador automaticamente quando há jobs pendentes.


countPendingJobs() [PUBLIC]

Arquivo: 82_ColabProcessorManager.gs

Conta jobs pendentes na fila. OTIMIZADO: Lê apenas a coluna de status.

  • @return {number} Quantidade de jobs pendentes

analyzePendingJobs() [PUBLIC]

Arquivo: 83_ColabSmartScheduler.gs

Analisa jobs pendentes e calcula duração estimada baseado em:

  • Quantidade de jobs pendentes

  • Tipo de job (complexidade)

  • Histórico de processamento

  • @return {Object} Estatísticas dos jobs


enqueueJobForColab(jobType, payload) [PUBLIC]

Arquivo: 83_ColabPollingControl.gs

Enfileira job para processamento pelo Colab.

  • @param {string} jobType - Tipo do job
  • @param {Object} payload - Dados do job
  • @return {string} ID do job criado

Helpers e Utilitários

apiSuccess(data, message) [PUBLIC]

Arquivo: 74_APIResponseHelpers.gs

Cria resposta de sucesso padronizada.

  • @param {*} data - Dados
  • @param {string} [message] - Mensagem
  • @return {Object} Resposta estruturada

apiError(error, type, details) [PUBLIC]

Arquivo: 74_APIResponseHelpers.gs

Cria resposta de erro padronizada.

function deleteUser(id) {
  try {
    if (!id) {
      return apiError('ID obrigatório', 'VALIDATION');
    }
    // ...
  } catch (error) {
    return apiError(error);
  }
}
  • @param {Error|string} error - Erro
  • @param {string} [type] - Tipo do erro
  • @param {Object} [details] - Detalhes
  • @return {Object} Resposta estruturada

apiNotFound(resource, id) [PUBLIC]

Arquivo: 74_APIResponseHelpers.gs

Cria resposta de não encontrado.

  • @param {string} resource - Recurso
  • @param {string} id - ID
  • @return {Object} Resposta estruturada

safeExecute(fn, options) [PUBLIC]

Arquivo: 02_SafeExecutor.gs

Executa função de forma segura com tratamento de erro padronizado.

  • @param {Function} fn - Função a executar
  • @param {Object} options
    • options.context - Contexto para log
    • options.fallback - Valor de fallback em caso de erro
    • options.rethrow - Se deve relançar o erro
    • options.logError - Se deve logar o erro (default: true)
  • @return {Object} { success: boolean, data: any, error: string }

safeExecuteWithRetry(fn, options) [PUBLIC]

Arquivo: 02_SafeExecutor.gs

Executa função com retry automático.

  • @param {Function} fn - Função a executar
  • @param {Object} options
    • options.maxRetries - Máximo de tentativas (default: 3)
    • options.delay - Delay entre tentativas em ms (default: 1000)
    • options.context - Contexto para log
  • @return {Object} Resultado

safeFunctionExists(functionName) [PUBLIC]

Arquivo: 99_SafeHelpers.gs

Verifica se uma função existe de forma segura (substitui eval).

  • @param {string} functionName - Nome da função
  • @return {boolean} True se a função existe

safeLog(message, data, level) [PUBLIC]

Arquivo: 99_SafeHelpers.gs

Logger seguro que sanitiza dados antes de registrar.

  • @param {string} message - Mensagem do log
  • @param {*} [data] - Dados adicionais (serão sanitizados)
  • @param {string} [level='INFO'] - Nível do log (INFO, WARN, ERROR, DEBUG)

Sistema e Bootstrap

doGet(e) [PUBLIC]

Arquivo: 76_Bootstrap.gs

Função principal de entrada para requisições GET.

// Acesso direto: https://script.google.com/macros/s/.../exec
// Retorna: index.html

// Com parâmetro: https://script.google.com/macros/s/.../exec?page=dashboard
// Retorna: página do dashboard
  • @param {Object} e - Objeto de evento do Apps Script
  • @return {HtmlOutput} Página HTML renderizada

doPost(e) [PUBLIC]

Arquivo: 76_Bootstrap.gs

Função para processar requisições HTTP POST (webhooks, callbacks).

  • @param {Object} e - Objeto de evento do Apps Script
  • @return {ContentService.TextOutput|HtmlOutput} Resposta

include(filename) [PUBLIC]

Arquivo: 76_Bootstrap.gs

Função include para templates HTML.

<?!= include('Stylesheet') ?>
<?!= include('JS-Core') ?>
  • @param {string} filename - Nome do arquivo (sem extensão .html)
  • @return {string} Conteúdo do arquivo

checkBootstrapStatus() [PUBLIC]

Arquivo: 76_Bootstrap.gs

Verifica status do sistema.

const status = checkBootstrapStatus();
if (!status.initialized) {
  console.log('Erros:', status.errors);
}
  • @return {Object}
    • return.initialized - Se sistema está inicializado
    • return.configOk - Se Config.gs está OK
    • return.servicesOk - Se ServiceManager está OK
    • return.routerOk - Se Router está OK
    • return.errors - Lista de erros encontrados

runSystemDiagnostic() [PUBLIC]

Arquivo: 95_SystemDiagnostic.gs

Executa diagnóstico completo do sistema verificando as 8 seções fundamentais.

  • @return {Object} Resultado do diagnóstico

initializeSystem() [PUBLIC]

Arquivo: SystemInitializer.gs

Função principal de bootstrapping do sistema.


RESOLVER_TUDO() [PUBLIC]

Arquivo: CreateMissingSheets.gs

🚀 Função que resolve tudo de uma vez:

  1. Cria todas as planilhas necessárias
  2. Configura headers corretos
  3. Cria usuário Admin (admin/admin123)
  4. Cria usuário Secretário (secretario/sec123)
  5. Cria 10 rotas com IDs padronizados
  6. Cria 10 monitores vinculados às rotas
  7. Cria 150 alunos (15 por rota) COM ID_Rota preenchido
  8. Cria 10 veículos vinculados às rotas

🌐 Endpoints de API

Operações GET (Leitura)

Função Arquivo Categoria
getData() 73_APIHelpers.gs Dados
getRecordById() 73_APIHelpers.gs Dados
getAvailableSheets() 73_APIHelpers.gs Metadados
getSystemConfig() 73_APIHelpers.gs Config
healthCheck() 73_APIHelpers.gs Sistema
getCurrentUser() 47_AuthGlobals.gs Auth
getAuditLogs() 47_AuthService.gs Auth
getDashboardKPIs() 74_DataPopulatorService.gs Dashboard
getKanbanTarefas() 74_DataPopulatorService.gs Dashboard
getSelectRotas() 74_DataPopulatorService.gs Formulários
getSelectAlunos() 74_DataPopulatorService.gs Formulários
getAlunosParaFrequenciaV2() 99_FixFrequenciaAlunos.gs Frequência
getRotasCompletas() 99_Frontend_Backend_Bridge.gs Rotas
getAnaliseRotasCompleta() 99_FrontendBackendIntegration.gs Rotas
getColabProcessorStatus() 82_ColabProcessorManager.gs Colab

Operações POST (Criação)

Função Arquivo Categoria
createRecordAPI() 73_APIHelpers.gs CRUD
createEvent() 99_Frontend_Backend_Bridge.gs Eventos
createIncidente() 73_CRUD_Incidentes.gs Incidentes
Auth_login() 47_AuthService.gs Auth
createSession() 44_SessionManager.gs Auth
activateColabProcessor() 82_ColabProcessorManager.gs Colab

Operações PUT (Atualização)

Função Arquivo Categoria
updateRecordAPI() 73_APIHelpers.gs CRUD
updateEvento() MVP_Eventos.gs Eventos
updateRota() MVP_CRUD.gs Rotas
changePassword() 47_AuthService.gs Auth

Operações DELETE (Exclusão)

Função Arquivo Categoria
deleteRecordAPI() 73_APIHelpers.gs CRUD
deleteEvento() MVP_Eventos.gs Eventos
revokeSession() 44_SessionManager.gs Auth

🚀 Módulos MVP

Backend (Google Apps Script)

Módulo Arquivo Funções Descrição
73_RotasMVP 73_RotasMVP.gs 22 Otimização de rotas usando Google Directions API
MVP_CRUD MVP_CRUD.gs 19 Funções CRUD do MVP com fallback robusto
MVP_Eventos MVP_Eventos.gs 10 Funções de Eventos do MVP
MVP_Import MVP_Import.gs 5 Importação de dados
MVP_ManutencaoPreditiva MVP_ManutencaoPreditiva.gs 1 Alertas de manutenção de veículos
MVP_RelatorioIA MVP_RelatorioIA.gs 15 Relatórios com IA (Gemini)

Frontend (HTML/JavaScript)

Módulo Arquivo Descrição
MVPNavigation JS-MVP-Navigation.html Sistema de navegação MVP
JS-MVP-Modules-All JS-MVP-Modules-All.html Bundle de todos os módulos
MVP-Integration MVP-Integration.html Integração completa MVP
Page-Alunos-MVP Page-Alunos-MVP.html Página de alunos
Page-Frequencia-MVP Page-Frequencia-MVP.html Página de frequência
Page-Relatorio-IA-MVP Page-Relatorio-IA-MVP.html Página de relatórios IA

🖥️ Módulos Frontend

Managers

Módulo Arquivo Descrição
AuthManager JS-API-Auth-Manager.html Gerenciamento de autenticação
OfflineManager JS-OfflineManager.html Gerenciamento offline
DrawerManager JS-DrawerManager.html Gerenciamento de drawers
ToastManager JS-Toast-System.html Sistema de notificações
CRUDManagerUniversal JS-CRUD-Universal.html CRUD universal

Services

Módulo Arquivo Descrição
APIService Service-APIService.html Serviço de API
BackgroundSyncService JS-BackgroundSync.html Sincronização em background
GoogleScriptRunner JS-GoogleScriptRunner.html Wrapper para google.script.run

Components

Módulo Arquivo Descrição
SchemaFormGenerator JS-SchemaForm.html Geração de formulários por schema
DataPopulator JS-DataPopulator.html População de dados
FrequenciaMonitor JS-FrequenciaMonitor.html Monitor de frequência
MapaAvancado JS-MapaAvancado.html Mapa avançado com otimização

🛠️ Ferramentas de Análise

O projeto conta com um conjunto poderoso de ferramentas em tools/ para garantir a qualidade do código:

Ferramentas Disponíveis

Ferramenta Descrição
analyze_codebase.py Analisa métricas, complexidade e estrutura do projeto
check_best_practices.py Valida adesão aos padrões de desenvolvimento
detect_dependencies.py Mapeia dependências e ciclos entre arquivos
find_duplicates.py Identifica código duplicado para refatoração
check_inconsistencies.py Detecta inconsistências entre código e schemas
generate_docs.py Gera automaticamente a documentação técnica

Uso

# Executar todas as ferramentas
python tools/run_all_tools.py

# Executar ferramenta individual
python tools/analyze_codebase.py
python tools/check_best_practices.py
python tools/generate_docs.py

Relatórios Gerados

Todos os relatórios são salvos em tools/reports/ em formato JSON:

  • consolidated_report.json - Relatório consolidado
  • codebase_analysis.json - Análise completa do código
  • dependencies.json - Grafo de dependências
  • best_practices.json - Problemas de boas práticas
  • inconsistencies.json - Inconsistências detectadas

Health Score

O sistema calcula um Health Score (0-100) baseado em:

  • Erros críticos (peso alto)
  • Warnings (peso médio)
  • Duplicatas (peso baixo)
  • Complexidade (peso baixo)

Interpretação:

  • 80-100: ✅ Excelente
  • 60-79: ⚠️ Bom, com melhorias recomendadas
  • 0-59: ❌ Atenção necessária

🔄 Rotinas de Manutenção

Diárias

  • Verificar fila de jobs pendentes (countPendingJobs())
  • Monitorar status do Colab se ativo

Semanais

  • Executar python tools/check_best_practices.py
  • Revisar logs de auditoria

Mensais

  • Executar análise completa: python tools/run_all_tools.py
  • Atualizar documentação: python tools/generate_docs.py
  • Backup do sistema

Antes de Deploys

  • Executar testes: runAllTests()
  • Verificar diagnóstico: runSystemDiagnostic()
  • Validar produção: runConfigValidation()

⚙️ Configuração e Deploy

Pré-requisitos

  • Node.js e CLASP instalados globalmente
  • Python 3.8+ (para ferramentas de análise)
  • Acesso ao projeto no Google Apps Script

Configuração Inicial

  1. Clone o repositório
  2. Configure o .clasp.json com o ID do script
  3. Instale as dependências: npm install

Deploy

# Push para Google Apps Script
clasp push

# Deploy como WebApp
clasp deploy --description "v6.0.0"

Configuração de Produção

  1. Execute RESOLVER_TUDO() para criar estrutura inicial
  2. Configure propriedades de segurança: setupSecurityProperties()
  3. Configure triggers: setupAllTriggers(true)
  4. Valide produção: runConfigValidation()

📚 Documentação Adicional

  • docs/API_REFERENCE.md - Referência completa de APIs
  • docs/ARCHITECTURE.md - Arquitetura detalhada
  • docs/FUNCTIONS_REFERENCE.md - Referência de todas as funções (~12.000 linhas)
  • docs/MVP_GUIDE.md - Guia dos módulos MVP
  • DESIGN_SYSTEM_GUIDE.md - Guia do Design System
  • TOAST_SYSTEM_GUIDE.md - Guia do sistema de notificações
  • GUIA_DEPLOY_PRODUCAO.md - Guia de deploy para produção

Versão 6.0.0 - Atualizado em Janeiro de 2026

About

O TE-DF é uma plataforma para gerenciar o transporte escolar do Distrito Federal. O sistema integra Frontend moderno (HTML/JS), Backend escalável (GAS) e processamento avançado via Google Colab.

Topics

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

0