feat: re-check central RTC authorization right before every write (GET /v1/agents/me/authorizations), human labels on the cClassTrib control page, final corpus/scale evidence; 1.2.1
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "gti-fiscal-agent"
|
||||
version = "1.2.0"
|
||||
version = "1.2.1"
|
||||
requires-python = ">=3.10"
|
||||
dependencies = ["httpx>=0.27,<1"]
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@ class Config:
|
||||
self.poll_interval_seconds = float(env.get("POLL_INTERVAL_SECONDS", "5"))
|
||||
# RTC auto-apply is a SEPARATE switch (default OFF): FIREBIRD_WRITES alone never lets the Agent fill cClassTrib.
|
||||
self.rtc_auto_apply_max_per_job = int(env.get("RTC_AUTO_APPLY_MAX_PER_JOB", str(_rtc_apply.DEFAULT_MAX_PER_JOB)))
|
||||
self.agent_version = env.get("AGENT_VERSION", "1.2.0")
|
||||
self.agent_version = env.get("AGENT_VERSION", "1.2.1")
|
||||
self.schema_fingerprint = env.get("SCHEMA_FINGERPRINT", REFERENCE_SCHEMA_V1)
|
||||
self.state_db = env.get("AGENT_STATE_DB", str(AGENT_ROOT / "agent_state.sqlite"))
|
||||
# Pilot write authorization: both must be explicitly set by the installer for
|
||||
@@ -212,6 +212,31 @@ def _fiscal_blocked_products(products, findings):
|
||||
return out
|
||||
|
||||
|
||||
def _fetch_authorizations(config, job):
|
||||
"""Current central authorization for this installation, straight from the Hub (authenticated). Tests replace this; production never trusts the job's copy for the write itself."""
|
||||
return HubClient(config.hub_url, config.agent_token).authorizations()
|
||||
|
||||
|
||||
def _make_authorizer(config, job, mode, approved_at_claim):
|
||||
"""Re-checks the Hub right before writing (cached for a few seconds): if the mode changed, the product lost its approval, or the Hub cannot be reached, nothing is written (fail closed)."""
|
||||
state = {"at": None, "auth": None}
|
||||
|
||||
def authorize(code):
|
||||
now = time.monotonic()
|
||||
if state["auth"] is None or now - state["at"] > 3.0:
|
||||
try:
|
||||
state["auth"], state["at"] = _fetch_authorizations(config, job) or {}, now
|
||||
except Exception: # noqa: BLE001 - unverifiable authorization is not authorization
|
||||
return "AUTHORIZATION_UNVERIFIABLE"
|
||||
fresh = state["auth"]
|
||||
if fresh.get("rtc_write_mode") != mode:
|
||||
return "AUTHORIZATION_CHANGED"
|
||||
if mode == "APPROVAL_REQUIRED" and str(code) not in {str(c) for c in fresh.get("rtc_approved_codes") or []}:
|
||||
return "AUTHORIZATION_CHANGED"
|
||||
return None
|
||||
return authorize
|
||||
|
||||
|
||||
def _rtc_auto_apply(env, config, job, products, fiscal, company):
|
||||
"""Preview (always) and, only when the Hub-delivered mode permits it, fill CCLASSTRIB for products whose class is PROVEN by an AUTO_APPLY_SAFE rule; also executes
|
||||
Hub-requested rollbacks. Authorization arrives ONLY inside the authenticated job (`authorizations`); there is no local switch. Never raises for a single product."""
|
||||
@@ -244,7 +269,7 @@ def _rtc_auto_apply(env, config, job, products, fiscal, company):
|
||||
if rollbacks:
|
||||
summary["rollbacks"] = _rtc_apply.rollback_records(connection, rollbacks, now=now, job_id=job.get("job_id"))["rollbacks"]
|
||||
if gate["allowed"] and wanted:
|
||||
outcome = _rtc_apply.apply_candidates(connection, wanted, company=company or {}, decision={"local_catalog_hash": fiscal["context"].get("local_catalog_hash"), "origin": f"HUB_MODE:{mode}"}, now=now, job_id=job.get("job_id"))
|
||||
outcome = _rtc_apply.apply_candidates(connection, wanted, company=company or {}, decision={"local_catalog_hash": fiscal["context"].get("local_catalog_hash"), "origin": f"HUB_MODE:{mode}"}, now=now, job_id=job.get("job_id"), authorize=_make_authorizer(config, job, mode, approved))
|
||||
summary.update({k: outcome[k] for k in ("applied", "aborted", "aborted_reasons", "write_attempts", "write_successes")})
|
||||
finally:
|
||||
connection.close()
|
||||
@@ -323,7 +348,7 @@ def execute_job(job, config, executor, state, env):
|
||||
"fiscal_context": fiscal_context,
|
||||
"rtc_auto_apply": rtc_apply,
|
||||
"fiscal_mode": getattr(config, "fiscal_mode", None),
|
||||
"release_version": env.get("AGENT_VERSION") or "1.2.0",
|
||||
"release_version": env.get("AGENT_VERSION") or "1.2.1",
|
||||
"products_total": len(products),
|
||||
"products_changed": len(to_process),
|
||||
"products_processed": summary["processed"],
|
||||
@@ -481,7 +506,7 @@ def run(config, env, *, max_iterations=None, stopper=None):
|
||||
def enforce_startup_preflight(env):
|
||||
"""Full read-only preflight at startup (Hub, auth, Firebird, capabilities, company context, guards). Fail closed."""
|
||||
from gti_fiscal_agent.preflight import run_preflight
|
||||
report = run_preflight(env, agent_version=env.get("AGENT_VERSION") or "1.2.0")
|
||||
report = run_preflight(env, agent_version=env.get("AGENT_VERSION") or "1.2.1")
|
||||
logger.info("startup preflight: %s", json.dumps({k: report[k] for k in ("PREFLIGHT", "blockers", "fiscal_mode", "effective_firebird_writes")}, ensure_ascii=False))
|
||||
print(json.dumps({"PREFLIGHT": report["PREFLIGHT"], "blockers": report["blockers"]}, ensure_ascii=False))
|
||||
if report["PREFLIGHT"] != "PASS":
|
||||
|
||||
@@ -21,6 +21,7 @@ class HubClient:
|
||||
response = httpx.get(f"{self.url}{path}", headers=self._headers(), timeout=30)
|
||||
response.raise_for_status(); return response.json()
|
||||
def identity(self): return self.get_json("/v1/agents/me/identity")
|
||||
def authorizations(self): return self.get_json("/v1/agents/me/authorizations")
|
||||
def health(self):
|
||||
response = httpx.get(f"{self.url}/health", timeout=10)
|
||||
return response.status_code == 200
|
||||
|
||||
@@ -9,7 +9,7 @@ import os
|
||||
import sqlite3
|
||||
from pathlib import Path
|
||||
|
||||
AGENT_VERSION_DEFAULT = "1.2.0"
|
||||
AGENT_VERSION_DEFAULT = "1.2.1"
|
||||
REQUIRED_ENV = ("GTI_HUB_URL", "AGENT_TOKEN", "FIREBIRD_DATABASE_PATH", "FB_USER", "FB_PASSWORD")
|
||||
REQUIRED_CAPABILITIES = ("supports_ncm", "supports_ipi", "supports_cest")
|
||||
FISCAL_MODES = ("DRY_RUN", "AUTO_APPLY")
|
||||
|
||||
@@ -147,10 +147,18 @@ def apply_candidate(conn, candidate: dict, *, company: dict, decision: dict, now
|
||||
raise
|
||||
|
||||
|
||||
def apply_candidates(conn, candidates: list[dict], *, company: dict, decision: dict, now: str, job_id=None, today: date | None = None) -> dict:
|
||||
"""Applies each candidate independently; a failure or an abort never stops the rest and never leaves a partial change."""
|
||||
def apply_candidates(conn, candidates: list[dict], *, company: dict, decision: dict, now: str, job_id=None, today: date | None = None, authorize=None) -> dict:
|
||||
"""Applies each candidate independently; a failure or an abort never stops the rest and never leaves a partial change.
|
||||
`authorize(product_code)` (optional) re-asks the Hub, right before each UPDATE, whether the central authorization still permits it: it returns None to proceed or a
|
||||
reason (AUTHORIZATION_CHANGED / AUTHORIZATION_UNVERIFIABLE) to skip the product with zero writes."""
|
||||
applied, aborted, reasons = [], [], {}
|
||||
for candidate in candidates:
|
||||
if authorize is not None:
|
||||
denied = authorize(candidate["product_code"])
|
||||
if denied:
|
||||
aborted.append({"outcome": "ABORTED", "product_code": candidate["product_code"], "field": "CCLASSTRIB", "reason": denied, "rule_id": candidate["rule_id"], "job_id": job_id, "timestamp": now, "action": "APPLY", "authorization_origin": decision.get("origin")})
|
||||
reasons[denied] = reasons.get(denied, 0) + 1
|
||||
continue
|
||||
try:
|
||||
applied.append(apply_candidate(conn, candidate, company=company, decision=decision, now=now, job_id=job_id, today=today))
|
||||
except RtcApplyAborted as stop:
|
||||
|
||||
@@ -254,6 +254,16 @@ def test_catalog_hash_is_recorded_for_audit():
|
||||
|
||||
|
||||
# ---------------------------------------------------------------- job integration (gates)
|
||||
import pytest # noqa: E402
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def _hub_echoes_the_job_authorization(monkeypatch):
|
||||
"""By default the Hub still says what the job said; individual tests change that to prove the pre-write re-check."""
|
||||
from test_run_agent_service import service
|
||||
monkeypatch.setattr(service, "_fetch_authorizations", lambda config, job: dict(job.get("authorizations") or {}))
|
||||
|
||||
|
||||
def _service():
|
||||
from test_run_agent_service import _config, service
|
||||
return service, _config
|
||||
@@ -399,3 +409,31 @@ def test_connection_is_closed_even_when_a_product_fails_mid_batch(monkeypatch):
|
||||
monkeypatch.setattr(service, "open_write_connection", lambda env, path: conn)
|
||||
summary = service._rtc_auto_apply({}, _config(), {"job_id": 1, "authorizations": {"rtc_write_mode": "ENABLED"}}, _products_of(db), fiscal, NORMAL)
|
||||
assert closed == [True] and summary["write_successes"] == 2 and summary["aborted_reasons"]
|
||||
|
||||
|
||||
def test_authorization_revoked_after_the_job_was_claimed_means_zero_writes(monkeypatch):
|
||||
service, _config = _service()
|
||||
db = FakeFirebird(PRODUCTS)
|
||||
fiscal = _fiscal_for(db)
|
||||
monkeypatch.setattr(service, "open_write_connection", lambda env, path: _Closeable(db))
|
||||
monkeypatch.setattr(service, "_fetch_authorizations", lambda config, job: {"rtc_write_mode": "DISABLED"}) # operator switched it off while the job was running
|
||||
summary = service._rtc_auto_apply({}, _config(), {"job_id": 5, "authorizations": {"rtc_write_mode": "ENABLED"}}, _products_of(db), fiscal, NORMAL)
|
||||
assert summary["write_successes"] == 0 and summary["aborted_reasons"] == {"AUTHORIZATION_CHANGED": 3}
|
||||
assert [db.products[c]["CCLASSTRIB"] for c in ("000001", "000002", "000003")] == [None, None, None]
|
||||
|
||||
|
||||
def test_unreachable_hub_is_not_authorization_and_approval_removal_is_honoured(monkeypatch):
|
||||
service, _config = _service()
|
||||
db = FakeFirebird(PRODUCTS)
|
||||
fiscal = _fiscal_for(db)
|
||||
monkeypatch.setattr(service, "open_write_connection", lambda env, path: _Closeable(db))
|
||||
|
||||
def down(config, job):
|
||||
raise ConnectionError("hub down")
|
||||
|
||||
monkeypatch.setattr(service, "_fetch_authorizations", down)
|
||||
summary = service._rtc_auto_apply({}, _config(), {"job_id": 6, "authorizations": {"rtc_write_mode": "ENABLED"}}, _products_of(db), fiscal, NORMAL)
|
||||
assert summary["write_successes"] == 0 and summary["aborted_reasons"] == {"AUTHORIZATION_UNVERIFIABLE": 3}
|
||||
monkeypatch.setattr(service, "_fetch_authorizations", lambda config, job: {"rtc_write_mode": "APPROVAL_REQUIRED", "rtc_approved_codes": ["000001"]}) # 000002 was un-approved meanwhile
|
||||
summary = service._rtc_auto_apply({}, _config(), {"job_id": 7, "authorizations": {"rtc_write_mode": "APPROVAL_REQUIRED", "rtc_approved_codes": ["000001", "000002"]}}, _products_of(db), fiscal, NORMAL)
|
||||
assert summary["write_successes"] == 1 and db.products["000001"]["CCLASSTRIB"] == "200003" and db.products["000002"]["CCLASSTRIB"] is None
|
||||
|
||||
@@ -252,6 +252,16 @@ def router(session_factory, bootstrap_token):
|
||||
finally:
|
||||
session.close()
|
||||
|
||||
@routes.get("/agents/me/authorizations")
|
||||
def agent_authorizations(identity=Depends(principal)):
|
||||
"""Current central RTC write authorization of the authenticated Agent's own installation (read by the Agent right before it writes). Nothing else is exposed."""
|
||||
session, agent = identity
|
||||
try:
|
||||
installation = session.scalar(select(Installation).where(Installation.agent_id == agent.id))
|
||||
return job_authorizations(session, installation) if installation is not None else {"rtc_write_mode": "DISABLED"}
|
||||
finally:
|
||||
session.close()
|
||||
|
||||
@routes.get("/agents/me")
|
||||
def agent_status(identity=Depends(principal)):
|
||||
session, agent = identity
|
||||
|
||||
@@ -121,7 +121,7 @@ def job_kind_label(value):
|
||||
|
||||
|
||||
_FISCAL_LABELS = {
|
||||
"CCLASSTRIB_MISSING": "cClassTrib ausente", "CCLASSTRIB_MISSING_UNRESOLVED": "cClassTrib não determinado", "CCLASSTRIB_AMBIGUOUS": "cClassTrib ambíguo", "CCLASSTRIB_CONFLICT": "cClassTrib conflitante",
|
||||
"CCLASSTRIB_MISSING": "cClassTrib ausente", "CCLASSTRIB_MISSING_UNRESOLVED": "cClassTrib não determinado", "CCLASSTRIB_AMBIGUOUS": "cClassTrib ambíguo", "CCLASSTRIB_CONFLICT": "cClassTrib existente diverge da classificação proposta",
|
||||
"CCLASSTRIB_OFFICIAL_MISMATCH": "cClassTrib diverge da tabela oficial", "RTC_LOCAL_CATALOG_INCOMPATIBLE": "Catálogo RTC incompatível", "RTC_RULE_EVIDENCE_MISSING": "Regra fiscal insuficiente", "CCLASSTRIB_INVALID_FORMAT": "cClassTrib com formato inválido", "CCLASSTRIB_NOT_IN_CATALOG": "cClassTrib fora do catálogo local",
|
||||
"RTC_CST_MISSING": "CST IBS/CBS ausente no catálogo", "RTC_CATALOG_INVALID": "Catálogo RTC local inválido",
|
||||
"PIS_CST_MISSING": "CST PIS ausente", "PIS_CST_INVALID": "CST PIS inválido", "PIS_RATE_MISSING": "Alíquota PIS ausente", "PIS_RATE_INVALID": "Alíquota PIS inválida", "PIS_CST_INCIDENCE_MISMATCH": "CST PIS incompatível com a incidência",
|
||||
@@ -137,7 +137,7 @@ def blocker_type_label(value):
|
||||
_REASON_LABELS = {
|
||||
"INVALID_NCM": "NCM inválido", "LEGACY_NCM": "NCM legado", "LEGACY_NCM_NO_AUTOMATIC_SUCCESSOR": "NCM legado sem sucessor automático",
|
||||
"LEGACY_NCM_REVIEW": "NCM legado em revisão", "LEGACY_NCM_REVIEW_REQUIRED": "NCM legado exige revisão", "LEGACY_OR_INVALID_NCM": "NCM legado ou inválido",
|
||||
"INSUFFICIENT_EVIDENCE": "Evidência insuficiente", "MISSING_EVIDENCE": "Evidência fiscal ausente", "BLOCKED_MISSING_EVIDENCE": "Evidência fiscal ausente",
|
||||
"INSUFFICIENT_EVIDENCE": "Evidência fiscal insuficiente", "MISSING_EVIDENCE": "Evidência fiscal ausente", "BLOCKED_MISSING_EVIDENCE": "Evidência fiscal ausente",
|
||||
"MISSING_CONTEXT": "Contexto fiscal ausente", "NO_EVIDENCE": "Sem evidência", "MISSING_PRODUCT_ORIGIN": "Origem do produto ausente",
|
||||
"MISSING_PROFILE": "Perfil fiscal ausente", "MISSING_ST_DETERMINATION": "Determinação de ST ausente", "NO_IPI_DECISION": "Sem decisão de IPI",
|
||||
"NO_NUMERIC_VALUE": "Sem valor numérico", "CHANGE_REQUIRED": "Alteração necessária", "SAME_VALUE": "Valor já correto", "AMBIGUOUS": "Ambíguo",
|
||||
@@ -207,3 +207,37 @@ def _rtc_apply_view(report, mode):
|
||||
report = report or {}
|
||||
return {"mode": mode, "state": RTC_MODE_LABELS[mode], "explanation": RTC_MODE_EXPLANATION, "applied_last_job": len(report.get("applied") or []), "aborted_last_job": len(report.get("aborted") or []),
|
||||
"ready_total": report.get("ready_total"), "capability": report.get("capability"), "authorized": mode in ("ENABLED", "APPROVAL_REQUIRED")}
|
||||
|
||||
|
||||
# ---- cClassTrib control page (Agent -> cClassTrib): candidate status, audit outcome/reason, rule and catalog wording ----
|
||||
_CANDIDATE_STATUS = {"PENDING": "Pendente", "APPROVED": "Aprovado", "REJECTED": "Rejeitado", "APPLIED": "Aplicado", "STALE": "Obsoleto"}
|
||||
_AUDIT_OUTCOME = {"APPLIED": "Aplicado", "ROLLED_BACK": "Revertido", "ABORTED": "Interrompido sem escrever", "FAILED": "Falha técnica", "ROLLBACK_REQUESTED": "Reversão solicitada"}
|
||||
_RULE_LABELS = {"RTC-R3": "Anexo com classe única (RTC-R3)", "RTC-R4": "Sugestão sem autorização de preenchimento (RTC-R4)", "RTC-A3": "Bloqueada por evidência (RTC-A3)", "RTC-G2": "Bloqueada por evidência (RTC-G2)"}
|
||||
_CATALOG_STATE = {"MATCH_SAFE": "Compatível com a tabela oficial", "MATCH_WITH_NON_MATERIAL_DIFFERENCE": "Diferença sem impacto (não autoriza escrita)", "MISMATCH": "Diverge da tabela oficial",
|
||||
"EXPIRED": "Classe oficial vencida", "MISSING_LOCAL": "Classe oficial ausente no catálogo local do SGV", "MISSING_OFFICIAL": "Classe local ausente na tabela oficial"}
|
||||
_ABORT_REASONS = {"VALUE_ALREADY_SET_NEVER_OVERWRITTEN": "cClassTrib existente diverge da classificação proposta", "NO_WRITE_REQUIRED": "Já preenchido com o valor proposto",
|
||||
"RTC_NO_LONGER_ENABLED": "Reforma tributária desligada no ERP", "RTC_CATALOG_INVALID": "Catálogo RTC local inválido", "LOCAL_CATALOG_CHANGED_SINCE_DECISION": "Catálogo local mudou desde a decisão",
|
||||
"COMPANY_CONTEXT_CHANGED": "Contexto da empresa mudou", "REGIME_NOT_NORMAL": "Regime sem regra segura de preenchimento", "PRODUCT_CHANGED_NCM": "NCM do produto mudou",
|
||||
"PRODUCT_CHANGED_SINCE_DECISION": "Produto mudou desde a decisão", "DECISION_CHANGED": "A classificação proposta mudou", "PRODUCT_NOT_FOUND": "Produto não encontrado",
|
||||
"PRODUCT_ROW_NOT_UNIQUE": "Código de produto duplicado", "UPDATE_ROWCOUNT_NOT_ONE": "Escrita recusada (contagem inesperada)", "ROLLBACK_CONFLICT_VALUE_CHANGED": "Valor alterado depois da escrita: reversão recusada",
|
||||
"ALREADY_EMPTY": "Já estava vazio", "ROLLBACK_REQUEST_INVALID": "Pedido de reversão inválido", "TECHNICAL_FAILURE": "Falha técnica", "AUTHORIZATION_CHANGED": "Autorização central mudou antes da escrita", "AUTHORIZATION_UNVERIFIABLE": "Autorização central não pôde ser confirmada"}
|
||||
|
||||
|
||||
def candidate_status_label(value):
|
||||
return _human_label(value, _CANDIDATE_STATUS)
|
||||
|
||||
|
||||
def audit_outcome_label(value):
|
||||
return _human_label(value, _AUDIT_OUTCOME)
|
||||
|
||||
|
||||
def rtc_rule_label(value):
|
||||
return _human_label(value, _RULE_LABELS)
|
||||
|
||||
|
||||
def catalog_state_label(value):
|
||||
return _human_label(value, _CATALOG_STATE)
|
||||
|
||||
|
||||
def abort_reason_label(value):
|
||||
return _human_label(value, _ABORT_REASONS) if value else ""
|
||||
|
||||
@@ -4,5 +4,5 @@ kept identical to this) and what an AgentRelease row's `version` column holds
|
||||
once published — never a second, independent version number. Fiscal semantics
|
||||
are versioned separately (ENGINE_VERSION/DECISION_VERSION in classification.py,
|
||||
DECISION_ENGINE_VERSION etc.) and are NOT changed by a release bump."""
|
||||
GTI_FISCAL_VERSION = "1.2.0"
|
||||
GTI_FISCAL_VERSION = "1.2.1"
|
||||
API_COMPAT_MAJOR_MINOR = "1.0" # an Agent 1.0.x/1.1.x talks to any Hub 1.0.x
|
||||
|
||||
+3
-2
@@ -15,7 +15,7 @@ from .config import settings
|
||||
from .blocker_resolution import BlockerResolutionUnavailable, _company_key, resolve_blocker_with_context
|
||||
from .context_keys import ALLOWED_KEYS, ENUMS
|
||||
from .installation_identity import reference_agent_version
|
||||
from .panel_presentation import RTC_MODE_EXPLANATION, RTC_MODE_LABELS, job_kind_label, job_status_label, rtc_status_view
|
||||
from .panel_presentation import RTC_MODE_EXPLANATION, RTC_MODE_LABELS, abort_reason_label, audit_outcome_label, candidate_status_label, catalog_state_label, job_kind_label, job_status_label, rtc_rule_label, rtc_status_view
|
||||
from .control_plane import blocker_detail, blocker_filter_summary, dashboard_summary, installation_view, jobs_status_summary, list_blockers, list_installations, list_jobs, list_panel_events
|
||||
from .human_auth import create_session, current_session, require_csrf, verify_password
|
||||
from .panel_presentation import format_ui_datetime
|
||||
@@ -344,7 +344,8 @@ def router(session_factory):
|
||||
audits = list(session.scalars(select(RtcWriteAudit).where(RtcWriteAudit.installation_id == installation.id, RtcWriteAudit.outcome.in_(("APPLIED", "ROLLED_BACK"))).order_by(RtcWriteAudit.id.desc()).limit(25)))
|
||||
ops = _ops_view(session, installation, agent)
|
||||
return render(request, "rtc_control.html", {"agent_id": agent_id, "installation": installation, "mode": installation.rtc_write_mode, "modes": RTC_MODE_LABELS, "explanation": RTC_MODE_EXPLANATION, "ops": ops,
|
||||
"rows": rows, "counts": counts, "status": status, "page": page, "pages": max(1, -(-total // size)), "total": total, "audits": audits})
|
||||
"rows": rows, "counts": counts, "status": status, "page": page, "pages": max(1, -(-total // size)), "total": total, "audits": audits,
|
||||
"L": {"status": candidate_status_label, "outcome": audit_outcome_label, "reason": abort_reason_label, "rule": rtc_rule_label, "catalog": catalog_state_label}})
|
||||
finally: session.close()
|
||||
|
||||
@routes.post("/agents/{agent_id}/rtc-mode")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "gti-fiscal-hub"
|
||||
version = "1.2.0"
|
||||
version = "1.2.1"
|
||||
requires-python = ">=3.10"
|
||||
dependencies = [
|
||||
"fastapi>=0.115,<1",
|
||||
|
||||
@@ -25,9 +25,9 @@
|
||||
<section class="panel"><div class="panel-title"><div><h2>Candidatos</h2><p class="muted">{{ total }} produto(s) neste filtro.</p></div></div>
|
||||
<nav class="tabs" aria-label="Filtro de candidatos">{% for st, label in [("PENDING","Pendentes"),("APPROVED","Aprovados"),("REJECTED","Rejeitados"),("APPLIED","Aplicados"),("STALE","Obsoletos")] %}<a class="{% if status==st %}active{% endif %}" href="?status={{ st }}">{{ label }} ({{ counts.get(st, 0) }})</a>{% endfor %}</nav>
|
||||
<form method="post" action="/agents/{{ agent_id }}/rtc-candidates"><input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<table><thead><tr><th></th><th>Produto</th><th>NCM</th><th>Atual</th><th>Proposto</th><th>CST IBS/CBS</th><th>Regra</th><th>Base</th><th>Status</th></tr></thead><tbody>
|
||||
{% for c in rows %}<tr><td><input type="checkbox" name="ids" value="{{ c.id }}" aria-label="Selecionar {{ c.product_code }}"></td><td>{{ c.product_code }} · {{ c.description or "" }}</td><td>{{ c.ncm }}</td><td>{{ c.current_value or "vazio" }}</td><td>{{ c.proposed }}</td><td>{{ c.cst_ibscbs }}</td><td>{{ c.rule_id }}</td><td>{{ c.basis }}</td><td>{{ c.status }}</td></tr>
|
||||
{% else %}<tr><td colspan="9" class="muted">Nenhum candidato neste filtro.</td></tr>{% endfor %}</tbody></table>
|
||||
<table><thead><tr><th></th><th>Produto</th><th>Descrição</th><th>NCM</th><th>cClassTrib atual</th><th>cClassTrib proposto</th><th>CST IBS/CBS</th><th>Regra</th><th>Fundamento</th><th>Catálogo</th><th>Situação</th></tr></thead><tbody>
|
||||
{% for c in rows %}<tr><td><input type="checkbox" name="ids" value="{{ c.id }}" aria-label="Selecionar {{ c.product_code }}"></td><td>{{ c.product_code }}</td><td>{{ c.description or "" }}</td><td>{{ c.ncm }}</td><td>{{ c.current_value or "vazio" }}</td><td>{{ c.proposed }}</td><td>{{ c.cst_ibscbs }}</td><td>{{ L.rule(c.rule_id) }}</td><td>{{ c.basis }}</td><td>{{ L.catalog("MATCH_SAFE") }}</td><td>{{ L.status(c.status) }}</td></tr>
|
||||
{% else %}<tr><td colspan="10" class="muted">Nenhum candidato neste filtro.</td></tr>{% endfor %}</tbody></table>
|
||||
<p>Página {{ page }} de {{ pages }}{% if page > 1 %} · <a href="?status={{ status }}&page={{ page - 1 }}">anterior</a>{% endif %}{% if page < pages %} · <a href="?status={{ status }}&page={{ page + 1 }}">próxima</a>{% endif %}</p>
|
||||
<p><button type="submit" name="action" value="approve" class="secondary">Aprovar selecionados</button> <button type="submit" name="action" value="reject" class="caution">Rejeitar selecionados</button>
|
||||
<button type="submit" name="action" value="approve" class="secondary" formaction="/agents/{{ agent_id }}/rtc-candidates?all=1">Aprovar todos os pendentes</button>
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
<section class="panel"><div class="panel-title"><div><h2>Auditoria e reversão</h2><p class="muted">Cada preenchimento pode ser revertido individualmente, desde que o valor no ERP ainda seja o gravado.</p></div></div>
|
||||
<table><thead><tr><th>#</th><th>Produto</th><th>Ação</th><th>Resultado</th><th>Antes → Depois</th><th>Regra</th><th>Origem</th><th>Reversão</th></tr></thead><tbody>
|
||||
{% for a in audits %}<tr><td>{{ a.id }}</td><td>{{ a.product_code }} · {{ a.description_snapshot or "" }}</td><td>{{ a.action or "APPLY" }}</td><td>{{ a.outcome }}{% if a.reason %} ({{ a.reason }}){% endif %}</td><td>{{ a.old_value or "vazio" }} → {{ a.new_value or "vazio" }}</td><td>{{ a.rule_id }}</td><td>{{ a.authorization_origin }}</td>
|
||||
{% for a in audits %}<tr><td>{{ a.id }}</td><td>{{ a.product_code }} · {{ a.description_snapshot or "" }}</td><td>{{ "Reversão" if a.action == "ROLLBACK" else "Preenchimento" }}</td><td>{{ L.outcome(a.outcome) }}{% if a.reason %} ({{ L.reason(a.reason) }}){% endif %}</td><td>{{ a.old_value or "vazio" }} → {{ a.new_value or "vazio" }}</td><td>{{ L.rule(a.rule_id) }}</td><td>{{ a.authorization_origin }}</td>
|
||||
<td>{% if a.action == "APPLY" and a.outcome == "APPLIED" and not a.rollback_state %}<form method="post" action="/agents/{{ agent_id }}/rtc-rollback" style="display:inline"><input type="hidden" name="csrf_token" value="{{ csrf_token }}"><input type="hidden" name="audit_id" value="{{ a.id }}"><input type="text" name="confirm" placeholder="digite REVERTER" size="12" aria-label="Confirmar reversão"><button type="submit" class="caution">Reverter</button></form>{% else %}{{ a.rollback_state or "" }}{% endif %}</td></tr>
|
||||
{% else %}<tr><td colspan="8" class="muted">Nenhum preenchimento registrado.</td></tr>{% endfor %}</tbody></table></section>
|
||||
{% endblock %}
|
||||
|
||||
@@ -689,3 +689,19 @@ def test_panel_shows_rtc_products_summary_and_the_pending_message_only_when_rtc_
|
||||
assert "Preenchimento automático" in on and "Desativada" in on and f"/agents/{agent_id}/rtc" in on
|
||||
for legacy in ("Escopo anterior", "Escopo ampliado"):
|
||||
assert legacy not in on
|
||||
|
||||
|
||||
def test_rtc_control_page_shows_human_labels_and_a_catalog_column_never_raw_enums():
|
||||
from central.app.panel_presentation import abort_reason_label, audit_outcome_label, candidate_status_label, catalog_state_label, blocker_reason_label, blocker_type_label, rtc_rule_label
|
||||
assert candidate_status_label("APPROVED") == "Aprovado" and audit_outcome_label("ROLLED_BACK") == "Revertido"
|
||||
assert rtc_rule_label("RTC-R4") == "Sugestão sem autorização de preenchimento (RTC-R4)"
|
||||
assert blocker_reason_label("INSUFFICIENT_EVIDENCE") == "Evidência fiscal insuficiente"
|
||||
assert blocker_type_label("CCLASSTRIB_CONFLICT") == "cClassTrib existente diverge da classificação proposta"
|
||||
assert catalog_state_label("MISSING_LOCAL") == "Classe oficial ausente no catálogo local do SGV"
|
||||
assert abort_reason_label("VALUE_ALREADY_SET_NEVER_OVERWRITTEN") == "cClassTrib existente diverge da classificação proposta"
|
||||
client, agent_id, _ = _panel_client()
|
||||
page = client.get(f"/agents/{agent_id}/rtc").text
|
||||
for header in ("cClassTrib atual", "cClassTrib proposto", "Fundamento", "Catálogo", "Situação", "Descrição"):
|
||||
assert header in page
|
||||
for raw in ("PENDING</td>", "APPLIED</td>", "ABORTED"):
|
||||
assert raw not in page
|
||||
|
||||
@@ -17,7 +17,7 @@ def test_health_is_unavailable_when_database_is_down():
|
||||
|
||||
def test_version_endpoint_reports_release_and_fiscal_versions():
|
||||
body = TestClient(create_app(database_probe=lambda: True)).get("/version").json()
|
||||
assert body["version"] == "1.2.0" and body["api_compat"] == "1.0" and body["engine_version"] and body["decision_version"]
|
||||
assert body["version"] == "1.2.1" and body["api_compat"] == "1.0" and body["engine_version"] and body["decision_version"]
|
||||
|
||||
|
||||
def test_production_refuses_the_dev_token(monkeypatch):
|
||||
|
||||
@@ -85,3 +85,15 @@ def test_audit_rows_never_carry_credentials_or_tokens():
|
||||
blob = repr([getattr(row, c.name) for c in RtcWriteAudit.__table__.columns])
|
||||
assert "password" not in blob.lower() and "'t'" not in blob and "Bearer" not in blob
|
||||
assert not any("pass" in c.name or "token" in c.name or "secret" in c.name for c in RtcWriteAudit.__table__.columns)
|
||||
|
||||
|
||||
def test_agent_can_reread_only_its_own_current_authorization_and_it_follows_the_operator():
|
||||
client, engine = _client()
|
||||
hb(client)
|
||||
assert client.get("/v1/agents/me/authorizations").status_code in (401, 403) # requires the Agent credential
|
||||
assert client.get("/v1/agents/me/authorizations", headers=H).json()["rtc_write_mode"] == "DISABLED"
|
||||
with Session(engine) as s:
|
||||
s.scalars(select(Installation)).one().rtc_write_mode = "ENABLED"
|
||||
s.commit()
|
||||
body = client.get("/v1/agents/me/authorizations", headers=H).json()
|
||||
assert body["rtc_write_mode"] == "ENABLED" and set(body) == {"rtc_write_mode", "rtc_approved_codes", "rtc_rollbacks"}
|
||||
|
||||
@@ -19,4 +19,4 @@ FB_PASSWORD=
|
||||
FISCAL_MODE=DRY_RUN
|
||||
FIREBIRD_WRITES=0
|
||||
POLL_INTERVAL_SECONDS=5
|
||||
AGENT_VERSION=1.2.0
|
||||
AGENT_VERSION=1.2.1
|
||||
|
||||
@@ -164,7 +164,7 @@ switch ($Command) {
|
||||
"GTI_HUB_URL=$hub", "AGENT_TOKEN=$token", "AGENT_ID=$agentId",
|
||||
"COMPANY_CODE=$code", "COMPANY_CNPJ=$cnpj", "COMPANY_CRT_SOURCE=$crtSource",
|
||||
"FIREBIRD_DATABASE_PATH=$db", "FB_USER=$fbUser", "FB_PASSWORD=$fbPass",
|
||||
'FISCAL_MODE=DRY_RUN', 'FIREBIRD_WRITES=0', 'POLL_INTERVAL_SECONDS=5', 'AGENT_VERSION=1.2.0'
|
||||
'FISCAL_MODE=DRY_RUN', 'FIREBIRD_WRITES=0', 'POLL_INTERVAL_SECONDS=5', 'AGENT_VERSION=1.2.1'
|
||||
)
|
||||
Set-Content -Path $EnvFile -Value $lines -Encoding UTF8
|
||||
}
|
||||
|
||||
@@ -19,4 +19,4 @@ FB_PASSWORD=
|
||||
FISCAL_MODE=DRY_RUN
|
||||
FIREBIRD_WRITES=0
|
||||
POLL_INTERVAL_SECONDS=5
|
||||
AGENT_VERSION=1.2.0
|
||||
AGENT_VERSION=1.2.1
|
||||
|
||||
@@ -19,4 +19,4 @@ FB_PASSWORD=
|
||||
FISCAL_MODE=DRY_RUN
|
||||
FIREBIRD_WRITES=0
|
||||
POLL_INTERVAL_SECONDS=5
|
||||
AGENT_VERSION=1.2.0
|
||||
AGENT_VERSION=1.2.1
|
||||
|
||||
@@ -19,4 +19,4 @@ FB_PASSWORD=
|
||||
FISCAL_MODE=DRY_RUN
|
||||
FIREBIRD_WRITES=0
|
||||
POLL_INTERVAL_SECONDS=5
|
||||
AGENT_VERSION=1.2.0
|
||||
AGENT_VERSION=1.2.1
|
||||
|
||||
@@ -19,4 +19,4 @@ FB_PASSWORD=
|
||||
FISCAL_MODE=DRY_RUN
|
||||
FIREBIRD_WRITES=0
|
||||
POLL_INTERVAL_SECONDS=5
|
||||
AGENT_VERSION=1.2.0
|
||||
AGENT_VERSION=1.2.1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# GTI Fiscal Hub — production environment (copy to .env, never commit .env)
|
||||
GTI_FISCAL_VERSION=1.2.0
|
||||
GTI_FISCAL_VERSION=1.2.1
|
||||
|
||||
# REQUIRED. URL-safe secret (used inside a connection URL): openssl rand -hex 24
|
||||
POSTGRES_PASSWORD=
|
||||
|
||||
@@ -36,7 +36,7 @@ services:
|
||||
build:
|
||||
context: ../..
|
||||
dockerfile: central/Dockerfile
|
||||
image: gti-fiscal-hub:${GTI_FISCAL_VERSION:-1.2.0}
|
||||
image: gti-fiscal-hub:${GTI_FISCAL_VERSION:-1.2.1}
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
postgres:
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ A variável de ambiente `GTI_SSH_PASSWORD`, se existir, tem prioridade. A senha
|
||||
## Deploy
|
||||
```
|
||||
powershell -ExecutionPolicy Bypass -File .\scripts\deploy_hub.ps1
|
||||
powershell -ExecutionPolicy Bypass -File .\scripts\deploy_hub.ps1 -PublishAgent -Version 1.2.0
|
||||
powershell -ExecutionPolicy Bypass -File .\scripts\deploy_hub.ps1 -PublishAgent -Version 1.2.1
|
||||
```
|
||||
Parâmetros: `-Version` (padrão `release/VERSION`), `-PublishAgent`, `-SkipTests`, `-DryRun`.
|
||||
|
||||
|
||||
@@ -18,6 +18,9 @@ Somente `C000025.CCLASSTRIB` (allowlist `ALLOWED_RTC_WRITE_FIELDS`), somente qua
|
||||
|
||||
Sequência por produto (uma transação curta): reler tudo → recalcular a decisão → conferir fingerprint → `UPDATE C000025 SET CCLASSTRIB = ? WHERE CODIGO = ? AND (CCLASSTRIB IS NULL OR TRIM(CCLASSTRIB)='')` → rowcount = 1 → reler → commit → auditoria.
|
||||
|
||||
## Reautorização imediata antes da escrita (1.2.1)
|
||||
O modo entregue no job pode envelhecer (operador desativa durante um lote). Antes de **cada** UPDATE o Agent relê a autorização atual no Hub (`GET /v1/agents/me/authorizations`, autenticado pelo token do próprio Agent; devolve só modo, aprovados e reversões da sua instalação; cache de 3 s). Se o modo mudou, se o produto perdeu a aprovação ou se o Hub não puder ser consultado, o produto é interrompido **sem escrever** (`AUTHORIZATION_CHANGED` / `AUTHORIZATION_UNVERIFIABLE`). Autorização não confirmada não é autorização.
|
||||
|
||||
## Preview e aprovação
|
||||
O Agent envia os candidatos (até 5.000 por job; `preview_truncated` sinaliza excesso) → tabela `rtc_candidates` (PENDING/APPROVED/REJECTED/APPLIED/STALE). O painel pagina no servidor (50/página), filtra por status, aprova/rejeita selecionados ou todos os pendentes e dispara "Aplicar aprovados agora". Uma proposta que muda invalida a aprovação anterior; produto que deixa de ser elegível numa avaliação completa vira `STALE`.
|
||||
|
||||
|
||||
@@ -0,0 +1,987 @@
|
||||
{
|
||||
"mode": "READ_ONLY_DRY_RUN",
|
||||
"FIREBIRD_WRITES": 0,
|
||||
"WRITE_ATTEMPTS": 0,
|
||||
"WRITE_SUCCESSES": 0,
|
||||
"databases": {
|
||||
"TESTESOFICIAIS": {
|
||||
"crt": "1",
|
||||
"total_products": 521,
|
||||
"passes": {
|
||||
"AS_FOUND": {
|
||||
"crt": "1",
|
||||
"rtc_enabled": true,
|
||||
"products": 521,
|
||||
"resolution_summary": {
|
||||
"total": 521,
|
||||
"valid_existing": 0,
|
||||
"ready_to_apply": 0,
|
||||
"suggestion_only": 0,
|
||||
"ambiguous": 0,
|
||||
"insufficient": 521,
|
||||
"conflicts": 0,
|
||||
"official_mismatch": 0,
|
||||
"catalog_incompatible": 0,
|
||||
"not_applicable": 0,
|
||||
"other_blocked": 0,
|
||||
"by_rule": {
|
||||
"RTC-R1": 521
|
||||
},
|
||||
"by_reason": {
|
||||
"SIMPLES_ORIENTATION_PENDING_OFFICIAL_NT": 521
|
||||
},
|
||||
"catalog_compatibility": {
|
||||
"compatibility": "MATERIAL_MISMATCH",
|
||||
"counts": {
|
||||
"MATCH_SAFE": 131,
|
||||
"MATCH_WITH_NON_MATERIAL_DIFFERENCE": 0,
|
||||
"MISMATCH": 11,
|
||||
"EXPIRED": 3,
|
||||
"MISSING_LOCAL": 19,
|
||||
"MISSING_OFFICIAL": 0
|
||||
},
|
||||
"expired_present_locally": 3
|
||||
}
|
||||
},
|
||||
"by_status": {
|
||||
"INSUFFICIENT_EVIDENCE": 521
|
||||
},
|
||||
"rtc_blocker_types": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 521
|
||||
},
|
||||
"AUTO_APPLY_CANDIDATES": 0,
|
||||
"context": {
|
||||
"rtc_param": "1",
|
||||
"rtc_source": "PARAMETROS.USAR_REFORMA_TRIBUTARIA",
|
||||
"rtc_observed_at": "2026-09-25T11:52:37+00:00",
|
||||
"local_catalog_hash": "1da77aec27fbde88488d1edf562f3af315ab2b5d06efb2e0b2f1ed606585d459",
|
||||
"official_catalog": {
|
||||
"sha256": "1448cb63a41bdb67ea30b4e11f4dc200d9568542c6b9335b6cff87a4fd664654",
|
||||
"publication": "2026-06-22",
|
||||
"file": "cClassTrib 2026-06-22.xlsx"
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"WHATIF_RTC_ON": {
|
||||
"crt": "1",
|
||||
"rtc_enabled": true,
|
||||
"products": 521,
|
||||
"resolution_summary": {
|
||||
"total": 521,
|
||||
"valid_existing": 0,
|
||||
"ready_to_apply": 0,
|
||||
"suggestion_only": 0,
|
||||
"ambiguous": 0,
|
||||
"insufficient": 521,
|
||||
"conflicts": 0,
|
||||
"official_mismatch": 0,
|
||||
"catalog_incompatible": 0,
|
||||
"not_applicable": 0,
|
||||
"other_blocked": 0,
|
||||
"by_rule": {
|
||||
"RTC-R1": 521
|
||||
},
|
||||
"by_reason": {
|
||||
"SIMPLES_ORIENTATION_PENDING_OFFICIAL_NT": 521
|
||||
},
|
||||
"catalog_compatibility": {
|
||||
"compatibility": "MATERIAL_MISMATCH",
|
||||
"counts": {
|
||||
"MATCH_SAFE": 131,
|
||||
"MATCH_WITH_NON_MATERIAL_DIFFERENCE": 0,
|
||||
"MISMATCH": 11,
|
||||
"EXPIRED": 3,
|
||||
"MISSING_LOCAL": 19,
|
||||
"MISSING_OFFICIAL": 0
|
||||
},
|
||||
"expired_present_locally": 3
|
||||
}
|
||||
},
|
||||
"by_status": {
|
||||
"INSUFFICIENT_EVIDENCE": 521
|
||||
},
|
||||
"rtc_blocker_types": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 521
|
||||
},
|
||||
"AUTO_APPLY_CANDIDATES": 0,
|
||||
"context": {
|
||||
"rtc_param": "1",
|
||||
"rtc_source": "SIMULATION",
|
||||
"rtc_observed_at": "2026-09-25T11:52:37+00:00",
|
||||
"local_catalog_hash": "1da77aec27fbde88488d1edf562f3af315ab2b5d06efb2e0b2f1ed606585d459",
|
||||
"official_catalog": {
|
||||
"sha256": "1448cb63a41bdb67ea30b4e11f4dc200d9568542c6b9335b6cff87a4fd664654",
|
||||
"publication": "2026-06-22",
|
||||
"file": "cClassTrib 2026-06-22.xlsx"
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"WHATIF_NORMAL_ON": {
|
||||
"crt": "3",
|
||||
"rtc_enabled": true,
|
||||
"products": 521,
|
||||
"resolution_summary": {
|
||||
"total": 521,
|
||||
"valid_existing": 0,
|
||||
"ready_to_apply": 77,
|
||||
"suggestion_only": 203,
|
||||
"ambiguous": 215,
|
||||
"insufficient": 26,
|
||||
"conflicts": 0,
|
||||
"official_mismatch": 0,
|
||||
"catalog_incompatible": 0,
|
||||
"not_applicable": 0,
|
||||
"other_blocked": 0,
|
||||
"by_rule": {
|
||||
"RTC-A1": 41,
|
||||
"RTC-A3": 10,
|
||||
"RTC-R2": 26,
|
||||
"RTC-R4": 203,
|
||||
"RTC-R3": 77,
|
||||
"RTC-A2": 164
|
||||
},
|
||||
"by_reason": {
|
||||
"ANNEX_XV_NEEDS_OPERATION_OR_CONDITION": 14,
|
||||
"SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD": 10,
|
||||
"NO_VALID_NCM": 26,
|
||||
"ANNEX_VII_NEEDS_OPERATION_OR_CONDITION": 10,
|
||||
"ANNEX_I_NEEDS_OPERATION_OR_CONDITION": 14,
|
||||
"NCM_IN_NO_ANNEX_AND_NO_NATURE_BASED_CHAPTER": 203,
|
||||
"ANNEX_VII_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS": 75,
|
||||
"ANNEX_XV_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS": 2,
|
||||
"LISTED_IN_MORE_THAN_ONE_ANNEX": 164,
|
||||
"ANNEX_V_NEEDS_OPERATION_OR_CONDITION": 3
|
||||
},
|
||||
"catalog_compatibility": {
|
||||
"compatibility": "MATERIAL_MISMATCH",
|
||||
"counts": {
|
||||
"MATCH_SAFE": 131,
|
||||
"MATCH_WITH_NON_MATERIAL_DIFFERENCE": 0,
|
||||
"MISMATCH": 11,
|
||||
"EXPIRED": 3,
|
||||
"MISSING_LOCAL": 19,
|
||||
"MISSING_OFFICIAL": 0
|
||||
},
|
||||
"expired_present_locally": 3
|
||||
}
|
||||
},
|
||||
"by_status": {
|
||||
"AMBIGUOUS": 215,
|
||||
"INSUFFICIENT_EVIDENCE": 26,
|
||||
"SUGGESTION_ONLY": 203,
|
||||
"RESOLVED_WITH_EXPLICIT_RULE": 77
|
||||
},
|
||||
"rtc_blocker_types": {
|
||||
"CCLASSTRIB_AMBIGUOUS": 215,
|
||||
"RTC_RULE_EVIDENCE_MISSING": 26,
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 203,
|
||||
"CCLASSTRIB_MISSING": 77
|
||||
},
|
||||
"AUTO_APPLY_CANDIDATES": 77,
|
||||
"context": {
|
||||
"rtc_param": "1",
|
||||
"rtc_source": "SIMULATION",
|
||||
"rtc_observed_at": "2026-09-25T11:52:37+00:00",
|
||||
"local_catalog_hash": "1da77aec27fbde88488d1edf562f3af315ab2b5d06efb2e0b2f1ed606585d459",
|
||||
"official_catalog": {
|
||||
"sha256": "1448cb63a41bdb67ea30b4e11f4dc200d9568542c6b9335b6cff87a4fd664654",
|
||||
"publication": "2026-06-22",
|
||||
"file": "cClassTrib 2026-06-22.xlsx"
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"CONSTRUCAO": {
|
||||
"crt": "1",
|
||||
"total_products": 3712,
|
||||
"passes": {
|
||||
"AS_FOUND": {
|
||||
"crt": "1",
|
||||
"rtc_enabled": true,
|
||||
"products": 3712,
|
||||
"resolution_summary": {
|
||||
"total": 3712,
|
||||
"valid_existing": 0,
|
||||
"ready_to_apply": 0,
|
||||
"suggestion_only": 0,
|
||||
"ambiguous": 0,
|
||||
"insufficient": 3712,
|
||||
"conflicts": 0,
|
||||
"official_mismatch": 0,
|
||||
"catalog_incompatible": 0,
|
||||
"not_applicable": 0,
|
||||
"other_blocked": 0,
|
||||
"by_rule": {
|
||||
"RTC-R1": 3712
|
||||
},
|
||||
"by_reason": {
|
||||
"SIMPLES_ORIENTATION_PENDING_OFFICIAL_NT": 3712
|
||||
},
|
||||
"catalog_compatibility": {
|
||||
"compatibility": "MATERIAL_MISMATCH",
|
||||
"counts": {
|
||||
"MATCH_SAFE": 131,
|
||||
"MATCH_WITH_NON_MATERIAL_DIFFERENCE": 0,
|
||||
"MISMATCH": 11,
|
||||
"EXPIRED": 3,
|
||||
"MISSING_LOCAL": 19,
|
||||
"MISSING_OFFICIAL": 0
|
||||
},
|
||||
"expired_present_locally": 3
|
||||
}
|
||||
},
|
||||
"by_status": {
|
||||
"INSUFFICIENT_EVIDENCE": 3712
|
||||
},
|
||||
"rtc_blocker_types": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 3712
|
||||
},
|
||||
"AUTO_APPLY_CANDIDATES": 0,
|
||||
"context": {
|
||||
"rtc_param": "1",
|
||||
"rtc_source": "PARAMETROS.USAR_REFORMA_TRIBUTARIA",
|
||||
"rtc_observed_at": "2026-09-25T11:52:38+00:00",
|
||||
"local_catalog_hash": "be8c5899fff3e236c6c77bbb887087c0a2db048aeff763a5823676c7b478a151",
|
||||
"official_catalog": {
|
||||
"sha256": "1448cb63a41bdb67ea30b4e11f4dc200d9568542c6b9335b6cff87a4fd664654",
|
||||
"publication": "2026-06-22",
|
||||
"file": "cClassTrib 2026-06-22.xlsx"
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"WHATIF_RTC_ON": {
|
||||
"crt": "1",
|
||||
"rtc_enabled": true,
|
||||
"products": 3712,
|
||||
"resolution_summary": {
|
||||
"total": 3712,
|
||||
"valid_existing": 0,
|
||||
"ready_to_apply": 0,
|
||||
"suggestion_only": 0,
|
||||
"ambiguous": 0,
|
||||
"insufficient": 3712,
|
||||
"conflicts": 0,
|
||||
"official_mismatch": 0,
|
||||
"catalog_incompatible": 0,
|
||||
"not_applicable": 0,
|
||||
"other_blocked": 0,
|
||||
"by_rule": {
|
||||
"RTC-R1": 3712
|
||||
},
|
||||
"by_reason": {
|
||||
"SIMPLES_ORIENTATION_PENDING_OFFICIAL_NT": 3712
|
||||
},
|
||||
"catalog_compatibility": {
|
||||
"compatibility": "MATERIAL_MISMATCH",
|
||||
"counts": {
|
||||
"MATCH_SAFE": 131,
|
||||
"MATCH_WITH_NON_MATERIAL_DIFFERENCE": 0,
|
||||
"MISMATCH": 11,
|
||||
"EXPIRED": 3,
|
||||
"MISSING_LOCAL": 19,
|
||||
"MISSING_OFFICIAL": 0
|
||||
},
|
||||
"expired_present_locally": 3
|
||||
}
|
||||
},
|
||||
"by_status": {
|
||||
"INSUFFICIENT_EVIDENCE": 3712
|
||||
},
|
||||
"rtc_blocker_types": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 3712
|
||||
},
|
||||
"AUTO_APPLY_CANDIDATES": 0,
|
||||
"context": {
|
||||
"rtc_param": "1",
|
||||
"rtc_source": "SIMULATION",
|
||||
"rtc_observed_at": "2026-09-25T11:52:38+00:00",
|
||||
"local_catalog_hash": "be8c5899fff3e236c6c77bbb887087c0a2db048aeff763a5823676c7b478a151",
|
||||
"official_catalog": {
|
||||
"sha256": "1448cb63a41bdb67ea30b4e11f4dc200d9568542c6b9335b6cff87a4fd664654",
|
||||
"publication": "2026-06-22",
|
||||
"file": "cClassTrib 2026-06-22.xlsx"
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"WHATIF_NORMAL_ON": {
|
||||
"crt": "3",
|
||||
"rtc_enabled": true,
|
||||
"products": 3712,
|
||||
"resolution_summary": {
|
||||
"total": 3712,
|
||||
"valid_existing": 0,
|
||||
"ready_to_apply": 0,
|
||||
"suggestion_only": 2725,
|
||||
"ambiguous": 973,
|
||||
"insufficient": 14,
|
||||
"conflicts": 0,
|
||||
"official_mismatch": 0,
|
||||
"catalog_incompatible": 0,
|
||||
"not_applicable": 0,
|
||||
"other_blocked": 0,
|
||||
"by_rule": {
|
||||
"RTC-R4": 2725,
|
||||
"RTC-A1": 255,
|
||||
"RTC-R2": 14,
|
||||
"RTC-A3": 682,
|
||||
"RTC-A2": 36
|
||||
},
|
||||
"by_reason": {
|
||||
"NCM_IN_NO_ANNEX_AND_NO_NATURE_BASED_CHAPTER": 2725,
|
||||
"ANNEX_IX_NEEDS_OPERATION_OR_CONDITION": 63,
|
||||
"NO_VALID_NCM": 14,
|
||||
"SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD": 682,
|
||||
"ANNEX_IV_NEEDS_OPERATION_OR_CONDITION": 179,
|
||||
"LISTED_IN_MORE_THAN_ONE_ANNEX": 36,
|
||||
"ANNEX_XI_NEEDS_OPERATION_OR_CONDITION": 8,
|
||||
"ANNEX_V_NEEDS_OPERATION_OR_CONDITION": 1,
|
||||
"ANNEX_XIII_NEEDS_OPERATION_OR_CONDITION": 4
|
||||
},
|
||||
"catalog_compatibility": {
|
||||
"compatibility": "MATERIAL_MISMATCH",
|
||||
"counts": {
|
||||
"MATCH_SAFE": 131,
|
||||
"MATCH_WITH_NON_MATERIAL_DIFFERENCE": 0,
|
||||
"MISMATCH": 11,
|
||||
"EXPIRED": 3,
|
||||
"MISSING_LOCAL": 19,
|
||||
"MISSING_OFFICIAL": 0
|
||||
},
|
||||
"expired_present_locally": 3
|
||||
}
|
||||
},
|
||||
"by_status": {
|
||||
"SUGGESTION_ONLY": 2725,
|
||||
"AMBIGUOUS": 973,
|
||||
"INSUFFICIENT_EVIDENCE": 14
|
||||
},
|
||||
"rtc_blocker_types": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 2725,
|
||||
"CCLASSTRIB_AMBIGUOUS": 973,
|
||||
"RTC_RULE_EVIDENCE_MISSING": 14
|
||||
},
|
||||
"AUTO_APPLY_CANDIDATES": 0,
|
||||
"context": {
|
||||
"rtc_param": "1",
|
||||
"rtc_source": "SIMULATION",
|
||||
"rtc_observed_at": "2026-09-25T11:52:39+00:00",
|
||||
"local_catalog_hash": "be8c5899fff3e236c6c77bbb887087c0a2db048aeff763a5823676c7b478a151",
|
||||
"official_catalog": {
|
||||
"sha256": "1448cb63a41bdb67ea30b4e11f4dc200d9568542c6b9335b6cff87a4fd664654",
|
||||
"publication": "2026-06-22",
|
||||
"file": "cClassTrib 2026-06-22.xlsx"
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"RINCAO": {
|
||||
"crt": "3",
|
||||
"total_products": 894,
|
||||
"passes": {
|
||||
"AS_FOUND": {
|
||||
"crt": "3",
|
||||
"rtc_enabled": false,
|
||||
"products": 894,
|
||||
"resolution_summary": null,
|
||||
"by_status": {
|
||||
"NOT_EVALUATED": 894
|
||||
},
|
||||
"rtc_blocker_types": {},
|
||||
"AUTO_APPLY_CANDIDATES": 0,
|
||||
"context": {
|
||||
"rtc_param": "0",
|
||||
"rtc_source": "PARAMETROS.USAR_REFORMA_TRIBUTARIA",
|
||||
"rtc_observed_at": "2026-09-25T11:52:40+00:00",
|
||||
"local_catalog_hash": "be8c5899fff3e236c6c77bbb887087c0a2db048aeff763a5823676c7b478a151",
|
||||
"official_catalog": null,
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"WHATIF_RTC_ON": {
|
||||
"crt": "3",
|
||||
"rtc_enabled": true,
|
||||
"products": 894,
|
||||
"resolution_summary": {
|
||||
"total": 894,
|
||||
"valid_existing": 0,
|
||||
"ready_to_apply": 63,
|
||||
"suggestion_only": 467,
|
||||
"ambiguous": 364,
|
||||
"insufficient": 0,
|
||||
"conflicts": 0,
|
||||
"official_mismatch": 0,
|
||||
"catalog_incompatible": 0,
|
||||
"not_applicable": 0,
|
||||
"other_blocked": 0,
|
||||
"by_rule": {
|
||||
"RTC-R4": 467,
|
||||
"RTC-A1": 129,
|
||||
"RTC-A2": 234,
|
||||
"RTC-R3": 63,
|
||||
"RTC-A3": 1
|
||||
},
|
||||
"by_reason": {
|
||||
"NCM_IN_NO_ANNEX_AND_NO_NATURE_BASED_CHAPTER": 467,
|
||||
"ANNEX_X_NEEDS_OPERATION_OR_CONDITION": 109,
|
||||
"LISTED_IN_MORE_THAN_ONE_ANNEX": 234,
|
||||
"ANNEX_VII_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS": 59,
|
||||
"ANNEX_I_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS": 2,
|
||||
"ANNEX_XV_NEEDS_OPERATION_OR_CONDITION": 16,
|
||||
"SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD": 1,
|
||||
"ANNEX_XV_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS": 2,
|
||||
"ANNEX_I_NEEDS_OPERATION_OR_CONDITION": 3,
|
||||
"ANNEX_VII_NEEDS_OPERATION_OR_CONDITION": 1
|
||||
},
|
||||
"catalog_compatibility": {
|
||||
"compatibility": "MATERIAL_MISMATCH",
|
||||
"counts": {
|
||||
"MATCH_SAFE": 131,
|
||||
"MATCH_WITH_NON_MATERIAL_DIFFERENCE": 0,
|
||||
"MISMATCH": 11,
|
||||
"EXPIRED": 3,
|
||||
"MISSING_LOCAL": 19,
|
||||
"MISSING_OFFICIAL": 0
|
||||
},
|
||||
"expired_present_locally": 3
|
||||
}
|
||||
},
|
||||
"by_status": {
|
||||
"SUGGESTION_ONLY": 467,
|
||||
"AMBIGUOUS": 364,
|
||||
"RESOLVED_WITH_EXPLICIT_RULE": 63
|
||||
},
|
||||
"rtc_blocker_types": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 467,
|
||||
"CCLASSTRIB_AMBIGUOUS": 364,
|
||||
"CCLASSTRIB_MISSING": 63
|
||||
},
|
||||
"AUTO_APPLY_CANDIDATES": 63,
|
||||
"context": {
|
||||
"rtc_param": "0",
|
||||
"rtc_source": "SIMULATION",
|
||||
"rtc_observed_at": "2026-09-25T11:52:40+00:00",
|
||||
"local_catalog_hash": "be8c5899fff3e236c6c77bbb887087c0a2db048aeff763a5823676c7b478a151",
|
||||
"official_catalog": {
|
||||
"sha256": "1448cb63a41bdb67ea30b4e11f4dc200d9568542c6b9335b6cff87a4fd664654",
|
||||
"publication": "2026-06-22",
|
||||
"file": "cClassTrib 2026-06-22.xlsx"
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"WHATIF_NORMAL_ON": {
|
||||
"crt": "3",
|
||||
"rtc_enabled": true,
|
||||
"products": 894,
|
||||
"resolution_summary": {
|
||||
"total": 894,
|
||||
"valid_existing": 0,
|
||||
"ready_to_apply": 63,
|
||||
"suggestion_only": 467,
|
||||
"ambiguous": 364,
|
||||
"insufficient": 0,
|
||||
"conflicts": 0,
|
||||
"official_mismatch": 0,
|
||||
"catalog_incompatible": 0,
|
||||
"not_applicable": 0,
|
||||
"other_blocked": 0,
|
||||
"by_rule": {
|
||||
"RTC-R4": 467,
|
||||
"RTC-A1": 129,
|
||||
"RTC-A2": 234,
|
||||
"RTC-R3": 63,
|
||||
"RTC-A3": 1
|
||||
},
|
||||
"by_reason": {
|
||||
"NCM_IN_NO_ANNEX_AND_NO_NATURE_BASED_CHAPTER": 467,
|
||||
"ANNEX_X_NEEDS_OPERATION_OR_CONDITION": 109,
|
||||
"LISTED_IN_MORE_THAN_ONE_ANNEX": 234,
|
||||
"ANNEX_VII_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS": 59,
|
||||
"ANNEX_I_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS": 2,
|
||||
"ANNEX_XV_NEEDS_OPERATION_OR_CONDITION": 16,
|
||||
"SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD": 1,
|
||||
"ANNEX_XV_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS": 2,
|
||||
"ANNEX_I_NEEDS_OPERATION_OR_CONDITION": 3,
|
||||
"ANNEX_VII_NEEDS_OPERATION_OR_CONDITION": 1
|
||||
},
|
||||
"catalog_compatibility": {
|
||||
"compatibility": "MATERIAL_MISMATCH",
|
||||
"counts": {
|
||||
"MATCH_SAFE": 131,
|
||||
"MATCH_WITH_NON_MATERIAL_DIFFERENCE": 0,
|
||||
"MISMATCH": 11,
|
||||
"EXPIRED": 3,
|
||||
"MISSING_LOCAL": 19,
|
||||
"MISSING_OFFICIAL": 0
|
||||
},
|
||||
"expired_present_locally": 3
|
||||
}
|
||||
},
|
||||
"by_status": {
|
||||
"SUGGESTION_ONLY": 467,
|
||||
"AMBIGUOUS": 364,
|
||||
"RESOLVED_WITH_EXPLICIT_RULE": 63
|
||||
},
|
||||
"rtc_blocker_types": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 467,
|
||||
"CCLASSTRIB_AMBIGUOUS": 364,
|
||||
"CCLASSTRIB_MISSING": 63
|
||||
},
|
||||
"AUTO_APPLY_CANDIDATES": 63,
|
||||
"context": {
|
||||
"rtc_param": "0",
|
||||
"rtc_source": "SIMULATION",
|
||||
"rtc_observed_at": "2026-09-25T11:52:40+00:00",
|
||||
"local_catalog_hash": "be8c5899fff3e236c6c77bbb887087c0a2db048aeff763a5823676c7b478a151",
|
||||
"official_catalog": {
|
||||
"sha256": "1448cb63a41bdb67ea30b4e11f4dc200d9568542c6b9335b6cff87a4fd664654",
|
||||
"publication": "2026-06-22",
|
||||
"file": "cClassTrib 2026-06-22.xlsx"
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"UNIAO": {
|
||||
"crt": "1",
|
||||
"total_products": 8942,
|
||||
"passes": {
|
||||
"AS_FOUND": {
|
||||
"crt": "1",
|
||||
"rtc_enabled": false,
|
||||
"products": 8942,
|
||||
"resolution_summary": null,
|
||||
"by_status": {
|
||||
"NOT_EVALUATED": 8942
|
||||
},
|
||||
"rtc_blocker_types": {},
|
||||
"AUTO_APPLY_CANDIDATES": 0,
|
||||
"context": {
|
||||
"rtc_param": "0",
|
||||
"rtc_source": "PARAMETROS.USAR_REFORMA_TRIBUTARIA",
|
||||
"rtc_observed_at": "2026-09-25T11:52:42+00:00",
|
||||
"local_catalog_hash": "be8c5899fff3e236c6c77bbb887087c0a2db048aeff763a5823676c7b478a151",
|
||||
"official_catalog": null,
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"WHATIF_RTC_ON": {
|
||||
"crt": "1",
|
||||
"rtc_enabled": true,
|
||||
"products": 8942,
|
||||
"resolution_summary": {
|
||||
"total": 8942,
|
||||
"valid_existing": 0,
|
||||
"ready_to_apply": 0,
|
||||
"suggestion_only": 0,
|
||||
"ambiguous": 0,
|
||||
"insufficient": 8942,
|
||||
"conflicts": 0,
|
||||
"official_mismatch": 0,
|
||||
"catalog_incompatible": 0,
|
||||
"not_applicable": 0,
|
||||
"other_blocked": 0,
|
||||
"by_rule": {
|
||||
"RTC-R1": 8942
|
||||
},
|
||||
"by_reason": {
|
||||
"SIMPLES_ORIENTATION_PENDING_OFFICIAL_NT": 8942
|
||||
},
|
||||
"catalog_compatibility": {
|
||||
"compatibility": "MATERIAL_MISMATCH",
|
||||
"counts": {
|
||||
"MATCH_SAFE": 131,
|
||||
"MATCH_WITH_NON_MATERIAL_DIFFERENCE": 0,
|
||||
"MISMATCH": 11,
|
||||
"EXPIRED": 3,
|
||||
"MISSING_LOCAL": 19,
|
||||
"MISSING_OFFICIAL": 0
|
||||
},
|
||||
"expired_present_locally": 3
|
||||
}
|
||||
},
|
||||
"by_status": {
|
||||
"INSUFFICIENT_EVIDENCE": 8942
|
||||
},
|
||||
"rtc_blocker_types": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 8942
|
||||
},
|
||||
"AUTO_APPLY_CANDIDATES": 0,
|
||||
"context": {
|
||||
"rtc_param": "0",
|
||||
"rtc_source": "SIMULATION",
|
||||
"rtc_observed_at": "2026-09-25T11:52:43+00:00",
|
||||
"local_catalog_hash": "be8c5899fff3e236c6c77bbb887087c0a2db048aeff763a5823676c7b478a151",
|
||||
"official_catalog": {
|
||||
"sha256": "1448cb63a41bdb67ea30b4e11f4dc200d9568542c6b9335b6cff87a4fd664654",
|
||||
"publication": "2026-06-22",
|
||||
"file": "cClassTrib 2026-06-22.xlsx"
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"WHATIF_NORMAL_ON": {
|
||||
"crt": "3",
|
||||
"rtc_enabled": true,
|
||||
"products": 8942,
|
||||
"resolution_summary": {
|
||||
"total": 8942,
|
||||
"valid_existing": 0,
|
||||
"ready_to_apply": 989,
|
||||
"suggestion_only": 6430,
|
||||
"ambiguous": 1432,
|
||||
"insufficient": 91,
|
||||
"conflicts": 0,
|
||||
"official_mismatch": 0,
|
||||
"catalog_incompatible": 0,
|
||||
"not_applicable": 0,
|
||||
"other_blocked": 0,
|
||||
"by_rule": {
|
||||
"RTC-R4": 6430,
|
||||
"RTC-R3": 989,
|
||||
"RTC-A1": 821,
|
||||
"RTC-A3": 296,
|
||||
"RTC-R2": 91,
|
||||
"RTC-A2": 315
|
||||
},
|
||||
"by_reason": {
|
||||
"NCM_IN_NO_ANNEX_AND_NO_NATURE_BASED_CHAPTER": 6430,
|
||||
"ANNEX_VII_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS": 113,
|
||||
"ANNEX_IX_NEEDS_OPERATION_OR_CONDITION": 174,
|
||||
"SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD": 296,
|
||||
"ANNEX_I_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS": 262,
|
||||
"ANNEX_I_NEEDS_OPERATION_OR_CONDITION": 196,
|
||||
"ANNEX_VII_NEEDS_OPERATION_OR_CONDITION": 193,
|
||||
"NO_VALID_NCM": 91,
|
||||
"LISTED_IN_MORE_THAN_ONE_ANNEX": 315,
|
||||
"ANNEX_VIII_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS": 580,
|
||||
"ANNEX_X_NEEDS_OPERATION_OR_CONDITION": 22,
|
||||
"ANNEX_IV_NEEDS_OPERATION_OR_CONDITION": 156,
|
||||
"ANNEX_XV_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS": 34,
|
||||
"ANNEX_II_NEEDS_OPERATION_OR_CONDITION": 11,
|
||||
"ANNEX_XV_NEEDS_OPERATION_OR_CONDITION": 42,
|
||||
"ANNEX_V_NEEDS_OPERATION_OR_CONDITION": 12,
|
||||
"ANNEX_XI_NEEDS_OPERATION_OR_CONDITION": 12,
|
||||
"ANNEX_VI_NEEDS_OPERATION_OR_CONDITION": 3
|
||||
},
|
||||
"catalog_compatibility": {
|
||||
"compatibility": "MATERIAL_MISMATCH",
|
||||
"counts": {
|
||||
"MATCH_SAFE": 131,
|
||||
"MATCH_WITH_NON_MATERIAL_DIFFERENCE": 0,
|
||||
"MISMATCH": 11,
|
||||
"EXPIRED": 3,
|
||||
"MISSING_LOCAL": 19,
|
||||
"MISSING_OFFICIAL": 0
|
||||
},
|
||||
"expired_present_locally": 3
|
||||
}
|
||||
},
|
||||
"by_status": {
|
||||
"SUGGESTION_ONLY": 6430,
|
||||
"RESOLVED_WITH_EXPLICIT_RULE": 989,
|
||||
"AMBIGUOUS": 1432,
|
||||
"INSUFFICIENT_EVIDENCE": 91
|
||||
},
|
||||
"rtc_blocker_types": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 6430,
|
||||
"CCLASSTRIB_MISSING": 989,
|
||||
"CCLASSTRIB_AMBIGUOUS": 1432,
|
||||
"RTC_RULE_EVIDENCE_MISSING": 91
|
||||
},
|
||||
"AUTO_APPLY_CANDIDATES": 989,
|
||||
"context": {
|
||||
"rtc_param": "0",
|
||||
"rtc_source": "SIMULATION",
|
||||
"rtc_observed_at": "2026-09-25T11:52:45+00:00",
|
||||
"local_catalog_hash": "be8c5899fff3e236c6c77bbb887087c0a2db048aeff763a5823676c7b478a151",
|
||||
"official_catalog": {
|
||||
"sha256": "1448cb63a41bdb67ea30b4e11f4dc200d9568542c6b9335b6cff87a4fd664654",
|
||||
"publication": "2026-06-22",
|
||||
"file": "cClassTrib 2026-06-22.xlsx"
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"MMMODAS": {
|
||||
"crt": "1",
|
||||
"total_products": 20997,
|
||||
"passes": {
|
||||
"AS_FOUND": {
|
||||
"crt": "1",
|
||||
"rtc_enabled": false,
|
||||
"products": 20996,
|
||||
"resolution_summary": null,
|
||||
"by_status": {
|
||||
"NOT_EVALUATED": 20996
|
||||
},
|
||||
"rtc_blocker_types": {},
|
||||
"AUTO_APPLY_CANDIDATES": 0,
|
||||
"context": {
|
||||
"rtc_param": "0",
|
||||
"rtc_source": "PARAMETROS.USAR_REFORMA_TRIBUTARIA",
|
||||
"rtc_observed_at": "2026-09-25T11:52:47+00:00",
|
||||
"local_catalog_hash": "1da77aec27fbde88488d1edf562f3af315ab2b5d06efb2e0b2f1ed606585d459",
|
||||
"official_catalog": null,
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"WHATIF_RTC_ON": {
|
||||
"crt": "1",
|
||||
"rtc_enabled": true,
|
||||
"products": 20996,
|
||||
"resolution_summary": {
|
||||
"total": 20996,
|
||||
"valid_existing": 0,
|
||||
"ready_to_apply": 0,
|
||||
"suggestion_only": 0,
|
||||
"ambiguous": 0,
|
||||
"insufficient": 20996,
|
||||
"conflicts": 0,
|
||||
"official_mismatch": 0,
|
||||
"catalog_incompatible": 0,
|
||||
"not_applicable": 0,
|
||||
"other_blocked": 0,
|
||||
"by_rule": {
|
||||
"RTC-R1": 20996
|
||||
},
|
||||
"by_reason": {
|
||||
"SIMPLES_ORIENTATION_PENDING_OFFICIAL_NT": 20996
|
||||
},
|
||||
"catalog_compatibility": {
|
||||
"compatibility": "MATERIAL_MISMATCH",
|
||||
"counts": {
|
||||
"MATCH_SAFE": 131,
|
||||
"MATCH_WITH_NON_MATERIAL_DIFFERENCE": 0,
|
||||
"MISMATCH": 11,
|
||||
"EXPIRED": 3,
|
||||
"MISSING_LOCAL": 19,
|
||||
"MISSING_OFFICIAL": 0
|
||||
},
|
||||
"expired_present_locally": 3
|
||||
}
|
||||
},
|
||||
"by_status": {
|
||||
"INSUFFICIENT_EVIDENCE": 20996
|
||||
},
|
||||
"rtc_blocker_types": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 20996
|
||||
},
|
||||
"AUTO_APPLY_CANDIDATES": 0,
|
||||
"context": {
|
||||
"rtc_param": "0",
|
||||
"rtc_source": "SIMULATION",
|
||||
"rtc_observed_at": "2026-09-25T11:52:49+00:00",
|
||||
"local_catalog_hash": "1da77aec27fbde88488d1edf562f3af315ab2b5d06efb2e0b2f1ed606585d459",
|
||||
"official_catalog": {
|
||||
"sha256": "1448cb63a41bdb67ea30b4e11f4dc200d9568542c6b9335b6cff87a4fd664654",
|
||||
"publication": "2026-06-22",
|
||||
"file": "cClassTrib 2026-06-22.xlsx"
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"WHATIF_NORMAL_ON": {
|
||||
"crt": "3",
|
||||
"rtc_enabled": true,
|
||||
"products": 20996,
|
||||
"resolution_summary": {
|
||||
"total": 20996,
|
||||
"valid_existing": 0,
|
||||
"ready_to_apply": 1,
|
||||
"suggestion_only": 20565,
|
||||
"ambiguous": 314,
|
||||
"insufficient": 116,
|
||||
"conflicts": 0,
|
||||
"official_mismatch": 0,
|
||||
"catalog_incompatible": 0,
|
||||
"not_applicable": 0,
|
||||
"other_blocked": 0,
|
||||
"by_rule": {
|
||||
"RTC-R3": 1,
|
||||
"RTC-R4": 20565,
|
||||
"RTC-R2": 116,
|
||||
"RTC-A3": 313,
|
||||
"RTC-A1": 1
|
||||
},
|
||||
"by_reason": {
|
||||
"ANNEX_VII_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS": 1,
|
||||
"NCM_IN_NO_ANNEX_AND_NO_NATURE_BASED_CHAPTER": 20565,
|
||||
"NO_VALID_NCM": 116,
|
||||
"SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD": 313,
|
||||
"ANNEX_XV_NEEDS_OPERATION_OR_CONDITION": 1
|
||||
},
|
||||
"catalog_compatibility": {
|
||||
"compatibility": "MATERIAL_MISMATCH",
|
||||
"counts": {
|
||||
"MATCH_SAFE": 131,
|
||||
"MATCH_WITH_NON_MATERIAL_DIFFERENCE": 0,
|
||||
"MISMATCH": 11,
|
||||
"EXPIRED": 3,
|
||||
"MISSING_LOCAL": 19,
|
||||
"MISSING_OFFICIAL": 0
|
||||
},
|
||||
"expired_present_locally": 3
|
||||
}
|
||||
},
|
||||
"by_status": {
|
||||
"RESOLVED_WITH_EXPLICIT_RULE": 1,
|
||||
"SUGGESTION_ONLY": 20565,
|
||||
"INSUFFICIENT_EVIDENCE": 116,
|
||||
"AMBIGUOUS": 314
|
||||
},
|
||||
"rtc_blocker_types": {
|
||||
"CCLASSTRIB_MISSING": 1,
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 20565,
|
||||
"RTC_RULE_EVIDENCE_MISSING": 116,
|
||||
"CCLASSTRIB_AMBIGUOUS": 314
|
||||
},
|
||||
"AUTO_APPLY_CANDIDATES": 1,
|
||||
"context": {
|
||||
"rtc_param": "0",
|
||||
"rtc_source": "SIMULATION",
|
||||
"rtc_observed_at": "2026-09-25T11:52:55+00:00",
|
||||
"local_catalog_hash": "1da77aec27fbde88488d1edf562f3af315ab2b5d06efb2e0b2f1ed606585d459",
|
||||
"official_catalog": {
|
||||
"sha256": "1448cb63a41bdb67ea30b4e11f4dc200d9568542c6b9335b6cff87a4fd664654",
|
||||
"publication": "2026-06-22",
|
||||
"file": "cClassTrib 2026-06-22.xlsx"
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"database": "MMMODAS",
|
||||
"phases_seconds": {
|
||||
"firebird_read": 1.15,
|
||||
"hub_classification": 722.4,
|
||||
"operational_states": 0.12,
|
||||
"fiscal_rtc_pis_cofins_assessment": 1.38,
|
||||
"payload_generation": 0.01
|
||||
},
|
||||
"products": 20997,
|
||||
"total_seconds": 725.06,
|
||||
"peak_rss_mb": null,
|
||||
"products_per_second": 29.0
|
||||
}
|
||||
@@ -0,0 +1,657 @@
|
||||
{
|
||||
"mode": "FULL (Hub decision + fiscal)",
|
||||
"database": "CONSTRUCAO",
|
||||
"crt": "1",
|
||||
"products": 3712,
|
||||
"fiscal_products_read": 3712,
|
||||
"BEFORE": {
|
||||
"COMPLETE_PRODUCTS": 3698,
|
||||
"SAFE_BLOCKED_PRODUCTS": 14,
|
||||
"COVERAGE_PERCENT": 99.62,
|
||||
"UNKNOWN_APPLICABILITY_previous_model": 3712
|
||||
},
|
||||
"runs": {
|
||||
"ERP_AS_FOUND": {
|
||||
"rtc_enabled": true,
|
||||
"TOTAL_PRODUCTS": 3712,
|
||||
"COMPLETE_PRODUCTS": 0,
|
||||
"SAFE_BLOCKED_PRODUCTS": 3712,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 0.0,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 0,
|
||||
"COFINS_BLOCKERS": 0,
|
||||
"RTC_BLOCKERS": 3712,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 3712
|
||||
},
|
||||
"applicability": {
|
||||
"NOT_APPLICABLE": 3712
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"REQUIRED": 3712
|
||||
},
|
||||
"changed_products": 3698,
|
||||
"examples": [
|
||||
{
|
||||
"product": "000001",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000002",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000003",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000004",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000005",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000006",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000007",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000008",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000009",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000010",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000011",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000012",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000013",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000014",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000015",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000016",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000017",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000018",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000019",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000020",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000021",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000022",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000023",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000024",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000025",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000026",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000027",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000028",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000029",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000030",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
}
|
||||
],
|
||||
"non_canonical_warnings": 0,
|
||||
"context": {
|
||||
"rtc_enabled": true,
|
||||
"erp_rtc_enabled": true,
|
||||
"rtc_supported": true,
|
||||
"rtc_catalog_valid": true,
|
||||
"rtc_param": "1",
|
||||
"rtc_source": "PARAMETROS.USAR_REFORMA_TRIBUTARIA",
|
||||
"rtc_param_rows": 1,
|
||||
"rtc_param_conflict": false,
|
||||
"rtc_observed_at": "2026-09-25T11:29:29+00:00",
|
||||
"legal_effective_context": {
|
||||
"crt": "1",
|
||||
"informational_only": true,
|
||||
"ibs_cbs_in_documents": "MANDATORY_FROM_2027-01-01",
|
||||
"cclasstrib_orientation": "PENDING_OFFICIAL_NT",
|
||||
"sources": [
|
||||
"Ato Conjunto RFB/CGIBS n 4/2026 (DOU 31/07/2026) art. 1 I, II and par. 1",
|
||||
"NT 2025.002-RTC v1.51 (Portal NF-e, 04/08/2026): CRT 1/2/4 orientations in a future NT",
|
||||
"LC 214/2025 art. 348"
|
||||
]
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
},
|
||||
"crt": "1",
|
||||
"products_evaluated": 3712,
|
||||
"pis_cofins_applicability": {
|
||||
"NOT_APPLICABLE": 3712
|
||||
},
|
||||
"rtc_resolution": {
|
||||
"total": 3712,
|
||||
"valid_existing": 0,
|
||||
"ready_to_apply": 0,
|
||||
"suggestion_only": 0,
|
||||
"ambiguous": 0,
|
||||
"insufficient": 3712,
|
||||
"conflicts": 0,
|
||||
"official_mismatch": 0,
|
||||
"catalog_incompatible": 0,
|
||||
"not_applicable": 0,
|
||||
"other_blocked": 0,
|
||||
"by_rule": {
|
||||
"RTC-R1": 3712
|
||||
},
|
||||
"by_reason": {
|
||||
"SIMPLES_ORIENTATION_PENDING_OFFICIAL_NT": 3712
|
||||
},
|
||||
"catalog_compatibility": {
|
||||
"compatibility": "MATERIAL_MISMATCH",
|
||||
"counts": {
|
||||
"MATCH_SAFE": 131,
|
||||
"MATCH_WITH_NON_MATERIAL_DIFFERENCE": 0,
|
||||
"MISMATCH": 11,
|
||||
"EXPIRED": 3,
|
||||
"MISSING_LOCAL": 19,
|
||||
"MISSING_OFFICIAL": 0
|
||||
},
|
||||
"expired_present_locally": 3
|
||||
}
|
||||
},
|
||||
"local_catalog_hash": "be8c5899fff3e236c6c77bbb887087c0a2db048aeff763a5823676c7b478a151",
|
||||
"official_catalog": {
|
||||
"sha256": "1448cb63a41bdb67ea30b4e11f4dc200d9568542c6b9335b6cff87a4fd664654",
|
||||
"publication": "2026-06-22",
|
||||
"file": "cClassTrib 2026-06-22.xlsx"
|
||||
},
|
||||
"non_canonical_warnings": {
|
||||
"products": 0,
|
||||
"by_type": {},
|
||||
"samples": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"RTC_OFF_SIMULATION": {
|
||||
"rtc_enabled": false,
|
||||
"TOTAL_PRODUCTS": 3712,
|
||||
"COMPLETE_PRODUCTS": 3698,
|
||||
"SAFE_BLOCKED_PRODUCTS": 14,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 99.62,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 0,
|
||||
"COFINS_BLOCKERS": 0,
|
||||
"RTC_BLOCKERS": 0,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {},
|
||||
"applicability": {
|
||||
"NOT_APPLICABLE": 3712
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"NOT_APPLICABLE": 3712
|
||||
},
|
||||
"changed_products": 0,
|
||||
"examples": [],
|
||||
"non_canonical_warnings": 0
|
||||
},
|
||||
"RTC_ON_SIMULATION": {
|
||||
"rtc_enabled": true,
|
||||
"TOTAL_PRODUCTS": 3712,
|
||||
"COMPLETE_PRODUCTS": 0,
|
||||
"SAFE_BLOCKED_PRODUCTS": 3712,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 0.0,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 0,
|
||||
"COFINS_BLOCKERS": 0,
|
||||
"RTC_BLOCKERS": 3712,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 3712
|
||||
},
|
||||
"applicability": {
|
||||
"NOT_APPLICABLE": 3712
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"REQUIRED": 3712
|
||||
},
|
||||
"changed_products": 3698,
|
||||
"examples": [
|
||||
{
|
||||
"product": "000001",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000002",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000003",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000004",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000005",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000006",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000007",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000008",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000009",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000010",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000011",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000012",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000013",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000014",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000015",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000016",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000017",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000018",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000019",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000020",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000021",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000022",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000023",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000024",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000025",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000026",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000027",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000028",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000029",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000030",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
}
|
||||
],
|
||||
"non_canonical_warnings": 0
|
||||
}
|
||||
},
|
||||
"SAFETY": {
|
||||
"FIREBIRD_WRITES": 0,
|
||||
"WRITE_ATTEMPTS": 0,
|
||||
"WRITE_SUCCESSES": 0,
|
||||
"connection_mode": "READ COMMITTED READ ONLY (Agent reader); no write-capable connection opened"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,380 @@
|
||||
{
|
||||
"mode": "FULL (Hub decision + fiscal)",
|
||||
"database": "MMMODAS",
|
||||
"crt": "1",
|
||||
"products": 20997,
|
||||
"fiscal_products_read": 20997,
|
||||
"BEFORE": {
|
||||
"COMPLETE_PRODUCTS": 20881,
|
||||
"SAFE_BLOCKED_PRODUCTS": 116,
|
||||
"COVERAGE_PERCENT": 99.45,
|
||||
"UNKNOWN_APPLICABILITY_previous_model": 20996
|
||||
},
|
||||
"runs": {
|
||||
"ERP_AS_FOUND": {
|
||||
"rtc_enabled": false,
|
||||
"TOTAL_PRODUCTS": 20997,
|
||||
"COMPLETE_PRODUCTS": 20881,
|
||||
"SAFE_BLOCKED_PRODUCTS": 116,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 99.45,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 0,
|
||||
"COFINS_BLOCKERS": 0,
|
||||
"RTC_BLOCKERS": 0,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {},
|
||||
"applicability": {
|
||||
"NOT_APPLICABLE": 20996
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"NOT_APPLICABLE": 20996
|
||||
},
|
||||
"changed_products": 0,
|
||||
"examples": [],
|
||||
"non_canonical_warnings": 0,
|
||||
"context": {
|
||||
"rtc_enabled": false,
|
||||
"erp_rtc_enabled": false,
|
||||
"rtc_supported": true,
|
||||
"rtc_catalog_valid": true,
|
||||
"rtc_param": "0",
|
||||
"rtc_source": "PARAMETROS.USAR_REFORMA_TRIBUTARIA",
|
||||
"rtc_param_rows": 1,
|
||||
"rtc_param_conflict": false,
|
||||
"rtc_observed_at": "2026-09-25T11:47:33+00:00",
|
||||
"legal_effective_context": {
|
||||
"crt": "1",
|
||||
"informational_only": true,
|
||||
"ibs_cbs_in_documents": "MANDATORY_FROM_2027-01-01",
|
||||
"cclasstrib_orientation": "PENDING_OFFICIAL_NT",
|
||||
"sources": [
|
||||
"Ato Conjunto RFB/CGIBS n 4/2026 (DOU 31/07/2026) art. 1 I, II and par. 1",
|
||||
"NT 2025.002-RTC v1.51 (Portal NF-e, 04/08/2026): CRT 1/2/4 orientations in a future NT",
|
||||
"LC 214/2025 art. 348"
|
||||
]
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
},
|
||||
"crt": "1",
|
||||
"products_evaluated": 20997,
|
||||
"pis_cofins_applicability": {
|
||||
"NOT_APPLICABLE": 20997
|
||||
},
|
||||
"rtc_resolution": null,
|
||||
"local_catalog_hash": "1da77aec27fbde88488d1edf562f3af315ab2b5d06efb2e0b2f1ed606585d459",
|
||||
"official_catalog": null,
|
||||
"non_canonical_warnings": {
|
||||
"products": 0,
|
||||
"by_type": {},
|
||||
"samples": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"RTC_OFF_SIMULATION": {
|
||||
"rtc_enabled": false,
|
||||
"TOTAL_PRODUCTS": 20997,
|
||||
"COMPLETE_PRODUCTS": 20881,
|
||||
"SAFE_BLOCKED_PRODUCTS": 116,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 99.45,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 0,
|
||||
"COFINS_BLOCKERS": 0,
|
||||
"RTC_BLOCKERS": 0,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {},
|
||||
"applicability": {
|
||||
"NOT_APPLICABLE": 20996
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"NOT_APPLICABLE": 20996
|
||||
},
|
||||
"changed_products": 0,
|
||||
"examples": [],
|
||||
"non_canonical_warnings": 0
|
||||
},
|
||||
"RTC_ON_SIMULATION": {
|
||||
"rtc_enabled": true,
|
||||
"TOTAL_PRODUCTS": 20997,
|
||||
"COMPLETE_PRODUCTS": 0,
|
||||
"SAFE_BLOCKED_PRODUCTS": 20997,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 0.0,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 0,
|
||||
"COFINS_BLOCKERS": 0,
|
||||
"RTC_BLOCKERS": 20996,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 20996
|
||||
},
|
||||
"applicability": {
|
||||
"NOT_APPLICABLE": 20996
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"REQUIRED": 20996
|
||||
},
|
||||
"changed_products": 20881,
|
||||
"examples": [
|
||||
{
|
||||
"product": "000002",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000003",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000006",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000008",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000011",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000013",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000014",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000016",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000017",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000018",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000019",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000020",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000022",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000023",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000024",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000025",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000026",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000027",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000028",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000029",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000030",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000031",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000032",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000033",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000034",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000038",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000039",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000040",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000041",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000042",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
}
|
||||
],
|
||||
"non_canonical_warnings": 0
|
||||
}
|
||||
},
|
||||
"SAFETY": {
|
||||
"FIREBIRD_WRITES": 0,
|
||||
"WRITE_ATTEMPTS": 0,
|
||||
"WRITE_SUCCESSES": 0,
|
||||
"connection_mode": "READ COMMITTED READ ONLY (Agent reader); no write-capable connection opened"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,462 @@
|
||||
{
|
||||
"mode": "FULL (Hub decision + fiscal)",
|
||||
"database": "RINCAO",
|
||||
"crt": "3",
|
||||
"products": 894,
|
||||
"fiscal_products_read": 894,
|
||||
"BEFORE": {
|
||||
"COMPLETE_PRODUCTS": 894,
|
||||
"SAFE_BLOCKED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 100.0,
|
||||
"UNKNOWN_APPLICABILITY_previous_model": 815
|
||||
},
|
||||
"runs": {
|
||||
"ERP_AS_FOUND": {
|
||||
"rtc_enabled": false,
|
||||
"TOTAL_PRODUCTS": 894,
|
||||
"COMPLETE_PRODUCTS": 893,
|
||||
"SAFE_BLOCKED_PRODUCTS": 1,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 99.89,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 1,
|
||||
"COFINS_BLOCKERS": 1,
|
||||
"RTC_BLOCKERS": 0,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {
|
||||
"COFINS_CST_INVALID": 1,
|
||||
"PIS_CST_INVALID": 1
|
||||
},
|
||||
"applicability": {
|
||||
"OPTIONAL": 894
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"NOT_APPLICABLE": 894
|
||||
},
|
||||
"changed_products": 1,
|
||||
"examples": [
|
||||
{
|
||||
"product": "000866",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"COFINS_CST_INVALID",
|
||||
"PIS_CST_INVALID"
|
||||
]
|
||||
}
|
||||
],
|
||||
"non_canonical_warnings": 78,
|
||||
"context": {
|
||||
"rtc_enabled": false,
|
||||
"erp_rtc_enabled": false,
|
||||
"rtc_supported": true,
|
||||
"rtc_catalog_valid": true,
|
||||
"rtc_param": "0",
|
||||
"rtc_source": "PARAMETROS.USAR_REFORMA_TRIBUTARIA",
|
||||
"rtc_param_rows": 1,
|
||||
"rtc_param_conflict": false,
|
||||
"rtc_observed_at": "2026-09-25T11:30:07+00:00",
|
||||
"legal_effective_context": {
|
||||
"crt": "3",
|
||||
"informational_only": true,
|
||||
"ibs_cbs_in_documents": "MANDATORY_FROM_2026-08-03",
|
||||
"cclasstrib_orientation": "TABLE_AND_LC214_ANNEXES",
|
||||
"sources": [
|
||||
"Ato Conjunto RFB/CGIBS n 4/2026 (DOU 31/07/2026) art. 1 I, II and par. 1",
|
||||
"NT 2025.002-RTC v1.51 (Portal NF-e, 04/08/2026): CRT 1/2/4 orientations in a future NT",
|
||||
"LC 214/2025 art. 348"
|
||||
]
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
},
|
||||
"crt": "3",
|
||||
"products_evaluated": 894,
|
||||
"pis_cofins_applicability": {
|
||||
"OPTIONAL": 894
|
||||
},
|
||||
"rtc_resolution": null,
|
||||
"local_catalog_hash": "be8c5899fff3e236c6c77bbb887087c0a2db048aeff763a5823676c7b478a151",
|
||||
"official_catalog": null,
|
||||
"non_canonical_warnings": {
|
||||
"products": 78,
|
||||
"by_type": {
|
||||
"CST_COFINS_NON_CANONICAL_FORMAT": 78,
|
||||
"CST_PIS_NON_CANONICAL_FORMAT": 78
|
||||
},
|
||||
"samples": [
|
||||
{
|
||||
"product_code": "000139",
|
||||
"type": "CST_PIS_NON_CANONICAL_FORMAT",
|
||||
"reason": "EXIT:4->04"
|
||||
},
|
||||
{
|
||||
"product_code": "000139",
|
||||
"type": "CST_COFINS_NON_CANONICAL_FORMAT",
|
||||
"reason": "EXIT:4->04"
|
||||
},
|
||||
{
|
||||
"product_code": "000140",
|
||||
"type": "CST_PIS_NON_CANONICAL_FORMAT",
|
||||
"reason": "EXIT:4->04"
|
||||
},
|
||||
{
|
||||
"product_code": "000140",
|
||||
"type": "CST_COFINS_NON_CANONICAL_FORMAT",
|
||||
"reason": "EXIT:4->04"
|
||||
},
|
||||
{
|
||||
"product_code": "000141",
|
||||
"type": "CST_PIS_NON_CANONICAL_FORMAT",
|
||||
"reason": "EXIT:4->04"
|
||||
},
|
||||
{
|
||||
"product_code": "000141",
|
||||
"type": "CST_COFINS_NON_CANONICAL_FORMAT",
|
||||
"reason": "EXIT:4->04"
|
||||
},
|
||||
{
|
||||
"product_code": "000142",
|
||||
"type": "CST_PIS_NON_CANONICAL_FORMAT",
|
||||
"reason": "EXIT:4->04"
|
||||
},
|
||||
{
|
||||
"product_code": "000142",
|
||||
"type": "CST_COFINS_NON_CANONICAL_FORMAT",
|
||||
"reason": "EXIT:4->04"
|
||||
},
|
||||
{
|
||||
"product_code": "000143",
|
||||
"type": "CST_PIS_NON_CANONICAL_FORMAT",
|
||||
"reason": "EXIT:4->04"
|
||||
},
|
||||
{
|
||||
"product_code": "000143",
|
||||
"type": "CST_COFINS_NON_CANONICAL_FORMAT",
|
||||
"reason": "EXIT:4->04"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"RTC_OFF_SIMULATION": {
|
||||
"rtc_enabled": false,
|
||||
"TOTAL_PRODUCTS": 894,
|
||||
"COMPLETE_PRODUCTS": 893,
|
||||
"SAFE_BLOCKED_PRODUCTS": 1,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 99.89,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 1,
|
||||
"COFINS_BLOCKERS": 1,
|
||||
"RTC_BLOCKERS": 0,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {
|
||||
"COFINS_CST_INVALID": 1,
|
||||
"PIS_CST_INVALID": 1
|
||||
},
|
||||
"applicability": {
|
||||
"OPTIONAL": 894
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"NOT_APPLICABLE": 894
|
||||
},
|
||||
"changed_products": 1,
|
||||
"examples": [
|
||||
{
|
||||
"product": "000866",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"COFINS_CST_INVALID",
|
||||
"PIS_CST_INVALID"
|
||||
]
|
||||
}
|
||||
],
|
||||
"non_canonical_warnings": 78
|
||||
},
|
||||
"RTC_ON_SIMULATION": {
|
||||
"rtc_enabled": true,
|
||||
"TOTAL_PRODUCTS": 894,
|
||||
"COMPLETE_PRODUCTS": 0,
|
||||
"SAFE_BLOCKED_PRODUCTS": 894,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 0.0,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 1,
|
||||
"COFINS_BLOCKERS": 1,
|
||||
"RTC_BLOCKERS": 894,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {
|
||||
"COFINS_CST_INVALID": 1,
|
||||
"PIS_CST_INVALID": 1,
|
||||
"RTC_RULE_EVIDENCE_MISSING": 894
|
||||
},
|
||||
"applicability": {
|
||||
"OPTIONAL": 894
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"REQUIRED": 894
|
||||
},
|
||||
"changed_products": 894,
|
||||
"examples": [
|
||||
{
|
||||
"product": "000001",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000004",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000005",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000006",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000007",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000008",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000009",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000010",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000011",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000012",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000013",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000014",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000015",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000016",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000017",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000018",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000019",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000020",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000021",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000022",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000023",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000024",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000025",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000026",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000027",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000028",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000029",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000030",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000031",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000032",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"RTC_RULE_EVIDENCE_MISSING"
|
||||
]
|
||||
}
|
||||
],
|
||||
"non_canonical_warnings": 78
|
||||
}
|
||||
},
|
||||
"SAFETY": {
|
||||
"FIREBIRD_WRITES": 0,
|
||||
"WRITE_ATTEMPTS": 0,
|
||||
"WRITE_SUCCESSES": 0,
|
||||
"connection_mode": "READ COMMITTED READ ONLY (Agent reader); no write-capable connection opened"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,702 @@
|
||||
{
|
||||
"mode": "FULL (Hub decision + fiscal)",
|
||||
"database": "TESTESOFICIAIS",
|
||||
"crt": "1",
|
||||
"products": 521,
|
||||
"fiscal_products_read": 521,
|
||||
"BEFORE": {
|
||||
"COMPLETE_PRODUCTS": 495,
|
||||
"SAFE_BLOCKED_PRODUCTS": 26,
|
||||
"COVERAGE_PERCENT": 95.01,
|
||||
"UNKNOWN_APPLICABILITY_previous_model": 518
|
||||
},
|
||||
"runs": {
|
||||
"ERP_AS_FOUND": {
|
||||
"rtc_enabled": true,
|
||||
"TOTAL_PRODUCTS": 521,
|
||||
"COMPLETE_PRODUCTS": 0,
|
||||
"SAFE_BLOCKED_PRODUCTS": 521,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 0.0,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 1,
|
||||
"COFINS_BLOCKERS": 1,
|
||||
"RTC_BLOCKERS": 521,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 521,
|
||||
"COFINS_CST_INCIDENCE_MISMATCH": 1,
|
||||
"PIS_CST_INCIDENCE_MISMATCH": 1
|
||||
},
|
||||
"applicability": {
|
||||
"NOT_APPLICABLE": 519,
|
||||
"REQUIRED": 2
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"REQUIRED": 521
|
||||
},
|
||||
"changed_products": 495,
|
||||
"examples": [
|
||||
{
|
||||
"product": "000004",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000005",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000006",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000008",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000009",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000010",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000011",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000013",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000015",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000017",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000018",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000019",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000021",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000022",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000023",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000024",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000025",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000026",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000027",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000028",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000029",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000032",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000033",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000034",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000035",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000036",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000038",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000040",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000041",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000042",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
}
|
||||
],
|
||||
"non_canonical_warnings": 1,
|
||||
"context": {
|
||||
"rtc_enabled": true,
|
||||
"erp_rtc_enabled": true,
|
||||
"rtc_supported": true,
|
||||
"rtc_catalog_valid": true,
|
||||
"rtc_param": "1",
|
||||
"rtc_source": "PARAMETROS.USAR_REFORMA_TRIBUTARIA",
|
||||
"rtc_param_rows": 1,
|
||||
"rtc_param_conflict": false,
|
||||
"rtc_observed_at": "2026-09-25T11:27:25+00:00",
|
||||
"legal_effective_context": {
|
||||
"crt": "1",
|
||||
"informational_only": true,
|
||||
"ibs_cbs_in_documents": "MANDATORY_FROM_2027-01-01",
|
||||
"cclasstrib_orientation": "PENDING_OFFICIAL_NT",
|
||||
"sources": [
|
||||
"Ato Conjunto RFB/CGIBS n 4/2026 (DOU 31/07/2026) art. 1 I, II and par. 1",
|
||||
"NT 2025.002-RTC v1.51 (Portal NF-e, 04/08/2026): CRT 1/2/4 orientations in a future NT",
|
||||
"LC 214/2025 art. 348"
|
||||
]
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
},
|
||||
"crt": "1",
|
||||
"products_evaluated": 521,
|
||||
"pis_cofins_applicability": {
|
||||
"NOT_APPLICABLE": 519,
|
||||
"REQUIRED": 2
|
||||
},
|
||||
"rtc_resolution": {
|
||||
"total": 521,
|
||||
"valid_existing": 0,
|
||||
"ready_to_apply": 0,
|
||||
"suggestion_only": 0,
|
||||
"ambiguous": 0,
|
||||
"insufficient": 521,
|
||||
"conflicts": 0,
|
||||
"official_mismatch": 0,
|
||||
"catalog_incompatible": 0,
|
||||
"not_applicable": 0,
|
||||
"other_blocked": 0,
|
||||
"by_rule": {
|
||||
"RTC-R1": 521
|
||||
},
|
||||
"by_reason": {
|
||||
"SIMPLES_ORIENTATION_PENDING_OFFICIAL_NT": 521
|
||||
},
|
||||
"catalog_compatibility": {
|
||||
"compatibility": "MATERIAL_MISMATCH",
|
||||
"counts": {
|
||||
"MATCH_SAFE": 131,
|
||||
"MATCH_WITH_NON_MATERIAL_DIFFERENCE": 0,
|
||||
"MISMATCH": 11,
|
||||
"EXPIRED": 3,
|
||||
"MISSING_LOCAL": 19,
|
||||
"MISSING_OFFICIAL": 0
|
||||
},
|
||||
"expired_present_locally": 3
|
||||
}
|
||||
},
|
||||
"local_catalog_hash": "1da77aec27fbde88488d1edf562f3af315ab2b5d06efb2e0b2f1ed606585d459",
|
||||
"official_catalog": {
|
||||
"sha256": "1448cb63a41bdb67ea30b4e11f4dc200d9568542c6b9335b6cff87a4fd664654",
|
||||
"publication": "2026-06-22",
|
||||
"file": "cClassTrib 2026-06-22.xlsx"
|
||||
},
|
||||
"non_canonical_warnings": {
|
||||
"products": 1,
|
||||
"by_type": {
|
||||
"CST_COFINS_NON_CANONICAL_FORMAT": 2,
|
||||
"CST_PIS_NON_CANONICAL_FORMAT": 2
|
||||
},
|
||||
"samples": [
|
||||
{
|
||||
"product_code": "001434",
|
||||
"type": "CST_PIS_NON_CANONICAL_FORMAT",
|
||||
"reason": "ENTRY:2->02"
|
||||
},
|
||||
{
|
||||
"product_code": "001434",
|
||||
"type": "CST_PIS_NON_CANONICAL_FORMAT",
|
||||
"reason": "EXIT:2->02"
|
||||
},
|
||||
{
|
||||
"product_code": "001434",
|
||||
"type": "CST_COFINS_NON_CANONICAL_FORMAT",
|
||||
"reason": "ENTRY:2->02"
|
||||
},
|
||||
{
|
||||
"product_code": "001434",
|
||||
"type": "CST_COFINS_NON_CANONICAL_FORMAT",
|
||||
"reason": "EXIT:2->02"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"RTC_OFF_SIMULATION": {
|
||||
"rtc_enabled": false,
|
||||
"TOTAL_PRODUCTS": 521,
|
||||
"COMPLETE_PRODUCTS": 494,
|
||||
"SAFE_BLOCKED_PRODUCTS": 27,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 94.82,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 1,
|
||||
"COFINS_BLOCKERS": 1,
|
||||
"RTC_BLOCKERS": 0,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {
|
||||
"COFINS_CST_INCIDENCE_MISMATCH": 1,
|
||||
"PIS_CST_INCIDENCE_MISMATCH": 1
|
||||
},
|
||||
"applicability": {
|
||||
"NOT_APPLICABLE": 519,
|
||||
"REQUIRED": 2
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"NOT_APPLICABLE": 521
|
||||
},
|
||||
"changed_products": 1,
|
||||
"examples": [
|
||||
{
|
||||
"product": "000700",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"COFINS_CST_INCIDENCE_MISMATCH",
|
||||
"PIS_CST_INCIDENCE_MISMATCH"
|
||||
]
|
||||
}
|
||||
],
|
||||
"non_canonical_warnings": 1
|
||||
},
|
||||
"RTC_ON_SIMULATION": {
|
||||
"rtc_enabled": true,
|
||||
"TOTAL_PRODUCTS": 521,
|
||||
"COMPLETE_PRODUCTS": 0,
|
||||
"SAFE_BLOCKED_PRODUCTS": 521,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 0.0,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 1,
|
||||
"COFINS_BLOCKERS": 1,
|
||||
"RTC_BLOCKERS": 521,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 521,
|
||||
"COFINS_CST_INCIDENCE_MISMATCH": 1,
|
||||
"PIS_CST_INCIDENCE_MISMATCH": 1
|
||||
},
|
||||
"applicability": {
|
||||
"NOT_APPLICABLE": 519,
|
||||
"REQUIRED": 2
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"REQUIRED": 521
|
||||
},
|
||||
"changed_products": 495,
|
||||
"examples": [
|
||||
{
|
||||
"product": "000004",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000005",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000006",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000008",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000009",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000010",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000011",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000013",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000015",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000017",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000018",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000019",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000021",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000022",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000023",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000024",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000025",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000026",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000027",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000028",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000029",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000032",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000033",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000034",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000035",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000036",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000038",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000040",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000041",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000042",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
}
|
||||
],
|
||||
"non_canonical_warnings": 1
|
||||
}
|
||||
},
|
||||
"SAFETY": {
|
||||
"FIREBIRD_WRITES": 0,
|
||||
"WRITE_ATTEMPTS": 0,
|
||||
"WRITE_SUCCESSES": 0,
|
||||
"connection_mode": "READ COMMITTED READ ONLY (Agent reader); no write-capable connection opened"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,393 @@
|
||||
{
|
||||
"mode": "FULL (Hub decision + fiscal)",
|
||||
"database": "UNIAO",
|
||||
"crt": "1",
|
||||
"products": 8942,
|
||||
"fiscal_products_read": 8942,
|
||||
"BEFORE": {
|
||||
"COMPLETE_PRODUCTS": 8851,
|
||||
"SAFE_BLOCKED_PRODUCTS": 91,
|
||||
"COVERAGE_PERCENT": 98.98,
|
||||
"UNKNOWN_APPLICABILITY_previous_model": 8170
|
||||
},
|
||||
"runs": {
|
||||
"ERP_AS_FOUND": {
|
||||
"rtc_enabled": false,
|
||||
"TOTAL_PRODUCTS": 8942,
|
||||
"COMPLETE_PRODUCTS": 8851,
|
||||
"SAFE_BLOCKED_PRODUCTS": 91,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 98.98,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 0,
|
||||
"COFINS_BLOCKERS": 0,
|
||||
"RTC_BLOCKERS": 0,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {},
|
||||
"applicability": {
|
||||
"NOT_APPLICABLE": 8942
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"NOT_APPLICABLE": 8942
|
||||
},
|
||||
"changed_products": 0,
|
||||
"examples": [],
|
||||
"non_canonical_warnings": 2,
|
||||
"context": {
|
||||
"rtc_enabled": false,
|
||||
"erp_rtc_enabled": false,
|
||||
"rtc_supported": true,
|
||||
"rtc_catalog_valid": true,
|
||||
"rtc_param": "0",
|
||||
"rtc_source": "PARAMETROS.USAR_REFORMA_TRIBUTARIA",
|
||||
"rtc_param_rows": 1,
|
||||
"rtc_param_conflict": false,
|
||||
"rtc_observed_at": "2026-09-25T11:35:07+00:00",
|
||||
"legal_effective_context": {
|
||||
"crt": "1",
|
||||
"informational_only": true,
|
||||
"ibs_cbs_in_documents": "MANDATORY_FROM_2027-01-01",
|
||||
"cclasstrib_orientation": "PENDING_OFFICIAL_NT",
|
||||
"sources": [
|
||||
"Ato Conjunto RFB/CGIBS n 4/2026 (DOU 31/07/2026) art. 1 I, II and par. 1",
|
||||
"NT 2025.002-RTC v1.51 (Portal NF-e, 04/08/2026): CRT 1/2/4 orientations in a future NT",
|
||||
"LC 214/2025 art. 348"
|
||||
]
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
},
|
||||
"crt": "1",
|
||||
"products_evaluated": 8942,
|
||||
"pis_cofins_applicability": {
|
||||
"NOT_APPLICABLE": 8942
|
||||
},
|
||||
"rtc_resolution": null,
|
||||
"local_catalog_hash": "be8c5899fff3e236c6c77bbb887087c0a2db048aeff763a5823676c7b478a151",
|
||||
"official_catalog": null,
|
||||
"non_canonical_warnings": {
|
||||
"products": 2,
|
||||
"by_type": {
|
||||
"CST_COFINS_INVALID_IGNORED": 2
|
||||
},
|
||||
"samples": [
|
||||
{
|
||||
"product_code": "000304",
|
||||
"type": "CST_COFINS_INVALID_IGNORED",
|
||||
"reason": "ENTRY:000"
|
||||
},
|
||||
{
|
||||
"product_code": "003090",
|
||||
"type": "CST_COFINS_INVALID_IGNORED",
|
||||
"reason": "EXIT:060"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"RTC_OFF_SIMULATION": {
|
||||
"rtc_enabled": false,
|
||||
"TOTAL_PRODUCTS": 8942,
|
||||
"COMPLETE_PRODUCTS": 8851,
|
||||
"SAFE_BLOCKED_PRODUCTS": 91,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 98.98,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 0,
|
||||
"COFINS_BLOCKERS": 0,
|
||||
"RTC_BLOCKERS": 0,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {},
|
||||
"applicability": {
|
||||
"NOT_APPLICABLE": 8942
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"NOT_APPLICABLE": 8942
|
||||
},
|
||||
"changed_products": 0,
|
||||
"examples": [],
|
||||
"non_canonical_warnings": 2
|
||||
},
|
||||
"RTC_ON_SIMULATION": {
|
||||
"rtc_enabled": true,
|
||||
"TOTAL_PRODUCTS": 8942,
|
||||
"COMPLETE_PRODUCTS": 0,
|
||||
"SAFE_BLOCKED_PRODUCTS": 8942,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 0.0,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 0,
|
||||
"COFINS_BLOCKERS": 0,
|
||||
"RTC_BLOCKERS": 8942,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 8942
|
||||
},
|
||||
"applicability": {
|
||||
"NOT_APPLICABLE": 8942
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"REQUIRED": 8942
|
||||
},
|
||||
"changed_products": 8851,
|
||||
"examples": [
|
||||
{
|
||||
"product": "000008",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000009",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000014",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000015",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000016",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000017",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000018",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000019",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000020",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000021",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000022",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000023",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000024",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000025",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000026",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000027",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000028",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000029",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000030",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000031",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000032",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000033",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000034",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000035",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000036",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000037",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000038",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000039",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000040",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000041",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
}
|
||||
],
|
||||
"non_canonical_warnings": 2
|
||||
}
|
||||
},
|
||||
"SAFETY": {
|
||||
"FIREBIRD_WRITES": 0,
|
||||
"WRITE_ATTEMPTS": 0,
|
||||
"WRITE_SUCCESSES": 0,
|
||||
"connection_mode": "READ COMMITTED READ ONLY (Agent reader); no write-capable connection opened"
|
||||
}
|
||||
}
|
||||
@@ -151,7 +151,7 @@
|
||||
"lc214_sha256": "5c7d59b3c49e5b7c066c2ad28bedf32791193a676ec1a163bec14bea5fa2f680"
|
||||
},
|
||||
"local_catalog_hash": "1da77aec27fbde88488d1edf562f3af315ab2b5d06efb2e0b2f1ed606585d459",
|
||||
"timestamp": "2026-09-25T01:06:30+00:00",
|
||||
"timestamp": "2026-09-25T11:28:55+00:00",
|
||||
"job_id": 2,
|
||||
"rowcount": 1,
|
||||
"verified_after": true,
|
||||
@@ -196,7 +196,7 @@
|
||||
"lc214_sha256": "5c7d59b3c49e5b7c066c2ad28bedf32791193a676ec1a163bec14bea5fa2f680"
|
||||
},
|
||||
"local_catalog_hash": "1da77aec27fbde88488d1edf562f3af315ab2b5d06efb2e0b2f1ed606585d459",
|
||||
"timestamp": "2026-09-25T01:06:30+00:00",
|
||||
"timestamp": "2026-09-25T11:28:55+00:00",
|
||||
"job_id": 2,
|
||||
"rowcount": 1,
|
||||
"verified_after": true,
|
||||
|
||||
@@ -39,26 +39,6 @@ CONSTRUCAO,000115,87141000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_O
|
||||
CONSTRUCAO,000116,87141000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
CONSTRUCAO,000117,87141000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
CONSTRUCAO,000118,87141000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000002,19022000,,200034,RESOLVED_WITH_EXPLICIT_RULE,RTC-R3,ANNEX_VII_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS,ANNEX_TEXT_MATCH,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000729,90041000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000730,90041000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000731,90031990,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000732,90041000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000733,90041000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000735,90041000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000736,90041000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001248,71171900,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001259,71171900,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001260,71171900,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001261,71171900,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001262,71132000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001263,71171900,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001264,71132000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001265,71132000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001266,71132000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001267,71132000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001270,71132000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001272,71132000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
RINCAO,000004,17041000,,,AMBIGUOUS,RTC-A1,ANNEX_X_NEEDS_OPERATION_OR_CONDITION,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
RINCAO,000005,17041000,,,AMBIGUOUS,RTC-A1,ANNEX_X_NEEDS_OPERATION_OR_CONDITION,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
RINCAO,000006,17041000,,,AMBIGUOUS,RTC-A1,ANNEX_X_NEEDS_OPERATION_OR_CONDITION,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
@@ -99,3 +79,23 @@ UNIAO,000056,20081100,,,AMBIGUOUS,RTC-A1,ANNEX_VII_NEEDS_OPERATION_OR_CONDITION,
|
||||
UNIAO,000058,15121911,,,AMBIGUOUS,RTC-A1,ANNEX_VII_NEEDS_OPERATION_OR_CONDITION,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
UNIAO,000064,02101200,,,AMBIGUOUS,RTC-A2,LISTED_IN_MORE_THAN_ONE_ANNEX,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
UNIAO,000077,20089900,,200034,RESOLVED_WITH_EXPLICIT_RULE,RTC-R3,ANNEX_VII_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS,ANNEX_TEXT_MATCH,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000002,19022000,,200034,RESOLVED_WITH_EXPLICIT_RULE,RTC-R3,ANNEX_VII_CLEAN_ITEM_UNIQUE_DEFAULT_CLASS,ANNEX_TEXT_MATCH,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000729,90041000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000730,90041000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000731,90031990,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000732,90041000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000733,90041000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000735,90041000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,000736,90041000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001248,71171900,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001259,71171900,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001260,71171900,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001261,71171900,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001262,71132000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001263,71171900,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001264,71132000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001265,71132000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001266,71132000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001267,71132000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001270,71132000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
MMMODAS,001272,71132000,,,AMBIGUOUS,RTC-A3,SPECIAL_REGIME_DEPENDS_ON_NATURE_OR_OPERATION_OF_THE_GOOD,NONE,"WHATIF_NORMAL_ON (regime normal, RTC on)"
|
||||
|
||||
|
@@ -0,0 +1,380 @@
|
||||
{
|
||||
"mode": "FULL (Hub decision + fiscal)",
|
||||
"database": "MMMODAS",
|
||||
"crt": "1",
|
||||
"products": 20997,
|
||||
"fiscal_products_read": 20997,
|
||||
"BEFORE": {
|
||||
"COMPLETE_PRODUCTS": 20881,
|
||||
"SAFE_BLOCKED_PRODUCTS": 116,
|
||||
"COVERAGE_PERCENT": 99.45,
|
||||
"UNKNOWN_APPLICABILITY_previous_model": 20996
|
||||
},
|
||||
"runs": {
|
||||
"ERP_AS_FOUND": {
|
||||
"rtc_enabled": false,
|
||||
"TOTAL_PRODUCTS": 20997,
|
||||
"COMPLETE_PRODUCTS": 20881,
|
||||
"SAFE_BLOCKED_PRODUCTS": 116,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 99.45,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 0,
|
||||
"COFINS_BLOCKERS": 0,
|
||||
"RTC_BLOCKERS": 0,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {},
|
||||
"applicability": {
|
||||
"NOT_APPLICABLE": 20996
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"NOT_APPLICABLE": 20996
|
||||
},
|
||||
"changed_products": 0,
|
||||
"examples": [],
|
||||
"non_canonical_warnings": 0,
|
||||
"context": {
|
||||
"rtc_enabled": false,
|
||||
"erp_rtc_enabled": false,
|
||||
"rtc_supported": true,
|
||||
"rtc_catalog_valid": true,
|
||||
"rtc_param": "0",
|
||||
"rtc_source": "PARAMETROS.USAR_REFORMA_TRIBUTARIA",
|
||||
"rtc_param_rows": 1,
|
||||
"rtc_param_conflict": false,
|
||||
"rtc_observed_at": "2026-09-25T03:18:13+00:00",
|
||||
"legal_effective_context": {
|
||||
"crt": "1",
|
||||
"informational_only": true,
|
||||
"ibs_cbs_in_documents": "MANDATORY_FROM_2027-01-01",
|
||||
"cclasstrib_orientation": "PENDING_OFFICIAL_NT",
|
||||
"sources": [
|
||||
"Ato Conjunto RFB/CGIBS n 4/2026 (DOU 31/07/2026) art. 1 I, II and par. 1",
|
||||
"NT 2025.002-RTC v1.51 (Portal NF-e, 04/08/2026): CRT 1/2/4 orientations in a future NT",
|
||||
"LC 214/2025 art. 348"
|
||||
]
|
||||
},
|
||||
"catalog_integrity": {
|
||||
"classes": 145,
|
||||
"cst": 18,
|
||||
"orphan_classes": 0,
|
||||
"bad_class_format": 0,
|
||||
"bad_cst_format": 0,
|
||||
"duplicates": 0,
|
||||
"valid": true
|
||||
},
|
||||
"crt": "1",
|
||||
"products_evaluated": 20997,
|
||||
"pis_cofins_applicability": {
|
||||
"NOT_APPLICABLE": 20997
|
||||
},
|
||||
"rtc_resolution": null,
|
||||
"local_catalog_hash": "1da77aec27fbde88488d1edf562f3af315ab2b5d06efb2e0b2f1ed606585d459",
|
||||
"official_catalog": null,
|
||||
"non_canonical_warnings": {
|
||||
"products": 0,
|
||||
"by_type": {},
|
||||
"samples": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"RTC_OFF_SIMULATION": {
|
||||
"rtc_enabled": false,
|
||||
"TOTAL_PRODUCTS": 20997,
|
||||
"COMPLETE_PRODUCTS": 20881,
|
||||
"SAFE_BLOCKED_PRODUCTS": 116,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 99.45,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 0,
|
||||
"COFINS_BLOCKERS": 0,
|
||||
"RTC_BLOCKERS": 0,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {},
|
||||
"applicability": {
|
||||
"NOT_APPLICABLE": 20996
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"NOT_APPLICABLE": 20996
|
||||
},
|
||||
"changed_products": 0,
|
||||
"examples": [],
|
||||
"non_canonical_warnings": 0
|
||||
},
|
||||
"RTC_ON_SIMULATION": {
|
||||
"rtc_enabled": true,
|
||||
"TOTAL_PRODUCTS": 20997,
|
||||
"COMPLETE_PRODUCTS": 0,
|
||||
"SAFE_BLOCKED_PRODUCTS": 20997,
|
||||
"FAILED_PRODUCTS": 0,
|
||||
"UNCLASSIFIED_PRODUCTS": 0,
|
||||
"COVERAGE_PERCENT": 0.0,
|
||||
"INVARIANT_PASS": true,
|
||||
"PIS_BLOCKERS": 0,
|
||||
"COFINS_BLOCKERS": 0,
|
||||
"RTC_BLOCKERS": 20996,
|
||||
"OTHER_BLOCKERS": 0,
|
||||
"blockers_by_type": {
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED": 20996
|
||||
},
|
||||
"applicability": {
|
||||
"NOT_APPLICABLE": 20996
|
||||
},
|
||||
"rtc_applicability": {
|
||||
"REQUIRED": 20996
|
||||
},
|
||||
"changed_products": 20881,
|
||||
"examples": [
|
||||
{
|
||||
"product": "000002",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000003",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000006",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000008",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000011",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000013",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000014",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000016",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000017",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000018",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000019",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000020",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000022",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000023",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000024",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000025",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000026",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000027",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000028",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000029",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000030",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000031",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000032",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000033",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000034",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000038",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000039",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000040",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000041",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"product": "000042",
|
||||
"BEFORE_STATUS": "COMPLETE",
|
||||
"AFTER_STATUS": "BLOCKED_FISCAL_DATA",
|
||||
"REASON": [
|
||||
"CCLASSTRIB_MISSING_UNRESOLVED"
|
||||
]
|
||||
}
|
||||
],
|
||||
"non_canonical_warnings": 0
|
||||
}
|
||||
},
|
||||
"SAFETY": {
|
||||
"FIREBIRD_WRITES": 0,
|
||||
"WRITE_ATTEMPTS": 0,
|
||||
"WRITE_SUCCESSES": 0,
|
||||
"connection_mode": "READ COMMITTED READ ONLY (Agent reader); no write-capable connection opened"
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"artifact": "RELEASE_MANIFEST",
|
||||
"GTI_FISCAL_VERSION": "1.2.0",
|
||||
"generated_at": "2026-09-24T14:13:15+00:00",
|
||||
"GTI_FISCAL_VERSION": "1.2.1",
|
||||
"generated_at": "2026-09-25T11:54:55+00:00",
|
||||
"hub": {
|
||||
"version": "1.2.0",
|
||||
"version": "1.2.1",
|
||||
"api_compat": "1.0",
|
||||
"engine_version": "0.3.0",
|
||||
"decision_version": "mission-04c-ipi-ex-split"
|
||||
},
|
||||
"agent_version": "1.2.0",
|
||||
"agent_version": "1.2.1",
|
||||
"fiscal_engine": {
|
||||
"ENGINE_VERSION": "0.3.0",
|
||||
"DECISION_VERSION": "mission-04c-ipi-ex-split",
|
||||
@@ -19,7 +19,7 @@
|
||||
"migrations": {
|
||||
"alembic_head_in_repo": "0028_rtc_write_modes",
|
||||
"applied_revision": "0028_rtc_write_modes",
|
||||
"applied_revision_source": "production Hub 10.0.10.117 (gti-fiscal-hub-fiscal-hub-1), verified 2026-09-24",
|
||||
"applied_revision_source": "production Hub 10.0.10.117 (gti-fiscal-hub-fiscal-hub-1), verified 2026-09-25",
|
||||
"count": 28
|
||||
},
|
||||
"datasets_active": [
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
1.2.0
|
||||
1.2.1
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
"""READ-ONLY phase timing of the Agent pipeline on a real database (default MMMODAS ~21k products) against the local dev Hub. Reports wall time per phase and peak RSS.
|
||||
python scripts/measure_scale_agent.py [--db MMMODAS]"""
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
sys.path[:0] = [str(ROOT), str(ROOT / "scripts"), str(ROOT / "agent" / "src")]
|
||||
from dotenv import load_dotenv # noqa: E402
|
||||
|
||||
load_dotenv(ROOT / ".env")
|
||||
import local_completion as lc # noqa: E402
|
||||
from central.app.operational_state import classify_product_state, summarize_operational_states # noqa: E402
|
||||
from gti_fiscal_agent import firebird_reader, unified_fiscal # noqa: E402
|
||||
from gti_fiscal_agent.client import HubClient # noqa: E402
|
||||
from gti_fiscal_agent.runner import to_hub_product # noqa: E402
|
||||
|
||||
|
||||
def rss_mb():
|
||||
try:
|
||||
import psutil
|
||||
return round(psutil.Process().memory_info().rss / 1e6, 1)
|
||||
except Exception: # noqa: BLE001
|
||||
return None
|
||||
|
||||
|
||||
def main():
|
||||
ap = argparse.ArgumentParser(); ap.add_argument("--db", default="MMMODAS"); a = ap.parse_args()
|
||||
path = lc.allowlist()[a.db]; env = lc.env_for(path)
|
||||
out = {"database": a.db, "phases_seconds": {}}
|
||||
t = time.time(); products = firebird_reader.read_products(env); out["phases_seconds"]["firebird_read"] = round(time.time() - t, 2); out["products"] = len(products)
|
||||
t = time.time(); decisions = HubClient(os.environ.get("HUB_URL", lc.HUB), os.environ["AGENT_DEV_TOKEN"]).classify_batch([to_hub_product(p) for p in products]); out["phases_seconds"]["hub_classification"] = round(time.time() - t, 2)
|
||||
t = time.time(); states = [classify_product_state(p, d) for p, d in zip(products, decisions)]; summarize_operational_states(states); out["phases_seconds"]["operational_states"] = round(time.time() - t, 2)
|
||||
t = time.time(); conn = firebird_reader._connect(env)
|
||||
try:
|
||||
assessed = unified_fiscal.assess_from_connection(conn, {"crt": "1"}, rtc_override=None)
|
||||
finally:
|
||||
conn.close()
|
||||
out["phases_seconds"]["fiscal_rtc_pis_cofins_assessment"] = round(time.time() - t, 2)
|
||||
t = time.time(); payload = json.dumps({"operational": summarize_operational_states(states), "findings": len(assessed.get("findings", {}))}); out["phases_seconds"]["payload_generation"] = round(time.time() - t, 3)
|
||||
out["total_seconds"] = round(sum(out["phases_seconds"].values()), 2); out["peak_rss_mb"] = rss_mb(); out["products_per_second"] = round(len(products) / max(out["total_seconds"], 0.01), 1)
|
||||
print(json.dumps(out, indent=1))
|
||||
(ROOT / "docs" / "runs" / "final_corpus" / f"scale_agent_{a.db}.json").write_text(json.dumps(out, indent=1), encoding="utf-8")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -14,11 +14,11 @@ sys.path.insert(0, str(ROOT))
|
||||
def test_versions_are_coherent_across_hub_agent_and_packages():
|
||||
from central.app.version import GTI_FISCAL_VERSION
|
||||
v = (ROOT / "release" / "VERSION").read_text(encoding="utf-8").strip()
|
||||
assert v == GTI_FISCAL_VERSION == "1.2.0"
|
||||
assert v == GTI_FISCAL_VERSION == "1.2.1"
|
||||
pep = v.replace("-rc", "rc")
|
||||
for pp in ("central/pyproject.toml", "agent/pyproject.toml"):
|
||||
assert f'version = "{pep}"' in (ROOT / pp).read_text(encoding="utf-8")
|
||||
assert '"AGENT_VERSION", "1.2.0"' in (ROOT / "agent" / "scripts" / "run_agent_service.py").read_text(encoding="utf-8")
|
||||
assert '"AGENT_VERSION", "1.2.1"' in (ROOT / "agent" / "scripts" / "run_agent_service.py").read_text(encoding="utf-8")
|
||||
manifest = ROOT / "release" / "RELEASE_MANIFEST.json"
|
||||
if manifest.exists():
|
||||
m = json.loads(manifest.read_text(encoding="utf-8"))
|
||||
|
||||
Reference in New Issue
Block a user