From 4f05c2cf1bb90a23933afd6bdf08dcdec4087d1d Mon Sep 17 00:00:00 2001 From: Leonardo Date: Thu, 21 May 2026 22:04:58 -0300 Subject: [PATCH] documents/generate: fix null.toFixed em loadAllVariables (isFinite global e enganoso) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit loadVariables falhava com TypeError quando nao havia sessao vinculada (agendaEventoId=null) E o user nao passava extras.valor. Stack: 'Cannot read properties of null (reading toFixed)'. Causa: usei isFinite() global em vez de Number.isFinite(): isFinite(null) => true (coerce: Number(null) === 0) Number.isFinite(null) => false Como isFinite(null) retorna true, o codigo entrava no branch `valorNum.toFixed(2)` e crashava. Com isso, loadAllVariables inteiro estourava e variables.value zerava — explicando os inputs todos vazios mesmo com paciente/perfil/clinica preenchidos. Fix: trocar isFinite por Number.isFinite (versao strict, nao coerce null/undefined/string). Co-Authored-By: Claude Opus 4.7 (1M context) --- src/services/DocumentGenerate.service.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/services/DocumentGenerate.service.js b/src/services/DocumentGenerate.service.js index 4df2933..4fd1e4d 100644 --- a/src/services/DocumentGenerate.service.js +++ b/src/services/DocumentGenerate.service.js @@ -268,16 +268,18 @@ export async function loadAllVariables(patientId, agendaEventoId = null, extras }); } - // Resolve valor numérico (extras tem prioridade sobre session) + // Resolve valor numérico (extras tem prioridade sobre session). + // Number.isFinite (strict) em vez de isFinite global: este último coerce + // null pra 0 e retorna true, fazendo null.toFixed crashar logo abaixo. const valorNum = extras.valor != null ? Number(extras.valor) : (session.valor ? Number(String(session.valor).replace(/[R$\s.]/g, '').replace(',', '.')) : null); - const valorFormatted = isFinite(valorNum) + const valorFormatted = Number.isFinite(valorNum) ? `R$ ${valorNum.toFixed(2).replace('.', ',')}` : (session.valor || ''); - const valorExtensoStr = isFinite(valorNum) ? valorExtenso(valorNum) : ''; + const valorExtensoStr = Number.isFinite(valorNum) ? valorExtenso(valorNum) : ''; const merged = { ...patient,