{
    "openapi": "3.0.3",
    "info": {
        "title": "API Autopeças — CRM",
        "version": "1.0.0",
        "description": "Acesso externo ao módulo Autopeças (peças com grade de medida e lado, estoque e movimentações, fornecedores e compras, vendas do PDV, clientes, linhas e promoções, indicadores e performance por canal).\n\nAutenticação: chave de API da empresa (Configurações › API) no cabeçalho `Authorization: Bearer <chave>` ou `X-Api-Key`. Limite: 300 requisições/min. A peça é o mesmo cadastro do catálogo do CRM (products); `niche_revision` é o controle de concorrência."
    },
    "servers": [
        {
            "url": "/api/v1/autopecas"
        }
    ],
    "components": {
        "securitySchemes": {
            "ApiKey": {
                "type": "http",
                "scheme": "bearer"
            }
        }
    },
    "security": [
        {
            "ApiKey": []
        }
    ],
    "paths": {
        "/pieces": {
            "get": {
                "summary": "Listar peças (paginado)",
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Nome, código, categoria ou característica",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "description": "ativo|inativo|baixo|zerado|sem_foto|sem_preco|promo|vitrine|sem_grade",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "tipo",
                        "in": "query",
                        "description": "Tipo de peça",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "lado",
                        "in": "query",
                        "description": "",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "linha",
                        "in": "query",
                        "description": "",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "marca",
                        "in": "query",
                        "description": "",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "category",
                        "in": "query",
                        "description": "",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "size",
                        "in": "query",
                        "description": "Medida na variação",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "color",
                        "in": "query",
                        "description": "Lado na variação",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "supplier",
                        "in": "query",
                        "description": "Fornecedor",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "recente|preco_asc|preco_desc|estoque|nome|vendidos",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "Máx. 60",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Página de peças",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "items": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object"
                                                    }
                                                },
                                                "total": {
                                                    "type": "integer"
                                                },
                                                "page": {
                                                    "type": "integer"
                                                },
                                                "pages": {
                                                    "type": "integer"
                                                },
                                                "summary": {
                                                    "type": "object"
                                                },
                                                "facets": {
                                                    "type": "object"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "summary": "Cadastrar peça",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string"
                                    },
                                    "price": {
                                        "type": "number"
                                    },
                                    "promo_price": {
                                        "type": "number"
                                    },
                                    "cost_price": {
                                        "type": "number"
                                    },
                                    "sku": {
                                        "type": "string"
                                    },
                                    "category": {
                                        "type": "string"
                                    },
                                    "product_url": {
                                        "type": "string"
                                    },
                                    "description": {
                                        "type": "string"
                                    },
                                    "internal_notes": {
                                        "type": "string"
                                    },
                                    "min_stock": {
                                        "type": "number"
                                    },
                                    "track_stock": {
                                        "type": "boolean"
                                    },
                                    "stock_quantity": {
                                        "type": "number",
                                        "description": "Só na criação (saldo inicial, peça sem variações)"
                                    },
                                    "media_items": {
                                        "type": "array",
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "url": {
                                                    "type": "string"
                                                },
                                                "type": {
                                                    "type": "string",
                                                    "enum": [
                                                        "image",
                                                        "video"
                                                    ]
                                                }
                                            }
                                        }
                                    },
                                    "attrs": {
                                        "type": "object",
                                        "properties": {
                                            "tipo_peca": {
                                                "type": "string",
                                                "description": "Tipo de peça"
                                            },
                                            "marca": {
                                                "type": "string",
                                                "description": "Marca"
                                            },
                                            "aplicacao": {
                                                "type": "string",
                                                "description": "Aplicação / veículos compatíveis"
                                            },
                                            "codigo": {
                                                "type": "string",
                                                "description": "Código da peça"
                                            },
                                            "lado": {
                                                "type": "string",
                                                "description": "Lado"
                                            },
                                            "medida": {
                                                "type": "string",
                                                "description": "Medida"
                                            },
                                            "viscosidade": {
                                                "type": "string",
                                                "description": "Viscosidade"
                                            },
                                            "amperagem": {
                                                "type": "string",
                                                "description": "Amperagem"
                                            },
                                            "fornecedor_id": {
                                                "type": "string",
                                                "description": "Fornecedor"
                                            },
                                            "ncm": {
                                                "type": "string",
                                                "description": "NCM"
                                            },
                                            "referencia": {
                                                "type": "string",
                                                "description": "Referência do fornecedor"
                                            },
                                            "codigo_original": {
                                                "type": "string",
                                                "description": "Código original (OEM)"
                                            },
                                            "similares": {
                                                "type": "string",
                                                "description": "Códigos similares / equivalentes"
                                            },
                                            "aplicacoes": {
                                                "type": "string",
                                                "description": "Aplicações (veículos compatíveis)"
                                            },
                                            "linha": {
                                                "type": "string",
                                                "description": "Linha de produto"
                                            },
                                            "garantia": {
                                                "type": "string",
                                                "description": "Garantia"
                                            },
                                            "unidade": {
                                                "type": "string",
                                                "description": "Unidade de venda"
                                            },
                                            "localizacao": {
                                                "type": "string",
                                                "description": "Localização no estoque"
                                            },
                                            "destaques": {
                                                "type": "array",
                                                "items": {
                                                    "type": "string"
                                                },
                                                "description": "Destaques"
                                            },
                                            "medidas": {
                                                "type": "array",
                                                "items": {
                                                    "type": "string"
                                                },
                                                "description": "Medidas das variações"
                                            },
                                            "lados": {
                                                "type": "array",
                                                "items": {
                                                    "type": "string"
                                                },
                                                "description": "Lados das variações"
                                            },
                                            "codigo_barras": {
                                                "type": "string",
                                                "description": "Código de barras"
                                            }
                                        },
                                        "description": "Características (tipo_peca, marca, aplicacao, codigo, lado, medida, viscosidade, amperagem + extras: codigo_original, similares, aplicacoes, linha, garantia, unidade, localizacao…)"
                                    },
                                    "is_active": {
                                        "type": "boolean"
                                    },
                                    "published_on_site": {
                                        "type": "boolean"
                                    },
                                    "featured": {
                                        "type": "boolean"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Ficha da peça",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/pieces/{id}": {
            "get": {
                "summary": "Ficha da peça (grade, movimentações, vendas, compras, histórico)",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Identificador (UUID)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ficha",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "summary": "Atualizar peça (campos ausentes são mantidos)",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Identificador (UUID)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [],
                                "properties": {
                                    "name": {
                                        "type": "string"
                                    },
                                    "price": {
                                        "type": "number"
                                    },
                                    "promo_price": {
                                        "type": "number"
                                    },
                                    "cost_price": {
                                        "type": "number"
                                    },
                                    "sku": {
                                        "type": "string"
                                    },
                                    "category": {
                                        "type": "string"
                                    },
                                    "product_url": {
                                        "type": "string"
                                    },
                                    "description": {
                                        "type": "string"
                                    },
                                    "internal_notes": {
                                        "type": "string"
                                    },
                                    "min_stock": {
                                        "type": "number"
                                    },
                                    "track_stock": {
                                        "type": "boolean"
                                    },
                                    "stock_quantity": {
                                        "type": "number",
                                        "description": "Só na criação (saldo inicial, peça sem variações)"
                                    },
                                    "media_items": {
                                        "type": "array",
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "url": {
                                                    "type": "string"
                                                },
                                                "type": {
                                                    "type": "string",
                                                    "enum": [
                                                        "image",
                                                        "video"
                                                    ]
                                                }
                                            }
                                        }
                                    },
                                    "attrs": {
                                        "type": "object",
                                        "properties": {
                                            "tipo_peca": {
                                                "type": "string",
                                                "description": "Tipo de peça"
                                            },
                                            "marca": {
                                                "type": "string",
                                                "description": "Marca"
                                            },
                                            "aplicacao": {
                                                "type": "string",
                                                "description": "Aplicação / veículos compatíveis"
                                            },
                                            "codigo": {
                                                "type": "string",
                                                "description": "Código da peça"
                                            },
                                            "lado": {
                                                "type": "string",
                                                "description": "Lado"
                                            },
                                            "medida": {
                                                "type": "string",
                                                "description": "Medida"
                                            },
                                            "viscosidade": {
                                                "type": "string",
                                                "description": "Viscosidade"
                                            },
                                            "amperagem": {
                                                "type": "string",
                                                "description": "Amperagem"
                                            },
                                            "fornecedor_id": {
                                                "type": "string",
                                                "description": "Fornecedor"
                                            },
                                            "ncm": {
                                                "type": "string",
                                                "description": "NCM"
                                            },
                                            "referencia": {
                                                "type": "string",
                                                "description": "Referência do fornecedor"
                                            },
                                            "codigo_original": {
                                                "type": "string",
                                                "description": "Código original (OEM)"
                                            },
                                            "similares": {
                                                "type": "string",
                                                "description": "Códigos similares / equivalentes"
                                            },
                                            "aplicacoes": {
                                                "type": "string",
                                                "description": "Aplicações (veículos compatíveis)"
                                            },
                                            "linha": {
                                                "type": "string",
                                                "description": "Linha de produto"
                                            },
                                            "garantia": {
                                                "type": "string",
                                                "description": "Garantia"
                                            },
                                            "unidade": {
                                                "type": "string",
                                                "description": "Unidade de venda"
                                            },
                                            "localizacao": {
                                                "type": "string",
                                                "description": "Localização no estoque"
                                            },
                                            "destaques": {
                                                "type": "array",
                                                "items": {
                                                    "type": "string"
                                                },
                                                "description": "Destaques"
                                            },
                                            "medidas": {
                                                "type": "array",
                                                "items": {
                                                    "type": "string"
                                                },
                                                "description": "Medidas das variações"
                                            },
                                            "lados": {
                                                "type": "array",
                                                "items": {
                                                    "type": "string"
                                                },
                                                "description": "Lados das variações"
                                            },
                                            "codigo_barras": {
                                                "type": "string",
                                                "description": "Código de barras"
                                            }
                                        },
                                        "description": "Características (tipo_peca, marca, aplicacao, codigo, lado, medida, viscosidade, amperagem + extras: codigo_original, similares, aplicacoes, linha, garantia, unidade, localizacao…)"
                                    },
                                    "is_active": {
                                        "type": "boolean"
                                    },
                                    "published_on_site": {
                                        "type": "boolean"
                                    },
                                    "featured": {
                                        "type": "boolean"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Ficha",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "summary": "Excluir peça (bloqueado se tiver vendas, negócios ou cobranças)",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Identificador (UUID)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Resultado",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/pieces/{id}/variants": {
            "get": {
                "summary": "Grade da peça",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Identificador (UUID)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Variações",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "object"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "summary": "Salvar a grade completa",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Identificador (UUID)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "variants"
                                ],
                                "properties": {
                                    "variants": {
                                        "type": "array",
                                        "description": "Grade completa (linhas ausentes não podem ser removidas: desative com active=false)",
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "id": {
                                                    "type": "string",
                                                    "format": "uuid"
                                                },
                                                "label": {
                                                    "type": "string"
                                                },
                                                "size": {
                                                    "type": "string"
                                                },
                                                "color": {
                                                    "type": "string"
                                                },
                                                "sku": {
                                                    "type": "string"
                                                },
                                                "price": {
                                                    "type": "number"
                                                },
                                                "promo_price": {
                                                    "type": "number"
                                                },
                                                "stock": {
                                                    "type": "number"
                                                },
                                                "image_url": {
                                                    "type": "string"
                                                },
                                                "active": {
                                                    "type": "boolean"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Ficha",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/pieces/{id}/grid": {
            "post": {
                "summary": "Gerar variações medidas × lados (mantém variações existentes)",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Identificador (UUID)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [],
                                "properties": {
                                    "sizes": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        }
                                    },
                                    "colors": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        }
                                    },
                                    "stock": {
                                        "type": "number"
                                    },
                                    "sku_base": {
                                        "type": "string"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Ficha",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/pieces/{id}/stock": {
            "post": {
                "summary": "Movimentar estoque (peça ou variação)",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Identificador (UUID)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "type",
                                    "quantity",
                                    "reason"
                                ],
                                "properties": {
                                    "type": {
                                        "type": "string",
                                        "enum": [
                                            "entrada",
                                            "saida",
                                            "ajuste"
                                        ]
                                    },
                                    "quantity": {
                                        "type": "number"
                                    },
                                    "reason": {
                                        "type": "string"
                                    },
                                    "variant_id": {
                                        "type": "string",
                                        "format": "uuid"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Ficha",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/pieces/bulk": {
            "post": {
                "summary": "Ação em lote",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "ids",
                                    "bulk"
                                ],
                                "properties": {
                                    "ids": {
                                        "type": "array",
                                        "items": {
                                            "type": "string",
                                            "format": "uuid"
                                        }
                                    },
                                    "bulk": {
                                        "type": "string",
                                        "enum": [
                                            "ativar",
                                            "desativar",
                                            "vitrine_on",
                                            "vitrine_off",
                                            "linha",
                                            "promo",
                                            "promo_off",
                                            "categoria",
                                            "estoque_minimo"
                                        ]
                                    },
                                    "value": {
                                        "type": "string"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Resultado",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/pieces/adopt": {
            "post": {
                "summary": "Trazer produtos genéricos (Produtos e Serviços) para o módulo: viram peças de autopeças com o mesmo id",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [],
                                "properties": {
                                    "ids": {
                                        "type": "array",
                                        "items": {
                                            "type": "string",
                                            "format": "uuid"
                                        }
                                    },
                                    "all": {
                                        "type": "boolean"
                                    },
                                    "category": {
                                        "type": "string",
                                        "description": "Com all=true, só desta categoria"
                                    },
                                    "tipo_peca": {
                                        "type": "string"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Resultado",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/stock/movements": {
            "get": {
                "summary": "Movimentações de estoque",
                "parameters": [
                    {
                        "name": "product_id",
                        "in": "query",
                        "description": "",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "type",
                        "in": "query",
                        "description": "entrada|saida|ajuste",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "days",
                        "in": "query",
                        "description": "Últimos N dias",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "Máx. 300",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Movimentações",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "object"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/stock/low": {
            "get": {
                "summary": "Peças com estoque baixo ou grade zerada",
                "responses": {
                    "200": {
                        "description": "Peças",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "object"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/suppliers": {
            "get": {
                "summary": "Fornecedores",
                "parameters": [
                    {
                        "name": "active",
                        "in": "query",
                        "description": "1 só ativos",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Fornecedores",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "object"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "summary": "Cadastrar fornecedor",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string"
                                    },
                                    "cnpj": {
                                        "type": "string"
                                    },
                                    "contact_name": {
                                        "type": "string"
                                    },
                                    "phone": {
                                        "type": "string"
                                    },
                                    "email": {
                                        "type": "string"
                                    },
                                    "city": {
                                        "type": "string"
                                    },
                                    "uf": {
                                        "type": "string"
                                    },
                                    "lead_days": {
                                        "type": "integer"
                                    },
                                    "payment_terms": {
                                        "type": "string"
                                    },
                                    "notes": {
                                        "type": "string"
                                    },
                                    "active": {
                                        "type": "boolean"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Fornecedor",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/suppliers/{id}": {
            "put": {
                "summary": "Alterar fornecedor",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Identificador (UUID)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [],
                                "properties": {
                                    "name": {
                                        "type": "string"
                                    },
                                    "active": {
                                        "type": "boolean"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Fornecedor",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/purchases": {
            "get": {
                "summary": "Compras",
                "parameters": [
                    {
                        "name": "status",
                        "in": "query",
                        "description": "rascunho|pedido|recebido|cancelado|abertas|a_pagar",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "supplier",
                        "in": "query",
                        "description": "",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Compras",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "object"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "summary": "Criar compra (rascunho ou pedido)",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [],
                                "properties": {
                                    "supplier_id": {
                                        "type": "string",
                                        "format": "uuid"
                                    },
                                    "status": {
                                        "type": "string",
                                        "enum": [
                                            "rascunho",
                                            "pedido"
                                        ]
                                    },
                                    "order_date": {
                                        "type": "string",
                                        "format": "date"
                                    },
                                    "expected_date": {
                                        "type": "string",
                                        "format": "date"
                                    },
                                    "invoice_number": {
                                        "type": "string"
                                    },
                                    "freight": {
                                        "type": "number"
                                    },
                                    "discount": {
                                        "type": "number"
                                    },
                                    "due_date": {
                                        "type": "string",
                                        "format": "date"
                                    },
                                    "notes": {
                                        "type": "string"
                                    },
                                    "items": {
                                        "type": "array",
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "product_id": {
                                                    "type": "string",
                                                    "format": "uuid"
                                                },
                                                "variant_id": {
                                                    "type": "string",
                                                    "format": "uuid"
                                                },
                                                "description": {
                                                    "type": "string"
                                                },
                                                "quantity": {
                                                    "type": "number"
                                                },
                                                "unit_cost": {
                                                    "type": "number"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Compra",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/purchases/{id}": {
            "get": {
                "summary": "Compra com itens",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Identificador (UUID)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Compra",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "summary": "Alterar compra (só rascunho/pedido)",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Identificador (UUID)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [],
                                "properties": {
                                    "supplier_id": {
                                        "type": "string",
                                        "format": "uuid"
                                    },
                                    "status": {
                                        "type": "string",
                                        "enum": [
                                            "rascunho",
                                            "pedido"
                                        ]
                                    },
                                    "order_date": {
                                        "type": "string",
                                        "format": "date"
                                    },
                                    "expected_date": {
                                        "type": "string",
                                        "format": "date"
                                    },
                                    "invoice_number": {
                                        "type": "string"
                                    },
                                    "freight": {
                                        "type": "number"
                                    },
                                    "discount": {
                                        "type": "number"
                                    },
                                    "due_date": {
                                        "type": "string",
                                        "format": "date"
                                    },
                                    "notes": {
                                        "type": "string"
                                    },
                                    "items": {
                                        "type": "array",
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "product_id": {
                                                    "type": "string",
                                                    "format": "uuid"
                                                },
                                                "variant_id": {
                                                    "type": "string",
                                                    "format": "uuid"
                                                },
                                                "description": {
                                                    "type": "string"
                                                },
                                                "quantity": {
                                                    "type": "number"
                                                },
                                                "unit_cost": {
                                                    "type": "number"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Compra",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/purchases/{id}/receive": {
            "post": {
                "summary": "Receber: entrada no estoque, custo atualizado, despesa no Caixa",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Identificador (UUID)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [],
                                "properties": {
                                    "invoice_number": {
                                        "type": "string"
                                    },
                                    "paid": {
                                        "type": "boolean"
                                    },
                                    "due_date": {
                                        "type": "string",
                                        "format": "date"
                                    },
                                    "update_cost": {
                                        "type": "boolean"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Compra",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/purchases/{id}/cancel": {
            "post": {
                "summary": "Cancelar compra não recebida",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Identificador (UUID)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [],
                                "properties": {
                                    "reason": {
                                        "type": "string"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Compra",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/sales": {
            "get": {
                "summary": "Vendas do PDV + resumo do mês (por vendedor, forma, mais vendidos, medidas, lados)",
                "parameters": [
                    {
                        "name": "month",
                        "in": "query",
                        "description": "AAAA-MM",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "description": "completed|canceled",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "user_id",
                        "in": "query",
                        "description": "Vendedor",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Cliente, nº ou peça",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Vendas",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/sales/{id}": {
            "get": {
                "summary": "Venda com itens, pagamentos, devoluções e comissão",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Identificador (UUID)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Venda",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/customers": {
            "get": {
                "summary": "Clientes que compraram no PDV (recência, frequência, valor, aplicações)",
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "description": "",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "description": "recente|valor|frequencia|inativos",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Clientes",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "object"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/customers/{id}": {
            "get": {
                "summary": "Cliente com compras e peças",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Identificador (UUID)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Cliente",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/lines": {
            "get": {
                "summary": "Linhas, linhas sem cadastro e peças em promoção",
                "responses": {
                    "200": {
                        "description": "Linhas",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "summary": "Criar/atualizar linha",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string"
                                    },
                                    "season": {
                                        "type": "string"
                                    },
                                    "starts_at": {
                                        "type": "string",
                                        "format": "date"
                                    },
                                    "ends_at": {
                                        "type": "string",
                                        "format": "date"
                                    },
                                    "active": {
                                        "type": "boolean"
                                    },
                                    "notes": {
                                        "type": "string"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Linha",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/lines/promo": {
            "post": {
                "summary": "Promoção da linha inteira (% off) ou remover (pct vazio)",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string"
                                    },
                                    "pct": {
                                        "type": "number"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Resultado",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/dashboard": {
            "get": {
                "summary": "Visão geral (catálogo, estoque, vendas do mês, compras, alertas)",
                "responses": {
                    "200": {
                        "description": "Indicadores",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/reports": {
            "get": {
                "summary": "Relatórios por período",
                "parameters": [
                    {
                        "name": "months",
                        "in": "query",
                        "description": "3 a 24 (padrão 12)",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Relatórios",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/channels/performance": {
            "get": {
                "summary": "Performance por canal (anúncios, leads, ganhos, custo) no mês",
                "parameters": [
                    {
                        "name": "month",
                        "in": "query",
                        "description": "AAAA-MM",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Performance",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}