diff --git a/moldes/consolidado/96-publico-configmap.yaml b/moldes/consolidado/96-publico-configmap.yaml index 3f6241f..8456063 100644 --- a/moldes/consolidado/96-publico-configmap.yaml +++ b/moldes/consolidado/96-publico-configmap.yaml @@ -1801,7 +1801,7 @@ data: - + @@ -1988,14 +1988,18 @@ data: return n ? n.charAt(0).toUpperCase() + n.slice(1) : "—"; } + /* Tenant de DEMONSTRACAO do dono: o servidor marca (`demonstracao: true`). O + cartao diz isso ao lado da situacao, e nao ganha "Trocar de plano" nem + "Modulos avulsos" — nao ha cobranca, e o servidor recusaria de qualquer jeito. */ function cartao(p) { var s = SITUACAO[p.situacao] || ["neutro", String(p.situacao || "").toLowerCase()]; var podeEntrar = p.endereco && p.situacao === "ATIVA"; - return '
" + 'Plano ' + escapar(nomeDoPlano(p.plano)) + "" + "

" + escapar(p.escolinha || "Sua escolinha") + "

" + '' + s[1] + "" + + (p.demonstracao ? 'demonstração — sem cobrança' : "") + (podeEntrar ? 'Entrar →' : '

' + (p.situacao === "PREPARANDO" @@ -2017,7 +2021,9 @@ data: produtos.innerHTML = (lista || []).map(cartao).join(""); nenhum.classList.toggle("oculto", (lista || []).length > 0); mostrar(conteudo); - (lista || []).forEach(function (p) { if (p.tenant && p.situacao === "ATIVA") acrescentarBotaoDePlano(p.tenant); }); + (lista || []).forEach(function (p) { + if (p.tenant && p.situacao === "ATIVA" && !p.demonstracao) acrescentarBotaoDePlano(p.tenant); + }); return Promise.all([carregarCobranca(), carregarTermo(), carregarFaturas(), carregarVisao(), carregarTermosDeUso()]); }); @@ -3171,7 +3177,7 @@ data: - +

@@ -3334,7 +3340,7 @@ data: - + @@ -3630,9 +3636,13 @@ data: bloco("Recebido desde o início", reaisCurto(i.recebidoTotal), i.clientesSemDadoDoAsaas > 0 ? i.clientesSemDadoDoAsaas + " sem resposta do Asaas" : "extrato do Asaas", "") ].join(""); + // Teste e demonstracao aparecem na lista, mas nao nos numeros — e a tela diz. + var foraDosNumeros = []; + if (i.contasDeTeste > 0) foraDosNumeros.push(i.contasDeTeste + " de teste"); + if (i.demonstracoes > 0) foraDosNumeros.push(i.demonstracoes + " de demonstração"); $("kpiClientes").innerHTML = [ bloco("Clientes ativos", esc(i.clientesAtivos), - i.contasDeTeste > 0 ? "+ " + i.contasDeTeste + " de teste (fora dos números)" : "", "ok"), + foraDosNumeros.length ? "+ " + foraDosNumeros.join(", ") + " (fora dos números)" : "", "ok"), bloco("Novos no mês", esc(i.novosNoMes), comparacao(i.novosNoMes, i.novosMesAnterior), ""), bloco("Leads no mês", esc(i.leadsNoMes), comparacao(i.leadsNoMes, i.leadsMesAnterior), ""), bloco("Conversão", pct(i.conversao), "de lead para cliente pagante", ""), @@ -3671,7 +3681,7 @@ data: if (plano && c.plano !== plano) return false; if (estado && (c.estado || "NASCENDO") !== estado) return false; if (soAtencao && !(c.alertas || []).length) return false; - if (semTeste && c.teste) return false; + if (semTeste && (c.teste || c.demonstracao)) return false; if (busca) { var alvo = [c.cliente, c.escolinha, c.email, c.cidade, c.tenant, c.whatsapp, c.documento] .join(" ").toLowerCase(); @@ -3701,7 +3711,9 @@ data: } var SITUACAO_ASAAS = { ACTIVE: "ativa", INACTIVE: "encerrada", EXPIRED: "expirada" }; - function assinaturaNoAsaas(a) { + /* A demonstracao nao existe no Asaas DE PROPOSITO: nao e "nao existe" em vermelho. */ + function assinaturaNoAsaas(a, c) { + if (c && c.demonstracao) return "demonstração — sem cobrança"; if (!a || !a.disponivel) return "indisponível agora"; if (!a.existe) return 'não existe'; var s = SITUACAO_ASAAS[a.situacao] || txt(a.situacao); @@ -3738,10 +3750,11 @@ data: var gravidade = (c.alertas || []).reduce(function (g, a) { return a.gravidade === "critico" ? "critico" : (g === "critico" ? g : (a.gravidade === "alerta" ? "alerta" : g)); }, ""); - return '' + "" + "" - + '" - + '" - + "" + + '" + + '" + + "" + "" + "" + ""; @@ -3778,7 +3791,9 @@ data: + esc(a.titulo) + '' + esc(a.detalhe) + ""; }).join(""); - var extrato = f.disponivel + var extrato = c.demonstracao + ? '

Tenant de demonstração: não há assinatura nem cobrança no Asaas.

' + : f.disponivel ? ((f.cobrancas || []).length ? '
" + txt(c.cliente) + "" + (c.teste ? ' teste' : "") + + (c.demonstracao ? ' demonstração' : "") + '' + (c.tenant ? '' + esc(c.tenant) + "" : "sem tenant") @@ -3750,9 +3763,9 @@ data: + "" + etiquetaPlano(c) + "" + selo(c.estado, c.tenant) + '' + (c.diasDeCliente !== null && c.diasDeCliente !== undefined ? "cliente há " + esc(c.diasDeCliente) + " dia(s)" : "") + "' + reais(c.valorMensal) + diferencaDeTabela(c) + "' + (f.disponivel ? reais(f.totalPago) + '' + esc(f.cobrancasPagas) + " cobrança(s)" : "—") + "" + proximaCobranca(f) + "' + (c.demonstracao ? 'sem cobrança' : reais(c.valorMensal) + diferencaDeTabela(c)) + "' + (c.demonstracao ? "—" : f.disponivel ? reais(f.totalPago) + '' + esc(f.cobrancasPagas) + " cobrança(s)" : "—") + "" + (c.demonstracao ? '—' : proximaCobranca(f)) + "" + usoCurto(c.uso, c.usoDeDentro) + "" + seloSubconta(c.subconta) + "
' + f.cobrancas.map(function (cb) { @@ -3799,7 +3814,7 @@ data: return '
' + 'Plano ' + esc(nomePlano(c.plano)) + (c.ciclo === "ANUAL" ? " · anual" : " · mensal") + "" - + '

' + txt(c.cliente) + "

" + + '

' + txt(c.cliente) + (c.demonstracao ? ' demonstração' : "") + "

" + '

' + (c.escolinha && c.escolinha !== c.cliente ? esc(c.escolinha) + " · " : "") + selo(c.estado, c.tenant) + (c.estadoDesde ? " desde " + dataHora(c.estadoDesde) : "") + "

" + '
' @@ -3821,14 +3836,17 @@ data: + '

Assinatura

' + item("Plano", esc(nomePlano(c.plano)) + " " + (c.ciclo === "ANUAL" ? "anual" : "mensal")) + item("Valor do ciclo", reais(c.valorDoCiclo)) + item("Vale por mês", reais(c.valorMensal) + diferencaDeTabela(c)) - + item("De onde vem o valor", c.valorDaFonte === "asaas" ? "a assinatura no Asaas" : "a tabela de preços (Asaas não respondeu)") - + item("Situação no Asaas", assinaturaNoAsaas(c.assinaturaNoAsaas)) + + item("De onde vem o valor", c.demonstracao ? "demonstração — sem cobrança" + : c.valorDaFonte === "asaas" ? "a assinatura no Asaas" : "a tabela de preços (Asaas não respondeu)") + + item("Situação no Asaas", assinaturaNoAsaas(c.assinaturaNoAsaas, c)) + item("Contratado em", dataHora(c.contratadoEm)) + item("Cliente há", c.diasDeCliente === null || c.diasDeCliente === undefined ? "—" : esc(c.diasDeCliente) + " dia(s)") + item("Assinatura no Asaas", txt(c.assinatura)) + item("Cliente no Asaas", txt(c.clienteNoProvedor)) + "
" + '

Dinheiro

' - + (f.disponivel + + (c.demonstracao + ? item("Cobrança", "nenhuma — tenant de demonstração") + : f.disponivel ? item("Total pago", reais(f.totalPago)) + item("Líquido (após taxas)", reais(f.totalLiquido)) + item("Taxas pagas", reais(f.taxas)) + item("Último pagamento", f.ultimoPagamento ? data(f.ultimoPagamento.data) + " · " + reais(f.ultimoPagamento.valor) + " · " + txt(f.ultimoPagamento.forma) : "—") diff --git a/tenants/plataforma/96-publico-configmap.yaml b/tenants/plataforma/96-publico-configmap.yaml index baa28b0..311a08c 100644 --- a/tenants/plataforma/96-publico-configmap.yaml +++ b/tenants/plataforma/96-publico-configmap.yaml @@ -1801,7 +1801,7 @@ data:
© 2026 Athletic Map. Todos os direitos reservados.
- + @@ -1988,14 +1988,18 @@ data: return n ? n.charAt(0).toUpperCase() + n.slice(1) : "—"; } + /* Tenant de DEMONSTRACAO do dono: o servidor marca (`demonstracao: true`). O + cartao diz isso ao lado da situacao, e nao ganha "Trocar de plano" nem + "Modulos avulsos" — nao ha cobranca, e o servidor recusaria de qualquer jeito. */ function cartao(p) { var s = SITUACAO[p.situacao] || ["neutro", String(p.situacao || "").toLowerCase()]; var podeEntrar = p.endereco && p.situacao === "ATIVA"; - return '
" + 'Plano ' + escapar(nomeDoPlano(p.plano)) + "" + "

" + escapar(p.escolinha || "Sua escolinha") + "

" + '' + s[1] + "" + + (p.demonstracao ? 'demonstração — sem cobrança' : "") + (podeEntrar ? 'Entrar →' : '

' + (p.situacao === "PREPARANDO" @@ -2017,7 +2021,9 @@ data: produtos.innerHTML = (lista || []).map(cartao).join(""); nenhum.classList.toggle("oculto", (lista || []).length > 0); mostrar(conteudo); - (lista || []).forEach(function (p) { if (p.tenant && p.situacao === "ATIVA") acrescentarBotaoDePlano(p.tenant); }); + (lista || []).forEach(function (p) { + if (p.tenant && p.situacao === "ATIVA" && !p.demonstracao) acrescentarBotaoDePlano(p.tenant); + }); return Promise.all([carregarCobranca(), carregarTermo(), carregarFaturas(), carregarVisao(), carregarTermosDeUso()]); }); @@ -3171,7 +3177,7 @@ data: - +

VencimentoPago emFormaValorLíquidoSituação
@@ -3334,7 +3340,7 @@ data: - + @@ -3630,9 +3636,13 @@ data: bloco("Recebido desde o início", reaisCurto(i.recebidoTotal), i.clientesSemDadoDoAsaas > 0 ? i.clientesSemDadoDoAsaas + " sem resposta do Asaas" : "extrato do Asaas", "") ].join(""); + // Teste e demonstracao aparecem na lista, mas nao nos numeros — e a tela diz. + var foraDosNumeros = []; + if (i.contasDeTeste > 0) foraDosNumeros.push(i.contasDeTeste + " de teste"); + if (i.demonstracoes > 0) foraDosNumeros.push(i.demonstracoes + " de demonstração"); $("kpiClientes").innerHTML = [ bloco("Clientes ativos", esc(i.clientesAtivos), - i.contasDeTeste > 0 ? "+ " + i.contasDeTeste + " de teste (fora dos números)" : "", "ok"), + foraDosNumeros.length ? "+ " + foraDosNumeros.join(", ") + " (fora dos números)" : "", "ok"), bloco("Novos no mês", esc(i.novosNoMes), comparacao(i.novosNoMes, i.novosMesAnterior), ""), bloco("Leads no mês", esc(i.leadsNoMes), comparacao(i.leadsNoMes, i.leadsMesAnterior), ""), bloco("Conversão", pct(i.conversao), "de lead para cliente pagante", ""), @@ -3671,7 +3681,7 @@ data: if (plano && c.plano !== plano) return false; if (estado && (c.estado || "NASCENDO") !== estado) return false; if (soAtencao && !(c.alertas || []).length) return false; - if (semTeste && c.teste) return false; + if (semTeste && (c.teste || c.demonstracao)) return false; if (busca) { var alvo = [c.cliente, c.escolinha, c.email, c.cidade, c.tenant, c.whatsapp, c.documento] .join(" ").toLowerCase(); @@ -3701,7 +3711,9 @@ data: } var SITUACAO_ASAAS = { ACTIVE: "ativa", INACTIVE: "encerrada", EXPIRED: "expirada" }; - function assinaturaNoAsaas(a) { + /* A demonstracao nao existe no Asaas DE PROPOSITO: nao e "nao existe" em vermelho. */ + function assinaturaNoAsaas(a, c) { + if (c && c.demonstracao) return "demonstração — sem cobrança"; if (!a || !a.disponivel) return "indisponível agora"; if (!a.existe) return 'não existe'; var s = SITUACAO_ASAAS[a.situacao] || txt(a.situacao); @@ -3738,10 +3750,11 @@ data: var gravidade = (c.alertas || []).reduce(function (g, a) { return a.gravidade === "critico" ? "critico" : (g === "critico" ? g : (a.gravidade === "alerta" ? "alerta" : g)); }, ""); - return '' + "" + "" - + '" - + '" - + "" + + '" + + '" + + "" + "" + "" + ""; @@ -3778,7 +3791,9 @@ data: + esc(a.titulo) + '' + esc(a.detalhe) + ""; }).join(""); - var extrato = f.disponivel + var extrato = c.demonstracao + ? '

Tenant de demonstração: não há assinatura nem cobrança no Asaas.

' + : f.disponivel ? ((f.cobrancas || []).length ? '
" + txt(c.cliente) + "" + (c.teste ? ' teste' : "") + + (c.demonstracao ? ' demonstração' : "") + '' + (c.tenant ? '' + esc(c.tenant) + "" : "sem tenant") @@ -3750,9 +3763,9 @@ data: + "" + etiquetaPlano(c) + "" + selo(c.estado, c.tenant) + '' + (c.diasDeCliente !== null && c.diasDeCliente !== undefined ? "cliente há " + esc(c.diasDeCliente) + " dia(s)" : "") + "' + reais(c.valorMensal) + diferencaDeTabela(c) + "' + (f.disponivel ? reais(f.totalPago) + '' + esc(f.cobrancasPagas) + " cobrança(s)" : "—") + "" + proximaCobranca(f) + "' + (c.demonstracao ? 'sem cobrança' : reais(c.valorMensal) + diferencaDeTabela(c)) + "' + (c.demonstracao ? "—" : f.disponivel ? reais(f.totalPago) + '' + esc(f.cobrancasPagas) + " cobrança(s)" : "—") + "" + (c.demonstracao ? '—' : proximaCobranca(f)) + "" + usoCurto(c.uso, c.usoDeDentro) + "" + seloSubconta(c.subconta) + "
' + f.cobrancas.map(function (cb) { @@ -3799,7 +3814,7 @@ data: return '
' + 'Plano ' + esc(nomePlano(c.plano)) + (c.ciclo === "ANUAL" ? " · anual" : " · mensal") + "" - + '

' + txt(c.cliente) + "

" + + '

' + txt(c.cliente) + (c.demonstracao ? ' demonstração' : "") + "

" + '

' + (c.escolinha && c.escolinha !== c.cliente ? esc(c.escolinha) + " · " : "") + selo(c.estado, c.tenant) + (c.estadoDesde ? " desde " + dataHora(c.estadoDesde) : "") + "

" + '
' @@ -3821,14 +3836,17 @@ data: + '

Assinatura

' + item("Plano", esc(nomePlano(c.plano)) + " " + (c.ciclo === "ANUAL" ? "anual" : "mensal")) + item("Valor do ciclo", reais(c.valorDoCiclo)) + item("Vale por mês", reais(c.valorMensal) + diferencaDeTabela(c)) - + item("De onde vem o valor", c.valorDaFonte === "asaas" ? "a assinatura no Asaas" : "a tabela de preços (Asaas não respondeu)") - + item("Situação no Asaas", assinaturaNoAsaas(c.assinaturaNoAsaas)) + + item("De onde vem o valor", c.demonstracao ? "demonstração — sem cobrança" + : c.valorDaFonte === "asaas" ? "a assinatura no Asaas" : "a tabela de preços (Asaas não respondeu)") + + item("Situação no Asaas", assinaturaNoAsaas(c.assinaturaNoAsaas, c)) + item("Contratado em", dataHora(c.contratadoEm)) + item("Cliente há", c.diasDeCliente === null || c.diasDeCliente === undefined ? "—" : esc(c.diasDeCliente) + " dia(s)") + item("Assinatura no Asaas", txt(c.assinatura)) + item("Cliente no Asaas", txt(c.clienteNoProvedor)) + "
" + '

Dinheiro

' - + (f.disponivel + + (c.demonstracao + ? item("Cobrança", "nenhuma — tenant de demonstração") + : f.disponivel ? item("Total pago", reais(f.totalPago)) + item("Líquido (após taxas)", reais(f.totalLiquido)) + item("Taxas pagas", reais(f.taxas)) + item("Último pagamento", f.ultimoPagamento ? data(f.ultimoPagamento.data) + " · " + reais(f.ultimoPagamento.valor) + " · " + txt(f.ultimoPagamento.forma) : "—")
VencimentoPago emFormaValorLíquidoSituação