openapi: 3.0.3
info:
  title: eCosif Reports API
  description: |
    API para geração de relatórios contábeis do sistema eCosif.
    
    Este serviço é responsável pela geração de relatórios contábeis em diversos formatos (PDF, CSV, TXT).
    
    ## 📋 Funcionalidades
    
    - **📊 Relatórios Contábeis**: Balancetes, DRE, Balanço Patrimonial
    - **📈 Relatórios Regulatórios**: COSIF, CVM
    - **📄 Relatórios Customizados**: Templates JasperReports
    - **📁 Exportação**: PDF, CSV, TXT
    - **📊 Consultas**: Saldos e lançamentos contábeis
    
    ## 🔐 Autenticação
    
    **IMPORTANTE**: Este serviço requer autenticação JWT.
    
    ### Como obter o token:
    1. Faça login no **ecosif-auth** (porta 8080): `POST /api/auth/signin`
    2. Copie o `accessToken` retornado
    3. Clique no botão **'Authorize'** 🔒 no topo desta página
    4. Digite: `Bearer <seu-token>`
    5. Clique em **'Authorize'**
    6. Agora você pode testar todos os endpoints
  version: 0.7.01.202512011
  contact:
    name: eCosif Team
    email: support@ecosif.net.br
    url: https://www.ecosif.net.br
  license:
    name: Commercial License
    url: https://www.ecosif.net.br/licenses/

servers:
  - url: http://localhost:8084
    description: Servidor de Desenvolvimento
  - url: https://api.ecosig.com.br/reports
    description: Servidor de Produção

tags:
  - name: Relatórios
    description: Geração de relatórios contábeis em diversos formatos
  - name: Saldos
    description: Consultas de saldos contábeis (mensal, diário e por plano)
  - name: Lançamentos Contábeis
    description: Consulta de lançamentos contábeis com filtros e paginação
  - name: Preferências
    description: Gerenciamento de preferências de usuário para relatórios

components:
  securitySchemes:
    bearer-jwt:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: JWT token obtido através do ecosif-auth (porta 8080). Formato: Bearer <token>

  schemas:
    RetornoGenerico:
      type: object
      properties:
        status:
          type: integer
          example: 200
        message:
          type: string
          example: ""
        data:
          type: object
          description: Dados do relatório em base64 ou dados da consulta
    
    ErrorResponse:
      type: object
      properties:
        message:
          type: string
        timestamp:
          type: string
          format: date-time
        status:
          type: integer
        error:
          type: string

security:
  - bearer-jwt: []

paths:
  /reports/monthlyTrialBalance:
    post:
      tags:
        - Relatórios
      summary: Balancete Mensal
      description: Gera balancete de verificação mensal com saldos e movimentações do período
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - codigoEmpresa
                - codigoFilial
                - ano
                - mes
      responses:
        '200':
          description: Balancete mensal gerado com sucesso
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetornoGenerico'
        '401':
          description: Não autenticado
        '500':
          description: Erro ao gerar balancete

  /reports/dailyTrialBalance:
    post:
      tags:
        - Relatórios
      summary: Balancete Diário
      description: Gera balancete de verificação diário com posição dos saldos em uma data específica
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: Balancete diário gerado com sucesso
        '401':
          description: Não autenticado
        '500':
          description: Erro ao gerar balancete

  /api/v1/saldos/plano-saldo:
    get:
      tags:
        - Saldos
      summary: Buscar saldos mensais do plano de contas
      description: Retorna os saldos mensais de todas as contas do plano para uma empresa/filial em um mês específico
      parameters:
        - name: empresa
          in: query
          required: true
          schema:
            type: string
          example: "00001"
        - name: filial
          in: query
          required: true
          schema:
            type: string
          example: "00001"
        - name: ano
          in: query
          required: true
          schema:
            type: integer
          example: 2025
        - name: mes
          in: query
          required: true
          schema:
            type: integer
            minimum: 1
            maximum: 12
          example: 11
        - name: pagina
          in: query
          schema:
            type: integer
            default: 0
        - name: tamanho
          in: query
          schema:
            type: integer
            default: 10
      responses:
        '200':
          description: Saldos encontrados com sucesso
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetornoGenerico'
        '401':
          description: Não autenticado

  /api/v1/lancamentos-contabeis:
    get:
      tags:
        - Lançamentos Contábeis
      summary: Buscar lançamentos contábeis
      description: Retorna uma lista paginada de lançamentos contábeis filtrados por período
      parameters:
        - name: dataInicio
          in: query
          required: true
          schema:
            type: string
            format: date
          example: "2025-01-01"
        - name: dataFim
          in: query
          required: true
          schema:
            type: string
            format: date
          example: "2025-12-31"
        - name: empresa
          in: query
          schema:
            type: string
        - name: filial
          in: query
          schema:
            type: string
        - name: pagina
          in: query
          schema:
            type: integer
            default: 0
        - name: tamanho
          in: query
          schema:
            type: integer
            default: 10
      responses:
        '200':
          description: Lançamentos encontrados com sucesso
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetornoGenerico'
        '400':
          description: Parâmetros inválidos
        '401':
          description: Não autenticado

  /preferencias:
    get:
      tags:
        - Preferências
      summary: Buscar preferências do usuário
      description: Retorna as preferências salvas de um usuário para um relatório específico
      parameters:
        - name: idUsuario
          in: query
          required: true
          schema:
            type: string
        - name: nomeRelatorio
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Preferências encontradas
          content:
            application/json:
              schema:
                type: string
        '401':
          description: Não autenticado

    post:
      tags:
        - Preferências
      summary: Salvar preferências do usuário
      description: Salva ou atualiza as preferências de um usuário para um relatório específico
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: Preferências salvas com sucesso
        '401':
          description: Não autenticado

