openapi: 3.0.0
info:
  title: API - Grupo BTZ
  description: >
    API Grupo BTZ - Ambiente de Homologação
  version: 1.0.0

servers:
  - url: https://api.grupobtz.com.br/public
    description: Ambiente de Homologação

tags:
  - name: Autenticação
    description: Funcionalidades relacionadas à autenticação de usuários e geração de token
  - name: Ororo
    description: Funcionalidades relacionadas à Calha Parshall e ao sistema de abate e lotes
  - name: Nota Fiscal
    description: Funcionalidades relacionadas à consulta de notas fiscais
  - name: Estoque
    description: Funcionalidades relacionadas ao controle e movimentação de estoque

paths:
  /login:
    post:
      tags:
        - Autenticação
      summary: Login e geração de token JWT
      description: >
        Endpoint para autenticação de usuários. Retorna um token JWT que deve ser usado nos cabeçalhos das requisições às rotas protegidas.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                username:
                  type: string
                  example: "admin"
                password:
                  type: string
                  format: password
                  example: "123456"
      responses:
        '200':
          description: Autenticação bem-sucedida.
          content:
            application/json:
              schema:
                type: object
                properties:
                  token:
                    type: string
                    example: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
        '400':
          description: Parâmetros ausentes ou inválidos.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: "erro"
                  message:
                    type: string
                    example: "Usuário ou senha inválidos."
        '500':
          description: Erro interno do servidor.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: "erro"
                  message:
                    type: string
                    example: "Erro ao processar a autenticação."

  /parshall:
    post:
      tags:
        - Ororo
      operationId: ParshallFlowInsert
      summary: Insere dados de vazão na Calha Parshall
      description: >
        Endpoint para inserção de dados de vazão na Calha Parshall. 
        O JSON recebido inclui os dados da Empresa, Data, Hora e Volume.
      #security:
      #  - bearerAuth: []  # Autenticação JWT requerida
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                empresa:
                  type: string
                  example: "00"
                referencia:
                  type: string
                  example: "2024-10-02"
                hora:
                  type: string
                  example: "00:00"
                volume:
                  type: number
                  example: 0.00
      responses:
        '200':
          description: Dados inseridos com sucesso.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: "success"
                  message:
                    type: string
                    example: "Informações incluídas com sucesso."
        '400':
          description: Parâmetros ausentes ou inválidos.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: "erro"
                  message:
                    type: string
                    example: "Parâmetros ausentes."
        '500':
          description: Erro interno do servidor.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: "erro"
                  message:
                    type: string
                    example: "Erro ao inserir os dados."

  /exportacao/{chaveAcesso}:
    get:
      tags:
        - Nota Fiscal
      summary: Consulta de Nota Fiscal por Chave de Acesso
      description: >
        Endpoint para consultar os detalhes de uma Nota Fiscal com base em sua Chave de Acesso.
        O retorno inclui informações da nota e dos itens associados.
      security:
        - bearerAuth: []  # Autenticação JWT requerida
      parameters:
        - name: chaveAcesso
          in: path
          required: true
          schema:
            type: string
            example: "00000000000000000000000000000000000000000000"
          description: Chave de acesso da Nota Fiscal.
      responses:
        "200":
          description: Sucesso - Detalhes da Nota Fiscal retornados.
          content:
            application/json:
              schema:
                type: object
                properties:
                  nota:
                    type: object
                    properties:
                      num_nf:
                        type: string
                        example: "string"
                      booking:
                        type: string
                        example: "string"
                      processo:
                        type: string
                        example: "string"
                      armador:
                        type: string
                        example: "string"
                      modal:
                        type: string
                        example: "string"
                      moeda:
                        type: string
                        example: "string"
                      ptax:
                        type: number
                        example: 0.00
                      lacre_sif:
                        type: string
                        example: "string"
                      container:
                        type: string
                        example: "string"
                      pais_destino:
                        type: string
                        example: "string"
                      tipo_transporte:
                        type: string
                        example: "string"
                      desc_transporte:
                        type: string
                        example: "string"
                      condicao_venda:
                        type: string
                        example: "string"
                  item:
                    type: array
                    items:
                      type: object
                      properties:
                        cod_item:
                          type: string
                          example: "string"
                        item:
                          type: string
                          example: "string"
                        vlr_item:
                          type: number
                          example: 0.000000
                        vlr_frete:
                          type: number
                          example: 0.00
                        vlr_fob:
                          type: number
                          example: 0.00
                        crf:
                          type: string
                          example: "string"
        "400":
          description: Erro - Chave de Acesso não fornecida ou outros erros.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: "erro"
                  message:
                    type: string
                    example: "Chave de acesso não fornecida."
        "404":
          description: Nota Fiscal não encontrada.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: "erro"
                  message:
                    type: string
                    example: "Nenhum registro encontrado."

  /lotes/{dt_inicial}/{dt_final}:
    get:
      tags:
        - Ororo
      summary: Consulta de lotes de integração por data
      description: >
        Endpoint para consultar informações dos lotes de integração entre as datas fornecidas.
        Retorna detalhes como localização, granja, quantidade abatida e peso total.
      security:
        - bearerAuth: []  # Autenticação JWT requerida
      parameters:
        - name: dt_inicial
          in: path
          required: true
          schema:
            type: string
            format: date
            example: "2024-10-01"
          description: Data inicial para consulta de lotes.
        - name: dt_final
          in: path
          required: true
          schema:
            type: string
            format: date
            example: "2024-10-31"
          description: Data final para consulta de lotes.
      responses:
        '200':
          description: Lotes encontrados.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    LOCAL:
                      type: string
                      example: "Local"
                    GRANJA:
                      type: string
                      example: "Granja"
                    LOTE:
                      type: string
                      example: "1234"
                    DAT_INICIAL_ALOJAMENTO:
                      type: string
                      format: date
                      example: "2024-01-01"
                    DAT_SAIDA:
                      type: string
                      format: date
                      example: "2024-01-10"
                    SEXO:
                      type: string
                      example: "M"
                    ABATIDAS:
                      type: integer
                      example: 100
                    PESO_TOTAL:
                      type: number
                      example: 1234.56
                    LOCAL_ABATE:
                      type: string
                      example: "ABATEDOURO JAGUAPITA"
        '400':
          description: Parâmetros inválidos ou não informados.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: "erro"
                  message:
                    type: string
                    example: "Parâmetros inválidos ou não informados."

  /abate/{dt_abate}/{empresa}:
    get:
      tags:
        - Ororo
      summary: Consulta informações de abate
      description: >
        Endpoint para consultar dados de abate, incluindo quantidade e peso de aves abatidas, peso produzido e tempo total de parada.
      security:
        - bearerAuth: []  # Autenticação JWT requerida
      parameters:
        - name: dt_abate
          in: path
          required: true
          schema:
            type: string
            format: date
            example: "2024-10-02"
          description: Data do abate.
        - name: empresa
          in: path
          required: true
          schema:
            type: string
            example: "00"
          description: Código da empresa.
      responses:
        '200':
          description: Dados de abate retornados.
          content:
            application/json:
              schema:
                type: object
                properties:
                  COD_EMPRESA:
                    type: string
                    example: "00"
                  FILIAL:
                    type: string
                    example: "Filial 1"
                  AVES_ABATIDAS_QTD:
                    type: integer
                    example: 500
                  AVES_ABATIDAS_KG:
                    type: number
                    example: 1200.50
                  PESO_PRODUZIDO:
                    type: number
                    example: 1100.75
                  DATA_ABATE:
                    type: string
                    format: date
                    example: "2024-10-02"
                  TEMPO_TOTAL_PARADA:
                    type: integer
                    example: 15
        '400':
          description: Parâmetros inválidos ou não informados.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: "erro"
                  message:
                    type: string
                    example: "Parâmetros não informados."
  /estoque/baixa-epi:
    post:
      tags:
        - Estoque
      summary: Registrar baixa de EPI
      description: >
        Endpoint para registrar a baixa de EPIs, validando empresa, item, centro de custo e quantidade.
        Retorna mensagem de sucesso ou erro com base nos parâmetros fornecidos.
      security:
        - bearerAuth: []  # Autenticação JWT requerida
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                empresa:
                  type: string
                  example: "01"
                  description: Código da empresa.
                item:
                  type: string
                  example: "EP12345"
                  description: Código do item.
                centro_custo:
                  type: string
                  example: "CC56789"
                  description: Código do centro de custo.
                quantidade:
                  type: integer
                  example: 10
                  description: Quantidade a ser baixada.
      responses:
        '200':
          description: Baixa registrada com sucesso.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: "success"
                  message:
                    type: string
                    example: "Information added successfully."
        '400':
          description: Parâmetros ausentes ou inválidos.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: "erro"
                  message:
                    type: string
                    example: "Invalid company."
        '500':
          description: Erro interno do servidor.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: "erro"
                  message:
                    type: string
                    example: "Erro ao processar a requisição."    
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT