From 8f1b23b7127897a729c6b0278657f009157bbaf4 Mon Sep 17 00:00:00 2001 From: melgarafael Date: Sat, 26 Sep 2026 19:28:32 -0300 Subject: [PATCH] docs(agenda): zh-CN, comentarios do corte do dia e fragmento da #1762 - zh-CN: a chave nova apontava para o texto antigo (so cliente ou dia); o valor agora fala do periodo de ate 62 dias. - O docblock do GET e o de useAgendamentos diziam que `dia` corta em UTC; desde este PR corta no fuso da organizacao (UTC so sem fuso legivel). - Fragmento .changes/ (capacidade_nova) com o credito do contribuidor. Refs: #1762 Co-Authored-By: Claude Opus 5.5 (1M context) --- .changes/agenda-por-periodo-na-integracao.md | 11 +++++++++++ app/api/v1/agenda/agendamentos/route.ts | 10 +++++----- hooks/agenda/useAgendamentos.ts | 10 +++++----- lib/i18n/traducoes/zh-CN.json | 2 +- 4 files changed, 22 insertions(+), 11 deletions(-) create mode 100644 .changes/agenda-por-periodo-na-integracao.md diff --git a/.changes/agenda-por-periodo-na-integracao.md b/.changes/agenda-por-periodo-na-integracao.md new file mode 100644 index 000000000..7c226bfe0 --- /dev/null +++ b/.changes/agenda-por-periodo-na-integracao.md @@ -0,0 +1,11 @@ +--- +impacto: capacidade_nova +secao: adicionado +titulo: A ferramenta de agenda lê um período inteiro, no fuso da empresa e em páginas +--- + +A ferramenta `crm_list_appointments` passa a aceitar `de`/`ate` (até 62 dias, a agenda inteira da organização) e paginação por `depois_de`/`proximo`, e cada compromisso traz o nome do contato e do atendente, o tipo, o local e os negócios vinculados — as chaves `contato_id`/`atendente_id` continuam na resposta. O filtro por `dia` passa a contar o dia no fuso da organização. A listagem da agenda pela API recusa com 422 um período acima de 62 dias. + +Não há ação para quem opera a VPS. + +Contribuição de @webtecnica (#1762). diff --git a/app/api/v1/agenda/agendamentos/route.ts b/app/api/v1/agenda/agendamentos/route.ts index 1839fb2cc..b099336d6 100644 --- a/app/api/v1/agenda/agendamentos/route.ts +++ b/app/api/v1/agenda/agendamentos/route.ts @@ -142,11 +142,11 @@ const cancelarSchema = z.object({ * igual para a tela e para a IA. * * O recorte que a grade usa é `de`+`ate`, em INSTANTES. A tela é semanal e - * mensal (seis semanas), então o filtro por `dia` não a serve — e ele tem um - * corte em UTC que, para fuso negativo, não é o dia de quem olha: medido para - * São Paulo, o "dia 12" pega três horas do dia 11 e perde as três últimas do 12. - * Mandando instante, quem chama calcula os limites no fuso de APRESENTAÇÃO e - * esta rota não precisa adivinhar em que fuso o dia foi pedido. + * mensal (seis semanas), então o filtro por `dia` não a serve — e ele corta no + * fuso da ORGANIZAÇÃO (desde a #1744; sem fuso legível, em UTC), que não é + * necessariamente o fuso de quem olha. Mandando instante, quem chama calcula os + * limites no fuso de APRESENTAÇÃO e esta rota não precisa adivinhar em que fuso + * o dia foi pedido. */ export async function GET(req: NextRequest): Promise { const requestId = randomUUID(); diff --git a/hooks/agenda/useAgendamentos.ts b/hooks/agenda/useAgendamentos.ts index 64aa1d711..d8f99df4b 100644 --- a/hooks/agenda/useAgendamentos.ts +++ b/hooks/agenda/useAgendamentos.ts @@ -40,11 +40,11 @@ export interface RecorteDaGrade { * * ## Por que `de`/`ate` e NUNCA `dia` * - * A rota também aceita `dia=YYYY-MM-DD`, e ele corta em **UTC**. Medido pelo - * autor enquanto escrevia: para America/Sao_Paulo, pedir o dia 12 devolve de - * 11/03 21:00 a 12/03 20:59 na parede de quem olha — três horas do dia anterior - * ENTRAM, e as três últimas do dia pedido FICAM DE FORA. Um compromisso das 22h - * some da lista do próprio dia. + * A rota também aceita `dia=YYYY-MM-DD`, e ele corta no fuso da **organização** + * (desde a #1744; sem fuso legível, em UTC). Esse não é necessariamente o fuso + * de APRESENTAÇÃO de quem olha — e, antes da #1744, o corte era em UTC: para + * America/Sao_Paulo o dia 12 pegava três horas do dia 11 e perdia as três + * últimas do 12. * * Mandando INSTANTE, quem calcula o começo e o fim é a tela, no fuso de * APRESENTAÇÃO — o mesmo `AuthUser.timezone` que a página já resolve. A rota não diff --git a/lib/i18n/traducoes/zh-CN.json b/lib/i18n/traducoes/zh-CN.json index 2c7895331..03e34c21b 100644 --- a/lib/i18n/traducoes/zh-CN.json +++ b/lib/i18n/traducoes/zh-CN.json @@ -5075,7 +5075,7 @@ "Lista as oportunidades de venda de um funil, com a etapa em que cada uma está e quem é o responsável por ela.": "列出某个销售漏斗中的销售商机,以及每个商机所处阶段和负责人。", "Lista as pessoas do time e o que cada uma pode fazer aqui dentro, para o agente saber para quem passar um atendimento.": "列出团队成员及每个人在此可执行的操作,让 AI 智能体知道可将接待转给谁。", "Lista os assuntos que já foram passados para uma pessoa resolver, com o estado de cada um, para o agente não pedir duas vezes a mesma coisa.": "列出已转给人工处理的事项及各自状态,让 AI 智能体不会重复请求同一件事。", - "Lista os compromissos com hora marcada de um cliente, de um dia ou de um período de até 62 dias, com a situação de cada um: marcado, realizado ou desmarcado.": "列出某客户或某天有具体时间的预约,以及各自状态:已预约、已完成或已取消。", + "Lista os compromissos com hora marcada de um cliente, de um dia ou de um período de até 62 dias, com a situação de cada um: marcado, realizado ou desmarcado.": "列出某客户、某天或最长 62 天内某一时段有具体时间的预约,以及各自状态:已预约、已完成或已取消。", "Lista os textos que a empresa compartilhou com a equipe para responder as situações de sempre, com o atalho de cada um e as variáveis que cada texto usa.": "列出企业与团队共享的、用于应对常见情况的回复文本,以及各自的快捷方式和每个文本使用的变量。", "Listar conversas": "列出对话", "Lê as mensagens já trocadas com o cliente, para o agente responder sem pedir que ele repita o que já contou.": "读取与客户已交换的消息,让 AI 智能体无需让对方重复已说过的内容即可回复。",