{% extends "base.html" %} {% block title %}{{ detail.display_name or detail.hostname or "Agent" }} | GTI Fiscal{% endblock %} {% block content %}

{{ detail.client or "Cliente não identificado" }} / INSTALAÇÃO

{{ detail.display_name or detail.hostname or detail.installation_id }}

{{ detail.hostname or "hostname indisponível" }}

Saúde técnica{{ detail.technical_health_label }}
Status fiscal{{ detail.fiscal_status_label }}
Produtos{{ detail.total_products if detail.total_products is not none else "Não informado" }}
Completos{{ detail.fiscally_complete if detail.fiscally_complete is not none else "Não informado" }}
Bloqueados com segurança{{ detail.safe_blocked if detail.safe_blocked is not none else "Não informado" }}
Falhas técnicas{{ detail.failed_products if detail.failed_products is not none else "Não informado" }}
Não classificados{{ detail.unclassified_products if detail.unclassified_products is not none else "Não informado" }}
Cobertura fiscal{% if detail.fiscal_completion_percent is none %}Não informadonenhum snapshot recebido{% else %}{{ "%.1f"|format(detail.fiscal_completion_percent)|replace(".", ",") }}%{{ detail.fiscally_complete }} / {{ detail.total_products }} completos{% endif %}
{% if detail.total_products is none %}

Cobertura ainda não informada: nenhum snapshot recebido deste servidor.

{% elif detail.coverage_invariant_pass %}

Cobertura reconciliada para este servidor.

{% else %}

Inconsistência de cobertura: {{ detail.coverage_overcount_products }} acima do total{% if detail.coverage_invalid_counts %}; existem contagens negativas{% endif %}.

{% endif %}

Processamento

Controlado pelo Hub — nenhuma configuração local.

Reprocessar tudo {% if ops.enabled %}
{% else %}
{% endif %}
Processamento
{{ "Ativo" if ops.enabled else "Pausado" }} · sincronização automática a cada {{ ops.interval_minutes }} min
Última sincronização
{{ ops.last_sync or "ainda não sincronizado" }}{% if ops.last_changed is not none %} · {{ ops.last_changed }} produto(s) alterado(s){% endif %}
Sincronização agendada
{{ ops.next_sync or ("aguardando o primeiro sync" if ops.enabled else "pausado") }}
{% if ops.rtc %}
Reforma Tributária
{{ ops.rtc.label }}
{% endif %}{% if ops.rtc and ops.rtc.enabled %}{% if ops.rtc.products and not ops.rtc.products.applicable %}
cClassTrib
{{ ops.rtc.products.label }}
{% elif ops.rtc.products %}
Produtos RTC
{{ ops.rtc.products.headline }}
Total {{ ops.rtc.products.total }} · com cClassTrib válido {{ ops.rtc.products.valid }} · prontos para preenchimento {{ ops.rtc.products.ready }} · ambíguos/bloqueados {{ ops.rtc.products.blocked }}
{% endif %}
Preenchimento automático (RTC, não é o Enriquecimento)
{{ ops.rtc.apply.state }}{% if ops.rtc.apply.applied_last_job %} · {{ ops.rtc.apply.applied_last_job }} preenchido(s) no último job{% endif %} · Controle e candidatos cClassTrib
{% endif %}
Último job
{% if ops.last_job %}{{ ops.last_job.kind_label }} · {{ ops.last_job.status_label }}{% else %}nenhum{% endif %}
{% if is_admin %}

Contexto Fiscal

Somente as decisões que o motor fiscal (field_contract) realmente não consegue provar sozinho no ERP. Visível apenas para administradores.

AVISO TÉCNICO (DADO_DE_TESTE=true): As decisões e contagens abaixo foram levantadas sobre base de homologação/laboratório (Agent 2 e bancos de teste). Trata-se de validação de mecanismo de motor, não de achado fiscal sobre clientes reais.
{% for d in fiscal_context %}

{{ d.title }}

DADO_DE_TESTE=true Escopo: {{ {"COMPANY":"Empresa","GROUP":"Grupo","PRODUCT":"Produto"}[d.scope] }}
Valor atual
{{ d.current_value or "Não confirmado" }}{% if d.last_changed %} · alterado em {{ d.last_changed }} por {{ d.last_changed_by }}{% endif %}
Sugestão
{{ d.suggestion or "Sem sugestão automática — evidência insuficiente" }}
Evidência
{{ d.evidence }} (medido manualmente em {{ d.measured_at }} — não é uma consulta ao vivo){% if d.dossier_link %} · dossiê para o contador{% endif %}
Confiança
{{ d.confidence }}
Campos afetados
{{ d.affected_fields|join(", ") }}
{% if d.allowed_values %}{% else %}{% endif %}
{% endfor %}
{% endif %}

Funcionalidades (Enriquecimento de produtos novos)

Decididas no Hub para esta instalação — o Agent não tem chave local. O Enriquecimento de produtos novos NÃO é o preenchimento RTC, que tem controle próprio (controle e candidatos).

{% if features.waiting %}

Aguardando configuração de funcionalidades: esta instalação ainda não processa nada.

{% endif %}
Corretor fiscal
{{ "Ativo" if features.corrector_enabled else "Desativado" }}
Enriquecimento de produtos novos
{{ features.state_label }}
{% if is_admin %}
{% else %}

Somente administradores alteram as funcionalidades.

{% endif %}

Enriquecimento

Produtos novos cadastrados no SGV; o catálogo histórico nunca é enviado a fontes externas.

Produtos acompanhados
{{ features.total }}
Campos preenchidos
{{ features.applied }}
{% for status, n in features.counts.items() %}
{{ status }}
{{ n }}
{% endfor %}
{% if features.tracked %} {% for r in features.tracked %}{% endfor %}
ProdutoEstadoMotivo / candidatosÚltima tentativa
{{ r.code }} {{ r.description }}
EAN: {{ r.gtin or "não informado" }} · detectado {{ r.detected.strftime("%d/%m %H:%M") if r.detected else "—" }}
{{ r.ui_status }}{% if r.placeholder %}
NCM provisório {{ r.placeholder }}{% endif %}
{{ r.label }}{% if r.kb_status %} · base: {{ r.kb_status }}{% endif %}{% if r.ncm_candidate %} · NCM candidato {{ r.ncm_candidate }}{% endif %}{% if r.cest_candidate %} · CEST {{ r.cest_candidate }}{% endif %}{% if r.ipi_candidate %} · IPI {{ r.ipi_candidate }}{% endif %}{% if r.applied %} · gravado: {{ r.applied.keys()|join(", ") }}{% endif %} {{ r.last_attempt.strftime("%d/%m %H:%M:%S") if r.last_attempt else "—" }}{% if r.next_retry %}
próximo retry {{ r.next_retry.strftime("%d/%m %H:%M") }}{% endif %}{% if r.reevaluate %}
reavaliação pedida{% endif %}
{% if features.enrichment_mode != "DISABLED" and r.ui_status not in ["ENRIQUECIDO","HUMAN_OVERRIDE"] %}
{% endif %}
{% if features.enrichment_mode != "DISABLED" %}
Só reavalia (base/cache primeiro); preço editado não é produto novo.
{% endif %} {% else %}

Nenhum produto novo acompanhado ainda. Só entram produtos cadastrados depois da ativação.

{% endif %}
{% if features.lookup %}{% if features.lookup.found %}
Produto
{{ features.lookup.row.product_code }} · {{ features.lookup.row.description }}
GTIN
{{ features.lookup.row.gtin or "sem GTIN válido" }}
Estado
{{ features.lookup.row.status }}{% if features.lookup.row.decisions.state %} · {{ features.lookup.row.decisions.state }}{% endif %}
{% for a in features.lookup.audits %}
{{ a.field }}: {{ a.old_value or "vazio" }} → {{ a.new_value or "—" }}{{ a.outcome }} · regra {{ a.rule or "—" }} · base {{ a.kb_status or "—" }}{% if a.evidence %} · {{ a.evidence|join(", ") }}{% endif %}
{% endfor %}{% else %}

Produto sem registro de enriquecimento.

{% endif %}{% endif %}

Contexto da empresa

Cliente
{{ detail.client or "Não informado" }}
Nome de exibição
{{ detail.display_name or "Não informado" }}
Hostname
{{ detail.hostname or "Não informado" }}
Empresa
{{ detail.company_name or detail.company_code or "Não informado" }}
UF
{{ detail.company_uf or "Não informado" }}
CRT
{{ detail.company_crt or "Não informado" }}
Versão do agent
{{ detail.agent_version_display }}
Último heartbeat
{{ detail.last_seen_display }} · {{ detail.last_seen_age }}
Firebird
{{ detail.firebird_version or "Não informado" }} · ODS {{ detail.firebird_ods or "Não informado" }}
IDs técnicos
Agent {{ detail.technical_ids.agent_id }} · instalação {{ detail.technical_ids.installation_db_id }}

Eventos recentes

Ver eventos
{% for event in events[:8] %}
{{ event.occurred_display }}{{ event.event_type }}{{ event.message }}{% if event.job_id %} · Job {{ event.job_id }}{% endif %}{% if event.product_code %} · Produto {{ event.product_code }}{% endif %}Severidade: {{ event.severity }}
{% else %}

Nenhum evento.

{% endfor %}

Eventos operacionais

Filtros aplicados no servidor.

Blockers abertos

Ver blockers
{% for key in ["CFOP","ST","ICMS","CSOSN","NCM","OTHER"] %}
{{ key }}{{ blocker_breakdown[key] }}
{% endfor %}
{% for item in blockers["items"][:8] %}{{ item.product_code }} · {{ item.field }}{{ item.reason_label }} · {{ item.age }}{{ item.blocker_type_label }}{% else %}

Nenhum blocker aberto.

{% endfor %}
{% endblock %}