{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://layouts.tjrj.jus.br/sfe/protesto/v3.0.0/layout_schema.json",
  "title": "Layout SFE/Protesto v3.0.0",
  "description": "Contrato JSON do Selo de Fiscalizacao Eletronico para a atribuicao Protesto de Titulos da CGJ-RJ. Sucessor do Schema_Protesto_2.03.xsd. JSON Schema draft-07.",
  "type": "object",
  "additionalProperties": false,
  "required": ["remessa"],
  "properties": {
    "$schema": {
      "type": "string",
      "format": "uri",
      "description": "URI canonica do schema (auto-discovery)."
    },
    "remessa": { "$ref": "#/$defs/Remessa" }
  },

  "$defs": {

    "Remessa": {
      "type": "object",
      "title": "Envelope da remessa Protesto",
      "description": "Envelope canonico de transmissao de atos de Protesto de Titulos. Substitui o elemento ProtestoTitulos/Remessa do XML 2.03.",
      "additionalProperties": false,
      "required": [
        "id",
        "versaoLayout",
        "codigoServico",
        "tipoOperacao",
        "ambiente",
        "software",
        "dataGeracao"
      ],
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "description": "Identificador unico da remessa, em UUID v4. Usado para idempotencia.",
          "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
        },
        "versaoLayout": {
          "type": "string",
          "pattern": "^\\d+\\.\\d+\\.\\d+$",
          "description": "Versao semantica do layout. Para esta especificacao: 3.0.0."
        },
        "codigoServico": {
          "type": "string",
          "pattern": "^\\d{1,5}$",
          "description": "Codigo do servico extrajudicial emissor (CodServico do XML 2.03)."
        },
        "tipoOperacao": {
          "type": "string",
          "enum": ["INCLUSAO", "ALTERACAO"],
          "description": "Operacao da remessa. INCLUSAO substitui 'I'; ALTERACAO substitui 'A'. Fonte: PDF 2.03 secao 5.1."
        },
        "ambiente": {
          "type": "string",
          "enum": ["HOMOLOGACAO", "PRODUCAO"],
          "description": "Ambiente alvo. HOMOLOGACAO substitui 'HML'; PRODUCAO substitui 'PRD'. Fonte: PDF 2.03 secao 5.1."
        },
        "software": {
          "type": "object",
          "title": "Software emissor",
          "additionalProperties": false,
          "required": ["nome", "versao"],
          "properties": {
            "nome": { "type": "string", "minLength": 2, "maxLength": 100, "description": "Nome do software emissor." },
            "versao": { "type": "string", "minLength": 1, "maxLength": 50, "description": "Versao do software emissor." }
          }
        },
        "dataGeracao": {
          "type": "string",
          "format": "date-time",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}([.,]\\d+)?(Z|[+-]\\d{2}:\\d{2})$",
          "description": "Instante de geracao da remessa, ISO 8601 com offset (ex.: 2026-05-07T13:21:45-03:00)."
        },
        "atos": {
          "type": "array",
          "minItems": 0,
          "maxItems": 5000,
          "description": "Lista de atos da remessa (max. 5000). Cada item discriminado por tipoAto.",
          "items": { "$ref": "#/$defs/Ato" }
        },
        "justificativasAusencia": {
          "type": "array",
          "minItems": 0,
          "description": "Datas em que nenhum ato foi praticado pelo servico (justificativa de ausencia). Substitui JustificativaAtoNaoPraticado.",
          "items": { "$ref": "#/$defs/JustificativaAusencia" }
        }
      }
    },

    "JustificativaAusencia": {
      "type": "object",
      "title": "Justificativa de ato nao praticado",
      "description": "Substitui JustificativaAtoNaoPraticado do XML 2.03. Indica datas em que o servico nao praticou nenhum ato sujeito a transmissao.",
      "additionalProperties": false,
      "required": ["data"],
      "properties": {
        "data": {
          "type": "string",
          "format": "date",
          "description": "Data em que nenhum ato foi praticado (ISO 8601)."
        },
        "motivo": {
          "type": "string",
          "minLength": 2,
          "maxLength": 250,
          "description": "Motivo descritivo (ex.: FERIADO_NACIONAL, RECESSO, AUSENCIA_DEMANDA)."
        }
      }
    },

    "Ato": {
      "type": "object",
      "title": "Item de ato",
      "description": "Estrutura discriminada: tipoAto identifica o ato; dadosAto carrega o payload especifico.",
      "additionalProperties": false,
      "required": ["tipoAto", "dadosAto"],
      "properties": {
        "tipoAto": {
          "type": "string",
          "enum": [
            "PROTOCOLIZACAO_TITULOS",
            "LIQUIDACAO",
            "SUSTACAO",
            "DESISTENCIA",
            "PROTESTO",
            "INSTRUMENTO_PROTESTO",
            "CANCELAMENTO",
            "CERTIDAO_DIGITAL_RELACAO_PROTESTO",
            "CERTIDAO",
            "COPIA_DOCUMENTO_MICROFILMADO",
            "APOSTILAMENTO",
            "ENCERRAMENTO_LIVRO",
            "VISTO",
            "FOLHA_ADICIONAL_COMPLEMENTO",
            "INFORMACAO_VERBAL",
            "INFORMACAO_RESUMIDA",
            "COMPLEMENTO_EMOLUMENTOS",
            "ALTERACAO_EMOLUMENTOS"
          ]
        },
        "dadosAto": { "type": "object" }
      },
      "oneOf": [
        { "properties": { "tipoAto": { "const": "PROTOCOLIZACAO_TITULOS" }, "dadosAto": { "$ref": "#/$defs/ProtocolizacaoTitulos" } } },
        { "properties": { "tipoAto": { "const": "LIQUIDACAO" }, "dadosAto": { "$ref": "#/$defs/Liquidacao" } } },
        { "properties": { "tipoAto": { "const": "SUSTACAO" }, "dadosAto": { "$ref": "#/$defs/Sustacao" } } },
        { "properties": { "tipoAto": { "const": "DESISTENCIA" }, "dadosAto": { "$ref": "#/$defs/Desistencia" } } },
        { "properties": { "tipoAto": { "const": "PROTESTO" }, "dadosAto": { "$ref": "#/$defs/Protesto" } } },
        { "properties": { "tipoAto": { "const": "INSTRUMENTO_PROTESTO" }, "dadosAto": { "$ref": "#/$defs/InstrumentoProtesto" } } },
        { "properties": { "tipoAto": { "const": "CANCELAMENTO" }, "dadosAto": { "$ref": "#/$defs/Cancelamento" } } },
        { "properties": { "tipoAto": { "const": "CERTIDAO_DIGITAL_RELACAO_PROTESTO" }, "dadosAto": { "$ref": "#/$defs/CertidaoDigitalRelacaoProtesto" } } },
        { "properties": { "tipoAto": { "const": "CERTIDAO" }, "dadosAto": { "$ref": "#/$defs/Certidao" } } },
        { "properties": { "tipoAto": { "const": "COPIA_DOCUMENTO_MICROFILMADO" }, "dadosAto": { "$ref": "#/$defs/CopiaDocumentoMicrofilmado" } } },
        { "properties": { "tipoAto": { "const": "APOSTILAMENTO" }, "dadosAto": { "$ref": "#/$defs/Apostilamento" } } },
        { "properties": { "tipoAto": { "const": "ENCERRAMENTO_LIVRO" }, "dadosAto": { "$ref": "#/$defs/EncerramentoLivro" } } },
        { "properties": { "tipoAto": { "const": "VISTO" }, "dadosAto": { "$ref": "#/$defs/Visto" } } },
        { "properties": { "tipoAto": { "const": "FOLHA_ADICIONAL_COMPLEMENTO" }, "dadosAto": { "$ref": "#/$defs/FolhaAdicionalComplemento" } } },
        { "properties": { "tipoAto": { "const": "INFORMACAO_VERBAL" }, "dadosAto": { "$ref": "#/$defs/InformacaoVerbal" } } },
        { "properties": { "tipoAto": { "const": "INFORMACAO_RESUMIDA" }, "dadosAto": { "$ref": "#/$defs/InformacaoResumida" } } },
        { "properties": { "tipoAto": { "const": "COMPLEMENTO_EMOLUMENTOS" }, "dadosAto": { "$ref": "#/$defs/ComplementoEmolumentos" } } },
        { "properties": { "tipoAto": { "const": "ALTERACAO_EMOLUMENTOS" }, "dadosAto": { "$ref": "#/$defs/AlteracaoEmolumentos" } } }
      ]
    },

    "AtoBase": {
      "type": "object",
      "title": "Campos comuns de ato selado",
      "description": "Campos compartilhados por atos selados de Protesto (categoria=ATO_SELADO). Substitui o complexType Ato do XSD 2.03.",
      "properties": {
        "categoria": {
          "type": "string",
          "const": "ATO_SELADO",
          "description": "Categoria do ato. ATO_SELADO usa selo SFE."
        },
        "dataPratica": {
          "type": "string",
          "format": "date",
          "description": "Data da pratica do ato (ISO 8601). Substitui DataPratica (dd/mm/aaaa)."
        },
        "selo": {
          "type": "string",
          "pattern": "^[A-Z]{4}\\d{5}$",
          "description": "Selo SFE no formato 4 letras + 5 digitos (ex.: EABC12345)."
        },
        "aleatorio": {
          "type": "string",
          "pattern": "^[A-Z]{3}$",
          "description": "Aleatorio do selo SFE (3 letras maiusculas)."
        },
        "numeroRecibo": {
          "type": "string",
          "minLength": 1,
          "maxLength": 25,
          "description": "Numero do recibo do ato praticado."
        },
        "dataInicioEficacia": {
          "type": "string",
          "format": "date",
          "description": "Data inicial da eficacia da Certidao Eletronica. So aplicavel a Certidao Eletronica."
        },
        "dataFimEficacia": {
          "type": "string",
          "format": "date",
          "description": "Data final da eficacia da Certidao Eletronica. So aplicavel a Certidao Eletronica."
        },
        "indCertidaoEletronica": {
          "type": "boolean",
          "description": "Indica certidao eletronica. No XML 2.03 so aceitava 'S' (presente)."
        },
        "indAtoEletronico": {
          "type": "boolean",
          "description": "Indica ato eletronico (gera URLs/hashes). Substitui IndAtoEletronico 'S'/'N'."
        },
        "urlPdfAto": {
          "type": "string",
          "format": "uri",
          "minLength": 2,
          "maxLength": 2083,
          "description": "URL publica do PDF do ato (obrigatoria se indAtoEletronico=true)."
        },
        "hashPdfAto": {
          "type": "string",
          "pattern": "^[A-Fa-f0-9]{64}$",
          "description": "Hash SHA-256 do PDF do ato (64 hex)."
        },
        "urlDossie": {
          "type": "string",
          "format": "uri",
          "minLength": 2,
          "maxLength": 2083,
          "description": "URL publica do dossie do ato."
        },
        "hashDossie": {
          "type": "string",
          "pattern": "^[A-Fa-f0-9]{64}$",
          "description": "Hash SHA-256 do dossie do ato (64 hex)."
        }
      }
    },

    "TransmissaoBase": {
      "type": "object",
      "title": "Campos comuns de transmissao nao selada",
      "description": "Campos compartilhados por transmissoes nao seladas de Protesto (categoria=TRANSMISSAO_NAO_SELADA). Identificadas por CCT. Substitui o complexType Transmissao do XSD 2.03.",
      "properties": {
        "categoria": {
          "type": "string",
          "const": "TRANSMISSAO_NAO_SELADA",
          "description": "Categoria. Transmissao nao selada identificada por CCT."
        },
        "dataPratica": {
          "type": "string",
          "format": "date",
          "description": "Data da pratica da transmissao (ISO 8601)."
        },
        "cct": {
          "type": "string",
          "pattern": "^[A-Z]{4}\\d{5}$",
          "description": "Codigo de Controle de Transmissao no mesmo formato do selo (4 letras + 5 digitos)."
        },
        "numeroRecibo": {
          "type": "string",
          "minLength": 1,
          "maxLength": 25,
          "description": "Numero do recibo da transmissao."
        },
        "indAtoEletronico": {
          "type": "boolean",
          "description": "Indica ato eletronico."
        },
        "urlPdfAto": {
          "type": "string",
          "format": "uri",
          "minLength": 2,
          "maxLength": 2083,
          "description": "URL publica do PDF do ato."
        },
        "hashPdfAto": {
          "type": "string",
          "pattern": "^[A-Fa-f0-9]{64}$",
          "description": "Hash SHA-256 do PDF do ato."
        },
        "urlDossie": {
          "type": "string",
          "format": "uri",
          "minLength": 2,
          "maxLength": 2083,
          "description": "URL publica do dossie."
        },
        "hashDossie": {
          "type": "string",
          "pattern": "^[A-Fa-f0-9]{64}$",
          "description": "Hash SHA-256 do dossie."
        }
      }
    },

    "OperacaoBase": {
      "type": "object",
      "title": "Campos comuns de operacao administrativa",
      "description": "Categoria OPERACAO: nao selada e nao gera CCT proprio. Aplica-se a AlteracaoEmolumentos.",
      "properties": {
        "categoria": {
          "type": "string",
          "const": "OPERACAO",
          "description": "Categoria. Operacao administrativa sobre ato pre-existente."
        }
      }
    },

    "Endereco": {
      "type": "object",
      "title": "Endereco",
      "description": "Endereco postal do participante. Substitui tpEndereco do XSD 2.03.",
      "additionalProperties": false,
      "properties": {
        "logradouro": {
          "type": "string",
          "minLength": 1,
          "maxLength": 250,
          "description": "Logradouro com numero/complemento (ex.: 'Rua Sete de Setembro, 50')."
        },
        "bairro": {
          "type": "string",
          "minLength": 1,
          "maxLength": 250,
          "description": "Bairro."
        },
        "cep": {
          "type": "string",
          "pattern": "^\\d{8}$",
          "description": "CEP em 8 digitos sem mascara (ex.: '20040000'). XML 2.03 aceitava 8 ou 9; aqui normalizamos."
        },
        "uf": {
          "type": "string",
          "pattern": "^[A-Z]{2}$",
          "description": "Sigla da unidade da federacao (2 letras maiusculas)."
        },
        "municipio": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100,
          "description": "Nome do municipio."
        }
      }
    },

    "Documento": {
      "type": "object",
      "title": "Documento auxiliar",
      "description": "Documento adicional do participante (diferente de RG e CPF). Substitui tpDocumento do XSD 2.03.",
      "additionalProperties": false,
      "required": ["tipoDocumento", "numeroDocumento"],
      "properties": {
        "tipoDocumento": { "$ref": "#/$defs/TipoDocumentoOutros" },
        "numeroDocumento": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100,
          "description": "Numero do documento."
        },
        "dataEmissao": {
          "type": "string",
          "format": "date",
          "description": "Data de emissao do documento (ISO 8601)."
        },
        "orgaoEmissor": {
          "type": "string",
          "minLength": 1,
          "maxLength": 25,
          "description": "Orgao emissor (ex.: 'IFP', 'DETRAN-RJ', 'RFB')."
        }
      }
    },

    "PessoaFisica": {
      "type": "object",
      "title": "Pessoa Fisica",
      "description": "Pessoa fisica participante de ato de Protesto (apresentante, devedor, requerente, sacado, beneficiario, intimando, etc.). Substitui tpPessoaFisica do XSD 2.03.",
      "additionalProperties": false,
      "required": ["nome"],
      "properties": {
        "tipoParticipante": {
          "type": "integer",
          "minimum": 1,
          "maximum": 999,
          "description": "Codigo do tipo de participante (Tabela de Referencia n. 2 - Tipos de Participante CGJ-RJ). No XML 2.03 era string \\d{1,3}; aqui integer."
        },
        "nome": {
          "type": "string",
          "minLength": 1,
          "maxLength": 250,
          "description": "Nome completo da pessoa fisica."
        },
        "cpf": {
          "type": "string",
          "pattern": "^\\d{11}$",
          "description": "CPF em 11 digitos sem mascara. XML 2.03 aceitava 11 ou 14 (com mascara); aqui normalizamos para somente digitos."
        },
        "justificativaAusenciaCpf": { "$ref": "#/$defs/JustificativaAusenciaCpf" },
        "numeroIdentidade": {
          "type": "string",
          "minLength": 1,
          "maxLength": 25,
          "description": "Numero do documento de identidade. Obrigatorio quando CPF nao informado."
        },
        "orgaoEmissor": {
          "type": "string",
          "minLength": 1,
          "maxLength": 70,
          "description": "Orgao emissor da identidade (ex.: 'IFP', 'DETRAN-RJ')."
        },
        "outrosDocumentos": {
          "type": "array",
          "minItems": 1,
          "description": "Lista de documentos adicionais.",
          "items": { "$ref": "#/$defs/Documento" }
        },
        "endereco": { "$ref": "#/$defs/Endereco" }
      }
    },

    "PessoaJuridica": {
      "type": "object",
      "title": "Pessoa Juridica",
      "description": "Pessoa juridica participante de ato de Protesto (apresentante, banco endossatario, credor, requerente). Substitui tpPessoaJuridica do XSD 2.03.",
      "additionalProperties": false,
      "required": ["nome"],
      "properties": {
        "tipoParticipante": {
          "type": "integer",
          "minimum": 1,
          "maximum": 999,
          "description": "Codigo do tipo de participante (Tabela de Referencia n. 2 - Tipos de Participante CGJ-RJ)."
        },
        "nome": {
          "type": "string",
          "minLength": 1,
          "maxLength": 250,
          "description": "Razao social ou nome da pessoa juridica."
        },
        "cnpj": {
          "type": "string",
          "pattern": "^\\d{14}$",
          "description": "CNPJ em 14 digitos sem mascara. XML 2.03 aceitava 14 ou 18; aqui normalizamos."
        },
        "justificativaAusenciaCnpj": { "$ref": "#/$defs/JustificativaAusenciaCnpj" },
        "endereco": { "$ref": "#/$defs/Endereco" }
      }
    },

    "Participantes": {
      "type": "object",
      "title": "Participantes do ato",
      "description": "Colecao de participantes pessoa fisica e/ou juridica do ato. Substitui tpParticipantes do XSD 2.03.",
      "additionalProperties": false,
      "properties": {
        "pessoasFisicas": {
          "type": "array",
          "minItems": 1,
          "description": "Lista de pessoas fisicas participantes.",
          "items": { "$ref": "#/$defs/PessoaFisica" }
        },
        "pessoasJuridicas": {
          "type": "array",
          "minItems": 1,
          "description": "Lista de pessoas juridicas participantes.",
          "items": { "$ref": "#/$defs/PessoaJuridica" }
        }
      }
    },

    "AtoVinculado": {
      "type": "object",
      "title": "Ato Vinculado",
      "description": "Vinculo a outro ato extrajudicial. Substitui AtoVinculado em tpAtosVinculados do XSD 2.03.",
      "additionalProperties": false,
      "required": ["tipoVinculo"],
      "properties": {
        "tipoVinculo": { "$ref": "#/$defs/TipoVinculo" },
        "codigoServico": {
          "type": "string",
          "pattern": "^\\d{1,4}$",
          "description": "Codigo do servico extrajudicial onde o ato vinculado foi praticado (Tabela 6 - Servicos Extrajudiciais). Preservado como string conforme legado."
        },
        "selo": {
          "type": "string",
          "pattern": "^[A-Z]{3,4}\\d{5}$",
          "description": "Selo do ato vinculado. Formato historico: 3 ou 4 letras + 5 digitos (FormatoSeloOriginal do XSD 2.03)."
        },
        "aleatorio": {
          "type": "string",
          "pattern": "^[A-Z]{3}$",
          "description": "Aleatorio (3 letras) do ato vinculado."
        },
        "tipoSelo": { "$ref": "#/$defs/TipoSelo" },
        "cct": {
          "type": "string",
          "pattern": "^[A-Z]{4}\\d{5}$",
          "description": "CCT do ato vinculado (quando o vinculado for transmissao nao selada)."
        },
        "dataPratica": {
          "type": "string",
          "format": "date",
          "description": "Data da pratica do ato vinculado."
        },
        "numeroProtocolo": {
          "type": "string",
          "minLength": 1,
          "maxLength": 25,
          "description": "Numero de protocolo/registro do ato vinculado."
        }
      }
    },

    "AtosVinculados": {
      "type": "array",
      "title": "Lista de atos vinculados",
      "description": "Colecao de vinculos a outros atos. Substitui tpAtosVinculados do XSD 2.03.",
      "minItems": 1,
      "items": { "$ref": "#/$defs/AtoVinculado" }
    },

    "Emolumentos": {
      "type": "object",
      "title": "Emolumentos do ato",
      "description": "Emolumentos do ato de Protesto. Quando tipoCobranca aplicar isencao (JG, SC, CV, FL, AS, PZ, PR, NH, PC, PL, PS, NC, NL, NS), valores e itens devem ser suprimidos (regra de negocio servidora). Substitui tpEmolumentos do XSD 2.03.",
      "additionalProperties": false,
      "required": ["tipoCobranca"],
      "properties": {
        "tipoCobranca": { "$ref": "#/$defs/TipoCobranca" },
        "valorTotalEmolumentos": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Valor total dos emolumentos (string monetario, 2 casas)."
        },
        "fetj": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Valor do FETJ (Lei 3.217/1999, 20% sobre emolumentos)."
        },
        "fundperj": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Valor do FUNDPERJ (Lei 4.664/2005, 5%)."
        },
        "funperj": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Valor do FUNPERJ (Lei Complementar 111/2006, 5%)."
        },
        "funarpen": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Valor do FUNARPEN-RJ (4%)."
        },
        "ressag": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Valor do RESSAG - ressarcimento de gratuidades (2%)."
        },
        "valorDistribuidor": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Valor recolhido para o distribuidor (inclui FETJ, FUNDPERJ, FUNPERJ, FUNARPEN, RESSAG)."
        },
        "valorSeloEletronico": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Valor do selo eletronico repassado ao usuario (Lei 9.873/2022, art. 11)."
        },
        "valorIss": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Valor do ISS (Lei Complementar 175/2020)."
        },
        "itens": {
          "type": "array",
          "minItems": 0,
          "maxItems": 100,
          "description": "Detalhamento da cotacao (substitui ItemEmolumento).",
          "items": { "$ref": "#/$defs/ItemEmolumento" }
        }
      }
    },

    "ItemEmolumento": {
      "type": "object",
      "title": "Item de Emolumento",
      "description": "Item da tabela de emolumentos CGJ-RJ. Codigos tabela, item, subItem sao chaves externas - preservados como string conforme legado (regra de §15.3 da SPEC).",
      "additionalProperties": false,
      "required": ["tabela", "item", "quantidade"],
      "properties": {
        "ano": {
          "type": "integer",
          "minimum": 2000,
          "maximum": 2099,
          "description": "Ano de vigencia da tabela. Quando suprimido, considera-se o ano da dataPratica do ato."
        },
        "tabela": {
          "type": "string",
          "minLength": 1,
          "maxLength": 8,
          "description": "Numero da tabela de emolumentos (Tabela de Referencia n. 1 CGJ-RJ). Preservado como string."
        },
        "item": {
          "type": "string",
          "minLength": 1,
          "maxLength": 20,
          "description": "Item da tabela de emolumentos."
        },
        "subItem": {
          "type": "string",
          "minLength": 1,
          "maxLength": 20,
          "description": "Subitem da tabela de emolumentos."
        },
        "quantidade": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9999,
          "description": "Quantidade de aplicacoes do item. No XML 2.03 era string \\d{1,4}; aqui integer."
        },
        "complemento": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Texto livre com complemento de emolumentos."
        },
        "excecao": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Texto livre descrevendo excecao aplicada."
        }
      }
    },

    "CertidaoFormaRelacao": {
      "type": "object",
      "title": "Certidao em Forma de Relacao",
      "description": "Parametros usados na pesquisa para emissao de Certidao Digital em Forma de Relacao de Protesto de Titulos e Cancelamentos. Substitui tpCertidaoFormaRelacao do XSD 2.03.",
      "additionalProperties": false,
      "required": ["dataInicio", "dataFim", "qtdBuscas"],
      "properties": {
        "dataInicio": {
          "type": "string",
          "format": "date",
          "description": "Data inicial do periodo da pesquisa."
        },
        "dataFim": {
          "type": "string",
          "format": "date",
          "description": "Data final do periodo da pesquisa."
        },
        "qtdBuscas": {
          "type": "integer",
          "minimum": 0,
          "maximum": 99999999,
          "description": "Quantidade de registros e cancelamentos de protestos lavrados no periodo. No XML 2.03 era string \\d{1,8}; aqui integer."
        }
      }
    },

    "ProtocolizacaoTitulos": {
      "title": "Protocolizacao de Titulos",
      "description": "Protocolizacao do titulo apresentado a protesto. Substitui AtoProtocolizacaoTitulos do XSD 2.03 (transmissao com CCT). Pode ser apresentado por convenio (Ato Normativo Conjunto 05/2005).",
      "allOf": [
        { "$ref": "#/$defs/TransmissaoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "cct", "tipoTitulo", "participantes", "emolumentos"],
          "properties": {
            "categoria": { "const": "TRANSMISSAO_NAO_SELADA" },
            "dataPratica": { "type": "string", "format": "date" },
            "cct": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "tipoTitulo": { "$ref": "#/$defs/TipoTitulo" },
            "numeroTitulo": {
              "type": "string",
              "minLength": 1,
              "maxLength": 25,
              "description": "Numero de identificacao do titulo apresentado."
            },
            "valorTitulo": {
              "type": "string",
              "pattern": "^\\d+\\.\\d{2}$",
              "description": "Valor original do titulo (monetario)."
            },
            "saldo": {
              "type": "string",
              "pattern": "^\\d+\\.\\d{2}$",
              "description": "Saldo a protestar (monetario)."
            },
            "dataVencimento": {
              "type": "string",
              "format": "date",
              "description": "Data de vencimento do titulo."
            },
            "convenio": {
              "type": "boolean",
              "description": "Indica apresentacao por convenio (Ato Normativo Conjunto 05/2005). Substitui IndConvenio 'S'/'N'."
            },
            "tipoApresentacao": { "$ref": "#/$defs/TipoApresentacao" },
            "numeroProtocolo": {
              "type": "string",
              "minLength": 1,
              "maxLength": 25,
              "description": "Numero de Protocolo do ato (formato livre, ex.: '2026.321101')."
            },
            "participantes": { "$ref": "#/$defs/Participantes" },
            "atosVinculados": { "$ref": "#/$defs/AtosVinculados" },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "Liquidacao": {
      "title": "Liquidacao",
      "description": "Liquidacao do titulo protocolizado (pagamento pelo devedor). Selada. Substitui tpLiquidacao do XSD 2.03.",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "selo", "formaPagamento", "atosVinculados", "emolumentos"],
          "properties": {
            "categoria": { "const": "ATO_SELADO" },
            "dataPratica": { "type": "string", "format": "date" },
            "selo": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "aleatorio": { "type": "string", "pattern": "^[A-Z]{3}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "dataInicioEficacia": { "type": "string", "format": "date" },
            "dataFimEficacia": { "type": "string", "format": "date" },
            "indCertidaoEletronica": { "type": "boolean" },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "formaPagamento": { "$ref": "#/$defs/FormaPagamento" },
            "atosVinculados": { "$ref": "#/$defs/AtosVinculados" },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "Sustacao": {
      "title": "Sustacao Definitiva",
      "description": "Sustacao definitiva do protesto, geralmente em razao de determinacao judicial. Selada. Substitui tpSustacao do XSD 2.03.",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "selo", "atosVinculados", "emolumentos"],
          "properties": {
            "categoria": { "const": "ATO_SELADO" },
            "dataPratica": { "type": "string", "format": "date" },
            "selo": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "aleatorio": { "type": "string", "pattern": "^[A-Z]{3}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "dataInicioEficacia": { "type": "string", "format": "date" },
            "dataFimEficacia": { "type": "string", "format": "date" },
            "indCertidaoEletronica": { "type": "boolean" },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "descricaoSustacao": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100,
              "description": "Identificacao da determinacao judicial (ex.: 'Oficio 55521/2024 da 20a Vara Civel da Capital')."
            },
            "atosVinculados": { "$ref": "#/$defs/AtosVinculados" },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "Desistencia": {
      "title": "Desistencia",
      "description": "Desistencia do protesto pelo apresentante antes da lavratura. Selada. Substitui tpDesistencia do XSD 2.03.",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "selo", "atosVinculados", "emolumentos"],
          "properties": {
            "categoria": { "const": "ATO_SELADO" },
            "dataPratica": { "type": "string", "format": "date" },
            "selo": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "aleatorio": { "type": "string", "pattern": "^[A-Z]{3}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "dataInicioEficacia": { "type": "string", "format": "date" },
            "dataFimEficacia": { "type": "string", "format": "date" },
            "indCertidaoEletronica": { "type": "boolean" },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "atosVinculados": { "$ref": "#/$defs/AtosVinculados" },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "Protesto": {
      "title": "Protesto (lavratura)",
      "description": "Lavratura do protesto do titulo (registro definitivo da inadimplencia). Selada. Substitui tpProtesto do XSD 2.03. Lei 9.492/1997.",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "selo", "atosVinculados", "emolumentos"],
          "properties": {
            "categoria": { "const": "ATO_SELADO" },
            "dataPratica": { "type": "string", "format": "date" },
            "selo": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "aleatorio": { "type": "string", "pattern": "^[A-Z]{3}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "dataInicioEficacia": { "type": "string", "format": "date" },
            "dataFimEficacia": { "type": "string", "format": "date" },
            "indCertidaoEletronica": { "type": "boolean" },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "numeroLivro": {
              "type": "string",
              "minLength": 1,
              "maxLength": 25,
              "description": "Numero do livro de protestos onde o ato foi registrado."
            },
            "numeroFolha": {
              "type": "string",
              "minLength": 1,
              "maxLength": 25,
              "description": "Numero da folha do livro de protestos."
            },
            "atosVinculados": { "$ref": "#/$defs/AtosVinculados" },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "InstrumentoProtesto": {
      "title": "Instrumento de Protesto",
      "description": "Emissao do instrumento (publico) do protesto. Transmissao com CCT. Substitui tpInstrumentoProtesto do XSD 2.03. Lei 9.492/1997 art. 22.",
      "allOf": [
        { "$ref": "#/$defs/TransmissaoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "cct", "atosVinculados", "emolumentos"],
          "properties": {
            "categoria": { "const": "TRANSMISSAO_NAO_SELADA" },
            "dataPratica": { "type": "string", "format": "date" },
            "cct": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "numeroLivro": {
              "type": "string",
              "minLength": 1,
              "maxLength": 25,
              "description": "Numero do livro do instrumento."
            },
            "numeroFolha": {
              "type": "string",
              "minLength": 1,
              "maxLength": 25,
              "description": "Numero da folha do instrumento."
            },
            "atosVinculados": { "$ref": "#/$defs/AtosVinculados" },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "Cancelamento": {
      "title": "Cancelamento de Protesto",
      "description": "Cancelamento do protesto, geralmente apos pagamento da divida. Selada. Substitui AtoCancelamento do XSD 2.03. Lei 9.492/1997 art. 26.",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "selo", "indCancelamento", "atosVinculados", "emolumentos"],
          "properties": {
            "categoria": { "const": "ATO_SELADO" },
            "dataPratica": { "type": "string", "format": "date" },
            "selo": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "aleatorio": { "type": "string", "pattern": "^[A-Z]{3}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "dataInicioEficacia": { "type": "string", "format": "date" },
            "dataFimEficacia": { "type": "string", "format": "date" },
            "indCertidaoEletronica": { "type": "boolean" },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "indCancelamento": { "$ref": "#/$defs/IndicadorCancelamento" },
            "atosVinculados": { "$ref": "#/$defs/AtosVinculados" },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "CertidaoDigitalRelacaoProtesto": {
      "title": "Certidao Digital em Forma de Relacao de Protesto de Titulos e Cancelamentos (CRFPT)",
      "description": "Certidao digital em forma de relacao demonstrando registros e cancelamentos de protesto em um determinado periodo. Selada. Substitui tpCertidaoDigitalFRPTC do XSD 2.03.",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "selo", "certidaoFormaRelacao", "emolumentos"],
          "properties": {
            "categoria": { "const": "ATO_SELADO" },
            "dataPratica": { "type": "string", "format": "date" },
            "selo": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "aleatorio": { "type": "string", "pattern": "^[A-Z]{3}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "dataInicioEficacia": { "type": "string", "format": "date" },
            "dataFimEficacia": { "type": "string", "format": "date" },
            "indCertidaoEletronica": { "type": "boolean" },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "certidaoFormaRelacao": { "$ref": "#/$defs/CertidaoFormaRelacao" },
            "participantes": { "$ref": "#/$defs/Participantes" },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "Certidao": {
      "title": "Certidao",
      "description": "Certidao individual emitida pelo tabelionato (Normal, Especial de Cadastro ou Inteiro Teor). Selada. Substitui AtoCertidao do XSD 2.03.",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "selo", "tipoCertidao", "emolumentos"],
          "properties": {
            "categoria": { "const": "ATO_SELADO" },
            "dataPratica": { "type": "string", "format": "date" },
            "selo": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "aleatorio": { "type": "string", "pattern": "^[A-Z]{3}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "dataInicioEficacia": { "type": "string", "format": "date" },
            "dataFimEficacia": { "type": "string", "format": "date" },
            "indCertidaoEletronica": { "type": "boolean" },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "tipoCertidao": { "$ref": "#/$defs/TipoCertidao" },
            "qtdPaginas": {
              "type": "integer",
              "minimum": 1,
              "maximum": 999999,
              "description": "Quantidade de paginas da certidao. No XML 2.03 era string \\d{1,6}; aqui integer."
            },
            "resultado": { "$ref": "#/$defs/ResultadoCertidao" },
            "numeroRegistros": {
              "type": "integer",
              "minimum": 0,
              "maximum": 999999,
              "description": "Numero de registros encontrados e listados na certidao."
            },
            "participantes": { "$ref": "#/$defs/Participantes" },
            "atosVinculados": { "$ref": "#/$defs/AtosVinculados" },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "CopiaDocumentoMicrofilmado": {
      "title": "Copia de Documento Microfilmado ou Gravado Eletronicamente",
      "description": "Copia autenticada de documento microfilmado ou gravado eletronicamente (origem website ou arquivo). Selada. Substitui AtoCopiaDocMicrofilmadoGE do XSD 2.03.",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "selo", "origemDoc", "documento", "qtdPaginas", "dataImpressao", "emolumentos"],
          "properties": {
            "categoria": { "const": "ATO_SELADO" },
            "dataPratica": { "type": "string", "format": "date" },
            "selo": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "aleatorio": { "type": "string", "pattern": "^[A-Z]{3}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "dataInicioEficacia": { "type": "string", "format": "date" },
            "dataFimEficacia": { "type": "string", "format": "date" },
            "indCertidaoEletronica": { "type": "boolean" },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "origemDoc": { "$ref": "#/$defs/OrigemDocumento" },
            "documento": {
              "type": "string",
              "minLength": 2,
              "maxLength": 250,
              "description": "Descricao do documento objeto da copia."
            },
            "qtdPaginas": {
              "type": "integer",
              "minimum": 1,
              "maximum": 999999,
              "description": "Quantidade de paginas da copia."
            },
            "dataImpressao": {
              "type": "string",
              "format": "date-time",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}([.,]\\d+)?(Z|[+-]\\d{2}:\\d{2})$",
              "description": "Data e hora da impressao do documento (ISO 8601 com offset). Substitui DataImpressao 'dd/mm/aaaa hh:mm:ss'. Deve ser igual a dataPratica do ato."
            },
            "url": {
              "type": "string",
              "format": "uri",
              "minLength": 2,
              "maxLength": 2083,
              "description": "URL do website que originou o documento. Obrigatorio quando origemDoc=WEBSITE."
            },
            "nomeArquivo": {
              "type": "string",
              "minLength": 2,
              "maxLength": 100,
              "description": "Nome do arquivo originador. Obrigatorio quando origemDoc=ARQUIVO."
            },
            "formatoArquivo": {
              "type": "string",
              "minLength": 2,
              "maxLength": 4,
              "description": "Formato do arquivo (DOCX, PDF, JPEG, etc.). Obrigatorio quando origemDoc=ARQUIVO."
            },
            "tamanhoArquivo": {
              "type": "integer",
              "minimum": 1,
              "maximum": 9999999999,
              "description": "Tamanho do arquivo em kilobytes. No XML 2.03 era string \\d{1,10}; aqui integer."
            },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "Apostilamento": {
      "title": "Apostilamento",
      "description": "Apostilamento (Convencao da Haia) de documento publico para uso no exterior. Selado. Substitui AtoApostilamento do XSD 2.03. Resolucao CNJ 228/2016.",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "selo", "documento", "apostilador", "documentoApostilador", "participantes", "emolumentos"],
          "properties": {
            "categoria": { "const": "ATO_SELADO" },
            "dataPratica": { "type": "string", "format": "date" },
            "selo": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "aleatorio": { "type": "string", "pattern": "^[A-Z]{3}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "dataInicioEficacia": { "type": "string", "format": "date" },
            "dataFimEficacia": { "type": "string", "format": "date" },
            "indCertidaoEletronica": { "type": "boolean" },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "documento": {
              "type": "string",
              "minLength": 2,
              "maxLength": 50,
              "description": "Descricao do documento apostilado."
            },
            "apostilador": {
              "type": "string",
              "minLength": 2,
              "maxLength": 50,
              "description": "Nome do funcionario do cartorio que efetuou o apostilamento."
            },
            "documentoApostilador": {
              "type": "string",
              "minLength": 2,
              "maxLength": 25,
              "description": "Documento de identificacao do funcionario apostilador."
            },
            "participantes": { "$ref": "#/$defs/Participantes" },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "EncerramentoLivro": {
      "title": "Encerramento de Livro",
      "description": "Termo de encerramento de livro do tabelionato. Transmissao com CCT (nao selada). Substitui AtoEncerramentoLivro do XSD 2.03.",
      "allOf": [
        { "$ref": "#/$defs/TransmissaoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "cct", "livro", "qtdTotalFolhas", "identificacaoLivro", "dataEncerramento"],
          "properties": {
            "categoria": { "const": "TRANSMISSAO_NAO_SELADA" },
            "dataPratica": { "type": "string", "format": "date" },
            "cct": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "livro": {
              "type": "string",
              "minLength": 2,
              "maxLength": 25,
              "description": "Codigo e numero do livro encerrado (ex.: 'A-12345')."
            },
            "qtdTotalFolhas": {
              "type": "integer",
              "minimum": 1,
              "maximum": 999999,
              "description": "Quantidade total de folhas do livro."
            },
            "identificacaoLivro": {
              "type": "string",
              "minLength": 2,
              "maxLength": 100,
              "description": "Texto de identificacao do livro."
            },
            "dataEncerramento": {
              "type": "string",
              "format": "date",
              "description": "Data efetiva do encerramento do livro."
            }
          }
        }
      ]
    },

    "Visto": {
      "title": "Visto (revalidacao)",
      "description": "Visto/revalidacao de certidao ou ato anterior. Selado. Substitui AtoVisto do XSD 2.03.",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "selo", "revalidada", "participantes", "atosVinculados", "emolumentos"],
          "properties": {
            "categoria": { "const": "ATO_SELADO" },
            "dataPratica": { "type": "string", "format": "date" },
            "selo": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "aleatorio": { "type": "string", "pattern": "^[A-Z]{3}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "dataInicioEficacia": { "type": "string", "format": "date" },
            "dataFimEficacia": { "type": "string", "format": "date" },
            "indCertidaoEletronica": { "type": "boolean" },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "revalidada": {
              "type": "boolean",
              "description": "Indica se o ato foi revalidado. Substitui Revalidada 'S'/'N'."
            },
            "participantes": { "$ref": "#/$defs/Participantes" },
            "atosVinculados": { "$ref": "#/$defs/AtosVinculados" },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "FolhaAdicionalComplemento": {
      "title": "Folha Adicional Complemento",
      "description": "Complemento de emolumentos referente a paginas excedentes de certidao. Transmissao com CCT. Substitui tpFolhaAdicionalComplemento do XSD 2.03.",
      "allOf": [
        { "$ref": "#/$defs/TransmissaoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "cct", "qtdPaginasExcedentes", "atosVinculados", "emolumentos"],
          "properties": {
            "categoria": { "const": "TRANSMISSAO_NAO_SELADA" },
            "dataPratica": { "type": "string", "format": "date" },
            "cct": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "qtdPaginasExcedentes": {
              "type": "integer",
              "minimum": 1,
              "maximum": 999999,
              "description": "Quantidade de paginas excedentes."
            },
            "atosVinculados": { "$ref": "#/$defs/AtosVinculados" },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "InformacaoVerbal": {
      "title": "Informacao Verbal",
      "description": "Prestacao de informacao verbal a usuario. Transmissao com CCT (nao selada). Substitui tpInformacaoVerbal do XSD 2.03.",
      "allOf": [
        { "$ref": "#/$defs/TransmissaoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "cct", "emolumentos"],
          "properties": {
            "categoria": { "const": "TRANSMISSAO_NAO_SELADA" },
            "dataPratica": { "type": "string", "format": "date" },
            "cct": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "numeroAto": {
              "type": "string",
              "minLength": 1,
              "maxLength": 25,
              "description": "Numero do recibo/ato."
            },
            "nome": {
              "type": "string",
              "minLength": 1,
              "maxLength": 250,
              "description": "Nome no qual foi solicitada a informacao verbal."
            },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "InformacaoResumida": {
      "title": "Informacao Resumida",
      "description": "Informacao resumida (consolidacao de informacoes do periodo). Transmissao com CCT. Substitui tpInformacaoResumida do XSD 2.03.",
      "allOf": [
        { "$ref": "#/$defs/TransmissaoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "cct", "qtdInformacoes", "dataInicial", "dataFinal", "participantes", "emolumentos"],
          "properties": {
            "categoria": { "const": "TRANSMISSAO_NAO_SELADA" },
            "dataPratica": { "type": "string", "format": "date" },
            "cct": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "qtdInformacoes": {
              "type": "integer",
              "minimum": 1,
              "maximum": 999999,
              "description": "Quantidade de informacoes do periodo."
            },
            "dataInicial": {
              "type": "string",
              "format": "date",
              "description": "Data inicial do periodo."
            },
            "dataFinal": {
              "type": "string",
              "format": "date",
              "description": "Data final do periodo."
            },
            "participantes": { "$ref": "#/$defs/Participantes" },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "ComplementoEmolumentos": {
      "title": "Complemento de Emolumentos",
      "description": "Complemento de emolumentos sobre ato anterior. Transmissao com CCT. Substitui AtoComplementoEmolumentos do XSD 2.03.",
      "allOf": [
        { "$ref": "#/$defs/TransmissaoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "dataPratica", "cct", "atosVinculados", "emolumentos"],
          "properties": {
            "categoria": { "const": "TRANSMISSAO_NAO_SELADA" },
            "dataPratica": { "type": "string", "format": "date" },
            "cct": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
            "numeroRecibo": { "type": "string", "minLength": 1, "maxLength": 25 },
            "indAtoEletronico": { "type": "boolean" },
            "urlPdfAto": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashPdfAto": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "urlDossie": { "type": "string", "format": "uri", "maxLength": 2083 },
            "hashDossie": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" },
            "atosVinculados": { "$ref": "#/$defs/AtosVinculados" },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "AlteracaoEmolumentos": {
      "title": "Alteracao de Emolumentos",
      "description": "Operacao administrativa para alterar emolumentos de ato pre-existente identificado pelo selo/CCT. Substitui AtoAlteracaoEmolumentos do XSD 2.03. Pode integrar arquivo de Inclusao ou Alteracao; o ato alvo deve existir na base do TJ.",
      "allOf": [
        { "$ref": "#/$defs/OperacaoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["categoria", "selo", "emolumentos"],
          "properties": {
            "categoria": { "const": "OPERACAO" },
            "selo": {
              "type": "string",
              "pattern": "^[A-Z]{4}\\d{5}$",
              "description": "Selo (ou CCT, mesmo formato) do ato cujos emolumentos serao alterados."
            },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "TipoCobranca": {
      "type": "string",
      "enum": [
        "JUSTICA_GRATUITA",
        "COM_COBRANCA",
        "SEM_COBRANCA",
        "COM_CONVENIO",
        "FORCA_DE_LEI",
        "APRESENTACAO_PROTESTO_SENTENCA",
        "PROVIMENTO_86_CNJ",
        "NIHIL",
        "PAGAMENTO_CONVENIO",
        "PAGAMENTO_FORCA_DE_LEI",
        "PAGAMENTO_PROTESTO_SENTENCA",
        "NIHIL_CONVENIO",
        "NIHIL_FORCA_DE_LEI",
        "NIHIL_PROTESTO_SENTENCA",
        "PAGO_NA_PROTOCOLIZACAO"
      ],
      "description": "Modalidade de cobranca dos emolumentos. Fonte: PDF Layout Protesto 2.03 secao 5.29 + Lei 6.281/2012 art. 2. JUSTICA_GRATUITA=JG, COM_COBRANCA=CC, SEM_COBRANCA=SC (erro material), COM_CONVENIO=CV, FORCA_DE_LEI=FL (Lei 3.350 art. 42 / Prov. 12/2009 CNGCGJ-RJ art. 142), APRESENTACAO_PROTESTO_SENTENCA=AS, PROVIMENTO_86_CNJ=PR, NIHIL=NH, PAGAMENTO_CONVENIO=PC, PAGAMENTO_FORCA_DE_LEI=PL, PAGAMENTO_PROTESTO_SENTENCA=PS, NIHIL_CONVENIO=NC, NIHIL_FORCA_DE_LEI=NL, NIHIL_PROTESTO_SENTENCA=NS, PAGO_NA_PROTOCOLIZACAO=PZ."
    },

    "TipoVinculo": {
      "type": "string",
      "enum": [
        "ATO_DISTRIBUICAO",
        "ATO_PROTOCOLIZACAO",
        "ATO_PROTESTO",
        "ATO_CERTIDAO",
        "ATO_COM_ERRO_MATERIAL",
        "ATO_COMPLEMENTO_EMOLUMENTOS"
      ],
      "description": "Tipo de vinculo entre o ato corrente e outro ato extrajudicial. Fonte: PDF Layout Protesto 2.03 secao 5.28. ATO_DISTRIBUICAO=D, ATO_PROTOCOLIZACAO=Z, ATO_PROTESTO=S, ATO_CERTIDAO=C, ATO_COM_ERRO_MATERIAL=E, ATO_COMPLEMENTO_EMOLUMENTOS=M."
    },

    "TipoSelo": {
      "type": "string",
      "enum": ["FISICO", "ELETRONICO", "DIGITAL"],
      "description": "Modalidade do selo do ato vinculado. Fonte: PDF Layout Protesto 2.03 secao 5.28. FISICO=F (adesivo Casa da Moeda), ELETRONICO=E (SFE), DIGITAL=D (selo de transmissao digital)."
    },

    "TipoTitulo": {
      "type": "string",
      "enum": [
        "DUPLICATA_MERCANTIL_VENDA",
        "DUPLICATA_MERCANTIL_VENDA_INDICACAO",
        "DUPLICATA_RURAL",
        "DUPLICATA_RURAL_INDICACAO",
        "DUPLICATA_PRESTACAO_SERVICO",
        "DUPLICATA_PRESTACAO_SERVICO_INDICACAO",
        "DUPLICATA_PRESTACAO_SERVICO_PROFISSIONAL_LIBERAL",
        "TRIPLICATA_MERCANTIL",
        "TRIPLICATA_PRESTACAO_SERVICO",
        "LETRA_CAMBIO",
        "NOTA_PROMISSORIA",
        "NOTA_PROMISSORIA_RURAL",
        "CHEQUE",
        "WARRANT",
        "CEDULA_CREDITO_RURAL",
        "CEDULA_CREDITO_INDUSTRIAL",
        "CEDULA_CREDITO_COMERCIAL",
        "CEDULA_CREDITO_BANCARIO",
        "CEDULA_PRODUTO_RURAL",
        "NOTA_CREDITO_RURAL",
        "NOTA_CREDITO_INDUSTRIAL",
        "NOTA_CREDITO_COMERCIAL",
        "CEDULA_HIPOTECARIA",
        "CONTRATO_GARANTIA_HIPOTECARIA",
        "CEDULA_CREDITO_EXPORTACAO",
        "NOTA_CREDITO_EXPORTACAO",
        "CONHECIMENTO_DEPOSITO",
        "CONHECIMENTO_TRANSPORTE",
        "FATURA",
        "BOLETO_PROPOSTA",
        "APOLICE_SEGURO",
        "RECIBO",
        "CONTRATO_CAMBIO",
        "CONTRATO_FINANCIAMENTO",
        "DOCUMENTO_DIVIDA",
        "SENTENCA_JUDICIAL",
        "DECLARACAO_FORO",
        "TERMO_AJUSTE_CONDUTA",
        "DEBITO_CONDOMINIAL",
        "DOCUMENTO_DIVIDA_ALIMENTOS",
        "OUTRO_TITULO_CAMBIAL",
        "OUTRO_DOCUMENTO_DIVIDA"
      ],
      "description": "Tipo do titulo apresentado a protesto (Tabela de Referencia n. 4 - Tipos de Titulo CGJ-RJ). Lista derivada da Lei 9.492/1997 (Lei do Protesto), Lei 5.474/1968 (Duplicatas), Decreto 57.663/1966 (LUG/letra de cambio e nota promissoria), Lei 7.357/1985 (Cheque). O codigo numerico legado e mantido como traducao XML->JSON na §10. ⚠️ A Tabela 4 oficial CGJ-RJ tem ate 60 valores; aqui consolidados os principais. Valores especificos do servico devem ser conferidos no MAS."
    },

    "TipoApresentacao": {
      "type": "string",
      "enum": ["BALCAO", "CORREIO", "INTERNET"],
      "description": "Forma de apresentacao do titulo. Fonte: PDF Layout Protesto 2.03 secao 5.4. BALCAO=B, CORREIO=C, INTERNET=I."
    },

    "FormaPagamento": {
      "type": "string",
      "enum": ["CHEQUE_ADMINISTRATIVO", "DEPOSITO"],
      "description": "Forma de pagamento da liquidacao. Fonte: PDF Layout Protesto 2.03 secao 5.5. CHEQUE_ADMINISTRATIVO=1, DEPOSITO=2."
    },

    "IndicadorCancelamento": {
      "type": "string",
      "enum": ["CANCELAMENTO_CONVENIO", "CANCELAMENTO_NORMAL"],
      "description": "Indicador da modalidade do cancelamento. Fonte: PDF Layout Protesto 2.03 secao 5.10. CANCELAMENTO_CONVENIO=1, CANCELAMENTO_NORMAL=2."
    },

    "TipoCertidao": {
      "type": "string",
      "enum": ["NORMAL", "ESPECIAL_CADASTRO", "INTEIRO_TEOR"],
      "description": "Tipo de certidao individual. Fonte: PDF Layout Protesto 2.03 secao 5.12. NORMAL=N, ESPECIAL_CADASTRO=E, INTEIRO_TEOR=I."
    },

    "ResultadoCertidao": {
      "type": "string",
      "enum": ["POSITIVO", "NEGATIVO", "NEGATIVO_COM_EFEITO_POSITIVO"],
      "description": "Resultado da certidao individual. Fonte: PDF Layout Protesto 2.03 secao 5.12. POSITIVO=P, NEGATIVO=N, NEGATIVO_COM_EFEITO_POSITIVO=E."
    },

    "OrigemDocumento": {
      "type": "string",
      "enum": ["WEBSITE", "ARQUIVO"],
      "description": "Origem do documento na copia microfilmada/gravada eletronicamente. Fonte: PDF Layout Protesto 2.03 secao 5.13. WEBSITE=W, ARQUIVO=A."
    },

    "JustificativaAusenciaCpf": {
      "type": "string",
      "enum": ["NAO_POSSUI", "NAO_DECLARADO", "ESTRANGEIRO"],
      "description": "Motivo de ausencia de CPF. Fonte: PDF Layout Protesto 2.03 secao 5.23. NAO_POSSUI=1 (pessoa sem inscricao CPF), NAO_DECLARADO=2 (nao informado pela pessoa), ESTRANGEIRO=3 (pessoa nao residente)."
    },

    "JustificativaAusenciaCnpj": {
      "type": "string",
      "enum": ["NAO_POSSUI", "NAO_DECLARADO"],
      "description": "Motivo de ausencia de CNPJ. Fonte: PDF Layout Protesto 2.03 secao 5.24. NAO_POSSUI=1, NAO_DECLARADO=2."
    },

    "TipoDocumentoOutros": {
      "type": "string",
      "enum": [
        "NIT",
        "RIC",
        "RNE",
        "TITULO_ELEITOR",
        "PASSAPORTE",
        "CNH",
        "CTPS",
        "CARTEIRA_MARITIMO",
        "DOCUMENTO_ESTRANGEIRO",
        "CERTIDAO_NASCIMENTO",
        "CERTIFICADO_RESERVISTA",
        "NAO_IDENTIFICADO",
        "CERTIDAO_CASAMENTO"
      ],
      "description": "Tipo do documento auxiliar. Fonte: PDF Layout Protesto 2.03 secao 5.25 + Lei 6.015/1973. Sequencia 1..13 do XML legado mapeada para nome semantico."
    }
  }
}
