{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/foxnfe-com-br/json-schema/foxnfe-com-br-post-api-v1-nfse-emit-request-schema.json",
  "title": "post_api_v1_nfse_emitRequest",
  "x-generated": "2026-11-08",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": [
    "app/app/Modules/Fiscal/Nfse/Http/Requests/EmitNfseRequest.php:17"
  ],
  "type": "object",
  "properties": {
    "competencia": {
      "x-laravel-rules": [
        "required",
        "string",
        "regex:/^\\d{4}-\\d{2}$/"
      ],
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}$"
    },
    "cnpj_prestador": {
      "x-laravel-rules": [
        "required",
        "string",
        "regex:/^\\d{14}$/"
      ],
      "type": "string",
      "pattern": "^\\d{14}$"
    },
    "inscricao_municipal": {
      "x-laravel-rules": [
        "required",
        "string",
        "max:20"
      ],
      "type": "string",
      "maxLength": 20
    },
    "razao_social_prestador": {
      "x-laravel-rules": [
        "nullable",
        "string",
        "max:255"
      ],
      "type": [
        "string",
        "null"
      ],
      "maxLength": 255
    },
    "descricao_servico": {
      "x-laravel-rules": [
        "required",
        "string",
        "min:5",
        "max:2000"
      ],
      "type": "string",
      "minLength": 5,
      "maxLength": 2000
    },
    "cnae": {
      "x-laravel-rules": [
        "nullable",
        "string",
        "regex:/^\\d{4}[-.]?\\d{1}[\\/.]?\\d{2}$|^\\d{7}$/"
      ],
      "type": [
        "string",
        "null"
      ],
      "pattern": "^\\d{4}[-.]?\\d{1}[/.]?\\d{2}$|^\\d{7}$"
    },
    "codigo_tributacao_nacional": {
      "x-laravel-rules": [
        "required_without:cnae",
        "nullable",
        "string",
        "regex:/^\\d{2}\\.\\d{2}\\.\\d{2}\\.\\d{2}$/"
      ],
      "type": [
        "string",
        "null"
      ],
      "description": "Obrigatório na ausência de cnae.",
      "pattern": "^\\d{2}\\.\\d{2}\\.\\d{2}\\.\\d{2}$"
    },
    "codigo_tributacao_municipal": {
      "x-laravel-rules": [
        "required_without:cnae",
        "nullable",
        "string",
        "max:20"
      ],
      "type": [
        "string",
        "null"
      ],
      "description": "Obrigatório na ausência de cnae.",
      "maxLength": 20
    },
    "aliquota_iss": {
      "x-laravel-rules": [
        "required_without:cnae",
        "nullable",
        "numeric",
        "min:0",
        "max:100"
      ],
      "type": [
        "number",
        "null"
      ],
      "description": "Obrigatório na ausência de cnae.",
      "minimum": 0,
      "maximum": 100
    },
    "codigo_municipio_prestacao": {
      "x-laravel-rules": [
        "required",
        "string",
        "size:7",
        "regex:/^\\d{7}$/"
      ],
      "type": "string",
      "minLength": 7,
      "maxLength": 7,
      "pattern": "^\\d{7}$"
    },
    "codigo_nbs": {
      "x-laravel-rules": [
        "required_if:rtc.incluir,true",
        "nullable",
        "string",
        "regex:/^\\d{9}$/"
      ],
      "type": [
        "string",
        "null"
      ],
      "description": "Obrigatório quando rtc.incluir,true.",
      "pattern": "^\\d{9}$"
    },
    "valor_servico": {
      "x-laravel-rules": [
        "required",
        "numeric",
        "min:0.01"
      ],
      "type": "number",
      "minimum": 0.01
    },
    "valor_deducoes": {
      "x-laravel-rules": [
        "nullable",
        "numeric",
        "min:0"
      ],
      "type": [
        "number",
        "null"
      ],
      "minimum": 0
    },
    "informacoes_adicionais": {
      "x-laravel-rules": [
        "nullable",
        "string",
        "max:255"
      ],
      "type": [
        "string",
        "null"
      ],
      "maxLength": 255
    },
    "tomador": {
      "x-laravel-rules": [
        "required",
        "array"
      ],
      "type": "object",
      "properties": {
        "cnpj": {
          "x-laravel-rules": [
            "required_without:tomador.cpf",
            "nullable",
            "string",
            "regex:/^\\d{14}$/"
          ],
          "x-laravel-custom-validation": true,
          "description": "Validação adicional de domínio é aplicada pelo servidor (por exemplo dígitos verificadores e autorização). Obrigatório na ausência de tomador.cpf.",
          "type": [
            "string",
            "null"
          ],
          "pattern": "^\\d{14}$"
        },
        "cpf": {
          "x-laravel-rules": [
            "required_without:tomador.cnpj",
            "nullable",
            "string"
          ],
          "x-laravel-custom-validation": true,
          "description": "Validação adicional de domínio é aplicada pelo servidor (por exemplo dígitos verificadores e autorização). Obrigatório na ausência de tomador.cnpj.",
          "type": [
            "string",
            "null"
          ]
        },
        "nome": {
          "x-laravel-rules": [
            "required",
            "string",
            "max:255"
          ],
          "type": "string",
          "maxLength": 255
        },
        "endereco": {
          "x-laravel-rules": [
            "nullable",
            "array"
          ],
          "type": [
            "array",
            "object",
            "null"
          ],
          "items": {},
          "additionalProperties": true
        }
      },
      "required": [
        "nome"
      ]
    },
    "rtc": {
      "x-laravel-rules": [
        "nullable",
        "array"
      ],
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "incluir": {
          "x-laravel-rules": [
            "sometimes",
            "boolean"
          ],
          "type": "boolean"
        },
        "resolution_id": {
          "x-laravel-rules": [
            "required_if:rtc.incluir,true",
            "string",
            "max:64"
          ],
          "type": "string",
          "description": "Obrigatório quando rtc.incluir,true.",
          "maxLength": 64
        },
        "sku": {
          "x-laravel-rules": [
            "required_if:rtc.incluir,true",
            "string",
            "max:80"
          ],
          "type": "string",
          "description": "Obrigatório quando rtc.incluir,true.",
          "maxLength": 80
        },
        "cind_op": {
          "x-laravel-rules": [
            "required_if:rtc.incluir,true",
            "string",
            "regex:/^\\d{6}$/"
          ],
          "type": "string",
          "description": "Obrigatório quando rtc.incluir,true.",
          "pattern": "^\\d{6}$"
        },
        "fin_nfse": {
          "x-laravel-rules": [
            "required_if:rtc.incluir,true",
            "string",
            "in:0,1,2"
          ],
          "type": "string",
          "description": "Obrigatório quando rtc.incluir,true.",
          "enum": [
            "0",
            "1",
            "2"
          ]
        },
        "ind_dest": {
          "x-laravel-rules": [
            "required_if:rtc.incluir,true",
            "string",
            "in:0,1"
          ],
          "type": "string",
          "description": "Obrigatório quando rtc.incluir,true.",
          "enum": [
            "0",
            "1"
          ]
        }
      },
      "x-prohibited-fields": [
        "cst",
        "cclass_trib",
        "source_version",
        "valor_ibs",
        "valor_cbs"
      ]
    },
    "prestador": {
      "x-laravel-rules": [
        "required",
        "array"
      ],
      "type": "object",
      "properties": {
        "endereco": {
          "x-laravel-rules": [
            "required",
            "array"
          ],
          "type": "object",
          "properties": {
            "logradouro": {
              "x-laravel-rules": [
                "required",
                "string",
                "max:255"
              ],
              "type": "string",
              "maxLength": 255
            },
            "numero": {
              "x-laravel-rules": [
                "required",
                "string",
                "max:10"
              ],
              "type": "string",
              "maxLength": 10
            },
            "bairro": {
              "x-laravel-rules": [
                "required",
                "string",
                "max:100"
              ],
              "type": "string",
              "maxLength": 100
            },
            "codigo_municipio": {
              "x-laravel-rules": [
                "required",
                "string",
                "size:7"
              ],
              "type": "string",
              "minLength": 7,
              "maxLength": 7
            },
            "uf": {
              "x-laravel-rules": [
                "required",
                "string",
                "size:2"
              ],
              "type": "string",
              "minLength": 2,
              "maxLength": 2
            },
            "cep": {
              "x-laravel-rules": [
                "required",
                "string",
                "regex:/^\\d{8}$/"
              ],
              "type": "string",
              "pattern": "^\\d{8}$"
            }
          },
          "required": [
            "logradouro",
            "numero",
            "bairro",
            "codigo_municipio",
            "uf",
            "cep"
          ]
        }
      },
      "required": [
        "endereco"
      ]
    }
  },
  "required": [
    "competencia",
    "cnpj_prestador",
    "inscricao_municipal",
    "descricao_servico",
    "codigo_municipio_prestacao",
    "valor_servico",
    "tomador",
    "prestador"
  ]
}