@fayz-ai/plugin-workforce 0.3.14 → 0.3.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/views/SchedulesView.tsx","../src/views/TemplatesView.tsx","../src/views/TimeEntriesView.tsx","../src/views/PeriodsView.tsx","../src/settings/usePayrollAccounts.ts","../src/views/PayrollCostsView.tsx","../src/views/HrView.tsx","../src/views/WorkforcePage.tsx"],"names":["React","toast","jsxs","jsx","Button","Badge","Plus","Skeleton","Fragment","Modal","ModalContent","ModalHeader","ModalTitle","ModalBody","ModalFooter","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Input","Users","Lock","monthLabel","resolveRangePreset","PageToolbar","DateRangeControl","AlertTriangle","Checkbox","PersonLink"],"mappings":"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","file":"WorkforcePage-A64KM6IC.js","sourcesContent":["import React from 'react'\nimport { CalendarDays, Users, Send, Plus } from 'lucide-react'\nimport { Badge, Button, FilterRail, MiniCalendar, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Skeleton, toLocalISODate, toast, type MiniCalendarMarker } from '@fayz-ai/ui'\nimport { ScheduleEditor } from '@fayz-ai/admin'\nimport { useWorkforceProvider, useWorkforceStore } from '../context'\nimport type { DaySchedule, ScheduleAssignment } from '../types'\n\n// ---------------------------------------------------------------------------\n// Escalas — o mês e o dia.\n//\n// O calendário é o índice, e o painel da direita é o dia. É a forma que o V1\n// tem e que funciona: ninguém procura uma escala por lista, procura por data.\n//\n// O PREVISTO desta tela é a escala publicada (plg_workforce_schedules +\n// assignments). A grade semanal de disponibilidade de UMA pessoa — que vive em\n// `public.schedules` e que a agenda também lê — é o `ScheduleEditor` do\n// @fayz-ai/admin, embaixo: o mesmo editor da ficha da pessoa, sem um segundo\n// jeito de dizer a mesma coisa.\n// ---------------------------------------------------------------------------\n\nfunction monthBounds(date: string): { from: string; to: string } {\n const d = new Date(`${date}T12:00:00`)\n const first = new Date(d.getFullYear(), d.getMonth(), 1)\n const last = new Date(d.getFullYear(), d.getMonth() + 1, 0)\n return { from: toLocalISODate(first), to: toLocalISODate(last) }\n}\n\nconst STATUS_LABEL: Record<string, string> = {\n draft: 'Rascunho',\n published: 'Publicada',\n closed: 'Fechada',\n}\n\nconst ASSIGNMENT_STATUS_LABEL: Record<string, string> = {\n pending: 'Pendente',\n notified: 'Avisado',\n confirmed: 'Confirmado',\n declined: 'Recusou',\n realized: 'Cumprido',\n}\n\n/** Uma vaga do dia: quem, em que turno, com que resposta. */\nfunction AssignmentRow({ assignment }: { assignment: ScheduleAssignment }) {\n return (\n <div className=\"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium\">{assignment.personName ?? 'Sem nome'}</div>\n <div className=\"truncate text-xs text-muted-foreground\">\n {assignment.professionName ?? 'Sem função'}\n {assignment.shiftLabel ? ` · ${assignment.shiftLabel}` : ''}\n {assignment.shiftStartTime ? ` · ${assignment.shiftStartTime}–${assignment.shiftEndTime}` : ''}\n </div>\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {assignment.role === 'standby' && <Badge variant=\"outline\">Reserva</Badge>}\n <Badge variant={assignment.status === 'confirmed' ? 'success' : assignment.status === 'declined' ? 'destructive' : 'secondary'}>\n {ASSIGNMENT_STATUS_LABEL[assignment.status] ?? assignment.status}\n </Badge>\n </div>\n </div>\n )\n}\n\nexport function SchedulesView() {\n const provider = useWorkforceProvider()\n const selectedDate = useWorkforceStore((s) => s.selectedDate)\n const setSelectedDate = useWorkforceStore((s) => s.setSelectedDate)\n const schedules = useWorkforceStore((s) => s.schedules)\n const loading = useWorkforceStore((s) => s.schedulesLoading)\n const fetchSchedules = useWorkforceStore((s) => s.fetchSchedules)\n const templates = useWorkforceStore((s) => s.templates)\n const fetchTemplates = useWorkforceStore((s) => s.fetchTemplates)\n const staff = useWorkforceStore((s) => s.staff)\n const fetchStaff = useWorkforceStore((s) => s.fetchStaff)\n\n const [month, setMonth] = React.useState(() => monthBounds(selectedDate))\n const [templateId, setTemplateId] = React.useState<string>('')\n const [busy, setBusy] = React.useState(false)\n const [personId, setPersonId] = React.useState<string>('')\n\n React.useEffect(() => { void fetchSchedules(month.from, month.to) }, [fetchSchedules, month.from, month.to])\n React.useEffect(() => { void fetchTemplates() }, [fetchTemplates])\n React.useEffect(() => { void fetchStaff() }, [fetchStaff])\n\n const day: DaySchedule | undefined = schedules.find((s) => s.scheduleDate === selectedDate)\n\n // Um ponto por dia que TEM escala, com a cor dizendo se ela já foi avisada.\n const markers = React.useMemo(() => {\n const out: Record<string, MiniCalendarMarker[]> = {}\n for (const s of schedules) {\n out[s.scheduleDate] = [{\n color: s.status === 'published' ? 'hsl(var(--success))' : 'hsl(var(--warning))',\n label: s.status === 'published' ? 'Escala publicada' : 'Escala em rascunho',\n }]\n }\n return out\n }, [schedules])\n\n async function createFromTemplate() {\n if (!templateId) return\n setBusy(true)\n try {\n await provider.createSchedule({ scheduleDate: selectedDate, templateId })\n await fetchSchedules(month.from, month.to)\n toast.success('Escala criada a partir do molde.')\n } catch (e: any) {\n toast.error(e?.message ?? 'Não foi possível criar a escala.')\n } finally {\n setBusy(false)\n }\n }\n\n async function publish() {\n if (!day) return\n setBusy(true)\n try {\n await provider.publishSchedule(day.id)\n await fetchSchedules(month.from, month.to)\n toast.success('Escala publicada — os titulares foram espelhados na agenda.')\n } catch (e: any) {\n toast.error(e?.message ?? 'Não foi possível publicar a escala.')\n } finally {\n setBusy(false)\n }\n }\n\n const titulares = day?.assignments.filter((a) => a.role === 'titular') ?? []\n const pendentes = titulares.filter((a) => a.status === 'pending' || a.status === 'notified')\n\n // Inline, not a RailWorkspace: inside ModulePage's rail nav a second page\n // rail drew two collapsible columns side by side, reading as a duplicated menu.\n const rail = (\n <FilterRail\n before={\n <MiniCalendar\n selectedDate={new Date(`${selectedDate}T12:00:00`)}\n onDateSelect={(d) => setSelectedDate(toLocalISODate(d))}\n onMonthChange={(d) => setMonth(monthBounds(toLocalISODate(d)))}\n markers={markers}\n />\n }\n sections={[\n {\n id: 'fixed-hours',\n title: 'Horário fixo da pessoa',\n content: (\n <>\n {/* A grade semanal de UMA pessoa, em `public.schedules`. É o\n editor que a ficha da pessoa já usa — reaproveitado, e não\n reescrito. */}\n <Select value={personId} onValueChange={setPersonId}>\n <SelectTrigger><SelectValue placeholder=\"Escolha quem\" /></SelectTrigger>\n <SelectContent>\n {staff.map((p) => <SelectItem key={p.id} value={p.id}>{p.name}</SelectItem>)}\n </SelectContent>\n </Select>\n {personId && (\n <div className=\"mt-4\">\n <ScheduleEditor assigneeId={personId} />\n </div>\n )}\n </>\n ),\n },\n ]}\n />\n )\n\n return (\n <div className=\"grid gap-6 p-6 lg:grid-cols-[260px_minmax(0,1fr)]\">\n <aside className=\"self-start rounded-xl border border-border bg-card p-4\">{rail}</aside>\n <div className=\"min-w-0 space-y-4\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div>\n <h2 className=\"text-lg font-semibold\">\n {new Date(`${selectedDate}T12:00:00`).toLocaleDateString('pt-BR', {\n weekday: 'long', day: '2-digit', month: 'long',\n })}\n </h2>\n {day && (\n <div className=\"mt-1 flex items-center gap-2 text-xs text-muted-foreground\">\n <Badge variant={day.status === 'published' ? 'success' : 'warning'}>\n {STATUS_LABEL[day.status] ?? day.status}\n </Badge>\n <span>{titulares.length} titular(es) · {pendentes.length} pendente(s)</span>\n </div>\n )}\n </div>\n {day && day.status === 'draft' && (\n <Button onClick={publish} disabled={busy}>\n <Send className=\"mr-2 h-4 w-4\" aria-hidden />\n Publicar escala\n </Button>\n )}\n </div>\n\n {loading ? (\n <div className=\"space-y-2\">\n <Skeleton className=\"h-12 w-full\" />\n <Skeleton className=\"h-12 w-full\" />\n </div>\n ) : day ? (\n <div className=\"space-y-2\">\n {day.assignments.length === 0\n ? <p className=\"text-sm text-muted-foreground\">Nenhuma vaga preenchida neste dia.</p>\n : day.assignments.map((a) => <AssignmentRow key={a.id} assignment={a} />)}\n </div>\n ) : (\n // O pré-requisito duro do V1, dito na tela em vez de escondido: sem\n // molde não existe escala.\n <div className=\"rounded-xl border border-dashed border-border p-8 text-center\">\n <CalendarDays className=\"mx-auto mb-3 h-8 w-8 text-muted-foreground\" aria-hidden />\n <p className=\"mb-4 text-sm text-muted-foreground\">\n {templates.length === 0\n ? 'Nenhum molde de escala cadastrado. Crie um em Templates para começar.'\n : 'Ainda não há escala neste dia. Escolha um molde para montá-la.'}\n </p>\n {templates.length > 0 && (\n <div className=\"mx-auto flex max-w-sm items-center gap-2\">\n <Select value={templateId} onValueChange={setTemplateId}>\n <SelectTrigger><SelectValue placeholder=\"Molde de escala\" /></SelectTrigger>\n <SelectContent>\n {templates.map((t) => <SelectItem key={t.id} value={t.id}>{t.name}</SelectItem>)}\n </SelectContent>\n </Select>\n <Button onClick={createFromTemplate} disabled={!templateId || busy}>\n <Plus className=\"mr-2 h-4 w-4\" aria-hidden />\n Criar\n </Button>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { ChevronRight, LayoutTemplate, Plus, Trash2 } from 'lucide-react'\nimport { Badge, Button, Input, Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter, Skeleton, toast } from '@fayz-ai/ui'\nimport { useWorkforceProvider, useWorkforceStore } from '../context'\nimport type { ScheduleShift, ScheduleTemplate } from '../types'\n\n// ---------------------------------------------------------------------------\n// Templates de escala.\n//\n// Três níveis, e nesta ordem porque é a ordem em que a casa pensa: o TEMPLATE\n// (\"Almoço Seg. a Sex.\"), os TURNOS dentro dele (11:00–15:00, seg a sex), e a\n// LOTAÇÃO de cada função no turno (\"Garçom (2)\", \"Cozinha (3)\") — que é o\n// denominador do \"1/1\" que a escala do dia mostra.\n//\n// A tela, porém, é lida por DIA. É assim que a pergunta chega ao gerente\n// (\"quem trabalha na quarta?\"), é assim que o V1 batiza os templates\n// (`Domingo`, `Quarta - Noite`, `Sexta - Noite`, `Almoço Seg. a Sex.`) e é o\n// que a própria legenda do V1 dizia: *\"Monte templates por dia da semana\"*.\n// Sete linhas fechadas cabem numa tela; sete cartões abertos não cabiam.\n//\n// Um template que roda de segunda a sexta aparece nos cinco dias, com os turnos\n// daquele dia — não é duplicata, é a agenda da casa vista pelo dia. Só um dia\n// fica aberto por vez.\n// ---------------------------------------------------------------------------\n\n/** Os dias como o V1 os escreve nas pastilhas do editor de template. */\nconst WEEKDAYS = ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb']\nconst WEEKDAY_NAMES = ['Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado']\n\nfunction plural(n: number, one: string, many: string): string {\n return `${n} ${n === 1 ? one : many}`\n}\n\n/** Quantas vagas este turno pede, somando a lotação de cada função. */\nfunction seats(shift: ScheduleShift): number {\n return shift.requirements.reduce((sum, r) => sum + (r.requiredCount || 0), 0)\n}\n\nfunction ShiftCard({ shift, onChanged }: { shift: ScheduleShift; onChanged: () => void }) {\n const provider = useWorkforceProvider()\n const [profession, setProfession] = React.useState('')\n const [count, setCount] = React.useState('1')\n\n async function addRequirement() {\n if (!profession.trim()) return\n try {\n await provider.saveRequirement({\n shiftId: shift.id,\n professionName: profession.trim(),\n requiredCount: Math.max(1, Number(count) || 1),\n })\n setProfession('')\n setCount('1')\n onChanged()\n } catch (e: any) {\n toast.error(e?.message ?? 'Não foi possível salvar a função.')\n }\n }\n\n async function removeRequirement(id: string) {\n try {\n await provider.deleteRequirement(id)\n onChanged()\n } catch (e: any) {\n toast.error(e?.message ?? 'Não foi possível remover a função.')\n }\n }\n\n async function removeShift() {\n try {\n await provider.deleteShift(shift.id)\n onChanged()\n } catch (e: any) {\n toast.error(e?.message ?? 'Não foi possível remover o turno.')\n }\n }\n\n return (\n <div className=\"rounded-lg border border-border p-3\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium\">{shift.label}</div>\n <div className=\"text-xs text-muted-foreground\">\n {shift.startTime}–{shift.endTime}\n {/* Turno que vira o dia é normal em restaurante — e é dito, não escondido. */}\n {shift.crossesMidnight ? ' · vira o dia' : ''}\n </div>\n <div className=\"mt-1 flex flex-wrap gap-1\">\n {WEEKDAYS.map((d, i) => (\n <span\n key={i}\n className={`inline-flex h-5 items-center justify-center rounded px-1.5 text-[10px] ${\n shift.weekdays.includes(i) ? 'bg-primary/15 text-primary' : 'bg-muted text-muted-foreground'\n }`}\n >\n {d}\n </span>\n ))}\n </div>\n </div>\n <Button variant=\"ghost\" size=\"sm\" onClick={removeShift} aria-label=\"Remover turno\">\n <Trash2 className=\"h-4 w-4\" aria-hidden />\n </Button>\n </div>\n\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {shift.requirements.map((r) => (\n <Badge key={r.id} variant=\"outline\" className=\"gap-1\">\n {r.professionName} ({r.requiredCount})\n <Button variant=\"bare\" size=\"bare\" onClick={() => removeRequirement(r.id)} aria-label={`Remover ${r.professionName}`}>\n <Trash2 className=\"h-3 w-3\" aria-hidden />\n </Button>\n </Badge>\n ))}\n </div>\n\n {/* `Input` embrulha o campo num `div.w-full` — sem uma caixa de largura\n fixa em volta, cada campo vira uma linha própria neste flex. */}\n <div className=\"mt-3 flex flex-wrap items-center gap-2\">\n <div className=\"w-full sm:w-56\">\n <Input\n value={profession}\n onChange={(e) => setProfession(e.target.value)}\n placeholder=\"Função (ex.: Garçom)\"\n className=\"h-8\"\n />\n </div>\n <div className=\"w-20\">\n <Input\n value={count}\n onChange={(e) => setCount(e.target.value)}\n type=\"number\"\n min={1}\n className=\"h-8\"\n aria-label=\"Vagas\"\n />\n </div>\n <Button size=\"sm\" variant=\"secondary\" onClick={addRequirement}>Adicionar</Button>\n </div>\n </div>\n )\n}\n\n/** O diálogo de turno novo — o mesmo do V1: nome, início, fim, dias da semana. */\nfunction NewShiftModal({ template, open, onOpenChange, onChanged }: {\n template: ScheduleTemplate\n open: boolean\n onOpenChange: (v: boolean) => void\n onChanged: () => void\n}) {\n const provider = useWorkforceProvider()\n const [label, setLabel] = React.useState('')\n const [start, setStart] = React.useState('11:00')\n const [end, setEnd] = React.useState('15:00')\n const [weekdays, setWeekdays] = React.useState<number[]>([1, 2, 3, 4, 5])\n\n async function addShift() {\n if (!label.trim()) return\n try {\n await provider.saveShift({\n templateId: template.id,\n label: label.trim(),\n startTime: start,\n endTime: end,\n weekdays,\n sortOrder: template.shifts.length,\n })\n onOpenChange(false)\n setLabel('')\n onChanged()\n } catch (e: any) {\n toast.error(e?.message ?? 'Não foi possível salvar o turno.')\n }\n }\n\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalContent size=\"sm\">\n <ModalHeader><ModalTitle>Novo turno</ModalTitle></ModalHeader>\n <ModalBody className=\"space-y-3\">\n <Input value={label} onChange={(e) => setLabel(e.target.value)} placeholder=\"Nome do turno (ex.: Almoço)\" />\n <div className=\"flex items-center gap-2\">\n <Input type=\"time\" value={start} onChange={(e) => setStart(e.target.value)} aria-label=\"Início\" />\n <span className=\"text-muted-foreground\">até</span>\n <Input type=\"time\" value={end} onChange={(e) => setEnd(e.target.value)} aria-label=\"Fim\" />\n </div>\n <div>\n <div className=\"mb-1 text-xs text-muted-foreground\">Dias da semana</div>\n <div className=\"flex flex-wrap gap-1\">\n {WEEKDAYS.map((d, i) => (\n <Button variant=\"bare\" size=\"bare\"\n key={i}\n type=\"button\"\n onClick={() => setWeekdays((w) => (w.includes(i) ? w.filter((x) => x !== i) : [...w, i]))}\n className={`font-normal h-8 rounded px-2 text-xs ${\n weekdays.includes(i) ? 'bg-primary text-primary-foreground' : 'bg-muted text-muted-foreground'\n }`}\n >\n {d}\n </Button>\n ))}\n </div>\n </div>\n </ModalBody>\n <ModalFooter>\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)}>Cancelar</Button>\n <Button onClick={addShift}>Salvar turno</Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n\n/**\n * Um template dentro de um dia: o nome, as ações do V1 (turno novo e excluir) e\n * só os turnos que rodam NAQUELE dia. `shifts` vazio = o template inteiro, que\n * é o caso do grupo \"Sem turno\".\n */\nfunction TemplateBlock({ template, shifts, onChanged }: {\n template: ScheduleTemplate\n shifts: ScheduleShift[]\n onChanged: () => void\n}) {\n const provider = useWorkforceProvider()\n const [open, setOpen] = React.useState(false)\n\n async function removeTemplate() {\n try {\n await provider.deleteTemplate(template.id)\n onChanged()\n } catch (e: any) {\n toast.error(e?.message ?? 'Não foi possível remover o template.')\n }\n }\n\n return (\n <div className=\"rounded-lg border border-border/60 bg-muted/20 p-3\">\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <div className=\"truncate text-sm font-medium\">{template.name}</div>\n <div className=\"flex shrink-0 items-center gap-1\">\n <Button size=\"sm\" variant=\"secondary\" onClick={() => setOpen(true)}>\n <Plus className=\"mr-1 h-4 w-4\" aria-hidden /> Turno\n </Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={removeTemplate} aria-label={`Remover ${template.name}`}>\n <Trash2 className=\"h-4 w-4\" aria-hidden />\n </Button>\n </div>\n </div>\n\n {shifts.length === 0\n ? <p className=\"text-sm text-muted-foreground\">Nenhum turno neste template ainda.</p>\n : <div className=\"space-y-2\">{shifts.map((s) => <ShiftCard key={s.id} shift={s} onChanged={onChanged} />)}</div>}\n\n <NewShiftModal template={template} open={open} onOpenChange={setOpen} onChanged={onChanged} />\n </div>\n )\n}\n\n/** Uma linha de dia: fechada diz o tamanho do dia, aberta mostra os turnos. */\nfunction DayRow({ title, summary, empty, open, onToggle, children }: {\n title: string\n summary: string\n empty: boolean\n open: boolean\n onToggle: () => void\n children: React.ReactNode\n}) {\n return (\n <div className=\"border-b border-border last:border-b-0\">\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={onToggle}\n aria-expanded={open}\n disabled={empty}\n className=\"flex w-full items-center justify-start gap-3 rounded-none px-3 py-2.5 text-left font-normal transition-colors hover:bg-muted/50 disabled:cursor-default disabled:opacity-100 disabled:hover:bg-transparent\"\n >\n <ChevronRight\n className={`h-4 w-4 shrink-0 text-muted-foreground transition-transform ${open ? 'rotate-90' : ''} ${empty ? 'opacity-0' : ''}`}\n aria-hidden\n />\n <span className={`w-24 shrink-0 text-sm ${empty ? 'text-muted-foreground' : 'font-medium'}`}>{title}</span>\n <span className=\"truncate text-sm text-muted-foreground\">{summary}</span>\n </Button>\n {open && <div className=\"space-y-3 px-3 pb-3\">{children}</div>}\n </div>\n )\n}\n\nexport function TemplatesView() {\n const provider = useWorkforceProvider()\n const templates = useWorkforceStore((s) => s.templates)\n const loading = useWorkforceStore((s) => s.templatesLoading)\n const fetchTemplates = useWorkforceStore((s) => s.fetchTemplates)\n const [open, setOpen] = React.useState(false)\n const [name, setName] = React.useState('')\n // Um dia aberto por vez: a tela existe para caber, e dois dias abertos já\n // reconstroem a pilha de cartões que ela veio desfazer.\n const [openDay, setOpenDay] = React.useState<number | null>(null)\n\n React.useEffect(() => { void fetchTemplates() }, [fetchTemplates])\n\n /** Para cada dia da semana, quais templates rodam nele e com que turnos. */\n const byDay = React.useMemo(() => {\n return WEEKDAY_NAMES.map((_, day) => {\n const blocks = templates\n .map((t) => ({ template: t, shifts: t.shifts.filter((s) => s.weekdays.includes(day)) }))\n .filter((b) => b.shifts.length > 0)\n const shiftCount = blocks.reduce((n, b) => n + b.shifts.length, 0)\n const seatCount = blocks.reduce((n, b) => n + b.shifts.reduce((m, s) => m + seats(s), 0), 0)\n return { day, blocks, shiftCount, seatCount }\n })\n }, [templates])\n\n /** Template recém-criado, ainda sem turno: não roda em dia nenhum e sumiria\n * da tela — junto com o botão que o apaga e o que lhe dá o primeiro turno. */\n const withoutShifts = React.useMemo(\n () => templates.filter((t) => t.shifts.length === 0),\n [templates],\n )\n\n async function createTemplate() {\n if (!name.trim()) return\n try {\n await provider.saveTemplate({ name: name.trim() })\n setName('')\n setOpen(false)\n await fetchTemplates()\n } catch (e: any) {\n toast.error(e?.message ?? 'Não foi possível criar o template.')\n }\n }\n\n const onChanged = React.useCallback(() => { void fetchTemplates() }, [fetchTemplates])\n\n return (\n <div className=\"space-y-4 p-6\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <h2 className=\"text-lg font-semibold\">Templates de escala</h2>\n <Button onClick={() => setOpen(true)}>\n <Plus className=\"mr-2 h-4 w-4\" aria-hidden /> Novo template\n </Button>\n </div>\n\n {loading ? (\n <div className=\"space-y-2\"><Skeleton className=\"h-24 w-full\" /><Skeleton className=\"h-24 w-full\" /></div>\n ) : templates.length === 0 ? (\n <div className=\"rounded-xl border border-dashed border-border p-8 text-center\">\n <LayoutTemplate className=\"mx-auto mb-3 h-8 w-8 text-muted-foreground\" aria-hidden />\n <p className=\"text-sm text-muted-foreground\">Nenhum template cadastrado.</p>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div className=\"overflow-hidden rounded-xl border border-border\">\n {byDay.map(({ day, blocks, shiftCount, seatCount }) => (\n <DayRow\n key={day}\n title={WEEKDAY_NAMES[day]}\n summary={\n shiftCount === 0\n ? 'Ninguém escalado'\n : `${plural(shiftCount, 'turno', 'turnos')} · ${plural(seatCount, 'vaga', 'vagas')}`\n }\n empty={shiftCount === 0}\n open={openDay === day}\n onToggle={() => setOpenDay((d) => (d === day ? null : day))}\n >\n {blocks.map((b) => (\n <TemplateBlock key={b.template.id} template={b.template} shifts={b.shifts} onChanged={onChanged} />\n ))}\n </DayRow>\n ))}\n </div>\n\n {withoutShifts.length > 0 && (\n <div className=\"space-y-3\">\n <p className=\"text-xs text-muted-foreground\">\n Sem turno — não entram em dia nenhum até ganharem o primeiro.\n </p>\n {withoutShifts.map((t) => (\n <TemplateBlock key={t.id} template={t} shifts={[]} onChanged={onChanged} />\n ))}\n </div>\n )}\n </div>\n )}\n\n <Modal open={open} onOpenChange={setOpen}>\n <ModalContent size=\"sm\">\n <ModalHeader><ModalTitle>Novo template</ModalTitle></ModalHeader>\n <ModalBody>\n <Input value={name} onChange={(e) => setName(e.target.value)} placeholder=\"Nome (ex.: Almoço Seg. a Sex.)\" />\n </ModalBody>\n <ModalFooter>\n <Button variant=\"ghost\" onClick={() => setOpen(false)}>Cancelar</Button>\n <Button onClick={createTemplate}>Criar</Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n </div>\n )\n}\n","import React from 'react'\nimport { Clock, AlertTriangle, Pencil, Lock, Eye, Users, MapPin, ScanFace, ImageOff } from 'lucide-react'\nimport { Avatar, AvatarFallback, AvatarImage, Badge, Button, DataTable, type DataTableProps, DateRangeControl, Input, Modal, PageToolbar, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Skeleton, toast } from '@fayz-ai/ui'\nimport { PersonLink } from '@fayz-ai/admin'\nimport { formatCurrency, useWorkforceConfig, useWorkforceProvider, useWorkforceStore } from '../context'\nimport type { AnalyticsDateRange } from '@fayz-ai/core'\nimport { resolveRangePreset, type AnalyticsRangePreset } from '@fayz-ai/ui'\nimport type { PunchPhoto, TimeAdjustmentAction, TimeEntry, WorkDay } from '../types'\n\n// ---------------------------------------------------------------------------\n// Registros de Ponto.\n//\n// A FORMA desta tela é deliberadamente a do V1, e não uma reinvenção: uma\n// tabela por dia, uma linha por pessoa, com Nome · Unidade · Entrada · Saída ·\n// Duração · Valor · Escala · Ações. Quem confere ponto já conferiu mil vezes\n// nessa grade, lendo as colunas na mesma ordem; mudar o arranjo obrigaria a\n// pessoa a reaprender a própria rotina para ganhar nada.\n//\n// Um cartão por pessoa-dia, que era o desenho anterior, empilha 299 cartões num\n// mês e some com a comparação lado a lado — que é o gesto da conferência.\n//\n// O que MUDA em relação ao V1, e muda porque lá está errado:\n//\n// · o V1 marca 325 de 325 batidas como \"Fora da escala\", porque cruza só para\n// profissional e com a data em UTC. Aqui o selo vem de `v_workforce_day`,\n// que cruza de verdade e sabe dizer FALTA (escala sem ponto) de FORA DA\n// ESCALA (ponto sem escala) — duas assimetrias que o V1 não distingue.\n//\n// · Ajustar não edita a batida. Grava uma linha em\n// `plg_workforce_time_adjustments` com motivo obrigatório, e o horário real\n// continua à vista, riscado. É o que torna o ponto prova em vez de um campo\n// que alguém mexeu.\n// ---------------------------------------------------------------------------\n\nconst KIND_LABEL: Record<string, string> = {\n clock_in: 'Entrada',\n break_start: 'Saída p/ intervalo',\n break_end: 'Volta do intervalo',\n clock_out: 'Saída',\n}\n\nfunction firstOfMonth(): string {\n const d = new Date()\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-01`\n}\n\nfunction todayISO(): string {\n const d = new Date()\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n}\n\nfunction hhmm(iso?: string | null): string {\n if (!iso) return '—'\n return new Date(iso).toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' })\n}\n\n/** Minutos em '7h30'. Quem confere folha lê horas, não decimais. */\nfunction hours(minutes?: number | null): string {\n if (minutes == null) return '—'\n const sign = minutes < 0 ? '-' : ''\n const abs = Math.abs(minutes)\n return `${sign}${Math.floor(abs / 60)}h${String(abs % 60).padStart(2, '0')}`\n}\n\n/** Iniciais para o avatar. Duas letras: mais que isso vira sopa em 32px. */\nfunction iniciais(nome?: string | null): string {\n const partes = (nome ?? '').trim().split(/\\s+/).filter(Boolean)\n if (!partes.length) return '—'\n return (partes[0][0] + (partes.length > 1 ? partes[partes.length - 1][0] : '')).toUpperCase()\n}\n\n/**\n * As URLs assinadas da PÁGINA, num mapa só.\n *\n * O bucket é privado, então toda URL tem prazo — cinco minutos, o mesmo do V1 —\n * e por isso ela não pode ser guardada na linha nem num cache de dados: uma URL\n * assinada vencida em cache é uma imagem quebrada que ninguém sabe explicar.\n *\n * O que mudou foi ONDE se assina. Assinar dentro de cada avatar custava uma\n * requisição por linha: trinta dias do Pertinho do Céu são 261 linhas, e a\n * primeira cara só aparecia depois de 261 idas ao storage. Aqui a página inteira\n * vai numa chamada, e as linhas leem o resultado.\n */\nconst FotosContext = React.createContext<Record<string, string>>({})\n\nfunction usePunchPhotoUrl(photo?: PunchPhoto | null): string | null {\n const mapa = React.useContext(FotosContext)\n if (!photo) return null\n return mapa[`${photo.bucket}/${photo.path}`] ?? null\n}\n\n/** Assina, de uma vez, as fotos das batidas que a página vai desenhar. */\nfunction useFotosDaPagina(entries: TimeEntry[]): Record<string, string> {\n const provider = useWorkforceProvider()\n const [mapa, setMapa] = React.useState<Record<string, string>>({})\n // A chave é a LISTA de fotos, não o array de batidas: paginar não muda as\n // batidas carregadas, muda quais delas estão à vista, e reassinar as mesmas\n // fotos a cada troca de página seria a ida ao storage que este código existe\n // para evitar.\n const chave = React.useMemo(\n () => entries.map((e) => (e.photo ? `${e.photo.bucket}/${e.photo.path}` : '')).filter(Boolean).sort().join('|'),\n [entries],\n )\n React.useEffect(() => {\n const fotos = entries.map((e) => e.photo).filter(Boolean) as PunchPhoto[]\n if (!fotos.length) { setMapa({}); return }\n let vivo = true\n provider.signPunchPhotos(fotos)\n .then((m) => { if (vivo) setMapa(m) })\n .catch(() => { if (vivo) setMapa({}) })\n return () => { vivo = false }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [provider, chave])\n return mapa\n}\n\n/** A leitura tipada do que o totem gravou. Ausente é uma resposta legítima. */\nfunction provaDe(entry: TimeEntry): {\n lat?: number; lng?: number; accuracy?: number; faceScore?: number; naoMigrada: boolean\n} {\n const e = (entry.evidence ?? {}) as Record<string, unknown>\n const num = (v: unknown) => (typeof v === 'number' ? v : typeof v === 'string' ? Number(v) : undefined)\n return {\n lat: num(e.lat),\n lng: num(e.lng),\n accuracy: num(e.accuracy_m),\n faceScore: num(e.face_score),\n // Houve captura E a imagem não atravessou. É o estado que a tela precisa\n // distinguir de \"não houve captura\" — dizer \"sem foto\" nos dois casos\n // esconderia 1.320 imagens que existem e não chegaram.\n naoMigrada: !!e.photo_path && !entry.photo,\n }\n}\n\nfunction diasAtras(n: number): string {\n const d = new Date(Date.now() - n * 86400000)\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n}\n\n/** A cara de quem bateu, quando os bytes atravessaram. */\nfunction FotoDaBatida({ entry, className }: { entry: TimeEntry; className?: string }) {\n const url = usePunchPhotoUrl(entry.photo)\n return (\n <Avatar className={className ?? 'h-8 w-8 shrink-0'}>\n {url && <AvatarImage src={url} alt={`Foto da batida de ${entry.personName ?? 'quem bateu'}`} />}\n <AvatarFallback>{iniciais(entry.personName)}</AvatarFallback>\n </Avatar>\n )\n}\n\n/**\n * A prova que o totem produziu, numa linha: a foto, a coordenada com precisão e\n * o score facial — os quatro campos que o V1 mostra e que fazem uma batida\n * contestada ter defesa.\n *\n * Os três últimos chegaram pelo porte desde a primeira onda. A FOTO não: até a\n * migration 054 do base e a 001 deste plugin, `evidence.photo_path` guardava o\n * caminho de um bucket privado de OUTRO projeto Supabase — 1.320 imagens\n * referenciadas e nenhuma alcançável. Por isso o estado \"não migrada\" é DITO em\n * vez de virar um espaço vazio: espaço vazio lê-se como \"não houve captura\", que\n * é uma afirmação diferente e falsa.\n */\nfunction ProvaDoTotem({ entry }: { entry: TimeEntry }) {\n const p = provaDe(entry)\n const temAlgo = entry.photo || p.naoMigrada || p.lat != null || p.faceScore != null\n if (!temAlgo) return null\n return (\n <div className=\"flex items-center gap-3 pt-1\">\n {entry.photo ? (\n <FotoDaBatida entry={entry} className=\"h-12 w-12 shrink-0 rounded-md\" />\n ) : p.naoMigrada ? (\n <span\n className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-md border border-dashed border-border text-muted-foreground\"\n title=\"O totem capturou a foto; a imagem ainda não atravessou do V1\"\n >\n <ImageOff className=\"h-4 w-4\" aria-hidden />\n </span>\n ) : null}\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground\">\n {p.lat != null && p.lng != null && (\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3.5 w-3.5\" aria-hidden />\n {p.lat.toFixed(5)}, {p.lng.toFixed(5)}\n {p.accuracy != null && <> · ± {Math.round(p.accuracy)}m</>}\n </span>\n )}\n {p.faceScore != null && (\n <span className=\"flex items-center gap-1\">\n <ScanFace className=\"h-3.5 w-3.5\" aria-hidden />\n Match facial {(p.faceScore * 100).toFixed(1)}%\n </span>\n )}\n {p.naoMigrada && <span>Foto capturada no V1, ainda não migrada</span>}\n </div>\n </div>\n )\n}\n\n/**\n * O dossiê do dia: cada batida, o horário REAL ao lado do ajustado, quem\n * ajustou, e a prova que o totem produziu.\n */\nfunction DetalhesDoDia({ day, entries, onClose }: {\n day: WorkDay\n entries: TimeEntry[]\n onClose: () => void\n}) {\n return (\n <Modal open onOpenChange={(o) => { if (!o) onClose() }}>\n <ModalContent>\n <ModalHeader>\n <ModalTitle>{day.personName ?? 'Sem nome'} · {day.workDate}</ModalTitle>\n </ModalHeader>\n <ModalBody className=\"space-y-3\">\n <div className=\"flex flex-wrap gap-4 text-sm\">\n <span>Previsto <b>{hours(day.plannedMinutes)}</b></span>\n <span>Realizado <b>{hours(day.workedMinutes)}</b></span>\n {day.varianceMinutes != null && (\n <span>Saldo <b>{day.varianceMinutes >= 0 ? '+' : ''}{hours(day.varianceMinutes)}</b></span>\n )}\n {day.shiftLabel && (\n <span className=\"text-muted-foreground\">\n Turno {day.shiftLabel} {day.shiftStartTime}–{day.shiftEndTime}\n </span>\n )}\n </div>\n <div className=\"divide-y divide-border rounded-lg border border-border\">\n {entries.length === 0 ? (\n <p className=\"px-3 py-2 text-sm text-muted-foreground\">Nenhuma batida neste dia.</p>\n ) : entries.map((e) => (\n <div key={e.id} className=\"px-3 py-2 text-sm\">\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"flex items-center gap-2\">\n <Clock className=\"h-3.5 w-3.5 text-muted-foreground\" aria-hidden />\n <span className={e.voided ? 'text-muted-foreground line-through' : ''}>\n {KIND_LABEL[e.kind] ?? e.kind} · {hhmm(e.effectiveAt)}\n </span>\n {e.adjusted && (\n // O real fica à vista, riscado. Esconder o horário original\n // transformaria o ajuste numa edição, que é justamente o que\n // o modelo append-only existe para impedir.\n <span className=\"text-xs text-muted-foreground\">\n (real <s>{hhmm(e.punchedAt)}</s>)\n </span>\n )}\n </span>\n {e.adjusted && (\n <span className=\"text-xs text-muted-foreground\">\n {e.adjustedByName ?? 'alguém'}: {e.adjustmentReason}\n </span>\n )}\n </div>\n <ProvaDoTotem entry={e} />\n </div>\n ))}\n </div>\n </ModalBody>\n <ModalFooter>\n <Button variant=\"outline\" onClick={onClose}>Fechar</Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n\n/** O diálogo de ajuste. Motivo obrigatório — o banco recusa em branco. */\nfunction AdjustDialog({ entry, onClose, onSaved }: {\n entry: TimeEntry\n onClose: () => void\n onSaved: () => void\n}) {\n const provider = useWorkforceProvider()\n const [action, setAction] = React.useState<TimeAdjustmentAction>('correct')\n const [time, setTime] = React.useState(() => new Date(entry.effectiveAt).toTimeString().slice(0, 5))\n const [reason, setReason] = React.useState('')\n const [busy, setBusy] = React.useState(false)\n\n async function save() {\n if (!reason.trim()) {\n toast.error('O motivo é obrigatório.')\n return\n }\n setBusy(true)\n try {\n await provider.adjustTimeEntry({\n timeEntryId: entry.id,\n action,\n effectiveAt: action === 'void' ? undefined : new Date(`${entry.workDate}T${time}:00`).toISOString(),\n reason: reason.trim(),\n })\n toast.success('Ajuste registrado. O horário real foi preservado.')\n onSaved()\n onClose()\n } catch (e: any) {\n toast.error(e?.message ?? 'Não foi possível registrar o ajuste.')\n } finally {\n setBusy(false)\n }\n }\n\n return (\n <Modal open onOpenChange={(o) => { if (!o) onClose() }}>\n <ModalContent size=\"sm\">\n <ModalHeader><ModalTitle>Ajustar batida</ModalTitle></ModalHeader>\n <ModalBody className=\"space-y-3\">\n <p className=\"text-xs text-muted-foreground\">\n {entry.personName ?? 'Sem nome'} · {KIND_LABEL[entry.kind] ?? entry.kind} ·\n {' '}registrado às {hhmm(entry.punchedAt)}\n </p>\n <Select value={action} onValueChange={(v) => setAction(v as TimeAdjustmentAction)}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"correct\">Corrigir o horário</SelectItem>\n <SelectItem value=\"insert\">Inserir a batida que faltou</SelectItem>\n <SelectItem value=\"void\">Anular esta batida</SelectItem>\n </SelectContent>\n </Select>\n {action !== 'void' && (\n <Input type=\"time\" value={time} onChange={(e) => setTime(e.target.value)} aria-label=\"Horário que passa a valer\" />\n )}\n <Input\n value={reason}\n onChange={(e) => setReason(e.target.value)}\n placeholder=\"Motivo (obrigatório)\"\n />\n </ModalBody>\n <ModalFooter>\n <Button variant=\"ghost\" onClick={onClose}>Cancelar</Button>\n <Button onClick={save} disabled={busy}>Registrar ajuste</Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n\n/**\n * Um relógio que anda de minuto em minuto.\n *\n * \"Está dentro há 6h58\" é uma frase que envelhece, e envelhecer em silêncio é o\n * que a tornaria pior que não dizer nada. De minuto e não de segundo porque a\n * folha de ponto se lê em minutos — um tique por segundo repintaria 299 linhas\n * para mover um dígito que ninguém acompanha.\n */\nfunction useAgora(ativo: boolean): number {\n const [agora, setAgora] = React.useState(() => Date.now())\n React.useEffect(() => {\n if (!ativo) return\n const id = setInterval(() => setAgora(Date.now()), 60_000)\n return () => clearInterval(id)\n }, [ativo])\n return agora\n}\n\n// Acima disto, \"em curso\" deixa de ser a explicação provável. A jornada mais\n// longa do vocabulário do V1 é a 12x36 — doze horas —, então dezesseis dá\n// margem para o turno que vira a noite e ainda separa com folga o caso real:\n// alguém que foi embora e não bateu a saída. Chamar as duas coisas de \"em\n// curso\" faria a tela afirmar que a pessoa está no local há dois dias.\nconst LIMITE_EM_CURSO_MIN = 16 * 60\n\n/**\n * A coluna Duração.\n *\n * Até a migration 003 ela mostrava `-497155h02` em todo ponto em aberto — o\n * epoch da entrada, com o sinal trocado, vazando para a tela. A conta foi\n * corrigida lá; o que ficou para cá é a pergunta que o número sozinho não\n * responde: um dia em aberto tem DUAS quantidades, o que já fechou e o que está\n * correndo, e mostrar só a primeira com um \"(parcial)\" ao lado obrigava quem\n * confere a abrir os detalhes para saber desde quando.\n */\nfunction Duracao({ day, agora }: { day: WorkDay; agora: number }) {\n // Fechou, e fechou com uma duração que não é jornada. O número MEDIDO fica à\n // vista — é ele que faz a pessoa procurar a batida — e o motivo fica escrito\n // ao lado, com quantos dias separam a entrada da saída, que é a pista.\n if (day.reviewReason === 'span_too_long') {\n const dias = day.firstIn && day.lastOut\n ? Math.round((new Date(day.lastOut).getTime() - new Date(day.firstIn).getTime()) / 86400000)\n : 0\n return (\n <>\n <span className=\"text-destructive\">{hours(day.workedMinutes)}</span>\n <span\n className=\"block text-xs text-destructive\"\n title=\"Fora da soma: acima de 16h num dia é saída não batida, não jornada. Corrija pelo botão Ajustar.\"\n >\n revisar · {dias > 0 ? `saída ${dias}d depois` : 'saída no dia seguinte'}\n </span>\n </>\n )\n }\n if (!day.isOpen) {\n return <>{hours(day.workedMinutes)}</>\n }\n const fechadas = day.workedMinutes ?? 0\n const correndo = day.openSince\n ? Math.max(0, Math.round((agora - new Date(day.openSince).getTime()) / 60000))\n : null\n const esquecido = correndo != null && correndo > LIMITE_EM_CURSO_MIN\n\n const correndoTexto = correndo == null\n ? 'em aberto'\n : esquecido\n ? `sem saída há ${hours(correndo)}`\n : `${hours(correndo)} em curso`\n const cor = esquecido ? 'text-destructive' : 'text-muted-foreground'\n const desde = day.openSince\n ? `Aberto desde ${new Date(day.openSince).toLocaleString('pt-BR')}`\n : undefined\n\n // Nada fechado ainda: o \"em curso\" vira a linha principal. Um travessão em\n // cima dele seria duas linhas para dizer uma coisa só, e a primeira das duas\n // diria \"sem duração\" ao lado de uma duração.\n if (fechadas === 0) {\n return <span className={cor} title={desde}>{correndoTexto}</span>\n }\n return (\n <>\n {hours(fechadas)}\n <span className={`block text-xs ${cor}`} title={desde}>+ {correndoTexto}</span>\n </>\n )\n}\n\n/** O selo da coluna Escala. Três estados, na precedência do V1. */\nfunction SeloEscala({ day }: { day: WorkDay }) {\n if (day.absent) return <Badge variant=\"destructive\">Falta</Badge>\n if (day.outsideSchedule) return <Badge variant=\"destructive\">Fora da escala</Badge>\n return <Badge variant=\"success\">Na escala</Badge>\n}\n\n/** Uma pessoa numa linha da tabela do dia. */\n/** What one person's day says beyond its own fields, read once per row. */\nfunction dayFacts(day: WorkDay, entries: TimeEntry[], hourlyRate: number | null | undefined) {\n // Valor só sai de hora que conta. Precificar um dia de 45h que ninguém\n // trabalhou seria levar o erro da tela para dentro do dinheiro.\n const value = hourlyRate != null && day.workedMinutes != null && !day.reviewReason\n ? (day.workedMinutes / 60) * hourlyRate\n : null\n // Ajustar age sobre a ÚLTIMA batida do dia: é a que está aberta quando o\n // ponto está aberto, e é a que alguém corrige quando esqueceu de bater a saída.\n const alvo = entries.length ? entries[entries.length - 1] : null\n const travado = entries.some((e) => e.payableInvoiceId)\n // A cara do dia é a da ENTRADA, e não a foto do cadastro: quem confere ponto\n // está conferindo se quem bateu é quem devia bater, e o retrato do cadastro\n // responde a outra pergunta. Sem foto de entrada, qualquer batida com foto\n // serve — a saída também é a pessoa. Sem nenhuma, as iniciais.\n const retrato = entries.find((e) => e.kind === 'clock_in' && e.photo)\n ?? entries.find((e) => e.photo)\n ?? null\n return { value, alvo, travado, retrato }\n}\n\n/** \"Hoje, sexta-feira, 18 de setembro de 2026\" — como o V1 escreve. */\nfunction tituloDoDia(workDate: string): string {\n const d = new Date(`${workDate}T12:00:00`)\n const hoje = new Date()\n const iso = (x: Date) => `${x.getFullYear()}-${String(x.getMonth() + 1).padStart(2, '0')}-${String(x.getDate()).padStart(2, '0')}`\n const ontem = new Date(hoje.getTime() - 86400000)\n const extenso = d.toLocaleDateString('pt-BR', { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' })\n if (workDate === iso(hoje)) return `Hoje, ${extenso}`\n if (workDate === iso(ontem)) return `Ontem, ${extenso}`\n return extenso.charAt(0).toUpperCase() + extenso.slice(1)\n}\n\n/** Um dia: a faixa de cabeçalho com os totais, e a tabela das pessoas. */\nfunction GrupoDoDia({ workDate, days, entriesByPerson, unitNames, agora, onAdjust, onDetails }: {\n workDate: string\n days: WorkDay[]\n entriesByPerson: Map<string, TimeEntry[]>\n unitNames: Map<string, string>\n agora: number\n onAdjust: (entry: TimeEntry) => void\n onDetails: (day: WorkDay) => void\n}) {\n const { currency, hourlyRate, staffLookup } = useWorkforceConfig()\n const pessoas = new Set(days.map((d) => d.personId)).size\n const abertos = days.filter((d) => d.isOpen).length\n const revisar = days.filter((d) => d.reviewReason === 'span_too_long').length\n // UMA regra: dia que o banco marcou com motivo não soma. Era só \"ponto\n // aberto\" até a 004 — contar uma jornada que não terminou inventa hora que\n // ninguém trabalhou —, e um dia de 45h é o mesmo problema com outra cara. Por\n // isso os contadores ficam ao lado: o total é honesto E incompleto, e a tela\n // diz as duas coisas em vez de escolher uma.\n const minutos = days.reduce((sum, d) => sum + (d.reviewReason ? 0 : (d.workedMinutes ?? 0)), 0)\n const valor = hourlyRate != null ? (minutos / 60) * hourlyRate : null\n\n const columns = React.useMemo<DataTableProps<WorkDay, unknown>['columns']>(() => {\n const head = (label: string) => () => <span className=\"text-xs\">{label}</span>\n const facts = (day: WorkDay) => dayFacts(day, entriesByPerson.get(`${day.personId}|${day.workDate}`) ?? [], hourlyRate)\n return [\n {\n id: 'name', header: head('Nome'),\n cell: ({ row: { original: day } }) => {\n const { retrato } = facts(day)\n return (\n <div className=\"flex items-center gap-3\">\n {retrato ? (\n <FotoDaBatida entry={retrato} />\n ) : (\n <Avatar className=\"h-8 w-8 shrink-0\">\n <AvatarFallback>{iniciais(day.personName)}</AvatarFallback>\n </Avatar>\n )}\n <div className=\"min-w-0\">\n <PersonLink\n personId={day.personId}\n name={day.personName ?? 'Sem nome'}\n kind=\"staff\"\n lookup={staffLookup}\n size=\"sm\"\n className=\"text-sm\"\n />\n <div className=\"text-xs text-muted-foreground\">Profissional</div>\n </div>\n </div>\n )\n },\n },\n {\n id: 'unit', header: head('Unidade'),\n cell: ({ row: { original: day } }) => (\n <span className=\"text-muted-foreground\">{(day.unitId && unitNames.get(day.unitId)) || '—'}</span>\n ),\n },\n { id: 'in', header: head('Entrada'), cell: ({ row }) => <span className=\"tabular-nums\">{hhmm(row.original.firstIn)}</span> },\n {\n id: 'out', header: head('Saída'),\n cell: ({ row: { original: day } }) => (\n <span className=\"tabular-nums\">{day.isOpen ? <Badge variant=\"outline\">Em aberto</Badge> : hhmm(day.lastOut)}</span>\n ),\n },\n { id: 'duration', header: head('Duração'), cell: ({ row }) => <span className=\"tabular-nums\"><Duracao day={row.original} agora={agora} /></span> },\n {\n id: 'value', header: head('Valor'),\n cell: ({ row: { original: day } }) => {\n const { value } = facts(day)\n return <span className=\"tabular-nums\">{value != null ? formatCurrency(value, currency) : '—'}</span>\n },\n },\n { id: 'schedule', header: head('Escala'), cell: ({ row }) => <SeloEscala day={row.original} /> },\n {\n id: 'actions', header: head('Ações'),\n cell: ({ row: { original: day } }) => {\n const { alvo, travado } = facts(day)\n return (\n <div className=\"flex items-center gap-1\">\n {travado ? (\n // A trava do banco, dita na tela: hora já paga não se corrige sem\n // reabrir a competência.\n <span className=\"flex items-center gap-1 px-2 text-xs text-muted-foreground\">\n <Lock className=\"h-3.5 w-3.5\" aria-hidden /> já paga\n </span>\n ) : alvo ? (\n <Button size=\"sm\" variant=\"ghost\" onClick={() => onAdjust(alvo)}>\n <Pencil className=\"mr-1 h-3.5 w-3.5\" aria-hidden /> Ajustar\n </Button>\n ) : null}\n <Button size=\"sm\" variant=\"ghost\" onClick={() => onDetails(day)}>\n <Eye className=\"mr-1 h-3.5 w-3.5\" aria-hidden /> Detalhes\n </Button>\n </div>\n )\n },\n },\n ]\n }, [entriesByPerson, unitNames, agora, onAdjust, onDetails, currency, hourlyRate, staffLookup])\n\n return (\n <div className=\"overflow-hidden rounded-xl border border-border\">\n <div className=\"flex flex-wrap items-center gap-4 border-l-2 border-l-primary bg-muted/40 px-4 py-3\">\n <span className=\"text-sm font-semibold\">{tituloDoDia(workDate)}</span>\n <span className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <Users className=\"h-3.5 w-3.5\" aria-hidden /> {pessoas} pessoa{pessoas === 1 ? '' : 's'}\n </span>\n {abertos > 0 && (\n <span className=\"flex items-center gap-1 text-xs font-medium text-warning\">\n <AlertTriangle className=\"h-3.5 w-3.5\" aria-hidden /> {abertos} em aberto\n </span>\n )}\n {revisar > 0 && (\n <span\n className=\"flex items-center gap-1 text-xs font-medium text-destructive\"\n title=\"Dias acima de 16h — saída não batida. Fora do total até serem ajustados.\"\n >\n <AlertTriangle className=\"h-3.5 w-3.5\" aria-hidden /> {revisar} a revisar\n </span>\n )}\n <span className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <Clock className=\"h-3.5 w-3.5\" aria-hidden /> {hours(minutos)}\n </span>\n {valor != null && valor > 0 && (\n <span className=\"text-xs font-medium text-success\">{formatCurrency(valor, currency)}</span>\n )}\n </div>\n\n <DataTable variant=\"bare\" columns={columns} data={days} getRowId={(d) => `${d.personId}|${d.workDate}`} />\n </div>\n )\n}\n\nexport function TimeEntriesView() {\n const { currency, hourlyRate } = useWorkforceConfig()\n const entries = useWorkforceStore((s) => s.entries)\n const days = useWorkforceStore((s) => s.days)\n const loading = useWorkforceStore((s) => s.timeLoading)\n const fetchTime = useWorkforceStore((s) => s.fetchTime)\n\n // O MESMO controle de período do /analytics — extraído para @fayz-ai/ui\n // justamente para isto. Dois `<input type=date>` crus não têm preset, não\n // escrevem a janela resolvida e deixam marcar início depois do fim.\n // Sete dias, e não trinta. Conferir ponto é rotina de semana — o gesto é\n // \"o que aconteceu desde a última vez que olhei\", não \"o mês inteiro\". Trinta\n // dias no Pertinho do Céu são 261 linhas-pessoa-dia antes de a tela desenhar\n // a primeira; sete são cerca de sessenta. Quem precisa do mês tem o preset\n // ao lado, e ele é um clique.\n const [preset, setPreset] = React.useState<AnalyticsRangePreset | 'custom'>('last_7_days')\n const [range, setRange] = React.useState<AnalyticsDateRange>(() => resolveRangePreset('last_7_days'))\n const from = range.from\n const to = range.to\n const [adjusting, setAdjusting] = React.useState<TimeEntry | null>(null)\n const [details, setDetails] = React.useState<WorkDay | null>(null)\n\n React.useEffect(() => { void fetchTime(from, to) }, [fetchTime, from, to])\n\n // O relógio só anda quando há ponto em aberto na tela. Num período fechado\n // não há nada correndo, e um timer que repinta a tabela de minuto em minuto\n // para não mudar nada é só uma aba que não deixa a máquina dormir.\n const temAberto = React.useMemo(() => days.some((d) => d.isOpen), [days])\n const agora = useAgora(temAberto)\n\n const entriesByPerson = React.useMemo(() => {\n const map = new Map<string, TimeEntry[]>()\n for (const e of entries) {\n const key = `${e.personId}|${e.workDate}`\n const list = map.get(key) ?? []\n list.push(e)\n map.set(key, list)\n }\n // A última batida é o alvo do ajuste — ordenar aqui evita que a linha\n // dependa da ordem em que o provider devolveu.\n for (const list of map.values()) list.sort((a, b) => a.seq - b.seq)\n return map\n }, [entries])\n\n /** Por dia, mais recente primeiro — como o V1 lista. */\n const porDia = React.useMemo(() => {\n const map = new Map<string, WorkDay[]>()\n for (const d of days) {\n const list = map.get(d.workDate) ?? []\n list.push(d)\n map.set(d.workDate, list)\n }\n for (const list of map.values()) {\n list.sort((a, b) => (a.personName ?? '').localeCompare(b.personName ?? ''))\n }\n return [...map.entries()].sort(([a], [b]) => b.localeCompare(a))\n }, [days])\n\n // A unidade da paginação é o DIA, não a linha: a tela é uma tabela por dia, e\n // cortar no meio de um dia partiria o cabeçalho de totais do dia da gente que\n // ele conta. Sete cabem numa semana inteira sem botão nenhum aparecer.\n const DIAS_POR_PAGINA = 7\n const [pagina, setPagina] = React.useState(0)\n // Período novo, página zero. Sem isto, trocar de intervalo pode cair numa\n // página que não existe mais e a tela fica vazia sem dizer por quê.\n React.useEffect(() => { setPagina(0) }, [from, to])\n const totalPaginas = Math.max(1, Math.ceil(porDia.length / DIAS_POR_PAGINA))\n const paginaAtual = Math.min(pagina, totalPaginas - 1)\n const diasVisiveis = React.useMemo(\n () => porDia.slice(paginaAtual * DIAS_POR_PAGINA, (paginaAtual + 1) * DIAS_POR_PAGINA),\n [porDia, paginaAtual],\n )\n\n // Só as batidas dos dias À VISTA vão para a assinatura. É o que torna a\n // paginação uma economia de rede e não só de pixels.\n const entradasVisiveis = React.useMemo(() => {\n const chaves = new Set<string>()\n for (const [, lista] of diasVisiveis) for (const d of lista) chaves.add(`${d.personId}|${d.workDate}`)\n return entries.filter((e) => chaves.has(`${e.personId}|${e.workDate}`))\n }, [diasVisiveis, entries])\n const fotos = useFotosDaPagina(entradasVisiveis)\n\n const unitNames = React.useMemo(() => {\n const map = new Map<string, string>()\n for (const d of days) if (d.unitId) map.set(d.unitId, d.unitName ?? '—')\n return map\n }, [days])\n\n const totais = React.useMemo(() => {\n const minutos = days.reduce((sum, d) => sum + (d.reviewReason ? 0 : (d.workedMinutes ?? 0)), 0)\n return {\n registros: days.length,\n minutos,\n abertos: days.filter((d) => d.isOpen).length,\n revisar: days.filter((d) => d.reviewReason === 'span_too_long').length,\n valor: hourlyRate != null ? (minutos / 60) * hourlyRate : null,\n }\n }, [days, hourlyRate])\n\n return (\n <div className=\"space-y-4 p-6\">\n {/* A MESMA banda do /analytics e dos Encargos: PageToolbar, presa ao topo\n da página, com o período à esquerda e os controles à direita.\n NÃO flutua mais — a pílula de vidro arrastável cobria a lista e era\n uma quarta gramática de filtro no produto. Ver PageToolbar. */}\n <PageToolbar\n range={\n <DateRangeControl\n value={range}\n onChange={setRange}\n preset={preset}\n onPresetChange={setPreset}\n />\n }\n onRefresh={() => void fetchTime(from, to)}\n />\n\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <h2 className=\"text-lg font-semibold\">Resultados</h2>\n <div className=\"flex flex-wrap items-center gap-4 text-sm text-muted-foreground\">\n <span>{totais.registros} registro(s)</span>\n <span>\n Total: <b className=\"text-foreground\">{hours(totais.minutos)}</b>\n {/* O total é honesto E incompleto, e dizer só a primeira metade é o\n que faz alguém tomar 14.969h por verdade quando 11.197 delas são\n saída não batida. O que ficou de fora fica escrito aqui, com o\n número — não um asterisco que manda procurar a legenda. */}\n {(totais.abertos > 0 || totais.revisar > 0) && (\n <span className=\"ml-1 text-xs\">\n (fora:{' '}\n {[\n totais.abertos > 0 ? `${totais.abertos} em aberto` : null,\n totais.revisar > 0 ? `${totais.revisar} a revisar` : null,\n ].filter(Boolean).join(' · ')})\n </span>\n )}\n </span>\n <span>Valor: <b className=\"text-foreground\">\n {totais.valor != null ? formatCurrency(totais.valor, currency) : '—'}\n </b></span>\n </div>\n </div>\n\n {hourlyRate == null && (\n // Honestidade em vez de um número inventado: o SQL da jornada não guarda\n // remuneração em lugar nenhum, então a coluna Valor só existe quando o\n // app diz quanto vale a hora.\n <p className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <AlertTriangle className=\"h-3.5 w-3.5\" aria-hidden />\n O valor da hora não está configurado — informe <code>hourlyRate</code> no plugin para ver a coluna Valor.\n </p>\n )}\n\n {loading ? (\n <div className=\"space-y-2\"><Skeleton className=\"h-40 w-full\" /><Skeleton className=\"h-40 w-full\" /></div>\n ) : porDia.length === 0 ? (\n <div className=\"rounded-xl border border-dashed border-border p-8 text-center\">\n <Clock className=\"mx-auto mb-3 h-8 w-8 text-muted-foreground\" aria-hidden />\n <p className=\"text-sm text-muted-foreground\">Nenhum registro no período.</p>\n </div>\n ) : (\n <FotosContext.Provider value={fotos}>\n <div className=\"space-y-3\">\n {diasVisiveis.map(([workDate, list]) => (\n <GrupoDoDia\n key={workDate}\n workDate={workDate}\n days={list}\n entriesByPerson={entriesByPerson}\n unitNames={unitNames}\n agora={agora}\n onAdjust={setAdjusting}\n onDetails={setDetails}\n />\n ))}\n {totalPaginas > 1 && (\n <div className=\"flex items-center justify-between gap-3 rounded-xl border border-border px-4 py-3 text-sm\">\n {/* O que a página mostra, em DIAS — é a unidade que a tela usa, e\n dizer \"1 a 7 de 23 registros\" mentiria sobre o que foi\n cortado. */}\n <span className=\"text-muted-foreground\">\n Dias {paginaAtual * DIAS_POR_PAGINA + 1}–\n {Math.min((paginaAtual + 1) * DIAS_POR_PAGINA, porDia.length)} de {porDia.length}\n </span>\n <span className=\"flex items-center gap-2\">\n <Button\n size=\"sm\" variant=\"outline\"\n disabled={paginaAtual === 0}\n onClick={() => setPagina((n) => Math.max(0, n - 1))}\n >\n Mais recentes\n </Button>\n <span className=\"text-xs text-muted-foreground tabular-nums\">\n {paginaAtual + 1} / {totalPaginas}\n </span>\n <Button\n size=\"sm\" variant=\"outline\"\n disabled={paginaAtual >= totalPaginas - 1}\n onClick={() => setPagina((n) => Math.min(totalPaginas - 1, n + 1))}\n >\n Mais antigos\n </Button>\n </span>\n </div>\n )}\n </div>\n </FotosContext.Provider>\n )}\n\n {adjusting && (\n <AdjustDialog\n entry={adjusting}\n onClose={() => setAdjusting(null)}\n onSaved={() => void fetchTime(from, to)}\n />\n )}\n {details && (\n <DetalhesDoDia\n day={details}\n entries={entriesByPerson.get(`${details.personId}|${details.workDate}`) ?? []}\n onClose={() => setDetails(null)}\n />\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { Lock, Unlock, CalendarCheck } from 'lucide-react'\nimport { Badge, Button, Input, Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter, Skeleton, toast } from '@fayz-ai/ui'\nimport { useWorkforceProvider, useWorkforceStore } from '../context'\nimport type { WorkforcePeriod } from '../types'\n\n// ---------------------------------------------------------------------------\n// Fechamento — a competência.\n//\n// Fechar o mês é um ATO, não a edição de uma linha: as duas escritas passam por\n// RPC (`workforce_period_close` / `workforce_period_reopen`), que é onde a\n// permissão e o registro de QUEM moram. Reabrir exige motivo — reabrir sem\n// dizer por quê é como não ter fechado.\n//\n// Fechado significa que nenhuma batida nem ajuste entra com data naquele mês; a\n// trava é de banco (trigger), não de tela.\n// ---------------------------------------------------------------------------\n\nfunction monthLabel(iso: string): string {\n return new Date(`${iso}T12:00:00`).toLocaleDateString('pt-BR', { month: 'long', year: 'numeric' })\n}\n\n/** Os últimos doze meses, do mais recente para trás. É o horizonte que o RH usa. */\nfunction lastMonths(count: number): string[] {\n const out: string[] = []\n const d = new Date()\n d.setDate(1)\n for (let i = 0; i < count; i++) {\n out.push(`${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-01`)\n d.setMonth(d.getMonth() - 1)\n }\n return out\n}\n\nexport function PeriodsView() {\n const provider = useWorkforceProvider()\n const periods = useWorkforceStore((s) => s.periods)\n const loading = useWorkforceStore((s) => s.periodsLoading)\n const fetchPeriods = useWorkforceStore((s) => s.fetchPeriods)\n\n const [dialog, setDialog] = React.useState<{ month: string; mode: 'close' | 'reopen' } | null>(null)\n const [text, setText] = React.useState('')\n const [busy, setBusy] = React.useState(false)\n\n React.useEffect(() => { void fetchPeriods() }, [fetchPeriods])\n\n const byMonth = React.useMemo(() => {\n const map = new Map<string, WorkforcePeriod>()\n for (const p of periods) map.set(p.competenceMonth, p)\n return map\n }, [periods])\n\n async function confirm() {\n if (!dialog) return\n if (dialog.mode === 'reopen' && !text.trim()) {\n toast.error('O motivo da reabertura é obrigatório.')\n return\n }\n setBusy(true)\n try {\n if (dialog.mode === 'close') await provider.closePeriod(dialog.month, text.trim() || undefined)\n else await provider.reopenPeriod(dialog.month, text.trim())\n await fetchPeriods()\n toast.success(dialog.mode === 'close' ? 'Competência fechada.' : 'Competência reaberta.')\n setDialog(null)\n setText('')\n } catch (e: any) {\n toast.error(e?.message ?? 'Não foi possível concluir.')\n } finally {\n setBusy(false)\n }\n }\n\n return (\n <div className=\"space-y-4 p-6\">\n <div>\n <h2 className=\"text-lg font-semibold\">Fechamento de competência</h2>\n <p className=\"text-sm text-muted-foreground\">\n Mês fechado não aceita batida nem ajuste com data dentro dele. A trava é do banco.\n </p>\n </div>\n\n {loading ? (\n <div className=\"space-y-2\"><Skeleton className=\"h-14 w-full\" /><Skeleton className=\"h-14 w-full\" /></div>\n ) : (\n <div className=\"divide-y divide-border rounded-xl border border-border\">\n {lastMonths(12).map((month) => {\n const period = byMonth.get(month)\n const closed = period?.status === 'closed'\n return (\n <div key={month} className=\"flex flex-wrap items-center justify-between gap-3 px-4 py-3\">\n <div className=\"flex items-center gap-3\">\n <CalendarCheck className=\"h-4 w-4 text-muted-foreground\" aria-hidden />\n <div>\n <div className=\"text-sm font-medium capitalize\">{monthLabel(month)}</div>\n <div className=\"text-xs text-muted-foreground\">\n {closed\n ? `Fechada em ${period?.closedAt ? new Date(period.closedAt).toLocaleDateString('pt-BR') : '—'}`\n : period?.reopenReason\n ? `Reaberta: ${period.reopenReason}`\n : 'Aberta'}\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Badge variant={closed ? 'success' : 'secondary'}>{closed ? 'Fechada' : 'Aberta'}</Badge>\n <Button\n size=\"sm\"\n variant={closed ? 'ghost' : 'secondary'}\n onClick={() => { setText(''); setDialog({ month, mode: closed ? 'reopen' : 'close' }) }}\n >\n {closed\n ? <><Unlock className=\"mr-1 h-3.5 w-3.5\" aria-hidden /> Reabrir</>\n : <><Lock className=\"mr-1 h-3.5 w-3.5\" aria-hidden /> Fechar</>}\n </Button>\n </div>\n </div>\n )\n })}\n </div>\n )}\n\n {dialog && (\n <Modal open onOpenChange={(o) => { if (!o) setDialog(null) }}>\n <ModalContent size=\"sm\">\n <ModalHeader>\n <ModalTitle>\n {dialog.mode === 'close' ? 'Fechar' : 'Reabrir'} {monthLabel(dialog.month)}\n </ModalTitle>\n </ModalHeader>\n <ModalBody>\n <Input\n value={text}\n onChange={(e) => setText(e.target.value)}\n placeholder={dialog.mode === 'close' ? 'Observação (opcional)' : 'Motivo da reabertura (obrigatório)'}\n />\n </ModalBody>\n <ModalFooter>\n <Button variant=\"ghost\" onClick={() => setDialog(null)}>Cancelar</Button>\n <Button onClick={confirm} disabled={busy}>Confirmar</Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { getSupabaseClientOptional } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// usePayrollAccounts — quais ramos do plano de contas são custo de pessoal\n// ---------------------------------------------------------------------------\n// Mesma forma do `useDeliverySettings` do plugin-orders, e pela mesma razão: é\n// UMA decisão da casa, guardada em `tenants.settings` pelas RPCs do spine\n// (`tenant_settings` para ler tudo, `tenant_setting_set` para gravar). A função\n// recusa chave não registrada e cobra `settings.manage` — a chave está\n// registrada em workforce/006.\n//\n// Sem escolha gravada o valor é `null`, e é DIFERENTE de `[]`: nulo é \"a casa\n// não disse\", e a tela mostra todas as despesas avisando que é o que está\n// fazendo. Um array vazio seria \"a casa disse que nada é pessoal\", que é uma\n// afirmação — e mostraria a tela vazia.\n\nconst KEY = 'workforce.payroll_account_codes'\n\nexport interface PayrollAccountsHandle {\n /** Os códigos escolhidos, ou null quando a casa nunca escolheu. */\n codes: string[] | null\n /** Grava (ou apaga, com null). */\n save: (next: string[] | null) => Promise<void>\n loading: boolean\n saving: boolean\n /** A gravação foi recusada — em geral falta `settings.manage`. */\n error: string | null\n /** Sem backend montado (mock/standalone): a tela não oferece o controle. */\n supported: boolean\n}\n\nfunction message(e: unknown): string {\n if (e instanceof Error) return e.message\n if (typeof e === 'object' && e && 'message' in e) return String((e as { message: unknown }).message)\n return String(e)\n}\n\nfunction normalize(value: unknown): string[] | null {\n if (!Array.isArray(value)) return null\n const codes = value.map((v) => String(v).trim()).filter(Boolean)\n return codes.length ? codes : null\n}\n\nexport function usePayrollAccounts(): PayrollAccountsHandle {\n const client = React.useMemo(() => getSupabaseClientOptional() as any, [])\n const supported = !!client\n\n const [codes, setCodes] = React.useState<string[] | null>(null)\n const [loading, setLoading] = React.useState(supported)\n const [saving, setSaving] = React.useState(false)\n const [error, setError] = React.useState<string | null>(null)\n\n React.useEffect(() => {\n if (!client) return\n let cancelled = false\n setLoading(true)\n void client\n .rpc('tenant_settings')\n .then(({ data, error: e }: { data: Record<string, unknown> | null; error: unknown }) => {\n if (cancelled || e) return\n setCodes(normalize((data ?? {})[KEY]))\n })\n // Leitura falhada cai em \"não escolheu\": a tela então mostra tudo e diz\n // isso, que é o mesmo comportamento seguro de uma casa sem escolha.\n .catch(() => {})\n .finally(() => { if (!cancelled) setLoading(false) })\n return () => { cancelled = true }\n }, [client])\n\n const save = React.useCallback(async (next: string[] | null) => {\n const value = next && next.length ? next : null\n setCodes(value)\n if (!client) return\n setError(null)\n setSaving(true)\n try {\n const { error: e } = await client.rpc('tenant_setting_set', { p_key: KEY, p_value: value })\n if (e) throw e\n } catch (e) {\n setError(message(e))\n } finally {\n setSaving(false)\n }\n }, [client])\n\n return { codes, save, loading, saving, error, supported }\n}\n","import React from 'react'\nimport { HandCoins, ExternalLink, ListTree, AlertTriangle } from 'lucide-react'\nimport type { AnalyticsDateRange, AnalyticsRow, AnalyticsStatementDef } from '@fayz-ai/core'\nimport {\n Button, Checkbox, DateRangeControl, PageToolbar, Popover, PopoverContent, PopoverTrigger,\n StatTiles, StatementTable, compareCodes, resolveRangePreset, type AnalyticsRangePreset,\n} from '@fayz-ai/ui'\nimport { adminNavigateTo, usePermissionOptional } from '@fayz-ai/admin'\nimport { formatCurrency, useWorkforceConfig, useWorkforceProvider } from '../context'\nimport { usePayrollAccounts } from '../settings/usePayrollAccounts'\nimport type { PayrollCostRow } from '../types'\n\n// ---------------------------------------------------------------------------\n// Encargos e Honorários — o custo de pessoal, LIDO, e desenhado como\n// demonstrativo.\n//\n// Este módulo não cria tabela de folha, e não escreve nada aqui. Quem lança\n// salário, encargo e honorário é o Financeiro, e o demonstrativo dele já sabe\n// onde cada despesa cai — `plg_financial_rep_dre`, a MESMA view do relatório de\n// DRE, agregada por conta × mês.\n//\n// Duplicar a escrita aqui daria dois livros para a mesma despesa, e a pergunta\n// \"quanto custou a equipe em março?\" passaria a ter duas respostas. Ler uma\n// segunda fonte daria o mesmo estrago mais devagar: era assim até 19/09/2026 —\n// esta tela somava `v_financial_invoice_lines` linha a linha, e as duas contas\n// podiam divergir sem que nada avisasse.\n//\n// ── Por que demonstrativo e não lista ──────────────────────────────────────\n//\n// A tela mostrava uma lista chapada por mês: `5.4.1 Freela Cozinha · R$ 57.289`\n// ao lado de `5 DESPESAS COM PESSOAL`, sem hierarquia, sem as mães e sem\n// comparação entre meses. O mesmo dado é um DEMONSTRATIVO — a árvore do plano de\n// contas, uma coluna por mês, o valor do pai somado dos filhos — e o SDK já tem\n// o componente que o desenha: `StatementTable`, o mesmo do relatório de DRE.\n// Aqui ele recebe uma seção só (despesa) e o recorte de pessoal.\n//\n// ── O recorte é uma DECLARAÇÃO da casa ─────────────────────────────────────\n//\n// Sem recorte esta tela somava aluguel, IPTU, ICMS e equipamentos sob o título\n// \"custo de pessoal\": no cluster onde isto foi medido, R$ 2.036.706 de despesa\n// classificada em 2026 contra R$ 511.131 do ramo de pessoal — quatro quintos do\n// total não eram gente. Qual ramo é pessoal só a casa sabe (aqui é `5`; o template\n// que o SDK semeia põe folha em `4.03`), então mora em `tenants.settings`:\n// `workforce.payroll_account_codes`, registrada em workforce/006.\n//\n// Nulo é \"não escolheu\", e a tela então mostra TODAS as despesas classificadas\n// AVISANDO que é o que está fazendo. Um padrão inventado ('5') mentiria com\n// convicção no primeiro plano que usa outro número.\n// ---------------------------------------------------------------------------\n\n/** A conta pertence ao recorte? `null` = sem recorte, tudo pertence. */\nfunction noEscopo(code: string, escopo: string[] | null): boolean {\n if (!escopo) return true\n return escopo.some((c) => code === c || code.startsWith(`${c}.`))\n}\n\n/** Um ancestral já escolhido cobre este código — o filho não precisa ser marcado. */\nfunction cobertoPorAncestral(code: string, escopo: string[]): boolean {\n return escopo.some((c) => c !== code && code.startsWith(`${c}.`))\n}\n\n/** Todo 1º de mês entre duas datas, inclusive — as colunas do demonstrativo.\n * É ela que diz qual COMPETÊNCIA está na tela — o seletor de período fala em\n * dias, e o demonstrativo responde em meses. */\nfunction mesesEntre(de: string, ate: string): string[] {\n const out: string[] = []\n const fim = new Date(`${ate.slice(0, 10)}T12:00:00`)\n const cursor = new Date(`${de.slice(0, 7)}-01T12:00:00`)\n while (cursor <= fim && out.length < 120) {\n out.push(`${cursor.getFullYear()}-${String(cursor.getMonth() + 1).padStart(2, '0')}-01`)\n cursor.setMonth(cursor.getMonth() + 1)\n }\n return out\n}\n\nconst MESES = ['jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez']\n\n/** '2026-09-01' → 'set/26'. Escrito à mão porque o `Intl` do pt-BR devolve\n * 'set. de 26', que num cabeçalho de coluna ocupa o triplo do espaço. */\nfunction monthLabel(iso: string): string {\n const [ano, mes] = iso.slice(0, 7).split('-')\n return `${MESES[Number(mes) - 1] ?? mes}/${ano.slice(2)}`\n}\n\n\n// Uma seção só: esta tela é o ramo de DESPESA do demonstrativo, não o resultado\n// do exercício. As linhas de total do DRE (\"= RESULTADO OPERACIONAL\") não têm\n// sentido aqui — não há receita para subtrair de nada.\nconst DEF: AnalyticsStatementDef = {\n codeKey: 'statement_code',\n labelKey: 'statement_name',\n periodKey: 'competence_month',\n valueKey: 'amount',\n sectionKey: 'direction',\n sections: [\n {\n value: 'payable',\n label: 'Despesas',\n // A linha sem conta é uma linha de verdade. Escondê-la faria a soma da\n // árvore não fechar com o total do rodapé.\n unclassifiedLabel: 'Sem classificação',\n },\n ],\n lines: [\n { kind: 'section', section: 'payable' },\n { kind: 'total', label: 'TOTAL NO PERÍODO', of: { payable: 1 }, emphasis: 'rule' },\n ],\n defaultDepth: 1,\n}\n\nexport function PayrollCostsView() {\n const provider = useWorkforceProvider()\n const { currency } = useWorkforceConfig()\n const can = usePermissionOptional()\n const podeConfigurar = can('settings', 'manage')\n const escopoStore = usePayrollAccounts()\n\n // O mesmo controle de período das outras telas — ver TimeEntriesView.\n const [preset, setPreset] = React.useState<AnalyticsRangePreset | 'custom'>('this_month')\n const [range, setRange] = React.useState<AnalyticsDateRange>(() => resolveRangePreset('this_month'))\n const from = range.from\n const to = range.to\n const [rows, setRows] = React.useState<PayrollCostRow[] | null>(null)\n const [unavailable, setUnavailable] = React.useState(false)\n const [loading, setLoading] = React.useState(true)\n // O \"atualizar\" da barra refaz a MESMA leitura sem trocar o período. Um\n // contador é o gatilho mais honesto: o efeito abaixo é quem sabe carregar,\n // e duplicar essa lógica num handler é como as duas se separam.\n const [recarga, setRecarga] = React.useState(0)\n\n React.useEffect(() => {\n let cancelled = false\n setLoading(true)\n const load = provider.getPayrollCosts\n if (!load) {\n setUnavailable(true)\n setLoading(false)\n return\n }\n // Estrutura e movimento vêm na MESMA resposta: a linha sem mês é a conta do\n // plano (\"existe, não teve movimento\"), a linha com mês é o lançamento.\n load({ from, to })\n .then((r) => {\n if (cancelled) return\n setRows(r)\n setUnavailable(false)\n })\n // Cluster sem o Financeiro instalado: a tela se explica em vez de quebrar.\n .catch(() => { if (!cancelled) setUnavailable(true) })\n .finally(() => { if (!cancelled) setLoading(false) })\n return () => { cancelled = true }\n }, [provider, from, to, recarga])\n\n const escopo = escopoStore.codes\n\n /** O plano de despesa, para o seletor: as linhas de estrutura da resposta. */\n const despesas = React.useMemo(\n () => (rows ?? [])\n .filter((r) => r.competenceMonth === null && r.chartAccountCode)\n .map((r) => ({ code: r.chartAccountCode as string, name: r.chartAccountName }))\n .sort((a, b) => compareCodes(a.code, b.code)),\n [rows],\n )\n\n /** O que o período mediu, dentro do recorte. A linha SEM conta não pertence a\n * ramo nenhum: ela entra quando não há recorte (a tela mostra tudo e avisa) e\n * fica de fora quando a casa declarou quais ramos são pessoal. */\n const movimento = React.useMemo(\n () => (rows ?? []).filter((r) => r.competenceMonth !== null\n && (r.chartAccountCode ? noEscopo(r.chartAccountCode, escopo) : !escopo)),\n [rows, escopo],\n )\n\n const analyticsRows = React.useMemo<AnalyticsRow[]>(() => {\n const out: AnalyticsRow[] = []\n // ESTRUTURA: a conta existe e pode não ter tido movimento. Sem mês, de\n // propósito — cria o nó na árvore e não cria coluna (ver `buildStatement`).\n for (const a of despesas) {\n if (!noEscopo(a.code, escopo)) continue\n out.push({\n direction: 'payable',\n statement_code: a.code,\n statement_name: a.name,\n competence_month: null,\n amount: 0,\n })\n }\n // MOVIMENTO. Sem código é a linha \"sem classificação\" do demonstrativo —\n // uma despesa lançada em conta que não é de despesa. Fica à vista e dentro\n // do total: escondê-la faria a árvore não fechar com o rodapé.\n for (const r of movimento) {\n out.push({\n direction: 'payable',\n statement_code: r.chartAccountCode ?? '',\n statement_name: r.chartAccountName,\n competence_month: r.competenceMonth,\n amount: r.total,\n })\n }\n return out\n }, [despesas, movimento, escopo])\n\n const total = movimento.reduce((s, r) => s + r.total, 0)\n const meses = new Set(movimento.map((r) => r.competenceMonth)).size\n\n // O que a tela REALMENTE mediu. O demonstrativo é por competência mensal, e o\n // seletor de período fala em dias: \"últimos 7 dias\" traz o mês inteiro. Dizer\n // qual competência está na tela custa uma linha e evita que alguém leia o\n // total de setembro como o total de uma semana.\n const competencia = React.useMemo(() => {\n const ms = mesesEntre(from, to)\n if (ms.length === 0) return null\n return ms.length === 1\n ? monthLabel(ms[0])\n : `${monthLabel(ms[0])} a ${monthLabel(ms[ms.length - 1])}`\n }, [from, to])\n\n return (\n <div className=\"space-y-4 p-6\">\n {/* A MESMA banda dos Registros de Ponto, com os MESMOS controles: sem o\n \"atualizar\" aqui, a única forma de refazer a leitura era trocar o\n período e voltar — duas telas irmãs do mesmo módulo respondendo\n diferente ao mesmo gesto. */}\n <PageToolbar\n range={\n <DateRangeControl value={range} onChange={setRange} preset={preset} onPresetChange={setPreset} />\n }\n onRefresh={() => setRecarga((n) => n + 1)}\n />\n <div className=\"flex flex-wrap items-end justify-between gap-3\">\n <div>\n <h2 className=\"text-lg font-semibold\">Encargos e honorários</h2>\n <p className=\"text-sm text-muted-foreground\">\n O custo de pessoal como o Financeiro o registrou, na árvore do plano de contas.\n Esta tela só lê — o lançamento continua sendo lá.\n </p>\n {competencia ? (\n <p className=\"mt-0.5 text-xs text-muted-foreground\">\n Competência <span className=\"font-medium\">{competencia}</span> — o\n demonstrativo é mensal, e o período escolhido vira meses inteiros.\n </p>\n ) : null}\n </div>\n <div className=\"flex items-center gap-2\">\n {unavailable ? null : (\n <EscopoPopover\n contas={despesas}\n escopo={escopo}\n podeConfigurar={podeConfigurar}\n store={escopoStore}\n />\n )}\n <Button variant=\"secondary\" onClick={() => adminNavigateTo('/financial')}>\n <ExternalLink className=\"mr-1 h-4 w-4\" aria-hidden /> Abrir Financeiro\n </Button>\n </div>\n </div>\n\n {unavailable ? (\n <div className=\"rounded-xl border border-dashed border-border p-8 text-center\">\n <HandCoins className=\"mx-auto mb-3 h-8 w-8 text-muted-foreground\" aria-hidden />\n <p className=\"text-sm text-muted-foreground\">\n O razão do Financeiro não está disponível neste ambiente — instale o módulo Financeiro\n para ver o custo de pessoal aqui.\n </p>\n </div>\n ) : (\n <>\n {/* O aviso é a parte não-cosmética da tela: sem recorte o total inclui\n aluguel e imposto, e quem lê precisa saber disso ANTES do número. */}\n {!escopoStore.loading && !escopo ? (\n <div className=\"flex items-start gap-3 rounded-xl border border-warning/40 bg-warning/5 p-4\">\n <AlertTriangle className=\"mt-0.5 h-4 w-4 shrink-0 text-warning\" aria-hidden />\n <div className=\"space-y-1 text-sm\">\n <p className=\"font-medium\">Nenhum ramo de pessoal escolhido.</p>\n <p className=\"text-muted-foreground\">\n O demonstrativo abaixo soma <strong>todas</strong> as despesas classificadas em\n conta contábil — inclusive aluguel, imposto e equipamento. Escolha em{' '}\n <span className=\"whitespace-nowrap font-medium\">Contas de pessoal</span> os ramos\n do seu plano que são gente, e o total passa a valer como custo de equipe.\n </p>\n </div>\n </div>\n ) : null}\n\n <StatTiles\n loading={loading}\n tiles={[\n { id: 'total', label: 'Total no período', value: formatCurrency(total, currency) },\n { id: 'months', label: 'Competências', value: String(meses) },\n {\n id: 'avg',\n label: 'Média mensal',\n value: meses > 0 ? formatCurrency(total / meses, currency) : formatCurrency(0, currency),\n },\n ]}\n />\n\n <StatementTable\n rows={analyticsRows}\n def={DEF}\n currency={currency}\n formatPeriod={monthLabel}\n accountLabel=\"Conta\"\n totalLabel=\"Período\"\n emptyMessage=\"Nenhuma despesa classificada em conta contábil no período.\"\n loading={loading}\n />\n </>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// O recorte, escolhido na árvore\n// ---------------------------------------------------------------------------\n\nfunction EscopoPopover({\n contas, escopo, podeConfigurar, store,\n}: {\n contas: { code: string; name: string }[]\n escopo: string[] | null\n podeConfigurar: boolean\n store: ReturnType<typeof usePayrollAccounts>\n}) {\n const marcados = React.useMemo(() => new Set(escopo ?? []), [escopo])\n\n const alterna = (code: string) => {\n const next = new Set(marcados)\n if (next.has(code)) next.delete(code)\n else {\n // Marcar um pai dispensa os filhos: o código carrega a descendência, e\n // guardar as duas coisas faria a configuração envelhecer a cada conta\n // nova criada dentro do ramo.\n for (const c of [...next]) if (c.startsWith(`${code}.`)) next.delete(c)\n next.add(code)\n }\n void store.save([...next].sort(compareCodes))\n }\n\n const rotulo = escopo\n ? `${escopo.length} ${escopo.length === 1 ? 'ramo' : 'ramos'} de pessoal`\n : 'Contas de pessoal'\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button variant={escopo ? 'secondary' : 'default'}>\n <ListTree className=\"mr-1 h-4 w-4\" aria-hidden /> {rotulo}\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-[26rem] p-0\">\n <div className=\"border-b p-3\">\n <p className=\"text-sm font-medium\">O que é custo de pessoal</p>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Marque os ramos do seu plano de contas. Um ramo marcado traz toda a descendência —\n inclusive contas criadas depois.\n </p>\n </div>\n <div className=\"max-h-80 overflow-y-auto py-1\">\n {contas.length === 0 ? (\n <p className=\"p-3 text-xs text-muted-foreground\">\n Nenhuma conta de despesa ativa no plano.\n </p>\n ) : (\n contas.map((c) => {\n const depth = c.code.split('.').length - 1\n const herdado = cobertoPorAncestral(c.code, [...marcados])\n const checked = marcados.has(c.code) || herdado\n return (\n <label\n key={c.code}\n className=\"flex cursor-pointer items-center gap-2 px-3 py-1.5 text-sm hover:bg-muted/50\"\n style={{ paddingLeft: `${12 + depth * 14}px` }}\n >\n <Checkbox\n checked={checked}\n // Herdado do pai: desmarcar aqui não faria nada, então o\n // controle diz que a escolha é lá em cima.\n disabled={!podeConfigurar || store.saving || herdado}\n onChange={() => alterna(c.code)}\n />\n <span className=\"w-16 shrink-0 font-mono text-xs text-muted-foreground\">{c.code}</span>\n <span className=\"truncate\">{c.name}</span>\n </label>\n )\n })\n )}\n </div>\n <div className=\"flex items-center justify-between gap-2 border-t p-3\">\n <span className=\"text-xs text-muted-foreground\">\n {!podeConfigurar\n ? 'Só quem tem settings.manage pode mudar isto.'\n : store.error\n ? store.error\n : store.saving\n ? 'Salvando…'\n : 'Salva sozinho, para toda a casa.'}\n </span>\n {escopo && podeConfigurar ? (\n <Button variant=\"ghost\" size=\"sm\" onClick={() => void store.save(null)}>\n Limpar\n </Button>\n ) : null}\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n","import React from 'react'\nimport { CalendarClock, CakeSlice, UserMinus, UserPlus, Users, AlertTriangle, ShieldAlert, Plane, Stethoscope, ClipboardList, Plus } from 'lucide-react'\nimport {\n Badge, Button, Checkbox, Input, Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter,\n Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Skeleton, toast,\n} from '@fayz-ai/ui'\nimport { PersonLink } from '@fayz-ai/admin'\nimport { useWorkforceConfig, useWorkforceProvider } from '../context'\nimport type {\n Absence, AbsenceKind, ContractKind, Employment, HrOverview, HrUpcoming, WorkforcePerson,\n PayFrequency, PendingItem, PendingPriority, ScheduleRegime, Vacation, VacationStatus,\n} from '../types'\n\n// ---------------------------------------------------------------------------\n// Recursos Humanos.\n//\n// Portado de `~/dev/beautyplace/docs/v1-guide/rh`, e é o NÚCLEO do módulo do V1,\n// não a cópia dele. O V1 tem dezesseis vistas na ficha; doze estão vazias no\n// banco inteiro — não \"vazias nesses tenants\", vazias em produção — e portar\n// formulário para zero linha é construir tela por leitura de documento.\n//\n// Ficam as quatro que sustentam os números e a rotina:\n//\n// Vínculo de onde saem headcount, admissões, demissões, turnover e\n// experiência vencendo. Sem ele nenhum número de RH existe\n// Férias obrigação legal, recorrente, e a única lista do V1 que\n// alimenta um cartão do painel\n// Afastamentos e aqui o V2 faz o que o V1 não faz: ver o comentário em\n// `v_workforce_day` da migration 005\n// Pendências a outra lista que o painel cobra\n//\n// A TELA É UMA SÓ, e isso é decisão. O V1 separa o painel (`/rh`) da ficha\n// (dentro do cadastro da pessoa), e o próprio FLOW anota que nenhum cartão e\n// nenhuma linha do painel é clicável — \"daqui não se chega à ficha da pessoa\".\n// Ler que três pessoas têm férias vencendo e ter de procurar cada uma noutra\n// tela é o gesto que a divisão custa. Aqui o painel é a porta: clicar no nome\n// abre a ficha embaixo.\n// ---------------------------------------------------------------------------\n\nconst CONTRATO: Record<ContractKind, string> = {\n clt: 'CLT', pj: 'PJ', estagio: 'Estágio', jovem_aprendiz: 'Jovem Aprendiz',\n autonomo: 'Autônomo', socio: 'Sócio', temporario: 'Temporário', intermitente: 'Intermitente',\n}\nconst REGIME: Record<ScheduleRegime, string> = {\n mensalista: 'Mensalista', horista: 'Horista', diarista: 'Diarista',\n escala_12x36: 'Escala 12x36', escala_6x1: 'Escala 6x1', escala_5x2: 'Escala 5x2',\n}\nconst PAGAMENTO: Record<PayFrequency, string> = {\n mensal: 'Mensal', quinzenal: 'Quinzenal', semanal: 'Semanal', diario: 'Diário', por_hora: 'Por hora',\n}\nconst FERIAS: Record<VacationStatus, string> = {\n pendente: 'Pendente', programada: 'Programada', em_gozo: 'Em gozo',\n concluida: 'Concluída', vencida: 'Vencida',\n}\nexport const AFASTAMENTO: Record<AbsenceKind, string> = {\n falta_justificada: 'Falta justificada', falta_injustificada: 'Falta injustificada',\n atestado: 'Atestado médico', licenca_maternidade: 'Licença maternidade',\n licenca_paternidade: 'Licença paternidade', licenca_nao_remunerada: 'Licença não remunerada',\n suspensao: 'Suspensão', ferias: 'Férias', afastamento_inss: 'Afastamento INSS',\n}\nconst PRIORIDADE: Record<PendingPriority, string> = {\n baixa: 'Baixa', normal: 'Normal', alta: 'Alta', urgente: 'Urgente',\n}\n\nfunction dm(iso?: string | null): string {\n if (!iso) return '—'\n const [a, m, d] = iso.slice(0, 10).split('-')\n return `${d}/${m}/${a}`\n}\n\n/** Um cartão de número. Zero é resposta, não ausência — ver o comentário abaixo. */\nfunction Cartao({ icon: Icon, label, value, alerta }: {\n icon: React.ComponentType<{ className?: string }>\n label: string\n value: React.ReactNode\n alerta?: boolean\n}) {\n return (\n <div className=\"rounded-xl border border-border p-4\">\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <Icon className=\"h-3.5 w-3.5\" aria-hidden /> {label}\n </div>\n <div className={`mt-1 text-2xl font-semibold tabular-nums ${alerta ? 'text-destructive' : ''}`}>\n {value}\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// O painel\n// ---------------------------------------------------------------------------\n\nfunction Painel({ overview, upcoming, onPessoa }: {\n overview: HrOverview\n upcoming: HrUpcoming[]\n onPessoa: (id: string) => void\n}) {\n // Turnover é conta de tela de propósito: a view devolve as duas parcelas, e\n // dividir aqui evita uma coluna que mente quando o headcount é zero.\n const turnover = overview.headcount > 0\n ? ((overview.dismissals30d / overview.headcount) * 100).toFixed(1)\n : null\n\n const porEspecie = (k: HrUpcoming['kind']) => upcoming.filter((u) => u.kind === k).slice(0, 10)\n\n const listas: Array<{ kind: HrUpcoming['kind']; titulo: string; vazio: string }> = [\n { kind: 'vacation', titulo: 'Férias a vencer', vazio: 'Nenhuma.' },\n { kind: 'probation', titulo: 'Experiência vencendo', vazio: 'Nenhuma.' },\n { kind: 'pending', titulo: 'Pendências críticas', vazio: 'Nenhuma.' },\n ]\n\n return (\n <div className=\"space-y-4\">\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n <Cartao icon={Users} label=\"Headcount ativo\" value={overview.headcount} />\n <Cartao icon={UserPlus} label=\"Admissões (30d)\" value={overview.admissions30d} />\n <Cartao icon={UserMinus} label=\"Demissões (30d)\" value={overview.dismissals30d} />\n <Cartao icon={AlertTriangle} label=\"Turnover (30d)\" value={turnover != null ? `${turnover}%` : '—'} />\n <Cartao icon={CakeSlice} label=\"Aniversariantes do mês\" value={overview.birthdaysThisMonth} />\n <Cartao icon={Plane} label=\"Férias vencendo (60d)\" value={overview.vacationsDue60d}\n alerta={overview.vacationsDue60d > 0} />\n <Cartao icon={CalendarClock} label=\"Experiência vencendo\" value={overview.probationEnding}\n alerta={overview.probationEnding > 0} />\n <Cartao icon={ShieldAlert} label=\"Pendências críticas\" value={overview.criticalPending}\n alerta={overview.criticalPending > 0} />\n </div>\n\n <div className=\"grid gap-3 lg:grid-cols-3\">\n {listas.map(({ kind, titulo, vazio }) => {\n const itens = porEspecie(kind)\n return (\n <div key={kind} className=\"overflow-hidden rounded-xl border border-border\">\n <div className=\"border-b border-border bg-muted/40 px-4 py-2 text-sm font-medium\">{titulo}</div>\n {itens.length === 0 ? (\n <p className=\"px-4 py-3 text-sm text-muted-foreground\">{vazio}</p>\n ) : (\n <ul className=\"divide-y divide-border\">\n {itens.map((u, i) => (\n <li key={`${u.personId}|${u.dueOn}|${i}`} className=\"flex items-center justify-between gap-2 px-4 py-2 text-sm\">\n {/* O NOME, que o V1 não mostra nesta lista (V1-073) — lá\n são só datas, e descobrir de quem é exige outra tela. */}\n <Button variant=\"bare\" size=\"bare\" type=\"button\" onClick={() => onPessoa(u.personId)}\n className=\"truncate text-left underline decoration-dashed decoration-muted-foreground/40 underline-offset-2 hover:text-primary block font-normal\">\n {u.personName ?? 'Sem nome'}\n </Button>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">{dm(u.dueOn)}</span>\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// A ficha de uma pessoa\n// ---------------------------------------------------------------------------\n\nfunction CampoData({ label, value, onChange }: { label: string; value?: string | null; onChange: (v: string) => void }) {\n return (\n <label className=\"block\">\n <span className=\"mb-1 block text-xs text-muted-foreground\">{label}</span>\n <Input type=\"date\" value={value ?? ''} onChange={(e) => onChange(e.target.value)} />\n </label>\n )\n}\n\nfunction Vinculo({ personId }: { personId: string }) {\n const provider = useWorkforceProvider()\n const { currency } = useWorkforceConfig()\n const [form, setForm] = React.useState<Employment>({ personId })\n const [busy, setBusy] = React.useState(false)\n const [carregando, setCarregando] = React.useState(true)\n\n React.useEffect(() => {\n let vivo = true\n setCarregando(true)\n provider.getEmployment(personId)\n .then((e) => { if (vivo) { setForm(e ?? { personId }); setCarregando(false) } })\n .catch(() => { if (vivo) { setForm({ personId }); setCarregando(false) } })\n return () => { vivo = false }\n }, [provider, personId])\n\n const set = <K extends keyof Employment>(k: K, v: Employment[K]) => setForm((f) => ({ ...f, [k]: v }))\n\n async function salvar() {\n setBusy(true)\n try {\n await provider.saveEmployment({ ...form, personId })\n toast.success('Vínculo salvo.')\n } catch (e: any) {\n toast.error('Não deu para salvar', { description: e?.message })\n } finally {\n setBusy(false)\n }\n }\n\n if (carregando) return <Skeleton className=\"h-48 w-full\" />\n\n return (\n <div className=\"space-y-3 rounded-xl border border-border p-4\">\n <h4 className=\"text-sm font-semibold\">Vínculo</h4>\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n <label className=\"block\">\n <span className=\"mb-1 block text-xs text-muted-foreground\">Tipo de contrato</span>\n <Select value={form.contractKind ?? ''} onValueChange={(v) => set('contractKind', v as ContractKind)}>\n <SelectTrigger><SelectValue placeholder=\"—\" /></SelectTrigger>\n <SelectContent>\n {Object.entries(CONTRATO).map(([k, r]) => <SelectItem key={k} value={k}>{r}</SelectItem>)}\n </SelectContent>\n </Select>\n </label>\n <CampoData label=\"Admissão\" value={form.admissionDate} onChange={(v) => set('admissionDate', v)} />\n <CampoData label=\"Demissão\" value={form.dismissalDate} onChange={(v) => set('dismissalDate', v)} />\n <CampoData label=\"Fim da experiência\" value={form.probationFinalEnd} onChange={(v) => set('probationFinalEnd', v)} />\n <label className=\"block\">\n <span className=\"mb-1 block text-xs text-muted-foreground\">Cargo</span>\n <Input value={form.jobTitle ?? ''} onChange={(e) => set('jobTitle', e.target.value)} />\n </label>\n <label className=\"block\">\n <span className=\"mb-1 block text-xs text-muted-foreground\">Setor</span>\n <Input value={form.department ?? ''} onChange={(e) => set('department', e.target.value)} />\n </label>\n <label className=\"block\">\n <span className=\"mb-1 block text-xs text-muted-foreground\">Regime de jornada</span>\n <Select value={form.scheduleRegime ?? ''} onValueChange={(v) => set('scheduleRegime', v as ScheduleRegime)}>\n <SelectTrigger><SelectValue placeholder=\"—\" /></SelectTrigger>\n <SelectContent>\n {Object.entries(REGIME).map(([k, r]) => <SelectItem key={k} value={k}>{r}</SelectItem>)}\n </SelectContent>\n </Select>\n </label>\n <label className=\"block\">\n <span className=\"mb-1 block text-xs text-muted-foreground\">Horas semanais</span>\n <Input type=\"number\" value={form.weeklyHours ?? ''} onChange={(e) => set('weeklyHours', e.target.value ? Number(e.target.value) : null)} />\n </label>\n <label className=\"block\">\n <span className=\"mb-1 block text-xs text-muted-foreground\">Salário base ({currency.symbol})</span>\n <Input type=\"number\" step=\"0.01\" value={form.baseSalary ?? ''} onChange={(e) => set('baseSalary', e.target.value ? Number(e.target.value) : null)} />\n </label>\n <label className=\"block\">\n <span className=\"mb-1 block text-xs text-muted-foreground\">Forma de pagamento</span>\n <Select value={form.payFrequency ?? ''} onValueChange={(v) => set('payFrequency', v as PayFrequency)}>\n <SelectTrigger><SelectValue placeholder=\"—\" /></SelectTrigger>\n <SelectContent>\n {Object.entries(PAGAMENTO).map(([k, r]) => <SelectItem key={k} value={k}>{r}</SelectItem>)}\n </SelectContent>\n </Select>\n </label>\n </div>\n {/* A frase que o V1 não escreve e que o FLOW teve de transcrever: estes\n valores não viram lançamento. Sem ela alguém espera o salário na conta\n a pagar do mês seguinte. */}\n <p className=\"text-xs text-muted-foreground\">\n Salário e auxílios são <b>valores de referência</b>: não viram conta a pagar, comissão nem desconto.\n </p>\n <div className=\"flex justify-end\">\n <Button onClick={salvar} disabled={busy}>Salvar vínculo</Button>\n </div>\n </div>\n )\n}\n\n/** Uma lista da ficha: cabeçalho, linhas e o diálogo de lançamento. */\nfunction Lista({ titulo, icon: Icon, itens, vazio, onNovo, children }: {\n titulo: string\n icon: React.ComponentType<{ className?: string }>\n itens: unknown[]\n vazio: string\n onNovo: () => void\n children: React.ReactNode\n}) {\n return (\n <div className=\"overflow-hidden rounded-xl border border-border\">\n <div className=\"flex items-center justify-between gap-2 border-b border-border bg-muted/40 px-4 py-2\">\n <span className=\"flex items-center gap-2 text-sm font-medium\">\n <Icon className=\"h-4 w-4 text-muted-foreground\" aria-hidden /> {titulo}\n </span>\n <Button size=\"sm\" variant=\"outline\" onClick={onNovo}>\n <Plus className=\"mr-1 h-3.5 w-3.5\" aria-hidden /> Novo\n </Button>\n </div>\n {itens.length === 0\n ? <p className=\"px-4 py-3 text-sm text-muted-foreground\">{vazio}</p>\n : <ul className=\"divide-y divide-border\">{children}</ul>}\n </div>\n )\n}\n\nfunction Ficha({ personId, personName }: { personId: string; personName?: string | null }) {\n const provider = useWorkforceProvider()\n const [ferias, setFerias] = React.useState<Vacation[]>([])\n const [faltas, setFaltas] = React.useState<Absence[]>([])\n const [pendencias, setPendencias] = React.useState<PendingItem[]>([])\n const [dialogo, setDialogo] = React.useState<'ferias' | 'falta' | 'pendencia' | null>(null)\n\n const recarregar = React.useCallback(() => {\n provider.getVacations(personId).then(setFerias).catch(() => setFerias([]))\n provider.getAbsences(personId).then(setFaltas).catch(() => setFaltas([]))\n provider.getPendingItems(personId).then(setPendencias).catch(() => setPendencias([]))\n }, [provider, personId])\n\n React.useEffect(() => { recarregar() }, [recarregar])\n\n return (\n <div className=\"space-y-3\">\n <h3 className=\"text-base font-semibold\">{personName ?? 'Ficha'}</h3>\n <Vinculo personId={personId} />\n\n <div className=\"grid gap-3 lg:grid-cols-3\">\n <Lista titulo=\"Férias\" icon={Plane} itens={ferias} vazio=\"Nenhum registro.\"\n onNovo={() => setDialogo('ferias')}>\n {ferias.map((v) => (\n <li key={v.id} className=\"flex items-center justify-between gap-2 px-4 py-2 text-sm\">\n <span className=\"truncate\">{dm(v.accrualStart)} – {dm(v.accrualEnd)}</span>\n <Badge variant={v.status === 'concluida' ? 'secondary' : v.status === 'vencida' ? 'destructive' : 'outline'}>\n {FERIAS[v.status]}\n </Badge>\n </li>\n ))}\n </Lista>\n\n <Lista titulo=\"Afastamentos\" icon={Stethoscope} itens={faltas} vazio=\"Nenhum registro.\"\n onNovo={() => setDialogo('falta')}>\n {faltas.map((a) => (\n <li key={a.id} className=\"flex items-center justify-between gap-2 px-4 py-2 text-sm\">\n <span className=\"truncate\">{AFASTAMENTO[a.kind]}</span>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">\n {dm(a.startsOn)}{a.endsOn ? ` – ${dm(a.endsOn)}` : ''}\n </span>\n </li>\n ))}\n </Lista>\n\n <Lista titulo=\"Pendências\" icon={ClipboardList} itens={pendencias} vazio=\"Nenhum registro.\"\n onNovo={() => setDialogo('pendencia')}>\n {pendencias.map((p) => (\n <li key={p.id} className=\"flex items-center justify-between gap-2 px-4 py-2 text-sm\">\n <label className=\"flex min-w-0 items-center gap-2\">\n <Checkbox\n checked={!!p.resolvedAt}\n onChange={(checked) => void provider.resolvePendingItem(p.id!, checked).then(recarregar)}\n />\n <span className={`truncate ${p.resolvedAt ? 'text-muted-foreground line-through' : ''}`}>{p.title}</span>\n </label>\n {!p.resolvedAt && (p.priority === 'alta' || p.priority === 'urgente') && (\n <Badge variant=\"destructive\">{PRIORIDADE[p.priority]}</Badge>\n )}\n </li>\n ))}\n </Lista>\n </div>\n\n {dialogo && (\n <DialogoLancamento\n tipo={dialogo}\n personId={personId}\n onClose={() => setDialogo(null)}\n onSaved={() => { setDialogo(null); recarregar() }}\n />\n )}\n </div>\n )\n}\n\n/** Um diálogo para as três listas. As três têm a mesma forma: datas e um tipo. */\nfunction DialogoLancamento({ tipo, personId, onClose, onSaved }: {\n tipo: 'ferias' | 'falta' | 'pendencia'\n personId: string\n onClose: () => void\n onSaved: () => void\n}) {\n const provider = useWorkforceProvider()\n const [busy, setBusy] = React.useState(false)\n const [de, setDe] = React.useState('')\n const [ate, setAte] = React.useState('')\n const [kind, setKind] = React.useState<AbsenceKind>('atestado')\n const [titulo, setTitulo] = React.useState('')\n const [prioridade, setPrioridade] = React.useState<PendingPriority>('normal')\n\n const rotulo = tipo === 'ferias' ? 'Período de férias'\n : tipo === 'falta' ? 'Afastamento' : 'Pendência'\n\n async function salvar() {\n setBusy(true)\n try {\n if (tipo === 'ferias') {\n if (!de || !ate) { toast.error('O período aquisitivo é obrigatório.'); return }\n await provider.saveVacation({ personId, accrualStart: de, accrualEnd: ate, status: 'pendente' })\n } else if (tipo === 'falta') {\n if (!de) { toast.error('A data de início é obrigatória.'); return }\n await provider.saveAbsence({ personId, kind, startsOn: de, endsOn: ate || null, paid: true })\n } else {\n if (!titulo.trim()) { toast.error('A pendência precisa de um título.'); return }\n await provider.savePendingItem({ personId, title: titulo.trim(), priority: prioridade, dueOn: de || null })\n }\n toast.success(`${rotulo} lançado.`)\n onSaved()\n } catch (e: any) {\n toast.error('Não deu para salvar', { description: e?.message })\n } finally {\n setBusy(false)\n }\n }\n\n return (\n <Modal open onOpenChange={(o) => { if (!o) onClose() }}>\n <ModalContent>\n {/* \"Novo período de férias\", e não \"Novo Férias\". O V1 monta este título\n por concatenação e sai com a concordância errada — V1-076. */}\n <ModalHeader><ModalTitle>Novo {rotulo.toLowerCase()}</ModalTitle></ModalHeader>\n <ModalBody className=\"space-y-3\">\n {tipo === 'falta' && (\n <Select value={kind} onValueChange={(v) => setKind(v as AbsenceKind)}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {Object.entries(AFASTAMENTO).map(([k, r]) => <SelectItem key={k} value={k}>{r}</SelectItem>)}\n </SelectContent>\n </Select>\n )}\n {tipo === 'pendencia' && (\n <>\n <Input value={titulo} onChange={(e) => setTitulo(e.target.value)} placeholder=\"O que falta (obrigatório)\" />\n <Select value={prioridade} onValueChange={(v) => setPrioridade(v as PendingPriority)}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {Object.entries(PRIORIDADE).map(([k, r]) => <SelectItem key={k} value={k}>{r}</SelectItem>)}\n </SelectContent>\n </Select>\n </>\n )}\n <CampoData\n label={tipo === 'ferias' ? 'Início aquisitivo' : tipo === 'falta' ? 'Início' : 'Prazo'}\n value={de} onChange={setDe}\n />\n {tipo !== 'pendencia' && (\n <CampoData label={tipo === 'ferias' ? 'Fim aquisitivo' : 'Fim'} value={ate} onChange={setAte} />\n )}\n </ModalBody>\n <ModalFooter>\n <Button variant=\"ghost\" onClick={onClose}>Cancelar</Button>\n <Button onClick={salvar} disabled={busy}>Salvar</Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n\n// ---------------------------------------------------------------------------\n\nexport function HrView() {\n const provider = useWorkforceProvider()\n const { staffLookup } = useWorkforceConfig()\n const [overview, setOverview] = React.useState<HrOverview | null>(null)\n const [upcoming, setUpcoming] = React.useState<HrUpcoming[]>([])\n const [equipe, setEquipe] = React.useState<WorkforcePerson[]>([])\n const [loading, setLoading] = React.useState(true)\n const [pessoa, setPessoa] = React.useState<{ id: string; name?: string | null } | null>(null)\n\n React.useEffect(() => {\n let vivo = true\n Promise.all([provider.getHrOverview(), provider.getHrUpcoming(), provider.getStaff()])\n .then(([o, u, e]) => { if (vivo) { setOverview(o); setUpcoming(u); setEquipe(e); setLoading(false) } })\n .catch(() => { if (vivo) { setOverview(null); setUpcoming([]); setEquipe([]); setLoading(false) } })\n return () => { vivo = false }\n }, [provider])\n\n const nomeDe = React.useCallback(\n (id: string) => upcoming.find((u) => u.personId === id)?.personName ?? null,\n [upcoming],\n )\n\n if (loading) return <div className=\"space-y-3\"><Skeleton className=\"h-28 w-full\" /><Skeleton className=\"h-40 w-full\" /></div>\n\n return (\n <div className=\"space-y-4\">\n {/* O seletor fica em cima, sempre — inclusive quando há painel.\n Sem ele a tela vazia é um beco: ela manda abrir a ficha \"pelo\n cadastro\" e não diz como, que é literalmente a crítica que o FLOW faz\n ao V1 (\"daqui não se chega à ficha da pessoa\"). Uma ficha nasce aqui. */}\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">Abrir a ficha de</span>\n <Select value={pessoa?.id ?? ''} onValueChange={(id) => {\n const p = equipe.find((x) => x.id === id)\n setPessoa({ id, name: p?.name ?? nomeDe(id) })\n }}>\n <SelectTrigger className=\"w-72\">\n <SelectValue placeholder={equipe.length ? 'Escolha alguém da equipe…' : 'Nenhuma pessoa cadastrada'} />\n </SelectTrigger>\n <SelectContent>\n {equipe.map((p) => <SelectItem key={p.id} value={p.id}>{p.name ?? 'Sem nome'}</SelectItem>)}\n </SelectContent>\n </Select>\n </div>\n\n {overview\n ? <Painel overview={overview} upcoming={upcoming} onPessoa={(id) => setPessoa({ id, name: nomeDe(id) })} />\n : (\n // `null` aqui não é erro: `v_workforce_hr_overview` agrupa por tenant e\n // só devolve linha quando existe ao menos um VÍNCULO. Ninguém com\n // vínculo = nada para agrupar. Dizer \"nenhuma ficha ainda\" é a leitura\n // certa; um painel de zeros diria que o time tem zero pessoas.\n <div className=\"rounded-xl border border-dashed border-border p-8 text-center\">\n <Users className=\"mx-auto mb-3 h-8 w-8 text-muted-foreground\" aria-hidden />\n <p className=\"text-sm text-muted-foreground\">\n Nenhuma ficha trabalhista ainda. Escolha alguém acima e preencha o vínculo —\n é dele que saem headcount, admissões e experiência vencendo.\n </p>\n </div>\n )}\n\n {pessoa && (\n <div className=\"rounded-xl border border-border p-4\">\n <div className=\"mb-3 flex items-center justify-between gap-2\">\n <PersonLink personId={pessoa.id} name={pessoa.name ?? 'Pessoa'} kind=\"staff\" lookup={staffLookup} />\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setPessoa(null)}>Fechar</Button>\n </div>\n <Ficha personId={pessoa.id} personName={pessoa.name} />\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport type { StoreApi } from 'zustand/vanilla'\nimport { ModulePage, type ModuleNavItem } from '@fayz-ai/ui'\nimport {\n useModuleNavigation, parseViewId, useModuleNavAccess,\n EntitlementGate, UpgradePrompt,\n} from '@fayz-ai/admin'\nimport type { EntityDef } from '@fayz-ai/core'\nimport { WorkforceContextProvider, type ResolvedWorkforceConfig } from '../context'\nimport type { WorkforceDataProvider } from '../data/types'\nimport type { WorkforceUIState } from '../store'\nimport { SchedulesView } from './SchedulesView'\nimport { TemplatesView } from './TemplatesView'\nimport { TimeEntriesView } from './TimeEntriesView'\nimport { PeriodsView } from './PeriodsView'\nimport { PeopleView } from './PeopleView'\nimport { PayrollCostsView } from './PayrollCostsView'\nimport { HrView } from './HrView'\n\n// ---------------------------------------------------------------------------\n// A intenção: que subtela, em que modo.\n// ---------------------------------------------------------------------------\n\nexport interface ViewIntent {\n view: string\n mode?: 'list' | 'new' | 'edit' | 'detail'\n editId?: string\n}\n\nfunction parseIntent(activeView: string): ViewIntent {\n // `parseViewId` recolhe '<base>-detail:<id>' / '<base>-edit:<id>' — a forma\n // que `useModuleNavigation` produz a partir da rota.\n const { base, id } = parseViewId(activeView)\n const m = base.match(/^(people)-(new|list|detail|edit)$/)\n if (m) return { view: m[1], mode: m[2] as ViewIntent['mode'], editId: id }\n return { view: base }\n}\n\n// ---------------------------------------------------------------------------\n// A sub-navegação do módulo.\n// ---------------------------------------------------------------------------\n\nfunction buildNav(config: ResolvedWorkforceConfig, activeView: string, navigate: (view: string) => void): ModuleNavItem[] {\n const items: ModuleNavItem[] = []\n\n if (config.modules.schedules) {\n items.push({\n id: 'schedules',\n label: config.labels.schedules,\n icon: 'CalendarDays',\n active: activeView === 'schedules',\n onClick: () => navigate('schedules'),\n })\n }\n\n if (config.modules.templates) {\n items.push({\n id: 'templates',\n label: config.labels.templates,\n icon: 'LayoutTemplate',\n active: activeView === 'templates',\n onClick: () => navigate('templates'),\n })\n }\n\n if (config.modules.timeEntries) {\n items.push({\n id: 'time-entries',\n label: config.labels.timeEntries,\n icon: 'Clock',\n active: activeView === 'time-entries',\n onClick: () => navigate('time-entries'),\n })\n }\n\n if (config.modules.periods) {\n items.push({\n id: 'periods',\n label: config.labels.periods,\n icon: 'Lock',\n active: activeView === 'periods',\n onClick: () => navigate('periods'),\n })\n }\n\n if (config.modules.people) {\n items.push({\n id: 'people',\n label: config.labels.people,\n icon: 'UserCog',\n active: activeView.startsWith('people'),\n onClick: () => navigate('people'),\n })\n }\n\n // Depois do ponto e antes do fechamento: a ficha é o que explica o que a\n // folha de ponto mostra — quem está de atestado, quem está em férias.\n if (config.modules.hr) {\n items.push({\n id: 'hr',\n label: config.labels.hr,\n icon: 'BriefcaseBusiness',\n active: activeView === 'hr',\n onClick: () => navigate('hr'),\n })\n }\n\n if (config.modules.payrollCosts) {\n items.push({\n id: 'payroll-costs',\n label: config.labels.payrollCosts,\n icon: 'HandCoins',\n active: activeView === 'payroll-costs',\n onClick: () => navigate('payroll-costs'),\n })\n }\n\n // Cada item carrega a feature de acesso que o APP mapeou. `useModuleNavAccess`\n // esconde o que o papel nega e coroa o que o plano nega; id fora do mapa fica\n // aberto — o plugin não tem opinião sobre o que é pago.\n for (const item of items) {\n const feature = config.navFeatureMap[item.id]\n if (feature) item.feature = feature\n }\n\n return items\n}\n\n// ---------------------------------------------------------------------------\n// A página\n// ---------------------------------------------------------------------------\n\nexport function WorkforcePage({ config, provider, store, staffEntity }: {\n config: ResolvedWorkforceConfig\n provider: WorkforceDataProvider\n store: StoreApi<WorkforceUIState>\n staffEntity?: EntityDef\n}) {\n // A casa do módulo é Escalas: é a tela que se abre todo dia, e é onde o RH\n // decide alguma coisa. Fechamento é mensal e Templates é anual.\n const { view, direction, navigate } = useModuleNavigation(\n '/workforce',\n {\n schedules: 0, templates: 0, 'time-entries': 0, periods: 0,\n people: 0, 'people-detail': 1, 'people-edit': 2,\n 'payroll-costs': 0,\n },\n 'schedules',\n )\n\n const intent = parseIntent(view)\n const nav = useModuleNavAccess(buildNav(config, view, navigate))\n\n function renderView() {\n // Módulo desligado é desligado também pela URL: tirar o link sem fechar a\n // rota deixaria /workforce/periods inteiro de pé para quem digitar.\n const off =\n (intent.view === 'schedules' && !config.modules.schedules) ||\n (intent.view === 'templates' && !config.modules.templates) ||\n (intent.view === 'time-entries' && !config.modules.timeEntries) ||\n (intent.view === 'periods' && !config.modules.periods) ||\n (intent.view === 'people' && !config.modules.people) ||\n (intent.view === 'hr' && !config.modules.hr) ||\n (intent.view === 'payroll-costs' && !config.modules.payrollCosts)\n if (off) return <SchedulesView />\n\n switch (intent.view) {\n case 'templates': return <TemplatesView />\n case 'time-entries': return <TimeEntriesView />\n case 'periods': return <PeriodsView />\n case 'people': return <PeopleView entity={staffEntity} mode={intent.mode} />\n case 'hr': return <HrView />\n case 'payroll-costs': return <PayrollCostsView />\n case 'schedules':\n default: return <SchedulesView />\n }\n }\n\n // O paywall da subtela vive AQUI porque uma aba interna não é rota do shell —\n // o guarda de rota nunca a vê. Mesmo mapa que coroa o link acima, para que um\n // link de graça nunca fique sobre conteúdo trancado.\n function renderGatedView() {\n const feature = config.navFeatureMap[intent.view]\n if (!feature) return renderView()\n return (\n <EntitlementGate feature={feature} fallback={<UpgradePrompt feature={feature} />}>\n {renderView()}\n </EntitlementGate>\n )\n }\n\n return (\n <WorkforceContextProvider config={config} provider={provider} store={store}>\n <ModulePage\n title={config.labels.pageTitle}\n subtitle={config.labels.pageSubtitle}\n nav={nav}\n navVariant={config.moduleNav}\n showHeader={intent.view === 'schedules'}\n viewKey={view}\n direction={direction}\n >\n {renderGatedView()}\n </ModulePage>\n </WorkforceContextProvider>\n )\n}\n"]}