basePath: /
definitions:
  agenda.ContactInfo:
    properties:
      name:
        type: string
      phone:
        type: string
      role:
        type: string
    type: object
  agenda.CreateAgendaRequest:
    properties:
      cine_faltante:
        type: integer
      contatos:
        items:
          $ref: '#/definitions/agenda.ContactInfo'
        type: array
      data_evento:
        type: string
      endereco:
        type: string
      fot_id:
        type: string
      foto_faltante:
        type: integer
      horario:
        type: string
      local_evento:
        type: string
      logistica_observacoes:
        type: string
      observacoes_evento:
        type: string
      pre_venda:
        type: boolean
      qtd_cinegrafistas:
        type: integer
      qtd_estudios:
        type: integer
      qtd_formandos:
        type: integer
      qtd_fotografos:
        type: integer
      qtd_plataforma_360:
        type: integer
      qtd_ponto_decorado:
        type: integer
      qtd_ponto_foto:
        type: integer
      qtd_ponto_id:
        type: integer
      qtd_pontos_led:
        type: integer
      qtd_recepcionistas:
        type: integer
      recep_faltante:
        type: integer
      status_profissionais:
        type: string
      tipo_evento_id:
        type: string
    type: object
  agenda.FinancialStatementResponse:
    properties:
      pagamentos_confirmados:
        type: number
      pagamentos_pendentes:
        type: number
      total_recebido:
        type: number
      transactions:
        items:
          $ref: '#/definitions/agenda.FinancialTransactionDTO'
        type: array
    type: object
  agenda.FinancialTransactionDTO:
    properties:
      data_evento:
        type: string
      data_pagamento:
        type: string
      descricao_extra:
        type: string
      empresa:
        type: string
      id:
        type: string
      nome_evento:
        description: Fot + Tipo
        type: string
      status:
        type: string
      tipo_evento:
        type: string
      valor_extra:
        type: number
      valor_free:
        type: number
      valor_recebido:
        type: number
    type: object
  anos_formaturas.AnoFormaturaResponse:
    properties:
      ano_semestre:
        type: string
      id:
        type: string
    type: object
  anos_formaturas.CreateAnoFormaturaRequest:
    properties:
      ano_semestre:
        example: "2029.1"
        type: string
    required:
    - ano_semestre
    type: object
  auth.loginRequest:
    properties:
      email:
        example: admin@photum.com
        type: string
      senha:
        example: "123456"
        minLength: 6
        type: string
    required:
    - email
    - senha
    type: object
  auth.loginResponse:
    properties:
      access_token:
        type: string
      expires_at:
        type: string
      profissional: {}
      user:
        $ref: '#/definitions/auth.userResponse'
    type: object
  auth.registerRequest:
    properties:
      bairro:
        type: string
      cep:
        type: string
      cidade:
        type: string
      complemento:
        type: string
      cpf_cnpj:
        type: string
      email:
        type: string
      empresa_id:
        type: string
      endereco:
        type: string
      estado:
        type: string
      nome:
        type: string
      numero:
        type: string
      professional_type:
        type: string
      regiao:
        type: string
      role:
        type: string
      senha:
        minLength: 6
        type: string
      telefone:
        type: string
    required:
    - email
    - nome
    - role
    - senha
    type: object
  auth.updateRoleRequest:
    properties:
      role:
        type: string
    required:
    - role
    type: object
  auth.uploadURLRequest:
    properties:
      content_type:
        type: string
      filename:
        type: string
    required:
    - content_type
    - filename
    type: object
  auth.userResponse:
    properties:
      allowed_regions:
        items:
          type: string
        type: array
      ativo:
        type: boolean
      bairro:
        type: string
      cep:
        type: string
      cidade:
        type: string
      company_id:
        type: string
      company_name:
        type: string
      complemento:
        type: string
      cpf_cnpj:
        type: string
      email:
        type: string
      endereco:
        type: string
      estado:
        type: string
      id:
        type: string
      name:
        type: string
      numero:
        type: string
      phone:
        type: string
      role:
        type: string
    type: object
  availability.SetAvailabilityInput:
    properties:
      date:
        description: YYYY-MM-DD
        type: string
      status:
        description: DISPONIVEL, INDISPONIVEL
        type: string
    type: object
  cadastro_fot.CadastroFotResponse:
    properties:
      ano_formatura_id:
        type: string
      ano_formatura_label:
        type: string
      cidade:
        type: string
      curso_id:
        type: string
      curso_nome:
        type: string
      empresa_id:
        type: string
      empresa_nome:
        type: string
      estado:
        type: string
      finalizada:
        type: boolean
      fot:
        type: string
      gastos_captacao:
        type: number
      id:
        type: string
      instituicao:
        type: string
      observacoes:
        type: string
      pre_venda:
        type: boolean
    type: object
  cadastro_fot.CreateInput:
    properties:
      ano_formatura_id:
        type: string
      cidade:
        type: string
      curso_id:
        type: string
      empresa_id:
        type: string
      estado:
        type: string
      fot:
        type: string
      gastos_captacao:
        type: number
      instituicao:
        type: string
      observacoes:
        type: string
      pre_venda:
        type: boolean
    type: object
  cadastro_fot.ImportInput:
    properties:
      ano_formatura_label:
        type: string
      cidade:
        type: string
      curso_nome:
        type: string
      empresa_nome:
        type: string
      estado:
        type: string
      fot:
        type: string
      gastos_captacao:
        type: number
      instituicao:
        type: string
      observacoes:
        type: string
      pre_venda:
        type: boolean
    type: object
  cadastro_fot.ImportResult:
    properties:
      errors:
        items:
          type: string
        type: array
      successCount:
        type: integer
    type: object
  codigos.CreateCodigoInput:
    properties:
      codigo:
        type: string
      descricao:
        type: string
      empresa_id:
        type: string
      regiao:
        description: From context/header
        type: string
      validade_dias:
        type: integer
    type: object
  cursos.CreateCursoRequest:
    properties:
      nome:
        type: string
    required:
    - nome
    type: object
  cursos.CursoResponse:
    properties:
      id:
        type: string
      nome:
        type: string
    type: object
  empresas.CreateEmpresaRequest:
    properties:
      nome:
        type: string
    required:
    - nome
    type: object
  empresas.EmpresaResponse:
    properties:
      id:
        type: string
      nome:
        type: string
    type: object
  escalas.CreateEscalaInput:
    properties:
      agenda_id:
        type: string
      data_hora_fim:
        description: RFC3339
        type: string
      data_hora_inicio:
        description: RFC3339
        type: string
      funcao_especifica:
        type: string
      profissional_id:
        type: string
    type: object
  escalas.UpdateEscalaInput:
    properties:
      data_hora_fim:
        type: string
      data_hora_inicio:
        type: string
      funcao_especifica:
        type: string
      profissional_id:
        type: string
    type: object
  funcoes.CreateFuncaoRequest:
    properties:
      nome:
        type: string
    required:
    - nome
    type: object
  funcoes.FuncaoResponse:
    properties:
      id:
        type: string
      nome:
        type: string
    type: object
  profissionais.CreateProfissionalInput:
    properties:
      agencia:
        type: string
      avatar_url:
        type: string
      bairro:
        type: string
      banco:
        type: string
      carro_disponivel:
        type: boolean
      cep:
        type: string
      cidade:
        type: string
      complemento:
        type: string
      conta:
        type: string
      conta_pix:
        type: string
      cpf_cnpj_titular:
        type: string
      desempenho_evento:
        type: integer
      disp_horario:
        type: integer
      educacao_simpatia:
        type: integer
      email:
        type: string
      endereco:
        type: string
      equipamentos:
        type: string
      extra_por_equipamento:
        type: boolean
      funcao_profissional_id:
        type: string
      funcoes_ids:
        description: New field
        items:
          type: string
        type: array
      media:
        type: number
      nome:
        type: string
      numero:
        type: string
      observacao:
        type: string
      qtd_estudio:
        type: integer
      qual_tec:
        type: integer
      regiao:
        description: 'Optional: Override region'
        type: string
      tabela_free:
        type: string
      target_user_id:
        description: 'Optional: For admin creation'
        type: string
      tem_estudio:
        type: boolean
      tipo_cartao:
        type: string
      uf:
        type: string
      whatsapp:
        type: string
    type: object
  profissionais.ImportStats:
    properties:
      created:
        type: integer
      errors:
        type: integer
      updated:
        type: integer
    type: object
  profissionais.ProfissionalResponse:
    properties:
      agencia:
        type: string
      avatar_url:
        type: string
      bairro:
        type: string
      banco:
        type: string
      carro_disponivel:
        type: boolean
      cep:
        type: string
      cidade:
        type: string
      complemento:
        type: string
      conta:
        type: string
      conta_pix:
        type: string
      cpf_cnpj_titular:
        type: string
      desempenho_evento:
        type: integer
      disp_horario:
        type: integer
      educacao_simpatia:
        type: integer
      email:
        type: string
      endereco:
        type: string
      equipamentos:
        type: string
      extra_por_equipamento:
        type: boolean
      funcao_profissional:
        description: Deprecated single name (optional)
        type: string
      funcao_profissional_id:
        type: string
      functions:
        description: JSON array
        items:
          type: object
        type: array
      id:
        type: string
      media:
        type: number
      nome:
        type: string
      numero:
        type: string
      observacao:
        type: string
      qtd_estudio:
        type: integer
      qual_tec:
        type: integer
      tabela_free:
        type: string
      tem_estudio:
        type: boolean
      tipo_cartao:
        type: string
      uf:
        type: string
      usuario_id:
        type: string
      whatsapp:
        type: string
    type: object
  profissionais.UpdateProfissionalInput:
    properties:
      agencia:
        type: string
      avatar_url:
        type: string
      bairro:
        type: string
      banco:
        type: string
      carro_disponivel:
        type: boolean
      cep:
        type: string
      cidade:
        type: string
      complemento:
        type: string
      conta:
        type: string
      conta_pix:
        type: string
      cpf_cnpj_titular:
        type: string
      desempenho_evento:
        type: integer
      disp_horario:
        type: integer
      educacao_simpatia:
        type: integer
      email:
        type: string
      endereco:
        type: string
      equipamentos:
        type: string
      extra_por_equipamento:
        type: boolean
      funcao_profissional_id:
        type: string
      funcoes_ids:
        items:
          type: string
        type: array
      media:
        type: number
      nome:
        type: string
      numero:
        type: string
      observacao:
        type: string
      qtd_estudio:
        type: integer
      qual_tec:
        type: integer
      senha:
        description: New field for password update
        type: string
      tabela_free:
        type: string
      tem_estudio:
        type: boolean
      tipo_cartao:
        type: string
      uf:
        type: string
      whatsapp:
        type: string
    type: object
  tipos_eventos.CreateEventoRequest:
    properties:
      nome:
        type: string
    required:
    - nome
    type: object
  tipos_eventos.EventoResponse:
    properties:
      id:
        type: string
      nome:
        type: string
      precos:
        items:
          $ref: '#/definitions/tipos_eventos.PrecoResponse'
        type: array
    type: object
  tipos_eventos.PrecoResponse:
    properties:
      funcao_nome:
        type: string
      funcao_profissional_id:
        type: string
      id:
        type: string
      tipo_evento_id:
        type: string
      valor:
        type: number
    type: object
  tipos_eventos.PriceInput:
    properties:
      funcao_profissional_id:
        type: string
      tipo_evento_id:
        type: string
      valor:
        type: number
    type: object
  tipos_servicos.CreateTipoServicoRequest:
    properties:
      nome:
        type: string
    required:
    - nome
    type: object
  tipos_servicos.TipoServicoResponse:
    properties:
      id:
        type: string
      nome:
        type: string
    type: object
host: localhost:8080
info:
  contact:
    email: support@swagger.io
    name: API Support
    url: http://www.swagger.io/support
  description: Backend authentication service for Photum.
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  termsOfService: http://swagger.io/terms/
  title: Photum Backend API
  version: "1.0"
paths:
  /api/admin/users:
    get:
      consumes:
      - application/json
      description: List all users (Admin only)
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              additionalProperties: true
              type: object
            type: array
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: List all users
      tags:
      - admin
    post:
      consumes:
      - application/json
      description: Create a new user with specific role (Admin only)
      parameters:
      - description: Create User Request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/auth.registerRequest'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            additionalProperties:
              type: string
            type: object
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Create user (Admin)
      tags:
      - admin
  /api/admin/users/{id}:
    delete:
      consumes:
      - application/json
      description: Delete user (Admin only)
      parameters:
      - description: User ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              type: string
            type: object
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Delete user
      tags:
      - admin
    get:
      consumes:
      - application/json
      description: Get user details by ID (Admin only)
      parameters:
      - description: User ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties: true
            type: object
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Get user by ID
      tags:
      - admin
  /api/admin/users/{id}/approve:
    patch:
      consumes:
      - application/json
      description: Set user ativo=true
      parameters:
      - description: User ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              type: string
            type: object
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Approve user
      tags:
      - admin
  /api/admin/users/{id}/role:
    patch:
      consumes:
      - application/json
      description: Update user role (Admin only)
      parameters:
      - description: User ID
        in: path
        name: id
        required: true
        type: string
      - description: Update Role Request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/auth.updateRoleRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              type: string
            type: object
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Update user role
      tags:
      - admin
  /api/admin/users/pending:
    get:
      consumes:
      - application/json
      description: List users with ativo=false
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              additionalProperties: true
              type: object
            type: array
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: List pending users
      tags:
      - admin
  /api/agenda:
    get:
      consumes:
      - application/json
      description: List all agenda events with details
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              additionalProperties: true
              type: object
            type: array
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      summary: List all agenda events
      tags:
      - agenda
    post:
      consumes:
      - application/json
      description: Create a new agenda event
      parameters:
      - description: Create Agenda Request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/agenda.CreateAgendaRequest'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            additionalProperties: true
            type: object
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Create a new agenda event
      tags:
      - agenda
  /api/agenda/{id}:
    delete:
      consumes:
      - application/json
      description: Delete agenda event by ID
      parameters:
      - description: Agenda ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "204":
          description: No Content
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Delete agenda event
      tags:
      - agenda
    get:
      consumes:
      - application/json
      description: Get agenda event details by ID
      parameters:
      - description: Agenda ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties: true
            type: object
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Get agenda event by ID
      tags:
      - agenda
    put:
      consumes:
      - application/json
      description: Update agenda event by ID
      parameters:
      - description: Agenda ID
        in: path
        name: id
        required: true
        type: string
      - description: Update Agenda Request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/agenda.CreateAgendaRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties: true
            type: object
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Update agenda event
      tags:
      - agenda
  /api/agenda/{id}/available:
    get:
      responses: {}
      summary: List available professionals for agenda date
      tags:
      - agenda
  /api/agenda/{id}/notify-logistics:
    post:
      responses: {}
      summary: Send logistics notification to all professionals
      tags:
      - agenda
  /api/agenda/{id}/professionals:
    post:
      responses: {}
      summary: Assign professional to agenda
      tags:
      - agenda
  /api/agenda/{id}/professionals/{profId}:
    delete:
      responses: {}
      summary: Remove professional from agenda
      tags:
      - agenda
  /api/agenda/{id}/professionals/{profId}/coordinator:
    put:
      responses: {}
      summary: Set professional as coordinator
      tags:
      - agenda
  /api/agenda/{id}/professionals/{profId}/position:
    patch:
      responses: {}
      summary: Update professional position in agenda
      tags:
      - agenda
  /api/agenda/{id}/professionals/{profId}/status:
    patch:
      responses: {}
      summary: Update professional assignment status
      tags:
      - agenda
  /api/agenda/{id}/status:
    patch:
      responses: {}
      summary: Update agenda status
      tags:
      - agenda
  /api/anos-formaturas:
    get:
      consumes:
      - application/json
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/anos_formaturas.AnoFormaturaResponse'
            type: array
      security:
      - BearerAuth: []
      summary: List all graduation years
      tags:
      - anos_formaturas
    post:
      consumes:
      - application/json
      parameters:
      - description: Ano Semestre
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/anos_formaturas.CreateAnoFormaturaRequest'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            $ref: '#/definitions/anos_formaturas.AnoFormaturaResponse'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "409":
          description: Conflict
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Create a new graduation year
      tags:
      - anos_formaturas
  /api/anos-formaturas/{id}:
    delete:
      consumes:
      - application/json
      parameters:
      - description: ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "204":
          description: No Content
      security:
      - BearerAuth: []
      summary: Delete a graduation year
      tags:
      - anos_formaturas
    put:
      consumes:
      - application/json
      parameters:
      - description: ID
        in: path
        name: id
        required: true
        type: string
      - description: Ano Semestre
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/anos_formaturas.CreateAnoFormaturaRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/anos_formaturas.AnoFormaturaResponse'
      security:
      - BearerAuth: []
      summary: Update a graduation year
      tags:
      - anos_formaturas
  /api/cadastro-fot:
    get:
      consumes:
      - application/json
      parameters:
      - description: Filter by Company ID
        in: query
        name: empresa_id
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/cadastro_fot.CadastroFotResponse'
            type: array
      security:
      - BearerAuth: []
      summary: List all FOT records
      tags:
      - cadastro_fot
    post:
      consumes:
      - application/json
      parameters:
      - description: FOT Data
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/cadastro_fot.CreateInput'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            $ref: '#/definitions/cadastro_fot.CadastroFotResponse'
      security:
      - BearerAuth: []
      summary: Create a new FOT record
      tags:
      - cadastro_fot
  /api/cadastro-fot/{id}:
    delete:
      consumes:
      - application/json
      parameters:
      - description: ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "204":
          description: No Content
      security:
      - BearerAuth: []
      summary: Delete FOT record
      tags:
      - cadastro_fot
    get:
      consumes:
      - application/json
      parameters:
      - description: ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/cadastro_fot.CadastroFotResponse'
      security:
      - BearerAuth: []
      summary: Get FOT record by ID
      tags:
      - cadastro_fot
    put:
      consumes:
      - application/json
      parameters:
      - description: ID
        in: path
        name: id
        required: true
        type: string
      - description: Data
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/cadastro_fot.CreateInput'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/cadastro_fot.CadastroFotResponse'
      security:
      - BearerAuth: []
      summary: Update FOT record
      tags:
      - cadastro_fot
  /api/cadastro-fot/{id}/finalize:
    post:
      consumes:
      - application/json
      parameters:
      - description: ID
        in: path
        name: id
        required: true
        type: string
      - description: Status
        in: body
        name: status
        required: true
        schema:
          properties:
            finalizada:
              type: boolean
          type: object
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/cadastro_fot.CadastroFotResponse'
      security:
      - BearerAuth: []
      summary: Toggle FOT finalized status
      tags:
      - cadastro_fot
  /api/codigos-acesso:
    get:
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              additionalProperties: true
              type: object
            type: array
      summary: List Access Codes
      tags:
      - codigos
    post:
      consumes:
      - application/json
      parameters:
      - description: Req
        in: body
        name: req
        required: true
        schema:
          $ref: '#/definitions/codigos.CreateCodigoInput'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            additionalProperties: true
            type: object
      summary: Create Access Code
      tags:
      - codigos
  /api/codigos-acesso/{id}:
    delete:
      parameters:
      - description: ID
        in: path
        name: id
        required: true
        type: string
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Delete Access Code
      tags:
      - codigos
  /api/cursos:
    get:
      consumes:
      - application/json
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/cursos.CursoResponse'
            type: array
      security:
      - BearerAuth: []
      summary: List all courses
      tags:
      - cursos
    post:
      consumes:
      - application/json
      parameters:
      - description: Curso Name
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/cursos.CreateCursoRequest'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            $ref: '#/definitions/cursos.CursoResponse'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "409":
          description: Conflict
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Create a new course
      tags:
      - cursos
  /api/cursos/{id}:
    delete:
      consumes:
      - application/json
      parameters:
      - description: Curso ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "204":
          description: No Content
      security:
      - BearerAuth: []
      summary: Delete a course
      tags:
      - cursos
    put:
      consumes:
      - application/json
      parameters:
      - description: Curso ID
        in: path
        name: id
        required: true
        type: string
      - description: Curso Name
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/cursos.CreateCursoRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/cursos.CursoResponse'
      security:
      - BearerAuth: []
      summary: Update a course
      tags:
      - cursos
  /api/empresas:
    get:
      consumes:
      - application/json
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/empresas.EmpresaResponse'
            type: array
      security:
      - BearerAuth: []
      summary: List all companies
      tags:
      - empresas
    post:
      consumes:
      - application/json
      parameters:
      - description: Empresa Name
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/empresas.CreateEmpresaRequest'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            $ref: '#/definitions/empresas.EmpresaResponse'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "409":
          description: Conflict
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Create a new company
      tags:
      - empresas
  /api/empresas/{id}:
    delete:
      consumes:
      - application/json
      parameters:
      - description: Empresa ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "204":
          description: No Content
      security:
      - BearerAuth: []
      summary: Delete a company
      tags:
      - empresas
    put:
      consumes:
      - application/json
      parameters:
      - description: Empresa ID
        in: path
        name: id
        required: true
        type: string
      - description: Empresa Name
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/empresas.CreateEmpresaRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/empresas.EmpresaResponse'
      security:
      - BearerAuth: []
      summary: Update a company
      tags:
      - empresas
  /api/escalas:
    get:
      consumes:
      - application/json
      description: Get all schedule entries for a specific agenda_id
      parameters:
      - description: Agenda ID
        in: query
        name: agenda_id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              additionalProperties: true
              type: object
            type: array
      summary: List schedules for an event
      tags:
      - escalas
    post:
      consumes:
      - application/json
      description: Assign a professional to a time block in an event
      parameters:
      - description: Create Escala
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/escalas.CreateEscalaInput'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Create a schedule entry
      tags:
      - escalas
  /api/escalas/{id}:
    delete:
      consumes:
      - application/json
      description: Remove a professional from a time block
      parameters:
      - description: Escala ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Delete a schedule entry
      tags:
      - escalas
    put:
      consumes:
      - application/json
      description: Update time or professional for a slot
      parameters:
      - description: Escala ID
        in: path
        name: id
        required: true
        type: string
      - description: Update Escala
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/escalas.UpdateEscalaInput'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Update a schedule entry
      tags:
      - escalas
  /api/funcoes:
    get:
      consumes:
      - application/json
      description: List all professional functions
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/funcoes.FuncaoResponse'
            type: array
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      summary: List functions
      tags:
      - funcoes
    post:
      consumes:
      - application/json
      description: Create a new professional function
      parameters:
      - description: Create Function Request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/funcoes.CreateFuncaoRequest'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            $ref: '#/definitions/funcoes.FuncaoResponse'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "409":
          description: Conflict
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Create a new function
      tags:
      - funcoes
  /api/funcoes/{id}:
    delete:
      consumes:
      - application/json
      description: Delete a professional function by ID
      parameters:
      - description: Function ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              type: string
            type: object
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Delete function
      tags:
      - funcoes
    put:
      consumes:
      - application/json
      description: Update a professional function by ID
      parameters:
      - description: Function ID
        in: path
        name: id
        required: true
        type: string
      - description: Update Function Request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/funcoes.CreateFuncaoRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/funcoes.FuncaoResponse'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "409":
          description: Conflict
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Update function
      tags:
      - funcoes
  /api/import/agenda:
    post:
      responses: {}
      summary: Import agenda events from Excel/JSON
      tags:
      - agenda
  /api/import/fot:
    post:
      consumes:
      - application/json
      parameters:
      - description: List of FOTs
        in: body
        name: request
        required: true
        schema:
          items:
            $ref: '#/definitions/cadastro_fot.ImportInput'
          type: array
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/cadastro_fot.ImportResult'
      security:
      - BearerAuth: []
      summary: Import FOT data
      tags:
      - cadastro_fot
  /api/me:
    get:
      consumes:
      - application/json
      description: Get current authenticated user
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/auth.loginResponse'
      summary: Get current user
      tags:
      - auth
    put:
      consumes:
      - application/json
      description: Update profile information (Name, Phone, Address). Currently for
        EVENT_OWNER.
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              type: string
            type: object
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Update current user profile
      tags:
      - auth
  /api/professionals/me/financial-statement:
    get:
      consumes:
      - application/json
      description: Get financial statement for the logged-in professional
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/agenda.FinancialStatementResponse'
        "401":
          description: Unauthorized
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Get professional financial statement
      tags:
      - agenda
  /api/profissionais:
    get:
      consumes:
      - application/json
      description: List all profissionais
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/profissionais.ProfissionalResponse'
            type: array
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: List profissionais
      tags:
      - profissionais
    post:
      consumes:
      - application/json
      description: Create a new profissional record
      parameters:
      - description: Create Profissional Request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/profissionais.CreateProfissionalInput'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            $ref: '#/definitions/profissionais.ProfissionalResponse'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Create a new profissional
      tags:
      - profissionais
  /api/profissionais/{id}:
    delete:
      consumes:
      - application/json
      description: Delete a profissional by ID
      parameters:
      - description: Profissional ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              type: string
            type: object
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Delete profissional
      tags:
      - profissionais
    get:
      consumes:
      - application/json
      description: Get a profissional by ID
      parameters:
      - description: Profissional ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/profissionais.ProfissionalResponse'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Get profissional by ID
      tags:
      - profissionais
    put:
      consumes:
      - application/json
      description: Update a profissional by ID
      parameters:
      - description: Profissional ID
        in: path
        name: id
        required: true
        type: string
      - description: Update Profissional Request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/profissionais.UpdateProfissionalInput'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/profissionais.ProfissionalResponse'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Update profissional
      tags:
      - profissionais
  /api/profissionais/import:
    post:
      consumes:
      - application/json
      description: Import professionals (Upsert by CPF)
      parameters:
      - description: List of Professionals
        in: body
        name: request
        required: true
        schema:
          items:
            $ref: '#/definitions/profissionais.CreateProfissionalInput'
          type: array
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/profissionais.ImportStats'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Import professionals from properties
      tags:
      - profissionais
  /api/profissionais/me:
    get:
      consumes:
      - application/json
      description: Get the profissional profile associated with the current user
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/profissionais.ProfissionalResponse'
        "401":
          description: Unauthorized
          schema:
            additionalProperties:
              type: string
            type: object
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Get current authenticated profissional
      tags:
      - profissionais
  /api/public/codigos-acesso/verificar:
    get:
      parameters:
      - description: Code
        in: query
        name: code
        required: true
        type: string
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              type: boolean
            type: object
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Verify Access Code
      tags:
      - codigos
  /api/public/profissionais/check:
    get:
      consumes:
      - application/json
      description: Check existence and claim status
      parameters:
      - description: CPF/CNPJ
        in: query
        name: cpf
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties: true
            type: object
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Check if professional exists by CPF
      tags:
      - profissionais
  /api/tipos-eventos:
    get:
      consumes:
      - application/json
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/tipos_eventos.EventoResponse'
            type: array
      security:
      - BearerAuth: []
      summary: List all event types
      tags:
      - tipos_eventos
    post:
      consumes:
      - application/json
      parameters:
      - description: Nome
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/tipos_eventos.CreateEventoRequest'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            $ref: '#/definitions/tipos_eventos.EventoResponse'
      security:
      - BearerAuth: []
      summary: Create a new event type
      tags:
      - tipos_eventos
  /api/tipos-eventos/{id}:
    delete:
      consumes:
      - application/json
      parameters:
      - description: Event ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "204":
          description: No Content
      security:
      - BearerAuth: []
      summary: Delete an event type
      tags:
      - tipos_eventos
    put:
      consumes:
      - application/json
      parameters:
      - description: Event ID
        in: path
        name: id
        required: true
        type: string
      - description: Event Data
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/tipos_eventos.CreateEventoRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/tipos_eventos.EventoResponse'
      security:
      - BearerAuth: []
      summary: Update an event type
      tags:
      - tipos_eventos
  /api/tipos-eventos/{id}/precos:
    get:
      consumes:
      - application/json
      parameters:
      - description: Event ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/tipos_eventos.PrecoResponse'
            type: array
      security:
      - BearerAuth: []
      summary: List prices for an event
      tags:
      - tipos_eventos
  /api/tipos-eventos/precos:
    post:
      consumes:
      - application/json
      parameters:
      - description: Price Input
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/tipos_eventos.PriceInput'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Set price for an event function
      tags:
      - tipos_eventos
  /api/tipos-servicos:
    get:
      consumes:
      - application/json
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/tipos_servicos.TipoServicoResponse'
            type: array
      security:
      - BearerAuth: []
      summary: List all service types
      tags:
      - tipos_servicos
    post:
      consumes:
      - application/json
      parameters:
      - description: Nome
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/tipos_servicos.CreateTipoServicoRequest'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            $ref: '#/definitions/tipos_servicos.TipoServicoResponse'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "409":
          description: Conflict
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Create a new service type
      tags:
      - tipos_servicos
  /api/tipos-servicos/{id}:
    delete:
      consumes:
      - application/json
      parameters:
      - description: ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "204":
          description: No Content
      security:
      - BearerAuth: []
      summary: Delete a service type
      tags:
      - tipos_servicos
    put:
      consumes:
      - application/json
      parameters:
      - description: ID
        in: path
        name: id
        required: true
        type: string
      - description: Nome
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/tipos_servicos.CreateTipoServicoRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/tipos_servicos.TipoServicoResponse'
      security:
      - BearerAuth: []
      summary: Update a service type
      tags:
      - tipos_servicos
  /auth/login:
    post:
      consumes:
      - application/json
      description: Login with email and password
      parameters:
      - description: Login Request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/auth.loginRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/auth.loginResponse'
        "401":
          description: Unauthorized
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Login
      tags:
      - auth
  /auth/logout:
    post:
      consumes:
      - application/json
      description: Revoke refresh token and clear cookie
      parameters:
      - description: Refresh Token
        in: body
        name: refresh_token
        schema:
          type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Logout user
      tags:
      - auth
  /auth/refresh:
    post:
      consumes:
      - application/json
      description: Get a new access token using a valid refresh token
      parameters:
      - description: Refresh Token
        in: body
        name: refresh_token
        schema:
          type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties: true
            type: object
        "401":
          description: Unauthorized
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Refresh access token
      tags:
      - auth
  /auth/register:
    post:
      consumes:
      - application/json
      description: Register a new user with email, password, name, phone, role and
        professional type
      parameters:
      - description: Register Request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/auth.registerRequest'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            additionalProperties:
              type: string
            type: object
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Register a new user
      tags:
      - auth
  /auth/upload-url:
    post:
      consumes:
      - application/json
      description: Get a pre-signed URL to upload a file directly to S3/Civo
      parameters:
      - description: Upload URL Request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/auth.uploadURLRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Get S3 Presigned URL for upload
      tags:
      - auth
  /availability:
    get:
      parameters:
      - description: Start Date
        in: query
        name: start
        required: true
        type: string
      - description: End Date
        in: query
        name: end
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              additionalProperties: true
              type: object
            type: array
      summary: List my availability for a month with ?start=YYYY-MM-DD&end=YYYY-MM-DD
      tags:
      - availability
    post:
      consumes:
      - application/json
      parameters:
      - description: Availability Input
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/availability.SetAvailabilityInput'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Set availability for a date
      tags:
      - availability
securityDefinitions:
  BearerAuth:
    in: header
    name: Authorization
    type: apiKey
swagger: "2.0"
tags:
- description: Authentication related operations
  name: auth
- description: Administration operations
  name: admin
