Como criar um aplicativo web para solicitações internas de serviço
Aprenda como planejar, projetar e construir um aplicativo web que coleta solicitações internas, roteia aprovações, rastreia SLAs e reporta desempenho com segurança.

Defina o problema e os objetivos
Antes de desenhar telas ou escolher uma stack, seja específico sobre o que seu aplicativo de solicitações internas está resolvendo. A maioria das equipes já tem um “sistema” — ele só está espalhado por threads de e-mail, mensagens de chat, planilhas e conversas no corredor. Esse arranjo oculta trabalho, cria solicitações duplicadas e dificulta responder uma pergunta simples: “Quem é o responsável por isso e quando vai ficar pronto?”
Comece escrevendo uma declaração de problema curta e um objetivo v1, por exemplo: “Fornecer um portal único de solicitações de funcionários para acesso de TI e reparos de Facilities com responsabilidade clara, aprovações quando necessárias e visibilidade de SLA.”
Tipos comuns de solicitações a suportar
As solicitações internas geralmente se agrupam em algumas categorias:
- TI: novo laptop, acesso a ferramentas, reset de senha, instalação de software
- RH: cartas de emprego, dúvidas sobre benefícios, tarefas de onboarding
- Facilities: mudanças de mesa, reparos, pedidos de limpeza, problemas em salas de reunião
- Finanças: dúvidas sobre despesas, cadastro de fornecedor, aprovações de compra
- Segurança: acesso por crachá, relatórios de incidente, exceções de política
Você não precisa resolver todos os casos de borda no dia um, mas deve escolher um escopo inicial claro (por exemplo: “Acesso de TI + reparos de Facilities”).
O que está quebrado hoje (capture a dor)
Escreva em linguagem simples os pontos de falha atuais:
- Solicitações ficam enterradas em longos threads de e-mail
- Planilhas ficam desatualizadas no momento em que são compartilhadas
- Responsabilidade é incerta, então funcionários cobram repetidamente
- Aprovações acontecem em mensagens privadas, sem trilha de auditoria
Essa lista vira sua estrela guia para o que o app deve corrigir.
Para quem o app serve
Defina seus usuários principais e o que cada um precisa:
- Funcionários: um portal simples para enviar, acompanhar e esclarecer solicitações
- Aprovadores: decisões rápidas com contexto (e registro do motivo)
- Agentes/solucionadores: uma fila limpa, prioridades e repasses
- Admins: configuração, relatórios e aplicação de políticas
Métricas de sucesso (deixe mensurável)
Defina objetivos que possam ser monitorados após o lançamento: tempo de resolução mais rápido, menos follow-ups por ticket, maior velocidade de primeira resposta e responsabilidade mais clara (por exemplo, “toda solicitação tem um responsável dentro de 1 hora útil”). Essas métricas guiam decisões de produto e ajudam a provar que o app está funcionando.
Mapeie usuários, papéis e responsabilidades
Antes de desenhar telas ou fluxos, deixe claro quem usa o app e o que cada pessoa pode (e deve) fazer. A maioria dos sistemas de solicitação interna falha porque papéis são confusos: as pessoas não sabem quem é responsável pelo próximo passo e as solicitações vão ping-pong.
Papéis principais de usuário
Funcionário (solicitante)
Os funcionários devem conseguir enviar uma solicitação em minutos e confiar que ela não vai sumir.
- Enviar uma solicitação na categoria certa (p.ex., TI, Facilities, People Ops)
- Anexar arquivos (prints, PDFs, fotos) e adicionar contexto
- Verificar status e ver o que é necessário deles
Aprovador
Aprovadores mantêm gastos, acessos e decisões de política sob controle.
- Revisar solicitações atribuídas a eles
- Pedir mudanças ou detalhes adicionais (sem rejeitar prematuramente)
- Aprovar ou negar com motivo claro e timestamp
Agente / Solucionador
Agentes são as pessoas que realmente fazem o trabalho e comunicam o progresso.
- Triagem: validar categoria, urgência e completude
- Executar a solicitação, fazer perguntas e postar atualizações
- Fechar a solicitação com notas de resolução (e opcional prompt de satisfação)
Admin
Admins mantêm o sistema organizado e seguro.
- Gerenciar categorias, formulários e campos obrigatórios
- Definir permissões (quem pode ver o quê) e atribuições de papel
- Configurar SLAs, horários de operação e regras de escalonamento
Torne a propriedade explícita
Para cada tipo de solicitação, defina:
- Quem é responsável pela entrega final (time ou indivíduo)
- Quem aprova (e quando a aprovação é necessária)
- Quem pode reatribuir ou mudar prioridade
- Quem pode ver solicitações sensíveis (p.ex., RH ou segurança)
Uma tabela RACI simples na sua especificação evita confusão e facilita decisões de fluxo mais adiante.
Escolha recursos centrais para a v1
Um portal de solicitações interno v1 deve fazer algumas coisas extremamente bem: permitir que funcionários submetam solicitações claras, levá-las ao time certo rapidamente e manter todos informados até a conclusão. Se você tentar incluir todo caso de borda no dia um, vai retardar a entrega e ainda faltar o que os usuários realmente precisam.
1) Envio de solicitação (dificulte solicitações “ruins”)
Comece com um conjunto pequeno de categorias (por exemplo: Ajuda de TI, Facilities, RH, Compras). Cada categoria deve suportar campos dinâmicos para que o formulário só pergunte o que é relevante.
Inclua:
- Básicos obrigatórios: título, descrição, solicitado-por, localização/departamento
- Campos específicos por categoria (p.ex., “modelo do laptop”, “sistema de acesso”, “motivo de urgência”)
- Anexos (prints, PDFs) com limites de tamanho claros
2) Regras de roteamento (chegue na fila certa)
Sua v1 precisa de atribuição previsível: por categoria, departamento, localização ou regras por palavra-chave. Adicione prioridade (baixo/médio/alto) e um caminho simples de escalonamento (p.ex., “não atribuído por 24 horas” ou “alta prioridade inativa por 4 horas”). Mantenha o editor de regras mínimo; você sempre pode torná-lo mais flexível depois.
3) Aprovações (só quando necessário)
Suporte aprovação de etapa única primeiro (gerente ou dono do orçamento). Se aprovações são críticas, adicione aprovações condicionais (ex.: “acima de $500 exige Financeiro”). Cadeias multi-step podem esperar, a menos que sejam seu tipo de solicitação principal.
4) Notificações (reduza perseguição por status)
Inclua e-mail e notificações in-app para: solicitação recebida, atribuída, precisa de informação, aprovada/negada, concluída. Adicione lembretes para aprovadores e responsáveis em itens atrasados.
5) Busca + autoatendimento leve
Antes do envio e na lista de solicitações, ofereça busca com filtros (categoria, status, solicitante). Adicione “solicitações semelhantes” e links para páginas de conhecimento para que usuários resolvam problemas comuns sem abrir ticket.
Modele os dados da solicitação
Um modelo de dados claro torna todo o resto mais fácil: formulários ficam consistentes, fluxos podem ser automatizados e relatórios são confiáveis. Comece decidindo o que é uma “solicitação” na sua organização e quais detalhes devem ser capturados sempre.
Defina os campos de intake
Mantenha o formulário inicial enxuto, mas completo o bastante para que o time receptor atue sem idas e vindas. Um baseline prático inclui:
- Título: resumo curto (“Substituição de laptop”)
- Descrição: o que é necessário, contexto, restrições
- Categoria + subcategoria: para onde deve ser roteado
- Urgência/prioridade: quão sensível ao tempo é (mesmo que v1 use baixo/médio/alto)
- Informações do solicitante: identidade, time/departamento, localização, método de contato preferido
Padronize categorias para reduzir confusão
Categorias devem refletir como o trabalho está organizado (TI, Facilities, RH, Finanças), enquanto subcategorias refletem tipos repetíveis de trabalho (ex.: TI → “Pedido de Acesso”, “Hardware”, “Software”). Mantenha nomes amigáveis e evite duplicados (“Onboarding” vs “Configuração de Novo Contratado”).
Se as escolhas de categoria crescerem, versione-as em vez de renomear silenciosamente — isso protege relatórios e reduz confusão.
Validações e padrões que melhoram a qualidade
Use validação para evitar tickets vagos e faltas de roteamento:
- Exigir comprimento mínimo na descrição (ou prompts guiados como “Qual é o objetivo?”)
- Fornecer padrões (p.ex., urgência padrão “Normal”)
- Auto-preencher campos do solicitante a partir do diretório
- Mostrar campos dinâmicos apenas quando relevantes (p.ex., “Prédio” só para Facilities)
Modelo de status (e o que significa)
Escolha um ciclo de vida simples que os times não reinterpretarão, e defina o significado de cada status:
- New → In Triage → Waiting for Info → Pending Approval → In Progress → Done
- Inclua Canceled para solicitações retiradas ou inválidas
Escreva regras de transição (quem pode mover para Pending Approval? quando Waiting for Info é permitido?) e armazene uma trilha de auditoria de mudanças de status, atribuições, aprovações e edições importantes.
Planeje a experiência do usuário e as telas
Um app de solicitações vence ou perde pela rapidez com que funcionários conseguem submeter uma solicitação e pela simplicidade com que os times a processam. Antes de construir, esboce as telas centrais e o “happy path” para cada papel: solicitante, aprovador e responsável.
1) Formulário de solicitação (envio)
Trate o formulário como um fluxo guiado, não uma página única intimidadora. Use seções por etapas (ou divulgação progressiva) para que funcionários vejam só o que importa para a categoria escolhida.
Deixe expectativas explícitas: mostre quais informações são obrigatórias, tempos típicos de resposta e o que acontece depois do envio. Tooltips e textos de ajuda evitam idas e vindas (“O que conta como ‘urgente’?” “Quais arquivos anexar?”).
2) Lista de solicitações (inbox / fila)
Quem processa solicitações precisa de uma lista estilo inbox que suporte triagem rápida.
Inclua filtros que batem com o trabalho real:
- Status (new, waiting on requester, pending approval, in progress, done)
- Categoria (TI, Facilities, RH, Finanças, etc.)
- Assignee ou time
- Intervalo de datas (criado / vencimento)
Projete as linhas para responder “o que é isto e o que devo fazer a seguir?” de relance: título, solicitante, prioridade, status atual, indicador de data de vencimento/SLA e próxima ação.
3) Página de detalhe da solicitação (fonte única da verdade)
A página de detalhe é onde a colaboração acontece. Ela deve combinar:
- Uma timeline de mudanças de status e aprovações (sua trilha de auditoria em linguagem simples)
- Comentários visíveis ao solicitante
- Notas internas apenas para equipe
- Anexos com permissões claras (quem pode ver/baixar)
Mantenha ações primárias em destaque (aprovar/recusar, atribuir, mudar status) e torne as secundárias descobertas sem atrapalhar.
Noções básicas de acessibilidade (não adie)
Planeje acessibilidade desde os wireframes: navegação por teclado para todas as ações, contraste de cores suficiente (não dependa só da cor para status) e labels legíveis que funcionem com leitores de tela.
Construa fluxos e lógica de aprovação
Fluxos transformam um simples “formulário + inbox” numa experiência de serviço previsível. Defina-os cedo para que solicitações não fiquem presas, aprovações não sejam arbitrárias e todos saibam o que significa “feito”.
Fluxo de submissão: criar → confirmar → acompanhar
Comece com um caminho de submissão limpo que reduza idas e vindas:
- Create: funcionário seleciona um tipo de solicitação e responde só o necessário.
- Confirm: mostre uma tela de resumo com detalhes chave (categoria, urgência, local, anexos) antes de enviar.
- Track: após o envio, forneça um ID de solicitação, status atual e o próximo passo esperado (p.ex., “triagem em até 4 horas”).
Fluxo de triagem: auto-atribuir → priorizar → clarificar
Triagem impede que o sistema vire uma caixa de e-mail compartilhada.
- Auto-assign baseado em tipo de solicitação, local, departamento ou rodízio on-call.
- Priorizar usando regra clara (impacto × urgência), não feeling.
- Clarificar movendo para Waiting for Info com um template de pergunta estruturada. Não reinicie o relógio silenciosamente — registre isso.
Fluxo de aprovação: quem aprova o quê e quando ignorar
Aprovações devem ser dirigidas por política e consistentes:
- Defina matrizes de aprovação (ex.: “Nova compra de software > $200 requer Gerente + Financeiro”).
- Use acesso baseado em função para que apenas aprovadores autorizados possam decidir em categorias específicas.
- Adicione regras de bypass para itens de baixo risco (ex.: reset de senha) ou emergências com motivo explícito.
- Mantenha sempre uma trilha de auditoria: quem aprovou, quando, o que mudou e comentários.
Fluxo de escalonamento: avisos de SLA, repasses, reatribuições
Escalonamento não é punição; é rede de segurança.
- Envie avisos de SLA antes do estouro (p.ex., 75% do limite) para o responsável e líder do time.
- Suporte handoffs (troca de turno) com transferência de propriedade e uma nota.
- Permita reatribuições com códigos de motivo obrigatórios, para identificar problemas de pessoal e roteamento depois.
Feitos corretamente, esses fluxos mantêm solicitações em movimento e dão resultados previsíveis aos funcionários e responsabilidade clara aos times.
Crie o esquema de banco de dados
Um bom esquema de banco torna o app mais fácil de manter, reportar e evoluir. Mire em um conjunto “core” limpo de tabelas e acrescente tabelas de suporte para flexibilidade e analytics.
Entidades core (coluna vertebral)
Comece com as tabelas que você tocará em quase toda tela:
- users: id, name, email, status, created_at
- roles: id, name (ex.: Employee, Approver, Agent, Admin)
- user_roles: user_id, role_id (many-to-many)
- teams: id, name; e team_members (team_id, user_id)
- requests: id, requester_id, category_id, title, description, status, priority, assigned_team_id/assigned_user_id, created_at, updated_at, resolved_at
- comments: id, request_id, author_id, body, visibility (internal/public), created_at
- attachments: id, request_id, uploaded_by, file_name, storage_key, size, created_at
Mantenha requests.status como um conjunto controlado de valores e armazene timestamps para relatórios de ciclo de vida.
Entidades de suporte (estrutura e flexibilidade)
Para suportar diferentes tipos de solicitação sem criar novas tabelas cada vez:
- categories: id, name, default_team_id, active
- form_fields: id, category_id, key, label, type, required, sort_order
- request_field_values: request_id, field_id, value (frequentemente text/JSON)
- approvals: id, request_id, step, approver_id, decision (pending/approved/rejected), decided_at
- sla_policies: id, category_id, priority, response_due_minutes, resolve_due_minutes
Eventos de auditoria e relatórios
Para uma trilha de auditoria, crie audit_events com request_id, actor_id, event_type, old_value/new_value (JSON) e created_at. Registre mudanças de status, de atribuição e aprovações explicitamente.
Para reporting, use views (ou tabelas dedicadas mais tarde) como:
- Tempos de resolução e resposta (rastreio de SLA)
- Backlog por time/assignee
- Volume por categoria e prioridade
Indexe requests(status, created_at), requests(assigned_team_id) e audit_events(request_id, created_at) para manter consultas comuns rápidas.
Escolha a stack tecnológica e arquitetura
Um app de solicitações tem sucesso quando é fácil de mudar. Sua primeira versão vai evoluir conforme times adicionam novos tipos de solicitação, etapas de aprovação e regras de SLA — então escolha tecnologia que seu time consiga manter, não só o que está na moda.
Comece com o que seu time já entrega
Para a maioria das solicitações internas, escolhas “sem surpresa” vencem:
- Frontend: React ou Vue pareados com uma biblioteca de componentes (ex.: Material UI, Ant Design, Vuetify). Isso acelera formulários, tabelas e modais consistentes — perfeito para um portal de funcionários.
- Backend: Node/Express, Django, Rails ou .NET. Escolha o que seu time conhece para que automações de workflow e lógica de ticketing sejam construídas mais rápido e com menos surpresas.
Se o objetivo é avançar ainda mais rápido (especialmente para uma ferramenta interna), considere gerar uma base funcional com Koder.ai. É uma plataforma de desenvolvimento guiada por chat onde você descreve o portal de solicitações e itera em features (formulários, filas, aprovações, notificações) com um fluxo baseado em agentes. Koder.ai costuma mirar React no frontend e Go + PostgreSQL no backend, suporta exportação de código, deployment/hosting, domínios customizados e snapshots com rollback — útil quando você refina automações de fluxo rapidamente. Preços variam entre Free, Pro, Business e Enterprise, permitindo pilotos antes de um compromisso.
Perguntas frequentes
What should I define before building an internal service request web app?
Comece escolhendo um escopo estreito e com alto volume (por exemplo, solicitações de acesso de TI + reparos de Facilities). Documente o que está quebrado hoje (e-mails enterrados, responsabilidade pouco clara, sem trilha de auditoria), defina os usuários principais (solicitantes, aprovadores, agentes, administradores) e estabeleça métricas mensuráveis de sucesso (como “toda solicitação tem um responsável dentro de 1 hora útil”).
Which request types should a v1 internal portal support?
A maioria das solicitações internas se enquadra em categorias recorrentes:
- TI: acesso, reinicialização de senha, instalações, hardware
- RH/People Ops: cartas, tarefas de onboarding, dúvidas sobre benefícios
- Facilities: reparos, limpeza, mudanças de mesa, problemas em salas
- Finanças: cadastro de fornecedor, aprovações de compra, dúvidas de despesas
- Segurança: acesso a crachá, relatórios de incidente, exceções de política
Comece com as categorias que são frequentes e causam mais dor, e só expanda quando os fluxos estiverem estáveis.
What roles do I need, and what should each be allowed to do?
- Employee (solicitante): criar e acompanhar solicitações, anexar arquivos, responder a perguntas
- Approver (aprovador): aprovar/negarexplicando o motivo e registrando o timestamp, solicitar mudanças
- Agent/Resolver (agente/solucionador): triagem, executar o trabalho, comunicar, encerrar com nota de resolução
- Admin (administrador): gerenciar categorias/forms, permissões, SLAs, regras de escalonamento
Adicione um RACI simples na sua especificação para que propriedade e repasses não fiquem ambíguos.
How do I design request intake so employees submit useful tickets?
Concentre-se em dificultar o envio de solicitações “ruins”:
- Mantenha as categorias limitadas e use campos dinâmicos por categoria
- Exija um título claro + descrição e valide a completude
- Preencha automaticamente dados do solicitante a partir do diretório
- Suporte anexos com limites de tamanho/tipo
Uma triagem de entrada com qualidade reduz as idas e vindas e acelera o roteamento e as aprovações.
What’s the simplest effective way to route and assign requests?
Deixe o roteamento previsível e mínimo na v1:
- Atribua por categoria, departamento, local ou regras simples por palavra-chave
- Adicione um campo de prioridade (baixo/médio/alto)
- Inclua um gatilho de escalonamento simples (por exemplo, “não atribuído por 24 horas” ou “alta prioridade inativa por 4 horas”)
Mantenha o editor de regras simples; complexidade vem depois, com padrões reais.
How should approvals work in an internal request system?
Comece com aprovação de etapa única (gerente ou responsável pelo orçamento) e exija aprovações apenas onde a política pedir.
Para crescer:
- Adicione regras condicionais (ex.: “> $500 exige Financeiro”)
- Use autorização baseada em função para que apenas aprovadores válidos possam decidir
- Registre sempre quem aprovou, quando e por quê em uma trilha de auditoria
Evite cadeias multi-step a menos que sejam o tipo de solicitação principal desde o dia 1.
What statuses should I use, and how do I avoid status confusion?
Use um ciclo de vida pequeno e compartilhado com significados claros, por exemplo:
- New → In Review → Approved → In Progress → Waiting → Done
- Inclua Canceled para solicitações retiradas ou inválidas
Documente regras de transição (quem pode mudar o que) e armazene uma trilha de auditoria de mudanças de status, atribuições e aprovações para que as decisões sejam rastreáveis.
Which screens and UX flows are essential for v1?
Pense em três telas essenciais mais uma vista de detalhe robusta:
- Formulário de solicitação: fluxo guiado com divulgação progressiva e expectativas claras
- Lista de solicitações (fila/caixa de entrada): filtros por status/categoria/responsável/data; linhas mostram próxima ação
- Detalhe da solicitação: linha do tempo (trilha de auditoria), comentários públicos, notas internas, anexos, ações principais
Inclua acessibilidade desde o início (suporte a teclado, contraste, labels para leitores de tela).
What database tables do I need for a service request app?
Um esquema prático inclui:
- Core:
users,roles,user_roles,teams,requests,comments,attachments - Flexibilidade:
categories,form_fields,request_field_values - Workflow:
approvals,sla_policies - Rastreabilidade:
audit_events
Indexe consultas comuns (como requests(status, created_at) e audit_events(request_id, created_at)) para que filas e linhas do tempo fiquem rápidas.
What security and compliance basics should I implement early?
Priorize fundamentos empresariais:
- SSO (SAML/OIDC) com o provedor de identidade da empresa
- RBAC e visibilidade por equipe (funcionários veem os próprios; equipes veem o que está atribuído a elas)
- Criptografe dados em trânsito (HTTPS) e proteja segredos via um gerenciador de segredos
- Proteja uploads (validação de tipo/tamanho; varredura de malware se necessária)
- Mantenha logs de auditoria append-only para aprovações e ações sensíveis
Essas escolhas evitam retrabalho quando chegarem solicitações de RH/finanças/segurança.