{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://layouts.tjrj.jus.br/sfe/rcpj/v3.0.0/layout_schema.json",
  "title": "Layout SFE RCPJ v3.0.0",
  "description": "Contrato JSON para transmissao de atos do Selo de Fiscalizacao Eletronico - atribuicao Registro Civil das Pessoas Juridicas (RCPJ). Sucessor do XML/XSD legado v2.00. Conforme SPEC SFE generica v1.1.0 (vinculante).",
  "type": "object",
  "additionalProperties": false,
  "required": ["remessa"],
  "properties": {
    "$schema": {
      "type": "string",
      "format": "uri",
      "description": "URL canonica do schema. Opcional; serve para auto-discovery em editores."
    },
    "remessa": { "$ref": "#/$defs/Remessa" }
  },
  "$defs": {
    "Remessa": {
      "type": "object",
      "title": "Remessa",
      "description": "Envelope canonico SFE. Identifica idempotentemente a transmissao de atos de um servico extrajudicial.",
      "additionalProperties": false,
      "required": [
        "id",
        "versaoLayout",
        "codigoServico",
        "tipoOperacao",
        "ambiente",
        "software",
        "dataGeracao"
      ],
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "description": "UUID v4. Usado para idempotencia (header X-Idempotency-Key)."
        },
        "versaoLayout": {
          "type": "string",
          "pattern": "^\\d+\\.\\d+\\.\\d+$",
          "description": "Versao do layout no formato semver. Esta versao = 3.0.0."
        },
        "codigoServico": {
          "type": "string",
          "pattern": "^\\d{1,5}$",
          "description": "Codigo do servico extrajudicial (CGJ-RJ). Identificador opaco numerico ate 5 digitos."
        },
        "tipoOperacao": { "$ref": "#/$defs/TipoOperacao" },
        "ambiente": { "$ref": "#/$defs/Ambiente" },
        "software": {
          "type": "object",
          "title": "Software",
          "description": "Software gerador da remessa (sistema de automacao cartoraria).",
          "additionalProperties": false,
          "required": ["nome", "versao"],
          "properties": {
            "nome": { "type": "string", "minLength": 2, "maxLength": 100 },
            "versao": { "type": "string", "minLength": 1, "maxLength": 50 }
          }
        },
        "dataGeracao": {
          "type": "string",
          "format": "date-time",
          "description": "Instante de geracao do arquivo, ISO 8601 com offset (ex.: 2026-05-07T13:21:45-03:00)."
        },
        "atos": {
          "type": "array",
          "maxItems": 5000,
          "description": "Lista de atos transmitidos. Maximo 5.000 por remessa.",
          "items": { "$ref": "#/$defs/Ato" }
        },
        "justificativasAusencia": {
          "type": "array",
          "description": "Datas em que nenhum ato foi praticado (justificativa de ausencia).",
          "items": { "$ref": "#/$defs/JustificativaAusencia" }
        }
      }
    },
    "Ato": {
      "type": "object",
      "title": "Ato",
      "description": "Envelope discriminado de cada ato. tipoAto seleciona a estrutura concreta em dadosAto via oneOf.",
      "additionalProperties": false,
      "required": ["tipoAto", "dadosAto"],
      "properties": {
        "tipoAto": { "type": "string" },
        "dadosAto": { "type": "object" }
      },
      "oneOf": [
        {
          "properties": {
            "tipoAto": { "const": "REGISTRO_PESSOA_JURIDICA" },
            "dadosAto": { "$ref": "#/$defs/RegistroPessoaJuridica" }
          }
        },
        {
          "properties": {
            "tipoAto": { "const": "AVERBACAO_PESSOA_JURIDICA" },
            "dadosAto": { "$ref": "#/$defs/AverbacaoPessoaJuridica" }
          }
        },
        {
          "properties": {
            "tipoAto": { "const": "REGISTRO_LIVRO_DIGITAL" },
            "dadosAto": { "$ref": "#/$defs/RegistroLivroDigital" }
          }
        },
        {
          "properties": {
            "tipoAto": { "const": "CERTIDAO_PESSOA_JURIDICA" },
            "dadosAto": { "$ref": "#/$defs/CertidaoPessoaJuridica" }
          }
        },
        {
          "properties": {
            "tipoAto": { "const": "CERTIDAO_GENERICA" },
            "dadosAto": { "$ref": "#/$defs/CertidaoGenerica" }
          }
        },
        {
          "properties": {
            "tipoAto": { "const": "VISTO" },
            "dadosAto": { "$ref": "#/$defs/Visto" }
          }
        },
        {
          "properties": {
            "tipoAto": { "const": "APOSTILAMENTO" },
            "dadosAto": { "$ref": "#/$defs/Apostilamento" }
          }
        },
        {
          "properties": {
            "tipoAto": { "const": "BUSCA_NOME" },
            "dadosAto": { "$ref": "#/$defs/BuscaNome" }
          }
        },
        {
          "properties": {
            "tipoAto": { "const": "FOLHA_ADICIONAL_COMPLEMENTO" },
            "dadosAto": { "$ref": "#/$defs/FolhaAdicionalComplemento" }
          }
        },
        {
          "properties": {
            "tipoAto": { "const": "APRESENTACAO_TITULO_EXAME" },
            "dadosAto": { "$ref": "#/$defs/ApresentacaoTituloExame" }
          }
        },
        {
          "properties": {
            "tipoAto": { "const": "ENCERRAMENTO_LIVRO" },
            "dadosAto": { "$ref": "#/$defs/EncerramentoLivro" }
          }
        },
        {
          "properties": {
            "tipoAto": { "const": "INFORMACAO_VERBAL" },
            "dadosAto": { "$ref": "#/$defs/InformacaoVerbal" }
          }
        },
        {
          "properties": {
            "tipoAto": { "const": "COMPLEMENTO_EMOLUMENTOS" },
            "dadosAto": { "$ref": "#/$defs/ComplementoEmolumentos" }
          }
        },
        {
          "properties": {
            "tipoAto": { "const": "ALTERACAO_EMOLUMENTOS" },
            "dadosAto": { "$ref": "#/$defs/AlteracaoEmolumentos" }
          }
        }
      ]
    },
    "AtoBase": {
      "type": "object",
      "title": "AtoBase",
      "description": "Campos comuns a todo ato selado RCPJ. Compoe via allOf no $def concreto. Nao usa additionalProperties:false porque o schema concreto e quem fecha a lista de propriedades (sintaxe JSON Schema draft-07: additionalProperties so reconhece properties declaradas no MESMO subschema).",
      "required": ["categoria", "dataPratica", "selo", "aleatorio"],
      "properties": {
        "categoria": {
          "const": "ATO_SELADO",
          "description": "Discriminador. Atos selados sempre 'ATO_SELADO'."
        },
        "dataPratica": {
          "type": "string",
          "format": "date",
          "description": "Data da pratica do ato (ISO 8601, YYYY-MM-DD)."
        },
        "selo": {
          "type": "string",
          "pattern": "^[A-Z]{4}\\d{5}$",
          "description": "Selo de Fiscalizacao Eletronico aposto ao ato. 4 letras maiusculas + 5 digitos."
        },
        "aleatorio": {
          "type": "string",
          "pattern": "^[A-Z]{3}$",
          "description": "Codigo aleatorio de 3 letras maiusculas associado ao selo."
        },
        "atoReferencia": {
          "$ref": "#/$defs/ReferenciaAto",
          "description": "Referencia a outro ato relacionado (CodServicoAtoReferencia/SeloAtoReferencia/AleatorioAtoReferencia do XML legado)."
        },
        "dataInicioEficacia": {
          "type": "string",
          "format": "date",
          "description": "Data de inicio de eficacia. Aplica-se apenas a Certidao Eletronica (Provimento CGJ 36/2022)."
        },
        "dataFimEficacia": {
          "type": "string",
          "format": "date",
          "description": "Data de fim de eficacia. Aplica-se apenas a Certidao Eletronica (Provimento CGJ 36/2022)."
        },
        "indCertidaoEletronica": {
          "type": "boolean",
          "description": "Indica se o ato e uma Certidao Eletronica. Suprimido se nao for. Mapeia 'S' do XML legado para true."
        },
        "indAtoEletronico": {
          "type": "boolean",
          "description": "Indica se o ato e eletronico (com dossie). Suprimido se nao houver dossie."
        },
        "urlPdfAto": {
          "type": "string",
          "format": "uri",
          "maxLength": 2083,
          "description": "URL do PDF/A do ato em servico de nuvem. Obrigatorio quando indAtoEletronico=true."
        },
        "hashPdfAto": {
          "type": "string",
          "pattern": "^[A-Fa-f0-9]{64}$",
          "description": "Hash SHA-256 (hex 64 chars) do PDF/A do ato. Obrigatorio quando indAtoEletronico=true."
        },
        "urlDossie": {
          "type": "string",
          "format": "uri",
          "maxLength": 2083,
          "description": "URL da pasta de dossie do ato em servico de nuvem. Obrigatorio quando indAtoEletronico=true."
        },
        "hashDossie": {
          "type": "string",
          "pattern": "^[A-Fa-f0-9]{64}$",
          "description": "Hash SHA-256 do dossie (hash da concatenacao dos hashes dos documentos). Obrigatorio quando indAtoEletronico=true."
        }
      }
    },
    "TransmissaoBase": {
      "type": "object",
      "title": "TransmissaoBase",
      "description": "Campos comuns a transmissoes nao seladas RCPJ. Identificadas por CCT em vez de selo. Nao usa additionalProperties:false porque o schema concreto fecha a lista de propriedades via allOf.",
      "required": ["categoria", "dataPratica", "cct"],
      "properties": {
        "categoria": {
          "const": "TRANSMISSAO_NAO_SELADA",
          "description": "Discriminador. Transmissoes nao seladas sempre 'TRANSMISSAO_NAO_SELADA'."
        },
        "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. Mesmo formato do selo (4 letras + 5 digitos)."
        },
        "indAtoEletronico": {
          "type": "boolean",
          "description": "Indica se a transmissao corresponde a ato eletronico."
        },
        "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}$" }
      }
    },
    "ReferenciaAto": {
      "type": "object",
      "title": "ReferenciaAto",
      "description": "Referencia condensada a outro ato (codigoServico + selo + aleatorio).",
      "additionalProperties": false,
      "properties": {
        "codigoServico": {
          "type": "string",
          "pattern": "^\\d{1,5}$"
        },
        "selo": {
          "type": "string",
          "pattern": "^[A-Z]{3,4}\\d{5}$",
          "description": "Aceita 3 ou 4 letras pois selos antigos podem ter 8 chars (FormatoSeloOriginal do XSD legado)."
        },
        "aleatorio": {
          "type": "string",
          "pattern": "^[A-Z]{3}$"
        }
      }
    },
    "ParticipantePJ": {
      "type": "object",
      "title": "ParticipantePJ",
      "description": "Participante pessoa juridica do ato RCPJ. Mantida estrutura propria (nao usa Pessoa fisica) pois RCPJ trata exclusivamente de PJ.",
      "additionalProperties": false,
      "required": ["tipoParticipante", "nome"],
      "properties": {
        "tipoParticipante": {
          "type": "string",
          "pattern": "^\\d{1,3}$",
          "description": "Codigo do tipo de participante (Tabela 2 - Tipos de Participante CGJ-RJ). Identificador opaco preservado como string."
        },
        "nome": {
          "type": "string",
          "minLength": 2,
          "maxLength": 250,
          "description": "Razao social ou nome da pessoa juridica."
        },
        "cnpj": {
          "type": "string",
          "pattern": "^\\d{14}$",
          "description": "CNPJ apenas digitos (14). Mascaras devem ser removidas na migracao."
        },
        "justificativaAusenciaCnpj": { "$ref": "#/$defs/JustificativaAusenciaCnpj" }
      }
    },
    "Emolumentos": {
      "type": "object",
      "title": "Emolumentos",
      "description": "Cotacao de emolumentos do ato. Quando tipoCobranca in {JUSTICA_GRATUITA, SEM_COBRANCA, NIHIL}, valores e itens devem ser suprimidos (validacao de negocio do servidor SFE).",
      "additionalProperties": false,
      "required": ["tipoCobranca"],
      "properties": {
        "tipoCobranca": { "$ref": "#/$defs/TipoCobranca" },
        "valorTotalEmolumentos": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Valor total dos emolumentos (string monetaria com 2 casas)."
        },
        "fetj": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Acrescimo de 20% (Lei 3.217/1999) - Fundo Especial do TJ."
        },
        "fundperj": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Acrescimo de 5% (Lei 4.664/2005) - Fundo de Desenvolvimento do Poder Judiciario."
        },
        "funperj": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Acrescimo de 5% (LC 111/2006) - Fundo Penitenciario."
        },
        "funarpen": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Acrescimo de 4% recolhido ao FUNARPEN-RJ (Fundo de Apoio aos Registradores Civis das Pessoas Naturais)."
        },
        "ressag": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Ressarcimento de gratuidade (2%). Especifico de RCPJ/RTD/RI/Notas/Protesto/RCPN."
        },
        "valorMutua": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Valor da Mutua dos Tabeliaes/Registradores cobrado na pratica do ato."
        },
        "valorAcoterj": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Valor da ACOTERJ cobrado na pratica do ato."
        },
        "valorDistribuidor": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Valor recolhido para o distribuidor, incluindo FETJ, FUNDPERJ, FUNPERJ, FUNARPEN e RESSAG."
        },
        "valorSeloEletronico": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Valor do selo eletronico repassado ao usuario (art. 11 Lei 9.873/2022)."
        },
        "valorIss": {
          "type": "string",
          "pattern": "^\\d+\\.\\d{2}$",
          "description": "Valor do ISS retido (LC 175/2020)."
        },
        "itens": {
          "type": "array",
          "maxItems": 100,
          "items": { "$ref": "#/$defs/ItemEmolumento" }
        }
      }
    },
    "ItemEmolumento": {
      "type": "object",
      "title": "ItemEmolumento",
      "description": "Item da tabela de emolumentos CGJ-RJ. Codigos tabela/item/subItem sao chaves externas - preservados como string conforme legado para reconciliacao financeira.",
      "additionalProperties": false,
      "required": ["tabela", "item", "quantidade"],
      "properties": {
        "ano": {
          "type": "integer",
          "minimum": 2000,
          "maximum": 2099,
          "description": "Ano de vigencia da tabela. Ausente = ano da dataPratica."
        },
        "tabela": {
          "type": "string",
          "minLength": 1,
          "maxLength": 8,
          "description": "Numero da tabela de emolumentos (Tabela 1 CGJ-RJ). Chave externa preservada."
        },
        "item": {
          "type": "string",
          "minLength": 1,
          "maxLength": 20,
          "description": "Item da tabela. Pode incluir romanos ou alfanumericos."
        },
        "subItem": {
          "type": "string",
          "maxLength": 20,
          "description": "Subitem da tabela."
        },
        "quantidade": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9999,
          "description": "Quantidade de vezes em que o item foi aplicado."
        },
        "complemento": {
          "type": "string",
          "minLength": 2,
          "maxLength": 200,
          "description": "Texto livre de complemento de emolumentos (no XML legado era atributo string)."
        },
        "excecao": {
          "type": "string",
          "minLength": 2,
          "maxLength": 200,
          "description": "Texto livre da excecao aplicada (no XML legado era atributo string)."
        }
      }
    },
    "AtoVinculado": {
      "type": "object",
      "title": "AtoVinculado",
      "description": "Vinculo a outro ato extrajudicial. Em RCPJ, apenas tipoVinculo=ATO_COMPLEMENTO_EMOLUMENTOS e suportado (XSD legado).",
      "additionalProperties": false,
      "required": ["tipoVinculo"],
      "properties": {
        "tipoVinculo": { "$ref": "#/$defs/TipoVinculoRcpj" },
        "codigoServico": { "type": "string", "pattern": "^\\d{1,5}$" },
        "selo": {
          "type": "string",
          "pattern": "^[A-Z]{3,4}\\d{5}$",
          "description": "Selo do ato vinculado. Aceita formato original (3-4 letras + 5 digitos)."
        },
        "aleatorio": { "type": "string", "pattern": "^[A-Z]{3}$" },
        "tipoSelo": { "$ref": "#/$defs/TipoSelo" },
        "cct": { "type": "string", "pattern": "^[A-Z]{4}\\d{5}$" },
        "dataPratica": { "type": "string", "format": "date" },
        "numeroProtocolo": { "type": "string", "minLength": 2, "maxLength": 25 }
      }
    },
    "JustificativaAusencia": {
      "type": "object",
      "title": "JustificativaAusencia",
      "description": "Justificativa de data sem ato praticado.",
      "additionalProperties": false,
      "required": ["data"],
      "properties": {
        "data": { "type": "string", "format": "date" },
        "motivo": {
          "type": "string",
          "minLength": 2,
          "maxLength": 200,
          "description": "Motivo opcional. O XSD legado nao tem este campo; mantido para extensibilidade futura."
        }
      }
    },

    "RegistroPessoaJuridica": {
      "title": "RegistroPessoaJuridica",
      "description": "Registro Civil de Pessoa Juridica (TipoAto=JRCPJ no XML legado). Inclui: matricula de oficinas impressoras, jornais e periodicos; registro por instrumento de associacoes/fundacoes/sociedades ME/EPP; registro de sociedades, EIRELI e PJ estrangeiras; registro de livros de contabilidade ou de atos das pessoas juridicas.",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "categoria",
            "dataPratica",
            "selo",
            "aleatorio",
            "tipoPessoaJuridica",
            "descricaoAto",
            "dataDocumento",
            "numeroMatricula",
            "numeroProtocolo",
            "participantes",
            "emolumentos"
          ],
          "properties": {
            "categoria": true,
            "dataPratica": true,
            "selo": true,
            "aleatorio": true,
            "atoReferencia": true,
            "dataInicioEficacia": true,
            "dataFimEficacia": true,
            "indCertidaoEletronica": true,
            "indAtoEletronico": true,
            "urlPdfAto": true,
            "hashPdfAto": true,
            "urlDossie": true,
            "hashDossie": true,
            "tipoPessoaJuridica": { "$ref": "#/$defs/TipoPessoaJuridica" },
            "descricaoAto": { "$ref": "#/$defs/DescricaoAtoRcpj" },
            "descricaoLivre": {
              "type": "string",
              "minLength": 2,
              "maxLength": 250,
              "description": "Detalhamento livre. Obrigatorio quando descricaoAto=OUTROS."
            },
            "dataDocumento": { "type": "string", "format": "date" },
            "numeroMatricula": { "type": "string", "minLength": 2, "maxLength": 25 },
            "numeroProtocolo": { "type": "string", "minLength": 2, "maxLength": 25 },
            "livro": { "type": "string", "minLength": 2, "maxLength": 25 },
            "folha": { "type": "string", "minLength": 2, "maxLength": 25 },
            "numeroAto": { "type": "string", "minLength": 2, "maxLength": 25 },
            "participantes": {
              "type": "array",
              "minItems": 1,
              "items": { "$ref": "#/$defs/ParticipantePJ" }
            },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "AverbacaoPessoaJuridica": {
      "title": "AverbacaoPessoaJuridica",
      "description": "Averbacao de Registro Civil de Pessoa Juridica (TipoAto=JARCPJ no XML legado). Mesma estrutura do registro acrescida de dataAtoRegistro (data do registro original averbado).",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "categoria",
            "dataPratica",
            "selo",
            "aleatorio",
            "tipoPessoaJuridica",
            "descricaoAto",
            "dataDocumento",
            "numeroMatricula",
            "numeroProtocolo",
            "dataAtoRegistro",
            "participantes",
            "emolumentos"
          ],
          "properties": {
            "categoria": true,
            "dataPratica": true,
            "selo": true,
            "aleatorio": true,
            "atoReferencia": true,
            "dataInicioEficacia": true,
            "dataFimEficacia": true,
            "indCertidaoEletronica": true,
            "indAtoEletronico": true,
            "urlPdfAto": true,
            "hashPdfAto": true,
            "urlDossie": true,
            "hashDossie": true,
            "tipoPessoaJuridica": { "$ref": "#/$defs/TipoPessoaJuridica" },
            "descricaoAto": { "$ref": "#/$defs/DescricaoAtoRcpj" },
            "descricaoLivre": {
              "type": "string",
              "minLength": 2,
              "maxLength": 250,
              "description": "Detalhamento livre. Obrigatorio quando descricaoAto=OUTROS."
            },
            "dataDocumento": { "type": "string", "format": "date" },
            "numeroMatricula": { "type": "string", "minLength": 2, "maxLength": 25 },
            "numeroProtocolo": { "type": "string", "minLength": 2, "maxLength": 25 },
            "livro": { "type": "string", "minLength": 2, "maxLength": 25 },
            "folha": { "type": "string", "minLength": 2, "maxLength": 25 },
            "numeroAto": { "type": "string", "minLength": 2, "maxLength": 25 },
            "dataAtoRegistro": {
              "type": "string",
              "format": "date",
              "description": "Data do registro original sendo averbado. Obrigatoria em averbacao."
            },
            "participantes": {
              "type": "array",
              "minItems": 1,
              "items": { "$ref": "#/$defs/ParticipantePJ" }
            },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "RegistroLivroDigital": {
      "title": "RegistroLivroDigital",
      "description": "Registro de Livro Digital (livro contabil/fiscal/de atos em formato digital). Envio condicionado a regulamentacao da CGJ-RJ.",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "categoria",
            "dataPratica",
            "selo",
            "aleatorio",
            "tipoLivro",
            "periodoEscrituracao",
            "hashMd5Documento",
            "numeroProtocolo",
            "participantes",
            "emolumentos"
          ],
          "properties": {
            "categoria": true,
            "dataPratica": true,
            "selo": true,
            "aleatorio": true,
            "atoReferencia": true,
            "dataInicioEficacia": true,
            "dataFimEficacia": true,
            "indCertidaoEletronica": true,
            "indAtoEletronico": true,
            "urlPdfAto": true,
            "hashPdfAto": true,
            "urlDossie": true,
            "hashDossie": true,
            "tipoLivro": {
              "type": "string",
              "minLength": 2,
              "maxLength": 250,
              "description": "Tipo do livro digital apresentado (texto livre, ex.: 'Livro Diario Digital', 'Livro Contabil')."
            },
            "numeroLivro": { "type": "string", "minLength": 2, "maxLength": 25 },
            "periodoEscrituracao": {
              "type": "string",
              "minLength": 2,
              "maxLength": 25,
              "description": "Periodo de escrituracao do livro (texto livre, ex.: '01/2024 a 12/2024')."
            },
            "hashMd5Documento": {
              "type": "string",
              "minLength": 2,
              "maxLength": 250,
              "description": "Hash do documento gerado pelo software do servico. Texto livre - o XSD legado nao restringe a MD5."
            },
            "numeroProtocolo": { "type": "string", "minLength": 2, "maxLength": 25 },
            "livro": { "type": "string", "minLength": 2, "maxLength": 25 },
            "folha": { "type": "string", "minLength": 2, "maxLength": 25 },
            "numeroAto": { "type": "string", "minLength": 2, "maxLength": 25 },
            "participantes": {
              "type": "array",
              "minItems": 1,
              "items": { "$ref": "#/$defs/ParticipantePJ" }
            },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "CertidaoPessoaJuridica": {
      "title": "CertidaoPessoaJuridica",
      "description": "Certidao de RCPJ (certidao ou certidao por copia) emitida pelo servico extrajudicial.",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "categoria",
            "dataPratica",
            "selo",
            "aleatorio",
            "tipoCertidao",
            "numeroRequerimento",
            "qtdPaginas",
            "participantes",
            "emolumentos"
          ],
          "properties": {
            "categoria": true,
            "dataPratica": true,
            "selo": true,
            "aleatorio": true,
            "atoReferencia": true,
            "dataInicioEficacia": true,
            "dataFimEficacia": true,
            "indCertidaoEletronica": true,
            "indAtoEletronico": true,
            "urlPdfAto": true,
            "hashPdfAto": true,
            "urlDossie": true,
            "hashDossie": true,
            "tipoCertidao": { "$ref": "#/$defs/TipoCertidaoRcpj" },
            "numeroRequerimento": { "type": "string", "minLength": 2, "maxLength": 25 },
            "qtdPaginas": { "type": "integer", "minimum": 1, "maximum": 999999 },
            "qtdPaginasExcedentes": { "type": "integer", "minimum": 0, "maximum": 999999 },
            "participantes": {
              "type": "array",
              "minItems": 1,
              "items": { "$ref": "#/$defs/ParticipantePJ" }
            },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "CertidaoGenerica": {
      "title": "CertidaoGenerica",
      "description": "Certidao Generica RCPJ (positiva ou negativa).",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "categoria",
            "dataPratica",
            "selo",
            "aleatorio",
            "negativa",
            "participantes",
            "emolumentos"
          ],
          "properties": {
            "categoria": true,
            "dataPratica": true,
            "selo": true,
            "aleatorio": true,
            "atoReferencia": true,
            "dataInicioEficacia": true,
            "dataFimEficacia": true,
            "indCertidaoEletronica": true,
            "indAtoEletronico": true,
            "urlPdfAto": true,
            "hashPdfAto": true,
            "urlDossie": true,
            "hashDossie": true,
            "negativa": {
              "type": "boolean",
              "description": "Indica se a Certidao Generica e negativa (true=Sim, false=Nao). Mapeia 'S'/'N' do XML legado."
            },
            "participantes": {
              "type": "array",
              "minItems": 1,
              "items": { "$ref": "#/$defs/ParticipantePJ" }
            },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "Visto": {
      "title": "Visto",
      "description": "Visto (revalidacao) de certidao RCPJ. Heranca semantica do XSD legado: visto extende AtoCertidao. O selo da certidao original deve ser informado em atoReferencia.",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "categoria",
            "dataPratica",
            "selo",
            "aleatorio",
            "tipoCertidao",
            "numeroRequerimento",
            "qtdPaginas",
            "revalidada",
            "participantes",
            "emolumentos"
          ],
          "properties": {
            "categoria": true,
            "dataPratica": true,
            "selo": true,
            "aleatorio": true,
            "atoReferencia": true,
            "dataInicioEficacia": true,
            "dataFimEficacia": true,
            "indCertidaoEletronica": true,
            "indAtoEletronico": true,
            "urlPdfAto": true,
            "hashPdfAto": true,
            "urlDossie": true,
            "hashDossie": true,
            "tipoCertidao": { "$ref": "#/$defs/TipoCertidaoRcpj" },
            "numeroRequerimento": { "type": "string", "minLength": 2, "maxLength": 25 },
            "qtdPaginas": { "type": "integer", "minimum": 1, "maximum": 999999 },
            "qtdPaginasExcedentes": { "type": "integer", "minimum": 0, "maximum": 999999 },
            "revalidada": {
              "type": "boolean",
              "description": "Indica se a certidao foi revalidada. Mapeia 'S'/'N' do XML legado."
            },
            "participantes": {
              "type": "array",
              "minItems": 1,
              "items": { "$ref": "#/$defs/ParticipantePJ" }
            },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "Apostilamento": {
      "title": "Apostilamento",
      "description": "Apostilamento de documento RCPJ. Identifica o documento apostilado, o funcionario que apostilou e o documento de identificacao do apostilador.",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "categoria",
            "dataPratica",
            "selo",
            "aleatorio",
            "documento",
            "apostilador",
            "documentoApostilador",
            "participantes",
            "emolumentos"
          ],
          "properties": {
            "categoria": true,
            "dataPratica": true,
            "selo": true,
            "aleatorio": true,
            "atoReferencia": true,
            "dataInicioEficacia": true,
            "dataFimEficacia": true,
            "indCertidaoEletronica": true,
            "indAtoEletronico": true,
            "urlPdfAto": true,
            "hashPdfAto": true,
            "urlDossie": true,
            "hashDossie": true,
            "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 apostilador (CPF, RG ou similar)."
            },
            "participantes": {
              "type": "array",
              "minItems": 1,
              "items": { "$ref": "#/$defs/ParticipantePJ" }
            },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "BuscaNome": {
      "title": "BuscaNome",
      "description": "Busca por nome em RCPJ. Servico nao envolve participantes (XSD legado nao requer Participantes).",
      "allOf": [
        { "$ref": "#/$defs/AtoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "categoria",
            "dataPratica",
            "selo",
            "aleatorio",
            "numeroRequerimento",
            "emolumentos"
          ],
          "properties": {
            "categoria": true,
            "dataPratica": true,
            "selo": true,
            "aleatorio": true,
            "atoReferencia": true,
            "dataInicioEficacia": true,
            "dataFimEficacia": true,
            "indCertidaoEletronica": true,
            "indAtoEletronico": true,
            "urlPdfAto": true,
            "hashPdfAto": true,
            "urlDossie": true,
            "hashDossie": true,
            "numeroRequerimento": { "type": "string", "minLength": 2, "maxLength": 25 },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "FolhaAdicionalComplemento": {
      "title": "FolhaAdicionalComplemento",
      "description": "Complemento de ato de Certidao para folhas adicionais. Transmissao nao selada, vinculada ao selo original (atoOriginal).",
      "allOf": [
        { "$ref": "#/$defs/TransmissaoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "categoria",
            "dataPratica",
            "cct",
            "atoOriginal",
            "emolumentos"
          ],
          "properties": {
            "categoria": true,
            "dataPratica": true,
            "cct": true,
            "indAtoEletronico": true,
            "urlPdfAto": true,
            "hashPdfAto": true,
            "urlDossie": true,
            "hashDossie": true,
            "atoOriginal": {
              "$ref": "#/$defs/ReferenciaAto",
              "description": "Selo + aleatorio do ato original a que se refere o complemento (SeloAtoOriginal/AleatorioAtoOriginal do XML legado)."
            },
            "qtdPaginasExcedentes": { "type": "integer", "minimum": 0, "maximum": 999999 },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "ApresentacaoTituloExame": {
      "title": "ApresentacaoTituloExame",
      "description": "Apresentacao de titulo para exame de legalidade ou calculo de emolumentos sem prenotacao. Transmissao nao selada.",
      "allOf": [
        { "$ref": "#/$defs/TransmissaoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "categoria",
            "dataPratica",
            "cct",
            "numeroProtocolo",
            "participantes",
            "emolumentos"
          ],
          "properties": {
            "categoria": true,
            "dataPratica": true,
            "cct": true,
            "indAtoEletronico": true,
            "urlPdfAto": true,
            "hashPdfAto": true,
            "urlDossie": true,
            "hashDossie": true,
            "numeroProtocolo": { "type": "string", "minLength": 2, "maxLength": 25 },
            "participantes": {
              "type": "array",
              "minItems": 1,
              "items": { "$ref": "#/$defs/ParticipantePJ" }
            },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "EncerramentoLivro": {
      "title": "EncerramentoLivro",
      "description": "Encerramento de livro de registro. Transmissao nao selada, sem participantes nem emolumentos no XSD legado.",
      "allOf": [
        { "$ref": "#/$defs/TransmissaoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "categoria",
            "dataPratica",
            "cct",
            "livro",
            "qtdTotalFolhas",
            "identificacaoLivro",
            "dataEncerramento"
          ],
          "properties": {
            "categoria": true,
            "dataPratica": true,
            "cct": true,
            "indAtoEletronico": true,
            "urlPdfAto": true,
            "hashPdfAto": true,
            "urlDossie": true,
            "hashDossie": true,
            "livro": {
              "type": "string",
              "minLength": 2,
              "maxLength": 25,
              "description": "Codigo e numero do livro encerrado (ex.: 'A-12345')."
            },
            "qtdTotalFolhas": { "type": "integer", "minimum": 1, "maximum": 999999 },
            "identificacaoLivro": {
              "type": "string",
              "minLength": 2,
              "maxLength": 100,
              "description": "Identificacao descritiva do livro encerrado."
            },
            "dataEncerramento": {
              "type": "string",
              "format": "date",
              "description": "Data efetiva do encerramento."
            }
          }
        }
      ]
    },

    "InformacaoVerbal": {
      "title": "InformacaoVerbal",
      "description": "Ato de informacao verbal. Transmissao nao selada, sem participantes.",
      "allOf": [
        { "$ref": "#/$defs/TransmissaoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "categoria",
            "dataPratica",
            "cct",
            "numeroAto",
            "emolumentos"
          ],
          "properties": {
            "categoria": true,
            "dataPratica": true,
            "cct": true,
            "indAtoEletronico": true,
            "urlPdfAto": true,
            "hashPdfAto": true,
            "urlDossie": true,
            "hashDossie": true,
            "numeroAto": {
              "type": "string",
              "minLength": 2,
              "maxLength": 25,
              "description": "Numero do recibo ou protocolo da informacao verbal."
            },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "ComplementoEmolumentos": {
      "title": "ComplementoEmolumentos",
      "description": "Complemento de emolumentos vinculado a um ou mais atos previos.",
      "allOf": [
        { "$ref": "#/$defs/TransmissaoBase" },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "categoria",
            "dataPratica",
            "cct",
            "atosVinculados",
            "emolumentos"
          ],
          "properties": {
            "categoria": true,
            "dataPratica": true,
            "cct": true,
            "indAtoEletronico": true,
            "urlPdfAto": true,
            "hashPdfAto": true,
            "urlDossie": true,
            "hashDossie": true,
            "atosVinculados": {
              "type": "array",
              "minItems": 1,
              "items": { "$ref": "#/$defs/AtoVinculado" }
            },
            "emolumentos": { "$ref": "#/$defs/Emolumentos" }
          }
        }
      ]
    },

    "AlteracaoEmolumentos": {
      "type": "object",
      "title": "AlteracaoEmolumentos",
      "description": "Operacao de alteracao de emolumentos de um ato ja transmitido. Categoria OPERACAO (sem AtoBase nem TransmissaoBase). Pode ser enviada em remessa de Inclusao ou Alteracao; o ato referenciado pelo selo deve existir na base do TJ.",
      "additionalProperties": false,
      "required": ["categoria", "selo", "emolumentos"],
      "properties": {
        "categoria": {
          "const": "OPERACAO",
          "description": "Discriminador. Operacoes administrativas usam 'OPERACAO'."
        },
        "selo": {
          "type": "string",
          "pattern": "^[A-Z]{4}\\d{5}$",
          "description": "Selo (ou CCT, mesmo formato) do ato a ter emolumentos alterados."
        },
        "emolumentos": { "$ref": "#/$defs/Emolumentos" }
      }
    },

    "TipoOperacao": {
      "type": "string",
      "enum": ["INCLUSAO", "ALTERACAO"],
      "description": "Operacao da remessa. INCLUSAO=novo. ALTERACAO=retificacao/cancelamento. Mapeia 'I'/'A' do XML legado."
    },
    "Ambiente": {
      "type": "string",
      "enum": ["HOMOLOGACAO", "PRODUCAO"],
      "description": "Ambiente alvo do envio. Mapeia 'HML'/'PRD' do XML legado."
    },
    "TipoCobranca": {
      "type": "string",
      "enum": ["JUSTICA_GRATUITA", "COM_COBRANCA", "SEM_COBRANCA", "NIHIL"],
      "description": "Modalidade de cobranca dos emolumentos. Quando JUSTICA_GRATUITA/SEM_COBRANCA/NIHIL, demais campos monetarios e itens devem ser suprimidos. Fonte: Manual MAS CGJ-RJ secao 3.4 + Lei 6.281/2012 art. 2."
    },
    "TipoSelo": {
      "type": "string",
      "enum": ["FISICO", "ELETRONICO"],
      "description": "Modalidade do selo. FISICO = adesivo Casa da Moeda. ELETRONICO = SFE. Mapeia 'F'/'E' do XML legado."
    },
    "TipoVinculoRcpj": {
      "type": "string",
      "enum": ["ATO_COMPLEMENTO_EMOLUMENTOS"],
      "description": "Tipo de vinculo entre o ato corrente e outro ato. Em RCPJ o XSD legado restringe ao valor 'M' (Complemento de Emolumentos)."
    },
    "JustificativaAusenciaCnpj": {
      "type": "string",
      "enum": ["NAO_POSSUI", "NAO_DECLARADO"],
      "description": "Motivo de ausencia de CNPJ no participante PJ. Mapeia '1'/'2' do XML legado. Fonte: PDF Layout RCPJ 2.00 secao 5.17."
    },
    "TipoPessoaJuridica": {
      "type": "string",
      "enum": [
        "PERIODICOS_E_JORNAIS",
        "SOCIEDADES_EIRELI_PJ_ESTRANGEIRAS",
        "ASSOCIACOES_FUNDACOES_SOCIEDADES_ME_EPP"
      ],
      "description": "Categoria da pessoa juridica registrada (campo Tipo do XML legado). Fonte: PDF Layout RCPJ 2.00 secao 5.4."
    },
    "DescricaoAtoRcpj": {
      "type": "string",
      "enum": [
        "LIVRO_CONTABIL_FISCAL",
        "LIVRO_DE_ATA",
        "JORNAIS_REVISTAS_PERIODICOS",
        "CONTRATO_INICIAL",
        "ESTATUTO_INICIAL",
        "ALTERACAO_CONTRATUAL",
        "ESTATUTO_CONSOLIDADO",
        "ATA",
        "DOCUMENTO",
        "OUTROS"
      ],
      "description": "Descricao do ato praticado (campo DescricaoAto do XML legado). Quando OUTROS, descricaoLivre e obrigatorio. Fonte: PDF Layout RCPJ 2.00 secao 5.4."
    },
    "TipoCertidaoRcpj": {
      "type": "string",
      "enum": ["CERTIDAO", "CERTIDAO_POR_COPIA"],
      "description": "Tipo de certidao RCPJ. Mapeia '1'/'2' do XML legado. Fonte: PDF Layout RCPJ 2.00 secao 5.6."
    }
  }
}
