{
  "document": "vc-digital-sefin-scrape-schema",
  "version": "2026-04-03",
  "sourcePage": {
    "name": "lista_debitos_em_aberto",
    "url": "https://portalcontribuinte.sefin.ro.gov.br/app/consultadebitos/lista.jsp",
    "captureModes": [
      "structured_table_scrape",
      "local_screenshot_audit"
    ]
  },
  "directRequestSupport": {
    "specificGuideWithoutPriorSync": true,
    "conditions": [
      "cnpj_or_companyId_required",
      "numeroDocumento_required",
      "parcela_recommended",
      "targetDueDate_must_belong_to_availableDueDates_when_recalculated"
    ],
    "monthWideDirectRequestFromAppPublishedContract": true,
    "notes": [
      "O mesmo endpoint do app agora aceita dueMonth para descoberta mensal.",
      "O desktop filtra a grade da SEFIN por vencimento_lista dentro do mes solicitado."
    ]
  },
  "monthlyDiscoveryContract": {
    "published": true,
    "acceptedFormats": [
      "YYYY-MM",
      "MM/YYYY"
    ],
    "supportedOn": [
      "POST /contacts/:contactId/fiscal-pending-documents/request-provider-artifacts",
      "POST /api/internal/guide-lifecycle/jobs",
      "POST /api/internal/orchestrator/jobs"
    ],
    "jobFilters": [
      "GET /api/internal/guide-lifecycle/jobs?dueMonth=2026-04",
      "GET /api/internal/orchestrator/jobs?dueMonth=2026-04"
    ]
  },
  "scrapeHeaderFields": [
    "cnpj",
    "inscricao_estadual",
    "razao_social",
    "ano",
    "data_impressao_lista",
    "data_atualizacao_lancamentos",
    "url",
    "titulo",
    "coletado_em",
    "lista_screenshot_path_local"
  ],
  "scrapeRowFields": [
    "dare",
    "extrato",
    "nr_lancamento",
    "parcela",
    "referencia",
    "complemento",
    "receita",
    "situacao",
    "data_vencimento",
    "valor_lancamento",
    "data_atualizacao",
    "valor_atualizado",
    "dare_href",
    "extrato_href",
    "guia_candidates"
  ],
  "desktopDerivedFields": [
    "guia",
    "parc",
    "reference_year",
    "vencimento_lista",
    "vencimentos_disponiveis",
    "vencimento_escolhido",
    "datas_marcadas",
    "datas_emitidas",
    "recalculo_aplicado",
    "row_signature_text",
    "extrato_mode",
    "extrato_expected",
    "dare_self_contained",
    "guide_content_fingerprint",
    "extrato_fingerprint",
    "extrato_refresh_reason",
    "dare_pdf",
    "extrato_pdf",
    "extrato_json",
    "extrato_screenshot",
    "valor_lancado",
    "valor_total"
  ],
  "icmsPublicApiFields": [
    "numeroDocumento",
    "parcela",
    "dueDate",
    "dueDateReal",
    "displayDueDate",
    "displayDueDateLabel",
    "showVencimentoOriginal",
    "dueDatePresentation",
    "dueDateSource",
    "vencimentoOriginal",
    "vencimentoEmitido",
    "availableDueDates",
    "valorTotal",
    "recalculada",
    "extratoMode",
    "extratoExpected",
    "dareSelfContained",
    "extratoReusable",
    "guideContentFingerprint",
    "extratoFingerprint",
    "extratoRefreshReason",
    "workflowStatus",
    "delivery",
    "documents",
    "auditArtifacts"
  ],
  "keySemantics": {
    "dareSelfContained": "Quando true, o proprio DARE ja contem a memoria fiscal suficiente e o app nao deve bloquear aguardando extrato separado.",
    "extratoMode": [
      "separate",
      "embedded_in_dare",
      "reused",
      "unknown"
    ],
    "dueDateSource": [
      "LISTA_SEFIN",
      "EMISSAO_CONFIRMADA",
      "EMISSAO_RECALCULADA",
      "EMISSAO_SEM_BASE_LISTA"
    ]
  },
  "relevantEndpoints": {
    "documents": "/api/internal/fiscal-documents",
    "dueOptions": "/api/internal/fiscal-documents/due-options",
    "guideLifecycleCreate": "/api/internal/guide-lifecycle/jobs",
    "guideLifecycleList": "/api/internal/guide-lifecycle/jobs",
    "guideLifecycleHeartbeat": "/api/internal/guide-lifecycle/jobs/heartbeat",
    "orchestratorCreate": "/api/internal/orchestrator/jobs",
    "orchestratorList": "/api/internal/orchestrator/jobs",
    "orchestratorHeartbeat": "/api/internal/orchestrator/jobs/heartbeat"
  },
  "recommendedRulesForApp": [
    "Usar numeroDocumento + parcela + documentType como chave fiscal.",
    "Se artifactId mudar para a mesma chave fiscal, substituir o documento anterior.",
    "Se dareSelfContained=true ou extratoExpected=false, nao esperar extrato separado.",
    "Para guia vencida, consultar due-options antes de pedir nova emissao.",
    "Para reemissao, usar somente targetDueDate presente em availableDueDates[]."
  ],
  "screenshotPolicy": {
    "capturedLocallyByDesktop": true,
    "publishedAsPrimaryApiContract": false,
    "recommendedFutureArtifactName": "lista_debitos_screenshot",
    "usage": "auditoria_visual"
  }
}
