Pular para o conteúdo

Workflow do alarme

sequenceDiagram
    autonumber
    actor Cliente as Cliente final
    participant Painel as Painel de alarme
    participant Linha as Linha SIP/PSTN
    participant Sibulla as Sibulla (receptor)
    participant SowilAPI as sowil-api (Laravel)
    participant Grifos as Grifos (operador)
    participant Operador as Operador humano
    participant Buccina as Buccina (discador)
    participant VTR as wil_agente (VTR)

    Cliente->>Painel: Sensor dispara
    Painel->>Linha: Disca central (Contact ID)
    Linha->>Sibulla: Evento bruto
    Sibulla->>SowilAPI: POST evento normalizado
    SowilAPI->>Grifos: Push (websocket)
    Grifos->>Operador: Cartão de evento na fila
    Operador->>Grifos: Triagem (real / fantasma / teste)
    alt Real
        Operador->>Buccina: Disca cliente para confirmar
        Buccina-->>Operador: Áudio + resposta
        Operador->>VTR: Despacha viatura
        VTR-->>Grifos: Confirma chegada / status
        Operador->>Grifos: Fecha evento
    else Fantasma
        Operador->>Grifos: Fecha sem despacho
    end
sequenceDiagram
    autonumber
    actor Cliente as Cliente final
    participant Painel as Painel
    participant Listener as alarm-listener (v2)
    participant SolutioAPI as solutio-api (Rails)
    participant Nora as Nora Voice
    participant WarRoom as War Room
    participant Operador as Operador
    participant Field as solutio-field (VTR Expo)

    Cliente->>Painel: Sensor dispara
    Painel->>Listener: Evento bruto
    Listener->>SolutioAPI: Evento normalizado
    SolutioAPI->>Nora: Triagem por IA
    alt Nora classifica como ruído/teste
        Nora->>SolutioAPI: Fecha automaticamente
        SolutioAPI-->>Cliente: SMS / app de confirmação
    else Nora detecta possível real
        Nora->>WarRoom: Abre sessão multi-party
        WarRoom-->>Operador: Sala viva (vídeo + áudio + cliente)
        WarRoom-->>Cliente: Convite por voz/app
        Operador->>WarRoom: Confirma e despacha
        WarRoom->>Field: Push para VTR mais próxima
        Field-->>WarRoom: Status em tempo real
        Operador->>WarRoom: Fecha quando resolvido
    end
EtapaTempo médioOnde a v2 ataca
Disparo → fila no Grifos8-20sIgual (não muda)
Fila → triagem inicial30-180sNora resolve em <5s para falsos positivos
Triagem real → confirmação cliente60-120sWar Room: cliente entra direto na sessão
Confirmação → VTR despachada90-180sWar Room já passa coordenadas para o app
Total ponta-a-ponta (real)~5-9 minMeta v2: <90s para evento real
flowchart TD
    A[Painel dispara] --> B{Linha disponível?}
    B -->|Não| C[Evento perdido]
    B -->|Sim| D[Sibulla recebe]
    D --> E{Match com cliente cadastrado?}
    E -->|Não| F[Evento não roteado]
    E -->|Sim| G[Grifos recebe]
    G --> H{Operador disponível?}
    H -->|Madrugada / pico| I[Fila cresce]
    I --> J[Tempo de resposta aumenta]
    H -->|Sim| K[Triagem]
    K --> L{Confirmação OK?}
    L -->|Não atende cliente| M[Despacho preventivo<br/>custo alto]

    classDef fail fill:#e63946,stroke:#7a1f2a,color:#fff
    classDef warn fill:#f4a261,stroke:#9a5d2c,color:#fff
    class C,F,J,M fail
    class I warn

A v2 ataca I (fila em pico/madrugada — Nora absorve) e M (custo de despacho preventivo — Nora confirma por voz antes).