openapi: 3.1.0
info:
  title: API CNPJ Alfanumérico
  version: "1.0.0"
  description: >
    Validação, auditoria em lote e geração de CNPJ alfanumérico conforme a
    Instrução Normativa RFB nº 2.229/2024. Algoritmo oficial (manual SERPRO).
    Sem autenticação nesta versão; processamento matemático no edge da Cloudflare.
  license:
    name: Uso livre
servers:
  - url: https://cnpj-alfanumerico-6li.pages.dev
paths:
  /api/v1/validate:
    post:
      summary: Valida um CNPJ
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [cnpj]
              properties:
                cnpj:
                  type: string
                  example: "12.ABC.345/01DE-35"
      responses:
        "200":
          description: Resultado da validação
          content:
            application/json:
              schema:
                type: object
                properties:
                  valid: { type: boolean }
                  formatted: { type: string, example: "12.ABC.345/01DE-35" }
                  isAlphanumeric: { type: boolean }
                  type: { type: string, enum: [alphanumeric, numeric-legacy] }
                  root: { type: string, example: "12ABC345" }
                  order: { type: string, example: "01DE" }
                  checkDigits:
                    type: object
                    properties:
                      provided: { type: string }
                      calculated: { type: string }
    get:
      summary: Valida um CNPJ via query string
      parameters:
        - name: cnpj
          in: query
          required: true
          schema: { type: string }
      responses:
        "200": { description: Resultado da validação }
  /api/v1/validate/batch:
    post:
      summary: Valida até 1.000 CNPJs
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [cnpjs]
              properties:
                cnpjs:
                  type: array
                  items: { type: string }
                  maxItems: 1000
      responses:
        "200":
          description: Resumo agregado + status item a item
          content:
            application/json:
              schema:
                type: object
                properties:
                  total: { type: integer }
                  validos: { type: integer }
                  invalidos: { type: integer }
                  alfanumericos: { type: integer }
                  numericos: { type: integer }
                  results: { type: array, items: { type: object } }
        "413": { description: Mais de 1.000 itens }
  /api/v1/generate:
    get:
      summary: Gera CNPJs válidos para teste
      parameters:
        - name: count
          in: query
          schema: { type: integer, default: 1, maximum: 100 }
        - name: numeric
          in: query
          schema: { type: boolean }
      responses:
        "200": { description: Lista de CNPJs de teste }
  /api/v1/health:
    get:
      summary: Status da API e autoverificação do cálculo
      responses:
        "200": { description: Operacional }
        "503": { description: Cálculo divergente do esperado }
