Pular para o conteúdo principal

Fluxos de Negócio

Documentação dos principais fluxos de negócio do sistema PAC.

Fluxo de Cadastro e Vinculação Cliente-RT

sequenceDiagram
participant Admin as Admin
participant Sistema as Sistema
participant Cliente as Cliente
participant RT as Responsável Técnico
participant Email as Email Service

Admin->>Sistema: Cadastrar Cliente
Sistema->>Sistema: Criar User para Cliente
Sistema->>Email: Enviar email boas-vindas
Email->>Cliente: Email com credenciais

Cliente->>Sistema: Login
Cliente->>Sistema: Solicitar vínculo com RT
Sistema->>Email: Enviar email ao RT
Email->>RT: Notificação de solicitação

RT->>Sistema: Visualizar solicitação
alt Aceitar
RT->>Sistema: Aceitar vínculo
Sistema->>Email: Enviar confirmação
Email->>Cliente: Email de aprovação
else Rejeitar
RT->>Sistema: Rejeitar vínculo
Sistema->>Email: Enviar rejeição
Email->>Cliente: Email de rejeição
end

Fluxo de Criação e Execução de Formulários

sequenceDiagram
participant RT as Responsável Técnico
participant Sistema as Sistema
participant Cron as Job Cron
participant Cliente as Cliente/Técnico
participant Email as Email Service

RT->>Sistema: Criar modelo de formulário
RT->>Sistema: Adicionar perguntas
RT->>Sistema: Configurar frequência/horários
RT->>Sistema: Vincular clientes
RT->>Sistema: Publicar formulário

Note over Cron: Executa a cada 10 minutos
Cron->>Sistema: Verificar formulários publicados
Sistema->>Sistema: Verificar frequência/horário
Sistema->>Sistema: Criar instâncias para clientes

Sistema->>Cliente: Formulário pendente disponível
Cliente->>Sistema: Preencher formulário
Sistema->>Sistema: Avaliar conformidade

alt Há não conformidade
Sistema->>Sistema: Status = NAO_CONFORMIDADE
Sistema->>RT: Notificação no monitoramento
else Tudo em conformidade
Sistema->>Sistema: Status = EM_CONFORMIDADE
end

Cliente->>Sistema: Justificar não conformidade (se houver)
Sistema->>Sistema: Status = JUSTIFICADO

Fluxo de Sistema de Chamados

sequenceDiagram
participant Cliente as Cliente
participant Sistema as Sistema
participant RT as Responsável Técnico
participant Email as Email Service

Cliente->>Sistema: Abrir chamado
Sistema->>Sistema: Gerar protocolo único
Sistema->>Email: Enviar email ao RT
Email->>RT: Notificação de novo chamado
Sistema->>Cliente: Confirmação de criação

RT->>Sistema: Visualizar chamado
RT->>Sistema: Responder chamado
Sistema->>Sistema: Status = RESPONDIDO
Sistema->>Email: Enviar resposta ao cliente
Email->>Cliente: Notificação de resposta

Fluxo de Avaliação de Conformidade

flowchart TD
Start([Formulário Preenchido]) --> Avaliar{Analisar Respostas}

Avaliar -->|Todas conformes| Conforme[Status: EM_CONFORMIDADE]
Avaliar -->|Há não conformidade| VerificarJustificativa{Justificada?}

VerificarJustificativa -->|Sim| Justificado[Status: JUSTIFICADO]
VerificarJustificativa -->|Não| NaoConforme[Status: NAO_CONFORMIDADE]

Conforme --> Monitoramento[Dashboard Verde]
Justificado --> MonitoramentoAmarelo[Dashboard Amarelo]
NaoConforme --> MonitoramentoVermelho[Dashboard Vermelho]

MonitoramentoVermelho --> AcaoRT[RT deve tomar ação]
MonitoramentoAmarelo --> Atencao[Requer atenção]
Monitoramento --> OK[Tudo OK]

Fluxo de Geração Automática de Instâncias

flowchart TD
Start([Job Cron - A cada 10 min]) --> BuscarModelos[Buscar modelos PUBLICADOS e ATIVOS]

BuscarModelos --> ParaCadaModelo{Para cada modelo}

ParaCadaModelo --> VerificarFrequencia{Verificar frequência}
VerificarFrequencia -->|Diário| VerificarHorario[Verificar horários]
VerificarFrequencia -->|Semanal| VerificarDia{É dia configurado?}
VerificarFrequencia -->|Personalizado| VerificarDiaPersonalizado{É dia configurado?}

VerificarDia -->|Não| ProximoModelo[Próximo modelo]
VerificarDia -->|Sim| VerificarHorario
VerificarDiaPersonalizado -->|Não| ProximoModelo
VerificarDiaPersonalizado -->|Sim| VerificarHorario

VerificarHorario --> VerificarJanela{Horário dentro da janela? ±15min}
VerificarJanela -->|Não| ProximoModelo
VerificarJanela -->|Sim| BuscarClientes[Buscar clientes vinculados ATIVOS]

BuscarClientes --> ParaCadaCliente{Para cada cliente}
ParaCadaCliente --> VerificarExistencia{Já existe instância?}
VerificarExistencia -->|Sim| ProximoCliente[Próximo cliente]
VerificarExistencia -->|Não| CriarInstancia[Criar instância PENDENTE]

CriarInstancia --> ProximoCliente
ProximoCliente --> MaisClientes{Há mais clientes?}
MaisClientes -->|Sim| ParaCadaCliente
MaisClientes -->|Não| ProximoModelo

ProximoModelo --> MaisModelos{Há mais modelos?}
MaisModelos -->|Sim| ParaCadaModelo
MaisModelos -->|Não| Fim([Fim])

Fluxo de Autenticação

sequenceDiagram
participant Usuario as Usuário
participant Frontend as Frontend
participant Backend as Backend
participant DB as Banco de Dados

Usuario->>Frontend: Informa email/senha
Frontend->>Backend: POST /auth/login
Backend->>DB: Buscar usuário por email
DB-->>Backend: Dados do usuário

Backend->>Backend: Validar senha (bcrypt)
alt Senha válida
Backend->>Backend: Gerar JWT token
Backend-->>Frontend: Token + dados do usuário
Frontend->>Frontend: Armazenar token
Frontend->>Frontend: Redirecionar para dashboard
else Senha inválida
Backend-->>Frontend: Erro 401
Frontend->>Usuario: Mostrar erro
end

Fluxo de Resposta de Formulário

flowchart TD
Start([Técnico acessa formulário pendente]) --> CarregarPerguntas[Carregar perguntas do modelo]

CarregarPerguntas --> PreencherRespostas[Preencher respostas]

PreencherRespostas --> ValidarObrigatorias{Todas obrigatórias preenchidas?}
ValidarObrigatorias -->|Não| Erro[Mostrar erro]
Erro --> PreencherRespostas

ValidarObrigatorias -->|Sim| AvaliarConformidade[Avaliar cada resposta]

AvaliarConformidade --> VerificarNaoConformidade{Há não conformidade?}

VerificarNaoConformidade -->|Não| SalvarConforme[Salvar com status EM_CONFORMIDADE]
VerificarNaoConformidade -->|Sim| RequerJustificativa{Requer justificativa?}

RequerJustificativa -->|Não| SalvarNaoConforme[Salvar com status NAO_CONFORMIDADE]
RequerJustificativa -->|Sim| PreencherJustificativa[Preencher justificativa]

PreencherJustificativa --> SalvarJustificado[Salvar com status JUSTIFICADO]

SalvarConforme --> AtualizarDashboard[Atualizar dashboard de monitoramento]
SalvarNaoConforme --> AtualizarDashboard
SalvarJustificado --> AtualizarDashboard

AtualizarDashboard --> Fim([Formulário respondido])

Próximos Passos