No updates detected yet. GitHub releases will appear here.
Painel FTC — ferramenta de apoio ao Estado-Maior (país VERMELHO) para o exercício AZUVER, ECEME.
翻訳待ち
Loading the full README.
Read the full README ↗Ferramenta de apoio para um Estado-Maior Conjunto (FTC, país VERMELHO) durante o exercício de simulação AZUVER, na ECEME (Escola de Comando e Estado-Maior do Exército).
Aplicativo web estático — HTML + CSS + JS puro, sem build step, sem npm/webpack/Node. Funciona hospedado diretamente no GitHub Pages. Os dados são compartilhados em tempo real entre todos os usuários via Firebase Firestore — inclusive os anexos (DOCX/PDF), que são gravados no próprio Firestore em partes. Tudo roda no plano gratuito (Spark), sem cartão.
index.html layout e abas do painel
style.css tema visual (sala de operações, escuro/claro)
app.js lógica da aplicação (Firebase, formulários, listas)
firebase-config.js credenciais do projeto Firebase (placeholders)
firestore.rules regras de segurança do Firestore
firebase-config.jsAcesse https://console.firebase.google.com e crie um projeto (ou use um existente).
Em Configurações do projeto → Seus apps, adicione um app da Web
(ícone </>). Não é necessário Firebase Hosting.
Copie o objeto firebaseConfig gerado e cole os valores no arquivo
firebase-config.js deste repositório, substituindo cada
"COLE_AQUI" pelo valor correspondente:
export const firebaseConfig = {
apiKey: "...",
authDomain: "...",
projectId: "...",
storageBucket: "...",
messagingSenderId: "...",
appId: "..."
};
Na aba Regras do Firestore, apague o conteúdo padrão e cole o
conteúdo do arquivo firestore.rules deste repositório:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
Clique em Publicar.
Essas regras permitem leitura e escrita para qualquer usuário autenticado (inclusive anonimamente) — suficiente para uso interno do exercício, sem exigir login visível.
O app chama signInAnonymously() automaticamente ao carregar a página —
não existe tela de login. O uid anônimo é usado apenas internamente como
identificador técnico e nunca é exibido na interface.
git remote add origin <URL_DO_SEU_REPOSITORIO_GITHUB>
git push -u origin main
No repositório no GitHub, vá em Settings → Pages.
Em Source, selecione a branch main e a pasta / (root).
Salve. Após alguns instantes, o GitHub exibirá o link público, no formato:
https://<seu-usuario>.github.io/<nome-do-repositorio>/
Esse é o link final para compartilhar com o Estado-Maior. Qualquer pessoa que abrir o link é autenticada anonimamente de forma automática e já pode usar o painel — não é necessário nenhum cadastro ou login manual.
injecoes{
gdh: string,
origem: string,
autor: string,
urgencia: "critico" | "importante" | "informativo",
resumo: string,
celulas: {
d1: { sel: bool, texto: string },
d2: { sel: bool, texto: string },
d3: { sel: bool, texto: string },
d4: { sel: bool, texto: string },
d5: { sel: bool, texto: string },
d6: { sel: bool, texto: string },
d7d8: { sel: bool, texto: string },
d9: { sel: bool, texto: string },
d10: { sel: bool, texto: string },
targeting: { sel: bool, texto: string }
},
anexos: [{ nome, arquivoId, tamanho }, ...], // arquivos do PMS (até 10)
respostas: [ // respostas das células
{ id, celula, texto, anexos: [...], enviadoEm: number }, ...
],
createdAt: Timestamp
}
celulas.<id>.texto é o prazo daquela célula (texto livre, ex: GDH).
O status não é gravado: é calculado a partir das respostas — o PMS fica
Pronto só quando todas as células roteadas anexaram ao menos uma
resposta; caso contrário, Pendente. (Documentos antigos podem ter um
campo status, que é ignorado.)
A coleção mantém o nome técnico injecoes, mas cada documento é um PMS.
arquivos (anexos DOCX/PDF, até 10 MB)arquivos/<id> { nome, tipo, tamanho, partes, createdAt }
arquivos/<id>/partes/<n> { dados: Bytes } // fatias de até 900 KB
Cada documento do Firestore aceita no máximo 1 MiB, por isso o arquivo é
fatiado. PMS, mensagens e respostas guardam só a lista anexos de
{ nome, arquivoId, tamanho } (até 10 arquivos). Registros antigos, com um
único arquivo (anexo no PMS/mensagem, ou nome/arquivoId/tamanho
direto na resposta), continuam sendo lidos normalmente. A cota gratuita
do Firestore é de 1 GiB armazenado e 50 mil leituras/dia — baixar ou
visualizar um arquivo de 10 MB consome cerca de 13 leituras.
simulas{
reuniao: string,
gdh: string,
decisao: string,
autor: string,
impactos: [ { celula: string, texto: string }, ... ],
createdAt: Timestamp
}
This is the beginning of the README. Read the rest at the original. Read the full README ↗