{
  "openapi": "3.0.4",
  "info": {
    "title": "LightHouse — Usuários (GPT pack administrativo: cadastro e permissões)",
    "description": "PACK ADMINISTRATIVO — exige um usuário Administrador da empresa. Cadastro de usuários (sem senha) e permissões por unidade. Toda escrita exige confirmação explícita do usuário humano. PUT /v1/usuarios/permissoes SUBSTITUI todas as permissões. Não existe exclusão de usuário, só inativação. Ver https://docs.leankeep.com/guides/recipe-cadastrar-usuario",
    "version": "2.0.0.5",
    "contact": {
      "name": "Leankeep Software"
    }
  },
  "servers": [
    {
      "url": "https://lighthouse.lkp.dev.br",
      "description": "Sandbox"
    },
    {
      "url": "https://lighthousev2.lkp.app.br",
      "description": "Produção"
    }
  ],
  "security": [
    {
      "Bearer": []
    }
  ],
  "paths": {
    "/v2/unidades/ativas": {
      "get": {
        "tags": [
          "Unidades (V2)"
        ],
        "parameters": [
          {
            "name": "EmpresaId",
            "in": "header",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UnidadeQry"
                  }
                },
                "example": [
                  {
                    "unidadeId": 123,
                    "empresa": {
                      "empresaId": 123,
                      "nome": "Fulano de Tal",
                      "status": 1,
                      "tipo": 1,
                      "habilitarAprovacaoCorrecao": false,
                      "habilitarAvaliacaoCorrecao": false,
                      "habilitarBaixaAtividadeQRCode": false,
                      "habilitarBaixaAnomaliaQRCode": false,
                      "habilitarModuloAuditorias": false,
                      "habilitarModuloAlmoxarifados": false,
                      "assinaturaBaixaAnomaliaMobile": false,
                      "assinaturaBaixaTarefaMobile": false
                    },
                    "nome": "Fulano de Tal",
                    "grupoUnidade": {
                      "grupoUnidadeId": 123,
                      "nome": "Fulano de Tal",
                      "subGrupoUnidade": {
                        "subGrupoUnidadeId": 123,
                        "nome": "Fulano de Tal"
                      }
                    },
                    "status": 2,
                    "herdarPrioridadesAnomaliasDaEmpresa": false,
                    "habilitarBaixaAtividadeQRCode": false,
                    "habilitarBaixaAnomaliaQRCode": false
                  }
                ]
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UnidadeQry"
                  }
                },
                "example": [
                  {
                    "unidadeId": 123,
                    "empresa": {
                      "empresaId": 123,
                      "nome": "Fulano de Tal",
                      "status": 1,
                      "tipo": 1,
                      "habilitarAprovacaoCorrecao": false,
                      "habilitarAvaliacaoCorrecao": false,
                      "habilitarBaixaAtividadeQRCode": false,
                      "habilitarBaixaAnomaliaQRCode": false,
                      "habilitarModuloAuditorias": false,
                      "habilitarModuloAlmoxarifados": false,
                      "assinaturaBaixaAnomaliaMobile": false,
                      "assinaturaBaixaTarefaMobile": false
                    },
                    "nome": "Fulano de Tal",
                    "grupoUnidade": {
                      "grupoUnidadeId": 123,
                      "nome": "Fulano de Tal",
                      "subGrupoUnidade": {
                        "subGrupoUnidadeId": 123,
                        "nome": "Fulano de Tal"
                      }
                    },
                    "status": 2,
                    "herdarPrioridadesAnomaliasDaEmpresa": false,
                    "habilitarBaixaAtividadeQRCode": false,
                    "habilitarBaixaAnomaliaQRCode": false
                  }
                ]
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UnidadeQry"
                  }
                },
                "example": [
                  {
                    "unidadeId": 123,
                    "empresa": {
                      "empresaId": 123,
                      "nome": "Fulano de Tal",
                      "status": 1,
                      "tipo": 1,
                      "habilitarAprovacaoCorrecao": false,
                      "habilitarAvaliacaoCorrecao": false,
                      "habilitarBaixaAtividadeQRCode": false,
                      "habilitarBaixaAnomaliaQRCode": false,
                      "habilitarModuloAuditorias": false,
                      "habilitarModuloAlmoxarifados": false,
                      "assinaturaBaixaAnomaliaMobile": false,
                      "assinaturaBaixaTarefaMobile": false
                    },
                    "nome": "Fulano de Tal",
                    "grupoUnidade": {
                      "grupoUnidadeId": 123,
                      "nome": "Fulano de Tal",
                      "subGrupoUnidade": {
                        "subGrupoUnidadeId": 123,
                        "nome": "Fulano de Tal"
                      }
                    },
                    "status": 2,
                    "herdarPrioridadesAnomaliasDaEmpresa": false,
                    "habilitarBaixaAtividadeQRCode": false,
                    "habilitarBaixaAnomaliaQRCode": false
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad Request - payload inválido (ver a mensagem retornada para o campo/motivo específico).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - autenticado, mas sem permissão para o recurso/empresa.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.3",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Usuário autenticado, mas sem permissão para este recurso/empresa.",
                  "instance": null
                }
              }
            }
          },
          "404": {
            "description": "Not Found - recurso inexistente para o identificador informado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.4",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Recurso inexistente para o identificador informado.",
                  "instance": null
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - limite de 250 req/h excedido. Aguarde e aplique backoff exponencial (ver guia Rate limiting).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc6585#section-4",
                  "title": "Too Many Requests",
                  "status": 429,
                  "detail": "Limite de 250 requisições/hora excedido. Aguarde e aplique backoff exponencial antes de tentar novamente.",
                  "instance": null
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              }
            }
          }
        },
        "operationId": "listarUnidadesAtivasV2",
        "summary": "Listar unidades ativas",
        "description": "SOMENTE LEITURA. Lista as unidades ativas que o usuário logado acessa (campo unidadeId = ID a usar em itens[].site). Use só IDs desta resposta.",
        "x-openai-isConsequential": false
      }
    },
    "/v1/permissoes": {
      "get": {
        "tags": [
          "Permissoes (V1)"
        ],
        "parameters": [
          {
            "name": "tipoUsuarioAlvo",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/ETipoUsuario"
            },
            "description": "Tipo do usuário que vai RECEBER o perfil: 2 Administrador → perfis tipo 7; 4 Chamado → tipo 2; 3 Operacional → demais. Omitido = catálogo inteiro."
          },
          {
            "name": "incluirInativas",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Inclui perfis inativos. Padrão: false."
          },
          {
            "name": "EmpresaId",
            "in": "header",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Catálogo de perfis.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PermissaoCatalogoItem"
                  }
                },
                "example": [
                  {
                    "permissao": 321,
                    "nome": "Operacional — padrão",
                    "descricao": "Perfil de exemplo",
                    "nivel": "Unidade",
                    "tipo": 3,
                    "empresa": 100,
                    "inativo": false
                  }
                ]
              }
            }
          },
          "401": {
            "description": "Não autenticado — token ausente, inválido ou expirado."
          },
          "403": {
            "description": "Perfil sem permissão para consultar o catálogo."
          },
          "500": {
            "description": "Erro interno.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              }
            }
          }
        },
        "operationId": "get__v1_permissoes_v1",
        "summary": "Listar permissões (perfis)",
        "description": "SOMENTE LEITURA. Catálogo de perfis de permissão da empresa. Filtre por tipoUsuarioAlvo (2 Administrador, 3 Operacional, 4 Chamado). Exige perfil administrativo (403 caso contrário).",
        "x-openai-isConsequential": false
      }
    },
    "/v1/setores": {
      "get": {
        "tags": [
          "Setores (V1)"
        ],
        "parameters": [
          {
            "name": "UnidadeId",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "EmpresaId",
            "in": "header",
            "schema": {
              "type": "integer"
            },
            "description": "ID da empresa (header HTTP, não query)."
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Setores"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Setores"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Setores"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              }
            }
          }
        },
        "operationId": "get__v1_setores_v1",
        "summary": "Listar setores",
        "description": "SOMENTE LEITURA. Lista setores (setor = ID, site = unidade). Filtre por UnidadeId; setor é opcional no cadastro e deve ser da empresa.",
        "x-openai-isConsequential": false
      }
    },
    "/v1/usuarios": {
      "get": {
        "tags": [
          "Usuarios (V1)"
        ],
        "parameters": [
          {
            "name": "Search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "UnidadeId",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "EmpresaId",
            "in": "header",
            "schema": {
              "type": "integer"
            },
            "description": "ID da empresa (header HTTP, não query)."
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Usuarios"
                  }
                },
                "example": [
                  {
                    "usuario": 1,
                    "nome": "Fulano de Tal",
                    "email": "usuario@empresa.com.br",
                    "inativo": false,
                    "superUsuario": false,
                    "login": "⚠️ A confirmar",
                    "usuarioDesignado": false,
                    "filtrosDefault": false,
                    "filtrosAlteracaoDefault": false,
                    "filtrosTodosTiposAnomalias": false,
                    "tipo": 1,
                    "cargo": 1,
                    "setor": 1,
                    "assinaturaPath": "/uploads/exemplo.png",
                    "celular": "11999998888",
                    "dataCadastro": "2026-06-29T10:00:00Z",
                    "acessoTodasAreas": false,
                    "tipoNome": "⚠️ A confirmar",
                    "image": "⚠️ A confirmar",
                    "emailValido": false
                  }
                ]
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Usuarios"
                  }
                },
                "example": [
                  {
                    "usuario": 1,
                    "nome": "Fulano de Tal",
                    "email": "usuario@empresa.com.br",
                    "inativo": false,
                    "superUsuario": false,
                    "login": "⚠️ A confirmar",
                    "usuarioDesignado": false,
                    "filtrosDefault": false,
                    "filtrosAlteracaoDefault": false,
                    "filtrosTodosTiposAnomalias": false,
                    "tipo": 1,
                    "cargo": 1,
                    "setor": 1,
                    "assinaturaPath": "/uploads/exemplo.png",
                    "celular": "11999998888",
                    "dataCadastro": "2026-06-29T10:00:00Z",
                    "acessoTodasAreas": false,
                    "tipoNome": "⚠️ A confirmar",
                    "image": "⚠️ A confirmar",
                    "emailValido": false
                  }
                ]
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Usuarios"
                  }
                },
                "example": [
                  {
                    "usuario": 1,
                    "nome": "Fulano de Tal",
                    "email": "usuario@empresa.com.br",
                    "inativo": false,
                    "superUsuario": false,
                    "login": "⚠️ A confirmar",
                    "usuarioDesignado": false,
                    "filtrosDefault": false,
                    "filtrosAlteracaoDefault": false,
                    "filtrosTodosTiposAnomalias": false,
                    "tipo": 1,
                    "cargo": 1,
                    "setor": 1,
                    "assinaturaPath": "/uploads/exemplo.png",
                    "celular": "11999998888",
                    "dataCadastro": "2026-06-29T10:00:00Z",
                    "acessoTodasAreas": false,
                    "tipoNome": "⚠️ A confirmar",
                    "image": "⚠️ A confirmar",
                    "emailValido": false
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad Request - payload inválido (ver a mensagem retornada para o campo/motivo específico).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - autenticado, mas sem permissão para o recurso/empresa.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.3",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Usuário autenticado, mas sem permissão para este recurso/empresa.",
                  "instance": null
                }
              }
            }
          },
          "404": {
            "description": "Not Found - recurso inexistente para o identificador informado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.4",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Recurso inexistente para o identificador informado.",
                  "instance": null
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - limite de 250 req/h excedido. Aguarde e aplique backoff exponencial (ver guia Rate limiting).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc6585#section-4",
                  "title": "Too Many Requests",
                  "status": 429,
                  "detail": "Limite de 250 requisições/hora excedido. Aguarde e aplique backoff exponencial antes de tentar novamente.",
                  "instance": null
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              }
            }
          }
        },
        "operationId": "buscarUsuariosV1",
        "summary": "Buscar usuários",
        "description": "Busca usuários pelo nome via parâmetro Search. Use o campo 'usuario' da resposta como ID nos filtros UsuarioId/ExecutorId/EmitenteId.",
        "x-openai-isConsequential": false
      },
      "post": {
        "tags": [
          "Usuarios (V1)"
        ],
        "operationId": "criarUsuarioV1",
        "summary": "Criar usuário",
        "description": "Cria usuário SEM senha (a pessoa define pelo e-mail). Obrigatórios: nome, login, email, tipo (3 Operacional ou 4 Chamado), permissaoInicial (ID de GET /v1/permissoes). Não envie senha. 422 = login/e-mail duplicado. Exija confirmação explícita do usuário antes de executar.",
        "parameters": [
          {
            "name": "EmpresaId",
            "in": "header",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateUsuarioCommand"
              },
              "example": {
                "nome": "Usuário Exemplo",
                "login": "usuario.exemplo",
                "email": "usuario.exemplo@example.com",
                "tipo": 3,
                "permissaoInicial": 321
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Usuário criado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateUsuarioCommandResult"
                },
                "example": {
                  "success": true,
                  "message": "Usuário criado com sucesso!",
                  "data": null,
                  "usuario": 987001,
                  "permissoes": [
                    {
                      "permissaoUsuario": 5001,
                      "empresa": 100,
                      "site": null,
                      "permissao": 321,
                      "permissaoNome": "Operacional — padrão",
                      "fornecedor": null,
                      "filtrosTodosTiposAnomalias": false
                    }
                  ],
                  "linkDefinicaoSenhaEnviado": true,
                  "linkDefinicaoSenhaDetalhe": "AuthCenter aceitou o envio."
                }
              }
            }
          },
          "400": {
            "description": "Payload inválido (campo obrigatório ausente, tamanho excedido, `tipo` fora do enum ou campo removido do contrato)."
          },
          "401": {
            "description": "Não autenticado — token ausente, inválido ou expirado."
          },
          "403": {
            "description": "Quem chama não é administrador da empresa.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroNegocio"
                },
                "example": {
                  "message": "Apenas administradores da empresa podem criar usuários."
                }
              }
            }
          },
          "404": {
            "description": "Empresa, cargo ou setor não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroNegocio"
                },
                "example": {
                  "message": "Cargo 12 não encontrado."
                }
              }
            }
          },
          "422": {
            "description": "Regra de negócio violada (login/e-mail duplicado, perfil incompatível ou ausente).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroNegocio"
                },
                "example": {
                  "message": "Já existe um usuário ativo com o login 'usuario.exemplo'."
                }
              }
            }
          },
          "500": {
            "description": "Erro interno.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              }
            }
          }
        },
        "x-openai-isConsequential": true
      }
    },
    "/v1/usuarios/{id}": {
      "get": {
        "tags": [
          "Usuarios (V1)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "EmpresaId",
            "in": "header",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Usuarios"
                },
                "example": {
                  "usuario": 1,
                  "nome": "Fulano de Tal",
                  "email": "usuario@empresa.com.br",
                  "inativo": false,
                  "superUsuario": false,
                  "login": "⚠️ A confirmar",
                  "usuarioDesignado": false,
                  "filtrosDefault": false,
                  "filtrosAlteracaoDefault": false,
                  "filtrosTodosTiposAnomalias": false,
                  "tipo": 1,
                  "cargo": 1,
                  "setor": 1,
                  "assinaturaPath": "/uploads/exemplo.png",
                  "celular": "11999998888",
                  "dataCadastro": "2026-06-29T10:00:00Z",
                  "acessoTodasAreas": false,
                  "tipoNome": "⚠️ A confirmar",
                  "image": "⚠️ A confirmar",
                  "emailValido": false
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Usuarios"
                },
                "example": {
                  "usuario": 1,
                  "nome": "Fulano de Tal",
                  "email": "usuario@empresa.com.br",
                  "inativo": false,
                  "superUsuario": false,
                  "login": "⚠️ A confirmar",
                  "usuarioDesignado": false,
                  "filtrosDefault": false,
                  "filtrosAlteracaoDefault": false,
                  "filtrosTodosTiposAnomalias": false,
                  "tipo": 1,
                  "cargo": 1,
                  "setor": 1,
                  "assinaturaPath": "/uploads/exemplo.png",
                  "celular": "11999998888",
                  "dataCadastro": "2026-06-29T10:00:00Z",
                  "acessoTodasAreas": false,
                  "tipoNome": "⚠️ A confirmar",
                  "image": "⚠️ A confirmar",
                  "emailValido": false
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Usuarios"
                },
                "example": {
                  "usuario": 1,
                  "nome": "Fulano de Tal",
                  "email": "usuario@empresa.com.br",
                  "inativo": false,
                  "superUsuario": false,
                  "login": "⚠️ A confirmar",
                  "usuarioDesignado": false,
                  "filtrosDefault": false,
                  "filtrosAlteracaoDefault": false,
                  "filtrosTodosTiposAnomalias": false,
                  "tipo": 1,
                  "cargo": 1,
                  "setor": 1,
                  "assinaturaPath": "/uploads/exemplo.png",
                  "celular": "11999998888",
                  "dataCadastro": "2026-06-29T10:00:00Z",
                  "acessoTodasAreas": false,
                  "tipoNome": "⚠️ A confirmar",
                  "image": "⚠️ A confirmar",
                  "emailValido": false
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - payload inválido (ver a mensagem retornada para o campo/motivo específico).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - autenticado, mas sem permissão para o recurso/empresa.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.3",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Usuário autenticado, mas sem permissão para este recurso/empresa.",
                  "instance": null
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - limite de 250 req/h excedido. Aguarde e aplique backoff exponencial (ver guia Rate limiting).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc6585#section-4",
                  "title": "Too Many Requests",
                  "status": 429,
                  "detail": "Limite de 250 requisições/hora excedido. Aguarde e aplique backoff exponencial antes de tentar novamente.",
                  "instance": null
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              }
            }
          }
        },
        "operationId": "obterUsuarioPorIdV1",
        "summary": "Consultar usuário",
        "description": "Consulta um usuário pelo ID (dados cadastrais). Não retorna senha. Use depois de achar o ID por nome em GET /v1/usuarios.",
        "x-openai-isConsequential": false
      }
    },
    "/v1/usuarios/{id}/permissoes": {
      "get": {
        "tags": [
          "Usuarios (V1)"
        ],
        "operationId": "obterPermissoesUsuarioV1",
        "summary": "Consultar permissões do usuário",
        "description": "SOMENTE LEITURA. Lista as permissões do usuário por unidade (site nulo = nível empresa). Exige perfil administrativo: com usuário de menor privilégio retorna 403 — informe isso ao usuário, não tente contornar.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "ID do usuário.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "EmpresaId",
            "in": "header",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Permissões atuais.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PermissaoUsuarioItem"
                  }
                },
                "example": [
                  {
                    "permissaoUsuario": 5001,
                    "empresa": 100,
                    "site": null,
                    "permissao": 321,
                    "permissaoNome": "Operacional — padrão",
                    "fornecedor": null,
                    "filtrosTodosTiposAnomalias": false
                  }
                ]
              }
            }
          },
          "401": {
            "description": "Não autenticado — token ausente, inválido ou expirado."
          },
          "403": {
            "description": "Perfil sem permissão para consultar este usuário.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroNegocio"
                },
                "example": {
                  "message": "Consultar permissões de usuário requer Administrador vinculado à empresa ou a operação de gestão de usuários em todas as unidades do alvo."
                }
              }
            }
          },
          "404": {
            "description": "Usuário não encontrado na empresa do contexto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroNegocio"
                },
                "example": {
                  "message": "Usuário não encontrado."
                }
              }
            }
          },
          "422": {
            "description": "Usuário-alvo não permite consulta de permissões por este endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroNegocio"
                }
              }
            }
          },
          "500": {
            "description": "Erro interno.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              }
            }
          }
        },
        "x-openai-isConsequential": false
      }
    },
    "/v1/usuarios/permissoes": {
      "put": {
        "tags": [
          "Usuarios (V1)"
        ],
        "operationId": "atualizarPermissoesUsuarioV1",
        "summary": "Atualizar permissões do usuário",
        "description": "SUBSTITUI TODAS as permissões do usuário: o que não vier em itens é REMOVIDO. Envie a lista COMPLETA numa única chamada, com a linha base (site null) e cada unidade com permissao. Leia antes GET /v1/usuarios/{id}/permissoes. Exija confirmação explícita do usuário antes de executar.",
        "parameters": [
          {
            "name": "EmpresaId",
            "in": "header",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SavePermissoesUsuarioCommand"
              },
              "example": {
                "usuario": 987001,
                "itens": [
                  {
                    "site": null,
                    "permissao": 321
                  },
                  {
                    "site": 4001,
                    "permissao": 321
                  },
                  {
                    "site": 4002,
                    "permissao": 321
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Permissões substituídas.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SavePermissoesUsuarioCommandResult"
                },
                "example": {
                  "success": true,
                  "message": "Permissões atualizadas: 2 incluída(s), 0 alterada(s), 0 removida(s).",
                  "data": [
                    {
                      "permissaoUsuario": 5001,
                      "empresa": 100,
                      "site": null,
                      "permissao": 321,
                      "permissaoNome": "Operacional — padrão",
                      "fornecedor": null,
                      "filtrosTodosTiposAnomalias": false
                    },
                    {
                      "permissaoUsuario": 5002,
                      "empresa": 100,
                      "site": 4001,
                      "permissao": 321,
                      "permissaoNome": "Operacional — padrão",
                      "fornecedor": null,
                      "filtrosTodosTiposAnomalias": false
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Payload inválido (usuário ausente, `permissao` inválida, itens acima do limite)."
          },
          "401": {
            "description": "Não autenticado — token ausente, inválido ou expirado."
          },
          "403": {
            "description": "Sem permissão para alterar permissões nestas unidades.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroNegocio"
                },
                "example": {
                  "message": "Alterar permissões sem conceder unidade nova requer Administrador vinculado à empresa."
                }
              }
            }
          },
          "404": {
            "description": "Usuário, unidade ou fornecedor não encontrado na empresa.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroNegocio"
                },
                "example": {
                  "message": "Usuário não encontrado."
                }
              }
            }
          },
          "422": {
            "description": "Regra violada (sem linha base, perfil inativo, de outra empresa ou incompatível com o tipo).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroNegocio"
                },
                "example": {
                  "message": "O conjunto precisa conter um item com Site nulo (nível empresa)."
                }
              }
            }
          },
          "500": {
            "description": "Erro interno.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              }
            }
          }
        },
        "x-openai-isConsequential": true
      }
    },
    "/v1/usuarios/{id}/reenviar-definicao-senha": {
      "post": {
        "tags": [
          "Usuarios (V1)"
        ],
        "operationId": "reenviarDefinicaoSenhaUsuarioV1",
        "summary": "Reenviar link de definição de senha",
        "description": "Reenvia o e-mail real com o link para definir a senha (200 = aceito, não entregue; cada link invalida o anterior; 429 = espere 60 s). Use só se o e-mail não chegou. Exija confirmação explícita do usuário antes de executar.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "ID do usuário.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "EmpresaId",
            "in": "header",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Envio aceito.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommandResult"
                },
                "example": {
                  "success": true,
                  "message": "Link de definição de senha enviado para o e-mail cadastrado.",
                  "data": null
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido."
          },
          "401": {
            "description": "Não autenticado — token ausente, inválido ou expirado."
          },
          "403": {
            "description": "Quem chama não é administrador da empresa.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroNegocio"
                },
                "example": {
                  "message": "Apenas administradores da empresa podem reenviar o link de definição de senha."
                }
              }
            }
          },
          "404": {
            "description": "Usuário não encontrado na empresa do contexto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroNegocio"
                },
                "example": {
                  "message": "Usuário não encontrado."
                }
              }
            }
          },
          "422": {
            "description": "Envio recusado (usuário sem e-mail, e-mail que não casa ou usuário inativo).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroNegocio"
                },
                "example": {
                  "message": "Usuário não tem e-mail cadastrado; não há para onde enviar o link de definição de senha."
                }
              }
            }
          },
          "429": {
            "description": "Reenvio repetido em menos de 60 s.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroNegocio"
                },
                "example": {
                  "message": "Um link de definição de senha já foi enviado para este usuário há menos de 60 segundos."
                }
              }
            }
          },
          "500": {
            "description": "Erro interno.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              }
            }
          },
          "502": {
            "description": "Serviço de autenticação indisponível.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroNegocio"
                },
                "example": {
                  "message": "Não foi possível enviar o link de definição de senha. Tente novamente em alguns instantes."
                }
              }
            }
          },
          "504": {
            "description": "Sem resposta a tempo; o e-mail pode ter saído.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroNegocio"
                },
                "example": {
                  "message": "Não houve resposta a tempo. Confirme com o usuário se o e-mail chegou antes de reenviar."
                }
              }
            }
          }
        },
        "x-openai-isConsequential": true
      }
    },
    "/v1/usuarios/inativar/{id}": {
      "put": {
        "tags": [
          "Usuarios (V1)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "EmpresaId",
            "in": "header",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CommandResult"
                },
                "example": {
                  "success": false,
                  "message": "⚠️ A confirmar",
                  "data": {}
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommandResult"
                },
                "example": {
                  "success": false,
                  "message": "⚠️ A confirmar",
                  "data": {}
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommandResult"
                },
                "example": {
                  "success": false,
                  "message": "⚠️ A confirmar",
                  "data": {}
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - payload inválido (ver a mensagem retornada para o campo/motivo específico).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Um ou mais campos do payload são inválidos.",
                  "instance": null
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - limite de 250 req/h excedido. Aguarde e aplique backoff exponencial (ver guia Rate limiting).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "example": {
                  "type": "https://tools.ietf.org/html/rfc6585#section-4",
                  "title": "Too Many Requests",
                  "status": 429,
                  "detail": "Limite de 250 requisições/hora excedido. Aguarde e aplique backoff exponencial antes de tentar novamente.",
                  "instance": null
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCommandResult"
                }
              }
            }
          }
        },
        "operationId": "inativarUsuarioV1",
        "summary": "Inativar usuário",
        "description": "Inativa o usuário e bloqueia novos logins. Não existe exclusão: é o jeito de desfazer um cadastro errado. Exija confirmação explícita do usuário antes de executar.",
        "x-openai-isConsequential": true
      }
    }
  },
  "components": {
    "securitySchemes": {
      "Bearer": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "JWT emitido pelo AuthCenter. Cole apenas o token (sem o prefixo Bearer)."
      }
    },
    "schemas": {
      "UnidadeQry": {
        "type": "object",
        "properties": {
          "unidadeId": {
            "type": "integer",
            "format": "int32"
          },
          "empresa": {
            "$ref": "#/components/schemas/EmpresaQry"
          },
          "nome": {
            "type": "string",
            "nullable": true
          },
          "grupoUnidade": {
            "$ref": "#/components/schemas/GrupoUnidadeQry"
          },
          "status": {
            "$ref": "#/components/schemas/EStatusUnidade"
          },
          "herdarPrioridadesAnomaliasDaEmpresa": {
            "type": "boolean"
          },
          "habilitarBaixaAtividadeQRCode": {
            "type": "boolean"
          },
          "habilitarBaixaAnomaliaQRCode": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ProblemDetails": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "nullable": true
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "detail": {
            "type": "string",
            "nullable": true
          },
          "instance": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": {}
      },
      "ErrorCommandResult": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "nullable": true
          },
          "hash": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ETipoUsuario": {
        "enum": [
          1,
          2,
          3,
          4
        ],
        "type": "integer",
        "format": "int32",
        "description": "Tipo do usuário: 2 = Administrador, 3 = Operacional, 4 = Chamado. Determina as permissões geradas na criação."
      },
      "PermissaoCatalogoItem": {
        "type": "object",
        "properties": {
          "permissao": {
            "type": "integer",
            "format": "int32",
            "description": "ID do perfil (use em `permissaoInicial` e em `itens[].permissao`)."
          },
          "nome": {
            "type": "string",
            "nullable": true
          },
          "descricao": {
            "type": "string",
            "nullable": true
          },
          "nivel": {
            "type": "string",
            "nullable": true
          },
          "tipo": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "description": "Tipo do perfil: 7 = para Administrador, 2 = para Chamado, demais = Operacional."
          },
          "empresa": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "description": "`null` = perfil global, compartilhado por todas as empresas."
          },
          "inativo": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "Setores": {
        "type": "object",
        "properties": {
          "setor": {
            "type": "integer",
            "format": "int32"
          },
          "empresa": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "site": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "nome": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "Usuarios": {
        "type": "object",
        "properties": {
          "usuario": {
            "type": "integer",
            "format": "int32"
          },
          "nome": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "inativo": {
            "type": "boolean"
          },
          "superUsuario": {
            "type": "boolean",
            "nullable": true
          },
          "login": {
            "type": "string",
            "nullable": true
          },
          "usuarioDesignado": {
            "type": "boolean",
            "nullable": true
          },
          "filtrosDefault": {
            "type": "boolean",
            "nullable": true
          },
          "filtrosAlteracaoDefault": {
            "type": "boolean",
            "nullable": true
          },
          "filtrosTodosTiposAnomalias": {
            "type": "boolean",
            "nullable": true
          },
          "tipo": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "cargo": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "setor": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "assinaturaPath": {
            "type": "string",
            "nullable": true
          },
          "celular": {
            "type": "string",
            "nullable": true
          },
          "dataCadastro": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "acessoTodasAreas": {
            "type": "boolean"
          },
          "tipoNome": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "image": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "emailValido": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "PermissaoUsuarioItem": {
        "type": "object",
        "properties": {
          "permissaoUsuario": {
            "type": "integer",
            "format": "int32",
            "description": "ID da linha de vínculo."
          },
          "empresa": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "site": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "description": "ID da unidade. `null` = permissão em nível de empresa (linha base, necessária para o login)."
          },
          "permissao": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "description": "ID do perfil de permissão (ver GET /v1/permissoes)."
          },
          "permissaoNome": {
            "type": "string",
            "nullable": true,
            "description": "Nome do perfil."
          },
          "fornecedor": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "filtrosTodosTiposAnomalias": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ErroNegocio": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "description": "Motivo da recusa, em português, pronto para exibir ao operador."
          }
        },
        "additionalProperties": false
      },
      "CreateUsuarioCommand": {
        "type": "object",
        "properties": {
          "nome": {
            "type": "string",
            "maxLength": 100
          },
          "login": {
            "type": "string",
            "maxLength": 100,
            "description": "Login de acesso. Deve ser único entre usuários ativos."
          },
          "email": {
            "type": "string",
            "format": "email",
            "maxLength": 100,
            "description": "E-mail que receberá o link para definir a senha. Único por empresa; é gravado em minúsculas."
          },
          "tipo": {
            "type": "integer",
            "format": "int32",
            "enum": [
              3,
              4
            ],
            "description": "3 = Operacional, 4 = Chamado. Administrador NÃO é cadastrado por este pack (use a aplicação web)."
          },
          "permissaoInicial": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "description": "ID do perfil da linha base (GET /v1/permissoes?tipoUsuarioAlvo=…). Obrigatório para tipo 3 (Operacional) e 4 (Chamado); ignorado para tipo 2 (Administrador). O perfil deve ser compatível com o tipo e pertencer à empresa."
          },
          "cargo": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "setor": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "celular": {
            "type": "string",
            "nullable": true,
            "maxLength": 20
          },
          "cnpj": {
            "type": "string",
            "nullable": true,
            "maxLength": 20
          },
          "cargaHorariaMensal": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "custoHora": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "acessoTodasAreas": {
            "type": "boolean"
          },
          "filtrosDefault": {
            "type": "boolean"
          },
          "filtrosAlteracaoDefault": {
            "type": "boolean"
          },
          "filtrosTodosTiposAnomalias": {
            "type": "boolean"
          },
          "usuarioDesignado": {
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "required": [
          "nome",
          "login",
          "email",
          "tipo"
        ]
      },
      "CreateUsuarioCommandResult": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string",
            "nullable": true
          },
          "data": {
            "nullable": true,
            "type": "object"
          },
          "usuario": {
            "type": "integer",
            "format": "int32",
            "description": "ID do usuário criado."
          },
          "permissoes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PermissaoUsuarioItem"
            },
            "description": "Linhas de permissão geradas na criação. Confira que existe a linha base (`site` nulo)."
          },
          "linkDefinicaoSenhaEnviado": {
            "type": "boolean",
            "description": "`true` = o serviço de e-mail ACEITOU o envio do link (não garante entrega na caixa). `false` = o usuário foi criado, mas o link não foi confirmado — use POST /v1/usuarios/{id}/reenviar-definicao-senha."
          },
          "linkDefinicaoSenhaDetalhe": {
            "type": "string",
            "nullable": true,
            "description": "Motivo legível do desfecho do envio. Nunca contém token nem link."
          }
        },
        "additionalProperties": false
      },
      "SavePermissoesUsuarioCommand": {
        "type": "object",
        "properties": {
          "usuario": {
            "type": "integer",
            "format": "int32",
            "description": "ID do usuário cujo conjunto de permissões será substituído."
          },
          "itens": {
            "type": "array",
            "maxItems": 10000,
            "items": {
              "$ref": "#/components/schemas/PermissaoUsuarioInput"
            },
            "description": "Conjunto COMPLETO de permissões do usuário na empresa: o que não vier aqui é REMOVIDO. Deve conter ao menos um item com `site` nulo (linha base que habilita o login). Máximo de 10.000 itens."
          }
        },
        "additionalProperties": false,
        "required": [
          "usuario",
          "itens"
        ]
      },
      "SavePermissoesUsuarioCommandResult": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string",
            "nullable": true,
            "description": "Resumo do que mudou: `Permissões atualizadas: N incluída(s), N alterada(s), N removida(s).`"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PermissaoUsuarioItem"
            },
            "nullable": true,
            "description": "Estado FINAL das permissões do usuário na empresa (uma linha por unidade, mais a linha base). Confira contra o que você enviou."
          }
        },
        "additionalProperties": false
      },
      "CommandResult": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string",
            "nullable": true
          },
          "data": {
            "nullable": true,
            "type": "object"
          }
        },
        "additionalProperties": false
      },
      "EmpresaQry": {
        "type": "object",
        "properties": {
          "empresaId": {
            "type": "integer",
            "format": "int32"
          },
          "nome": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/EStatusEmpresa"
          },
          "tipo": {
            "$ref": "#/components/schemas/ETipoEmpresa"
          },
          "habilitarAprovacaoCorrecao": {
            "type": "boolean"
          },
          "habilitarAvaliacaoCorrecao": {
            "type": "boolean"
          },
          "habilitarBaixaAtividadeQRCode": {
            "type": "boolean"
          },
          "habilitarBaixaAnomaliaQRCode": {
            "type": "boolean"
          },
          "habilitarModuloAuditorias": {
            "type": "boolean"
          },
          "habilitarModuloAlmoxarifados": {
            "type": "boolean"
          },
          "assinaturaBaixaAnomaliaMobile": {
            "type": "boolean"
          },
          "assinaturaBaixaTarefaMobile": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "GrupoUnidadeQry": {
        "type": "object",
        "properties": {
          "grupoUnidadeId": {
            "type": "integer",
            "format": "int32"
          },
          "nome": {
            "type": "string",
            "nullable": true
          },
          "subGrupoUnidade": {
            "$ref": "#/components/schemas/SubGrupoUnidadeQry"
          }
        },
        "additionalProperties": false
      },
      "EStatusUnidade": {
        "enum": [
          2,
          3
        ],
        "type": "integer",
        "format": "int32"
      },
      "PermissaoUsuarioInput": {
        "type": "object",
        "properties": {
          "site": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "description": "ID da unidade (deve pertencer à empresa do contexto). `null` = nível de empresa (linha base)."
          },
          "permissao": {
            "type": "integer",
            "format": "int32",
            "minimum": 1,
            "description": "ID do perfil, obtido em GET /v1/permissoes. Obrigatório."
          },
          "fornecedor": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "filtrosTodosTiposAnomalias": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "required": [
          "permissao"
        ]
      },
      "EStatusEmpresa": {
        "enum": [
          1,
          2
        ],
        "type": "integer",
        "format": "int32"
      },
      "ETipoEmpresa": {
        "enum": [
          1,
          2,
          3,
          4,
          6,
          7,
          8
        ],
        "type": "integer",
        "format": "int32"
      },
      "SubGrupoUnidadeQry": {
        "type": "object",
        "properties": {
          "subGrupoUnidadeId": {
            "type": "integer",
            "format": "int32"
          },
          "nome": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    }
  }
}