openapi: 3.0.3
info:
  title: CNAE (Catálogo IBGE)
  version: v1.0.0
  description: |
    Endpoints para navegar na árvore CNAE (Seções → Divisões → Grupos → Classes → Subclasses).
servers:
  - url: /adm/api
tags:
  - name: Cnae
    description: Navegação no catálogo CNAE

paths:
  /Cnae/secoes:
    post:
      tags: [Cnae]
      summary: Listar seções CNAE
      description: Retorna todas as seções CNAE cadastradas.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CnaeResponseSecoes"

  /Cnae/divisoes:
    post:
      tags: [Cnae]
      summary: Listar divisões por seção
      description: |
        Retorna divisões CNAE filtradas por uma ou mais seções.
        Use pipe para múltiplas seções (ex: "A|B|C").
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                secao:
                  type: string
                  description: "ID da seção (ou vários separados por |). Ex: A ou A|B"
                  example: "A|B"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CnaeResponseDivisoes"

  /Cnae/grupos:
    post:
      tags: [Cnae]
      summary: Listar grupos por divisão
      description: |
        Retorna grupos CNAE filtrados por uma ou mais divisões.
        Use pipe para múltiplas divisões (ex: "01|02").
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                divisao:
                  type: string
                  description: "ID da divisão (ou vários separados por |). Ex: 01 ou 01|02"
                  example: "01|02"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CnaeResponseGrupos"

  /Cnae/classes:
    post:
      tags: [Cnae]
      summary: Listar classes por grupo
      description: |
        Retorna classes CNAE filtradas por um ou mais grupos.
        Use pipe para múltiplos grupos (ex: "011|012").
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                grupo:
                  type: string
                  description: "ID do grupo (ou vários separados por |). Ex: 011 ou 011|012"
                  example: "011|012"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CnaeResponseClasses"

  /Cnae/subclasses:
    post:
      tags: [Cnae]
      summary: Listar subclasses por classe
      description: |
        Retorna subclasses CNAE filtradas por uma ou mais classes.
        Use pipe para múltiplas classes (ex: "01113|01121").
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                classe:
                  type: string
                  description: "ID da classe (ou vários separados por |). Ex: 01113 ou 01113|01121"
                  example: "01113|01121"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CnaeResponseSubclasses"

components:
  schemas:
    ApiOk:
      type: object
      properties:
        __status:
          type: integer
          example: 200
        ok:
          type: integer
          example: 1

    CnaeSecao:
      type: object
      properties:
        id:
          type: string
          example: "A"
        descricao:
          type: string
          example: "AGRICULTURA, PECUÁRIA, PRODUÇÃO FLORESTAL, PESCA E AQUICULTURA"
      required: [id, descricao]

    CnaeDivisao:
      type: object
      properties:
        id:
          type: string
          example: "01"
        descricao:
          type: string
          example: "Agricultura, pecuária e serviços relacionados"
        secao_id:
          type: string
          example: "A"
      required: [id, descricao, secao_id]

    CnaeGrupo:
      type: object
      properties:
        id:
          type: string
          example: "011"
        descricao:
          type: string
          example: "Produção de lavouras temporárias"
        divisao_id:
          type: string
          example: "01"
      required: [id, descricao, divisao_id]

    CnaeClasse:
      type: object
      properties:
        id:
          type: string
          example: "01113"
        descricao:
          type: string
          example: "Cultivo de cereais"
        grupo_id:
          type: string
          example: "011"
      required: [id, descricao, grupo_id]

    CnaeSubclasse:
      type: object
      properties:
        id:
          type: string
          example: "0111301"
        descricao:
          type: string
          example: "Cultivo de arroz"
        classe_id:
          type: string
          example: "01113"
      required: [id, descricao, classe_id]

    CnaeResponseSecoes:
      allOf:
        - $ref: "#/components/schemas/ApiOk"
        - type: object
          properties:
            data:
              type: array
              items:
                $ref: "#/components/schemas/CnaeSecao"

    CnaeResponseDivisoes:
      allOf:
        - $ref: "#/components/schemas/ApiOk"
        - type: object
          properties:
            data:
              type: array
              items:
                $ref: "#/components/schemas/CnaeDivisao"

    CnaeResponseGrupos:
      allOf:
        - $ref: "#/components/schemas/ApiOk"
        - type: object
          properties:
            data:
              type: array
              items:
                $ref: "#/components/schemas/CnaeGrupo"

    CnaeResponseClasses:
      allOf:
        - $ref: "#/components/schemas/ApiOk"
        - type: object
          properties:
            data:
              type: array
              items:
                $ref: "#/components/schemas/CnaeClasse"

    CnaeResponseSubclasses:
      allOf:
        - $ref: "#/components/schemas/ApiOk"
        - type: object
          properties:
            data:
              type: array
              items:
                $ref: "#/components/schemas/CnaeSubclasse"