<%* // Extrai informações do nome do arquivo const fileName = tp.file.title;

// Coleta de informações básicas da variável const nomeVariavel = await tp.system.prompt(“Nome completo da variável (ex: flow.cpf, user.name)”); const descricao = await tp.system.prompt(“Descrição funcional da variável”);

// Classificação da variável const escopo = await tp.system.suggester( [“flow”, “user”, “input”, “output”, “global”], [“flow”, “user”, “input”, “output”, “global”], false, “Escopo da variável” );

const tipoDado = await tp.system.suggester( [“String”, “Number”, “Boolean”, “Object”, “Array”, “Date”, “JSON”], [“String”, “Number”, “Boolean”, “Object”, “JSON”, “Array”, “Date”], false, “Tipo de dado” );

const isCritica = await tp.system.suggester( [“Sim”, “Não”], [true, false], false, “É uma variável crítica?” );

const isSensivel = await tp.system.suggester( [“Sim - Dados pessoais/PII”, “Sim - Dados financeiros”, “Sim - Credenciais”, “Não”], [“pii”, “financial”, “credentials”, false], false, “Contém dados sensíveis?” );

// Origem da variável const origemTipo = await tp.system.suggester( [“API Externa”, “Input de Usuário”, “Processamento Interno”, “Webhook”, “Database”, “Integração”], [“api”, “user_input”, “processing”, “webhook”, “database”, “integration”], false, “Origem da variável” );

const origemDetalhes = await tp.system.prompt(“Detalhes da origem (ex: HubSpot API, Input do chat, Cálculo no node 5-code)”);

// Formato e Exemplo const formato = await tp.system.prompt(“Formato/Padrão (ex: CPF: 000.000.000-00, ISO Date, Email)”, ""); const exemplo = await tp.system.prompt(“Exemplo de valor (mascarado se sensível)”);

// Fluxos que usam a variável let fluxos = []; let addMoreFluxos = true;

while (addMoreFluxos) { const nomeFluxo = await tp.system.prompt(“Nome do fluxo que usa esta variável”); const nosFluxo = await tp.system.prompt(“Nós específicos (separados por vírgula, ex: 3-code, 5-hubspot)”); const propositoUso = await tp.system.prompt(“Propósito do uso neste fluxo”);

fluxos.push({ nome: nomeFluxo, nos: nosFluxo, proposito: propositoUso });

const continuar = await tp.system.suggester( [“Adicionar outro fluxo”, “Finalizar”], [true, false], false, “Deseja adicionar mais fluxos?” );

addMoreFluxos = continuar; }

// Bancos de dados relacionados const temDatabase = await tp.system.suggester( [“Sim”, “Não”], [true, false], false, “Esta variável alimenta algum banco de dados?” );

let databasesContent = “N/A”; if (temDatabase) { let databases = []; let addMoreDbs = true;

while (addMoreDbs) { const dbNome = await tp.system.prompt(“Nome do banco/tabela”); const dbCampo = await tp.system.prompt(“Campo correspondente no banco”); const dbOperacao = await tp.system.suggester( [“INSERT”, “UPDATE”, “UPSERT”, “SELECT”], [“INSERT”, “UPDATE”, “UPSERT”, “SELECT”], false, “Tipo de operação” );

databases.push({ nome: dbNome, campo: dbCampo, operacao: dbOperacao });

const continuar = await tp.system.suggester(
  ["Adicionar outro banco", "Finalizar"],
  [true, false],
  false,
  "Deseja adicionar mais bancos?"
);

addMoreDbs = continuar;

}

databasesContent = \n; databases.forEach(db { databasesContent += ### ${db.nome}\n\n; databasesContent += - **Campo**: \{db.operacao}\n\n`; }); }

// Dependências const temDependencias = await tp.system.suggester( [“Sim”, “Não”], [true, false], false, “Esta variável depende de outras variáveis?” );

let dependenciasContent = “N/A”; if (temDependencias) { const deps = await tp.system.prompt(“Liste as variáveis das quais esta depende (separadas por vírgula)”); const depsSplit = deps.split(’,‘).map(d d.trim()); dependenciasContent = \n; depsSplit.forEach(dep { dependenciasContent += - [[${dep}]]\n; }); }

// Impacto e Validações const validacoes = await tp.system.prompt(“Validações/Regras de negócio aplicadas (ou deixe vazio)”, ""); const impactoFalha = await tp.system.prompt(“Impacto se esta variável falhar/for null”);

// Observações técnicas const observacoes = await tp.system.prompt(“Observações técnicas adicionais (transformações, encodings, etc)”, "");

// Monta seção de fluxos let fluxosContent = \n; fluxos.forEach(fluxo { fluxosContent += ### [[${fluxo.nome}]]\n\n; fluxosContent += - **Nós**: ${fluxo.nos}\n; fluxosContent += - **Propósito**: ${fluxo.proposito}\n\n; });

// Monta tags let tags = variable, ${escopo}, ${tipoDado.toLowerCase()}; if (isCritica) tags += , critical; if (isSensivel) tags += , sensitive, ${isSensivel}; tags += , ${origemTipo}; -%>

id: <% fileName %> variable: <% nomeVariavel %> scope: <% escopo %> type: <% tipoDado %> critical: <% isCritica %> sensitive: <% isSensivel ? isSensivel : false %> origin: <% origemTipo %> tags: [<% tags %>] revision_state: <% tp.date.now(“X”) %> tracked: true

<% nomeVariavel %>

Variável <%= isCritica ? ’🔴 CRÍTICA’ : ’🟢 PADRÃO’ %><%= isSensivel ? ’ | 🔒 SENSÍVEL’ : ” %>

Descrição

<% descricao %>


Especificações Técnicas

PropriedadeValor
Escopo<% escopo %>
Tipo de Dado<% tipoDado %>
Formato<% formato
Exemplo<% exemplo %>
Crítica<%= isCritica ? ’✅ Sim’ : ’❌ Não’ %>
Sensível<%= isSensivel ? ✅ Sim (${isSensivel}) : ’❌ Não’ %>

Origem

Tipo: <% origemTipo %>
Detalhes: <% origemDetalhes %>


Uso nos Fluxos

<% fluxosContent %>


Persistência de Dados

<% databasesContent %>


Dependências

Variáveis Relacionadas: <% dependenciasContent %>


Validações e Regras

<% validacoes || ‘Nenhuma validação específica documentada’ %>


Impacto de Falha

<% impactoFalha %>


Observações Técnicas

<% observacoes || ‘N/A’ %>


Esta seção será preenchida automaticamente pelo Obsidian com links de notas que referenciam esta variável