Files
3d125fd69b wip(extracao/418-relatorio): trabalho preservado antes de a árvore descartável ser recolhida
INCOMPLETO — este commit existe para NÃO PERDER, não para entregar.

A sessão bateu o limite no meio da extração, e a árvore onde isto vivia é
descartável por construção: ela existe para ser jogada fora. Trabalho commitado
ali não corre risco de se perder — ele já nasce perdido. Commitar e publicar é
o que o torna recuperável.

O QUE FALTA, e é obrigatório antes de virar PR:
  - conferir a tripla (migration + apêndice IDEMPOTENTE no baseline + MANIFEST)
  - RENUMERAR a migration: as TRÊS extrações nasceram com 0208 e colidem entre si
    (o último na main é 0207)
  - teste + sabotagem com previsão declarada ANTES
  - prova pela TELA com Playwright — curl não conta para UI
  - fragmento em .changes/ com crédito ao @clinicacentrodosorrisosc-code

Co-Authored-By: clinicacentrodosorrisosc-code <clinicacentrodosorrisosc-code@users.noreply.github.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-04 00:15:24 -03:00

35 lines
1.0 KiB
TypeScript

"use client";
import { useQuery } from "@tanstack/react-query";
import { apiClient } from "@/lib/api/client";
import type { RelatorioDeAtividades } from "@/lib/reports/atividades";
export interface RelatorioComJanela extends RelatorioDeAtividades {
window: { from: string; to: string };
}
/**
* O fuso vai no pedido porque a série diária é agrupada NO BANCO. Sem ele o
* corte do dia seria UTC, e a atividade das 21h de Brasília apareceria no dia
* seguinte — o relatório afirmaria trabalho num dia sem trabalho.
*/
function fusoDoNavegador(): string {
try {
return Intl.DateTimeFormat().resolvedOptions().timeZone || "UTC";
} catch {
return "UTC";
}
}
export function useActivityReport(dias: number) {
const tz = fusoDoNavegador();
return useQuery({
queryKey: ["reports", "activities", dias, tz],
queryFn: async () =>
apiClient.get<{ data: RelatorioComJanela }>(
`/api/v1/reports/activities?days=${dias}&tz=${encodeURIComponent(tz)}`,
),
staleTime: 30_000,
});
}