raciocínio
{{ searches.accounts.llm.reasoning }}
| conta {{ sortIndicator('search.accounts', 'canonical_name') }} | match {{ sortIndicator('search.accounts', 'key_type') }} | cnpj | orgs no Pipedrive {{ sortIndicator('search.accounts', 'pipedrive_org_count') }} | negócios no Pipedrive {{ sortIndicator('search.accounts', 'pipedrive_deal_count') }} | endereço | score {{ sortIndicator('search.accounts', 'score_max') }} |
|---|---|---|---|---|---|---|
| {{ a.canonical_name }} LLM | {{ a.key_type }} | {{ a.cnpjs[0] }} — | {{ a.pipedrive_org_count }} · {{ a.names.slice(0, 2).join(', ') }}{{ a.names.length > 2 ? ` +${a.names.length - 2}` : '' }} | {{ a.pipedrive_deal_count }} — | {{ a.addresses[0] }} — | {{ a.score_max ? a.score_max.toFixed(3) : '—' }} |
{{ currentSchema.description }}
|
{{ f.name }} {{ sortIndicator(selectedTable, f.name) }}
{{ f.type }}: {{ f.enum }}→ {{ f.ref }}
|
|---|
| {{ row[f.name] }} {{ shortId(row[f.name]) }} {{ row[f.name] ? '✓' : '✗' }} {{ formatValue(row[f.name], f) }} |
| nenhuma linha |
Busca on-the-fly de Contas canônicas no Pipedrive — Organizations agrupadas por CNPJ idêntico (heurística primária) e título normalizado (fallback). Cada linha = 1 conta canônica; pode mapear pra várias orgs duplicadas no Pipedrive.
raciocínio
{{ searches.accounts.llm.reasoning }}
| conta {{ sortIndicator('search.accounts', 'canonical_name') }} | match {{ sortIndicator('search.accounts', 'key_type') }} | cnpj | orgs no Pipedrive {{ sortIndicator('search.accounts', 'pipedrive_org_count') }} | negócios no Pipedrive {{ sortIndicator('search.accounts', 'pipedrive_deal_count') }} | endereço | score {{ sortIndicator('search.accounts', 'score_max') }} |
|---|---|---|---|---|---|---|
| {{ a.canonical_name }} LLM | {{ a.key_type }} | {{ a.cnpjs[0] }} — | {{ a.pipedrive_org_count }} · {{ a.names.slice(0, 2).join(', ') }}{{ a.names.length > 2 ? ` +${a.names.length - 2}` : '' }} | {{ a.pipedrive_deal_count }} — | {{ a.addresses[0] }} — | {{ a.score_max ? a.score_max.toFixed(3) : '—' }} |
Busca raw de Organizations no Pipedrive por nome (sem dedup). Diferente de Accounts: aqui cada linha = 1 org no Pipedrive (pode haver múltiplas pra mesma empresa).
| id {{ sortIndicator('search.organizations', 'id') }} | name {{ sortIndicator('search.organizations', 'name') }} | address | owner_id | custom_fields | score {{ sortIndicator('search.organizations', 'result_score') }} |
|---|---|---|---|---|---|
| {{ a.id }} | {{ a.name }} ↔ {{ a.canonical_account.name }} | {{ a.address || '—' }} | {{ a.owner ? a.owner.id : '—' }} | {{ a.custom_fields.slice(0, 4).join(' · ') }}{{ a.custom_fields.length > 4 ? ` · +${a.custom_fields.length - 4}` : '' }} — | {{ a.result_score ? a.result_score.toFixed(3) : '—' }} |
{{ accountDisplayName(accountDetail) }}
Tecnologias utilizadas Executando IA…
CRM utilizado
analisando… {{ accountDetail.derived.crm_tech.crm.source === 'deal_note' ? 'IA' : 'campo' }} declarado sem informaçãoOutras tecnologias
analisando… IA · {{ accountDetail.derived.tech_stack.unique_count }} sem informação- {{ t.name }} · {{ techCategoryLabel(t.category) }}
Intensidade de Uso
Indicadores de Uso (30d vs 90d)
sem indicadores de uso registrados no negócio CS
Indicadores de Contratação
sem dados de contratação no negócio CS
Contatos Executando IA… IA heurístico
Histórico de Contrato
Todos os custom fields ({{ accountDetail.customFields.length }})
| label | type | value |
|---|---|---|
| {{ cf.field_label }} | {{ cf.field_type }} |
{{ cf.label != null ? cf.label : (cf.value != null ? cf.value : '—') }} |
Negócios Relacionados no Pipedrive
{{ accountDetail.derived.deals_table.length }} negócio{{ accountDetail.derived.deals_table.length === 1 ? '' : 's' }} associado{{ accountDetail.derived.deals_table.length === 1 ? '' : 's' }}| Título do Negócio {{ sortIndicator('account.deals', 'title') }} | Organização {{ sortIndicator('account.deals', 'organization_name') }} | Funil {{ sortIndicator('account.deals', 'pipeline_name') }} | Etapa {{ sortIndicator('account.deals', 'stage_name') }} | CNPJ/CPF {{ sortIndicator('account.deals', 'cnpj_or_cpf') }} | Criado em {{ sortIndicator('account.deals', 'add_time') }} | Valor do Negócio {{ sortIndicator('account.deals', 'value') }} | MRR {{ sortIndicator('account.deals', 'mrr') }} | Proprietário {{ sortIndicator('account.deals', 'owner_name') }} | Telefone {{ sortIndicator('account.deals', 'contact_phone') }} |
|---|---|---|---|---|---|---|---|---|---|
| {{ d.title }} #{{ d.id }} {{ d.status }} | {{ d.organization_name || '—' }} | {{ d.pipeline_name || '—' }} | {{ d.stage_name || '—' }} | {{ d.cnpj_or_cpf || '—' }} | {{ d.add_time ? formatDateBR(d.add_time) : '—' }} | {{ d.value != null ? formatMoney(d.value, d.currency) : '—' }} | {{ formatMoney(d.mrr, d.currency) }} — | {{ d.owner_name || '—' }} | {{ d.contact_phone }} {{ d.contact_phone }} — |
Busca on-the-fly de Negócios no Pipedrive (qualquer funil) por trecho do título. Mínimo 3 caracteres; debounce de 300ms.
| id {{ sortIndicator('search.deals', 'id') }} | title {{ sortIndicator('search.deals', 'title') }} | status {{ sortIndicator('search.deals', 'status') }} | value {{ sortIndicator('search.deals', 'value') }} | person {{ sortIndicator('search.deals', 'person') }} | organization {{ sortIndicator('search.deals', 'organization') }} | stage_id {{ sortIndicator('search.deals', 'stage_id') }} | score {{ sortIndicator('search.deals', 'result_score') }} |
|---|---|---|---|---|---|---|---|
| {{ d.id }} | {{ d.title }} | {{ d.status }} | {{ formatMoney(d.value, d.currency) }} | {{ (d.person && d.person.name) || '—' }} | {{ d.canonical_account.name }} ↔ {{ d.canonical_account.group_size }} · raw: {{ d.canonical_account.raw_name }} {{ (d.organization && d.organization.name) || '—' }} | {{ d.stage_id != null ? d.stage_id : '—' }} | {{ d.result_score ? d.result_score.toFixed(3) : '—' }} |
Busca on-the-fly de Persons no Pipedrive por trecho do nome ou email. Mínimo 3 caracteres; debounce de 300ms.
| id {{ sortIndicator('search.persons', 'id') }} | name {{ sortIndicator('search.persons', 'name') }} | primary_email {{ sortIndicator('search.persons', 'primary_email') }} | phones | organization {{ sortIndicator('search.persons', 'organization') }} | owner_id | score {{ sortIndicator('search.persons', 'result_score') }} |
|---|---|---|---|---|---|---|
| {{ p.id }} | {{ p.name }} | {{ p.primary_email || (p.emails && p.emails[0]) || '—' }} | {{ p.phones.slice(0,2).join(', ') }}{{ p.phones.length > 2 ? ` +${p.phones.length - 2}` : '' }} — | {{ p.canonical_account.name }} ↔ {{ p.canonical_account.group_size }} · raw: {{ p.canonical_account.raw_name }} {{ (p.organization && p.organization.name) || '—' }} | {{ p.owner ? p.owner.id : '—' }} | {{ p.result_score ? p.result_score.toFixed(3) : '—' }} |
Dado um registro com identificadores, resolve contra o spine canônico. Retorna canonical_id, confidence, método de match e ação. Pegue identificadores reais do store com "amostrar do store" pra testar.
Input
Resultado
{{ JSON.stringify(resolverResult, null, 2) }}
execute para ver resultado
Apenas paulo@econodata.com.br pode criar usuários, definir senhas e
desativar contas. Logins permitidos: senha local OU Google Sign-In, sempre com domínio
@econodata.com.br.
| Nome | Tipo | Métodos de Login | Status | Criado em | Último Login | Ações | |
|---|---|---|---|---|---|---|---|
| {{ u.email }}super | {{ u.display_name || '—' }} | {{ u.is_admin ? 'admin' : 'user' }} | 🔑 senha 🔵 Google — pendente | {{ u.active ? 'ativo' : 'inativo' }} | {{ u.created_at ? formatDateBR(u.created_at) : '—' }} | {{ u.last_login_at ? formatTimestamp(u.last_login_at) : 'nunca' }} |
Toda fronteira externa passa por um conector nomeado em /src/connectors/ (P2.2). Stubs aqui retornam dados sintéticos do store; conectores marcados live usam API real.
{{ c.name }} live
{{ c.description }}
Integração real com a API REST do Pipedrive (auth via api_token, lido de .env). Sync puxa pipelines, stages, deals, persons e organizations e armazena em cache. O Account Resolver agrupa deals da mesma conta seguindo a spec section 2.
Tenant
Cache
Pipelines descobertos ({{ pipedriveCache.pipelines.length }})
Sample de deals (primeiros 8 do cache)
| id | title | status | value | org | person | pipeline |
|---|---|---|---|---|---|---|
| {{ d.id }} | {{ d.title }} | {{ d.status }} | {{ d.value ? Number(d.value).toLocaleString('pt-BR', {minimumFractionDigits: 2}) : '—' }} | {{ (d.org_id && d.org_id.name) || '—' }} | {{ (d.person_id && d.person_id.name) || '—' }} | {{ pipelineName(d.pipeline_id) }} |
Pipedrive Account Resolver (spec 2)
Identifica deals da mesma conta-canônica via org_id, par "X ↔ X - CS", ou domínio corporativo. Persons resolvidas via identity_resolver.
+ {{ pipedriveResolverResult.accounts.length - 20 }} contas adicionais
Mapper Pipedrive → canonical (13 entidades v1)
Para cada grupo do resolver, transforma org/persons/deals em registros canônicos. Account e Person passam pelo identity_resolver — registros que casam com o spine são reused; os que não casam viram canonical_id novo. Toggle aplicar gravar no store em memória (visível nas tabelas canônicas).
canonical_account ({{ pipedriveMapperResult.generated_counts.canonical_account }} gerados)
| id | type | stage | first_seen_at | last_activity_at |
|---|---|---|---|---|
| {{ a.canonical_account_id.slice(0,8) }}… | {{ a.account_type }} | {{ a.stage }} | {{ formatTimestamp(a.first_seen_at) }} | {{ formatTimestamp(a.last_activity_at) }} |
account_identifiers ({{ pipedriveMapperResult.generated_counts.account_identifiers }} gerados)
| account_id | type | value | conf | system | primary |
|---|---|---|---|---|---|
| {{ i.canonical_account_id.slice(0,8) }}… | {{ i.identifier_type }} | {{ i.identifier_value }} | {{ i.confidence }} | {{ i.observed_in_system }} | {{ i.is_primary_for_type ? '✓' : '✗' }} |
canonical_person ({{ pipedriveMapperResult.generated_counts.canonical_person }} gerados)
| id | full_name_current | first_seen_at |
|---|---|---|
| {{ p.canonical_person_id.slice(0,8) }}… | {{ p.full_name_current }} | {{ formatTimestamp(p.first_seen_at) }} |
canonical_deal ({{ pipedriveMapperResult.generated_counts.canonical_deal }} gerados)
| id | account | stage | value | currency | created_at |
|---|---|---|---|---|---|
| {{ d.canonical_deal_id.slice(0,8) }}… | {{ d.canonical_account_id.slice(0,8) }}… | {{ d.stage }} | {{ d.value_estimated.toLocaleString('pt-BR', { minimumFractionDigits: 2 }) }} | {{ d.currency }} | {{ formatTimestamp(d.created_at) }} |