PageSourceSearch

https://olyvia.lovable.app/assets/DocsAutoScheduling-334wepW3.js

js olyvia.lovable.app collected 2026-10-03 03:36:44 UTC 15,649 bytes, 12 lines download raw bytes

vendor: 2,264 bytes, line 1
1import{j as e}from"./index-B-5bfxDF.js";import{j as x,ak as t,Z as c,C as s,a as d,c as i,b as a,n as l,l as r,g as h,U as n,b5 as p}from"./App-AEo09UKd.js";import{S as o}from"./settings-2-Cw7uU7cy.js";import{C as m}from"./clock-BxjvlPf_.js";import{R as j}from"./route-BC_lannX.js";import{M as u}from"./map-pin-CSL0P6Dp.js";function A(){return e.jsx(x,{children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8 pb-12",children:[e.jsx("div",{className:"space-y-4",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"p-3 bg-primary/10 rounded-lg",children:e.jsx(o,{className:"h-8 w-8 text-primary"})}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold",children:"Manual de Auto-Agendamento"}),e.jsx("p",{className:"text-muted-foreground",children:"Guia completo para configurar regras de agendamento automático"})]})]})}),e.jsx(t,{}),e.jsxs("section",{className:"space-y-4",children:[e.jsxs("h2",{className:"text-2xl font-semibold flex items-center gap-2",children:[e.jsx(c,{className:"h-6 w-6 text-primary"}),"Introdução"]}),e.jsx("p",{className:"text-muted-foreground leading-relaxed",children:"O módulo de Auto-Agendamento permite automatizar a atribuição de agendamentos aos recursos (técnicos, veículos, equipamentos) com base em critérios como proximidade geográfica, disponibilidade e carga de trabalho. Utiliza a API do Google Maps para calcular distâncias e tempos de viagem reais."}),e.jsxs(s,{children:[e.jsx(d,{children:e.jsx(i,{className:"text-base",children:"Principais Funcionalidades"})}),e.jsxs(a,{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(l,{className:"h-4 w-4 text-green-500"}),e.jsx("span",{children:"Cálculo de distâncias via Google Maps"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(l,{className:"h-4 w-4 text-green-500"}),e.jsx("span",{children:"Seleção automática do recurso mais próximo"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(l,{className:"h-4 w-4 text-green-500"}),e.jsx("span",{children:"Respeito por horários de trabalho e capacidade"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(l,{className:"h-4 w-4 text-green-500"}
vendor: 5,561 bytes, line 1
1),e.jsx("span",{children:"Múltiplas estratégias de distribuição"})]})]})]})]}),e.jsx(t,{}),e.jsxs("section",{className:"space-y-4",children:[e.jsxs("h2",{className:"text-2xl font-semibold flex items-center gap-2",children:[e.jsx(o,{className:"h-6 w-6 text-primary"}),"Criar uma Regra"]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("p",{className:"text-muted-foreground",children:["Para criar uma nova regra, aceda a ",e.jsx("strong",{children:"Agendamentos → Regras → Nova Regra"}),"."]}),e.jsxs(s,{children:[e.jsx(d,{children:e.jsx(i,{className:"text-base",children:"Campos Obrigatórios"})}),e.jsx(a,{className:"space-y-4",children:e.jsxs("div",{className:"grid gap-4",children:[e.jsxs("div",{className:"p-3 border rounded-lg",children:[e.jsx("h4",{className:"font-medium mb-1",children:"Nome da Regra"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:'Identificador único para a regra. Ex: "Agendamento Lisboa Norte"'})]}),e.jsxs("div",{className:"p-3 border rounded-lg",children:[e.jsx("h4",{className:"font-medium mb-1",children:"Gatilho"}),e.jsx("p",{className:"text-sm text-muted-foreground mb-2",children:"Define quando a regra é executada:"}),e.jsxs("div",{className:"grid grid-cols-2 gap-2 text-sm",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(r,{variant:"outline",children:"Manual"}),e.jsx("span",{children:"Via API ou botão"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(r,{variant:"outline",children:"Ao criar"}),e.jsx("span",{children:"Automático na criação"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(r,{variant:"outline",children:"Mudança status"}),e.jsx("span",{children:"Ao mudar estado"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(r,{variant:"outline",children:"Por data"}),e.jsx("span",{children:"Em data específica"})]})]})]}),e.jsxs("div",{className:"p-3 border rounded-lg",children:[e.jsx("h4",{className:"font-medium mb-1",children:"Estratégia de Seleção"}),e.jsx("p",{className:"text-sm text-muted-foreground mb-2",children:"Como escolher o recurso:"}),e.jsxs("div",{className:"space-y-2 text-sm",children:[e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(r,{className:"mt-0.5",children:"Mais próximo"}),e.jsx("span",{className:"text-muted-foreground",children:"Usa Google Maps para encontrar o recurso com menor tempo de viagem"})]}),e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(r,{variant:"secondary",className:"mt-0.5",children:"Primeiro disponível"}),e.jsx("span",{className:"text-muted-foreground",children:"Seleciona o primeiro recurso com slot livre"})]}),e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(r,{variant:"secondary",className:"mt-0.5",children:"Rotativo"}),e.jsx("span",{className:"text-muted-foreground",children:"Distribui equitativamente entre recursos"})]}),e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(r,{variant:"secondary",className:"mt-0.5",children:"Menos ocupado"}),e.jsx("span",{className:"text-muted-foreground",children:"Prioriza recursos com menos agendamentos"})]})]})]})]})})]})]})]}),e.jsx(t,{}),e.jsxs("section",{className:"space-y-4",children:[e.jsxs("h2",{className:"text-2xl font-semibold flex items-center gap-2",children:[e.jsx(m,{className:"h-6 w-6 text-primary"}),"Configurações de Tempo"]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs(s,{children:[e.jsx(d,{children:e.jsx(i,{className:"text-base",children:"Duração"})}),e.jsxs(a,{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Tempo padrão em minutos para cada agendamento. Usado quando o item não tem duração definida."}),e.jsx("div",{className:"mt-2 p-2 bg-muted rounded text-sm font-mono",children:"Exemplo: 60 min (1 hora)"})]})]}),e.jsxs(s,{children:[e.jsx(d,{children:e.jsx(i,{className:"text-base",children:"Horário de Trabalho"})}),e.jsxs(a,{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Define o intervalo de horas permitido para agendamentos."}),e.jsx("div",{className:"mt-2 p-2 bg-muted rounded text-sm font-mono",children:"Exemplo: 09:00 - 18:00"})]})]}),e.jsxs(s,{children:[e.jsx(d,{children:e.jsx(i,{className:"text-base",children:"Buffer Antes"})}),e.jsxs(a,{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Tempo extra antes de cada agendamento para preparação ou deslocação."}),e.jsx("div",{className:"mt-2 p-2 bg-muted rounded text-sm font-mono",children:"Exemplo: 15 min"})]})]}),e.jsxs(s,{children:[e.jsx(d,{children:e.jsx(i,{className:"text-base",children:"Buffer Depois"})}),e.jsxs(a,{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Tempo extra após cada agendamento para finalização ou transição."}),e.jsx("div",{className:"mt-2 p-2 bg-muted rounded text-sm font-mono",children:"Exemplo: 10 min"})]})]})]})]}),e.jsx(t,{}),e.jsxs("section",{className:"space-y-4",children:[e.jsxs("h2",{className:"text-2xl font-semibold flex items-center gap-2",children:[e.jsx(h,{className:"h-6 w-6 text-primary"}),"Dias e Recursos"]}),e.jsxs(s,{children:[e.jsx(d,{children:e.jsx(i,{className:"text-base",children:"Dias Permitidos"})}),e.jsxs(a,{children:[e.jsx("p",{className:"text-sm text-muted-foreground mb-3",children:"Selecione os dias da semana em que a regra pode agendar:"}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(r,{variant:"outline",children:"Dom"}),e.jsx(r,{children:"Seg"}),e.jsx(r,{children:"Ter"}),e.jsx(r,{children:"Qua"}
1),e.jsx(r,{children:"Qui"}),e.jsx(r,{children:"Sex"}),e.jsx(r,{variant:"outline",children:"Sáb"})]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-2",children:"Badges a cheio = selecionados | Badges outline = não selecionados"})]})]}),e.jsxs(s,{children:[e.jsx(d,{children:e.jsxs(i,{className:"text-base flex items-center gap-2",children:[e.jsx(n,{className:"h-5 w-5"}),"Recursos Preferidos"]})}),e.jsxs(a,{children:[e.jsx("p",{className:"text-sm text-muted-foreground mb-3",children:"Opcionalmente, limite a regra a um conjunto específico de recursos. Se vazio, todos os recursos ativos serão considerados."}),e.jsxs("div",{className:"p-3 bg-muted/50 rounded-lg",children:[e.jsx("p",{className:"text-sm font-medium mb-1",children:"💡 Dica"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:'Use recursos preferidos para criar equipas especializadas. Ex: "Técnicos de AC" apenas para serviços de climatização.'})]})]})]})]}),e.jsx(t,{}),e.jsxs("section",{className:"space-y-4",children:[e.jsxs("h2",{className:"text-2xl font-semibold flex items-center gap-2",children:[e.jsx(j,{className:"h-6 w-6 text-primary"}),"Integração Google Maps"]}),e.jsx(s,{children:e.jsx(a,{className:"pt-6",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("p",{className:"text-muted-foreground",children:["A estratégia ",e.jsx("strong",{children:'"Mais próximo"'})," utiliza a API Distance Matrix do Google Maps para calcular distâncias e tempos de viagem reais."]}),e.jsxs("div",{className:"grid gap-3",children:[e.jsxs("div",{className:"flex items-start gap-3 p-3 border rounded-lg",children:[e.jsx(u,{className:"h-5 w-5 text-primary mt-0.5"}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium",children:"Código Postal do Cliente"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"O sistema usa o código postal do agendamento como destino"})]})]}),e.jsxs("div",{className:"flex items-start gap-3 p-3 border rounded-lg",children:[e.jsx(n,{className:"h-5 w-5 text-primary mt-0.5"}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium",children:"Localização dos Recursos"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Cada recurso deve ter um código postal ou morada configurada"})]})]}),e.jsxs("div",{className:"flex items-start gap-3 p-3 border rounded-lg",children:[e.jsx(m,{className:"h-5 w-5 text-primary mt-0.5"}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium",children:"Tempo de Viagem"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"O tempo de viagem é guardado nos metadados do agendamento"})]})]})]})]})})}),e.jsx(s,{className:"border-amber-200 bg-amber-50/50 dark:bg-amber-950/20 dark:border-amber-900",children:e.jsx(a,{className:"pt-6",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(p,{className:"h-5 w-5 text-amber-600 mt-0.5"}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium text-amber-800 dark:text-amber-200",children:"Requisitos"}),e.jsx("p",{className:"text-sm text-amber-700 dark:text-amber-300",children:"A API do Google Maps requer uma chave válida configurada nas variáveis de ambiente (GOOGLE_MAPS_API_KEY). Contacte o administrador se não estiver configurada."})]})]})})})]}),e.jsx(t,{}),e.jsxs("section",{className:"space-y-4",children:[e.jsxs("h2",{className:"text-2xl font-semibold flex items-center gap-2",children:[e.jsx(c,{className:"h-6 w-6 text-primary"}),"Utilização via API"]}),e.jsxs(s,{children:[e.jsx(d,{children:e.jsx(i,{className:"text-base",children:"Endpoint de Auto-Agendamento"})}),e.jsxs(a,{className:"space-y-4",children:[e.jsx("div",{className:"p-3 bg-muted rounded-lg font-mono text-sm",children:"POST /functions/v1/auto-schedule"}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium mb-2",children:"Parâmetros do Body"}),e.jsxs("div",{className:"space-y-2 text-sm",children:[e.jsxs("div",{className:"grid grid-cols-3 gap-2 p-2 bg-muted/50 rounded",children:[e.jsx("span",{className:"font-mono",children:"postal_code"}),e.jsx("span",{className:"text-muted-foreground",children:"string"}),e.jsx("span",{children:"Código postal do local"})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-2 p-2 bg-muted/50 rounded",children:[e.jsx("span",{className:"font-mono",children:"preferred_date"}),e.jsx("span",{className:"text-muted-foreground",children:"string (ISO)"}),e.jsx("span",{children:"Data preferida"})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-2 p-2 bg-muted/50 rounded",children:[e.jsx("span",{className:"font-mono",children:"duration_minutes"}),e.jsx("span",{className:"text-muted-foreground",children:"number"}),e.jsx("span",{children:"Duração em minutos"})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-2 p-2 bg-muted/50 rounded",children:[e.jsx("span",{className:"font-mono",children:"use_proximity"}),e.jsx("span",{className:"text-muted-foreground",children:"boolean"}),e.jsx("span",{children:"Usar Google Maps"})]})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium mb-2",children:"Exemplo de Resposta"}),e.jsx("pre",{className:"p-3 bg-muted rounded-lg text-xs overflow-x-auto",children:`{
2  "success": true,
3  "item_id": "uuid-do-agendamento",
4  "scheduled_start": "2024-01-15T10:00:00Z",
5  "scheduled_end": "2024-01-15T11:00:00Z",
6  "resource_id": "uuid-do-recurso",
7  "resource_details": {
8    "name": "João Silva",
9    "distance_km": 12.5,
10    "travel_time_minutes": 18
11  }
12}`})]})]})]})]}),e.jsx(t,{}),e.jsxs("section",{className:"space-y-4",children:[e.jsxs("h2",{className:"text-2xl font-semibold flex items-center gap-2",children:[e.jsx(l,{className:"h-6 w-6 text-primary"}),"Boas Práticas"]}),e.jsxs("div",{className:"grid gap-4",children:[e.jsx(s,{children:e.jsx(a,{className:"pt-6",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"p-2 bg-green-100 dark:bg-green-900 rounded-lg",children:e.jsx("span",{className:"text-lg",children:"1"})}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium",children:"Configure Buffers Realistas"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Adicione tempo de buffer suficie
12nte para deslocações e imprevistos. Considere o trânsito em horas de ponta."})]})]})})}),e.jsx(s,{children:e.jsx(a,{className:"pt-6",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"p-2 bg-green-100 dark:bg-green-900 rounded-lg",children:e.jsx("span",{className:"text-lg",children:"2"})}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium",children:"Mantenha Recursos Atualizados"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Atualize regularmente a localização e disponibilidade dos recursos para garantir cálculos precisos."})]})]})})}),e.jsx(s,{children:e.jsx(a,{className:"pt-6",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"p-2 bg-green-100 dark:bg-green-900 rounded-lg",children:e.jsx("span",{className:"text-lg",children:"3"})}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium",children:"Use Prioridades"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Se tiver múltiplas regras, configure prioridades para definir qual regra tem precedência em caso de conflito."})]})]})})}),e.jsx(s,{children:e.jsx(a,{className:"pt-6",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"p-2 bg-green-100 dark:bg-green-900 rounded-lg",children:e.jsx("span",{className:"text-lg",children:"4"})}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium",children:'Teste com "Manual" Primeiro'}),e.jsx("p",{className:"text-sm text-muted-foreground",children:'Configure novas regras como "Manual" primeiro para testar antes de as tornar automáticas.'})]})]})})})]})]})]})})}export{A as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.