{
  "info": {
    "_postman_id": "f54f8ed9-1426-43d6-8e57-cffd22321d46",
    "name": "SWMS API",
    "description": "API REST do SWMS para integração com ERPs — upsert de Produtos, Clientes e Fornecedores com a mesma semântica da importação por Excel do Sistema (Categorias, Marcas e Fabricantes são criados automaticamente quando citados).\n\n**Autenticação:** todas as chamadas exigem o cabeçalho `Authorization: {{bearer_token_149p}}`. Gere o token no Sistema em **Administração → Api Tokens** e preencha a variável `token` desta coleção (aba Variables).\n\n**Respostas:**\n- `200` — aplicado, com resumo (novos/atualizados/apoios criados)\n- `400` — erros de validação (nada foi gravado; corpo traz a lista `erros`)\n- `401` — token ausente, inválido ou revogado\n- `422` — falha ao aplicar (corpo traz `erro`)\n\n**Semântica de upsert:** produto casado pelo `codigo`; unidade por `codigoProduto`+`unidade`; cliente/fornecedor pelo CNPJ/CPF (dígitos) com fallback pelo `titulo`. Reenviar o mesmo corpo é seguro: vira atualização. Campo `linha` é opcional (default = posição do item na lista, usado nas mensagens de erro).",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "_exporter_id": "12376158",
    "_collection_link": "https://go.postman.co/collection/12376158-f54f8ed9-1426-43d6-8e57-cffd22321d46?source=collection_link"
  },
  "item": [
    {
      "name": "Raiz (público — identificação do serviço)",
      "request": {
        "auth": {
          "type": "noauth"
        },
        "method": "GET",
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            ""
          ]
        },
        "description": "Endpoint público: identifica o serviço e lista os endpoints disponíveis. Não exige token."
      },
      "response": []
    },
    {
      "name": "Produtos — Importar (upsert)",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n    \"produtos\": [\n        {\n            \"codigo\": \"ERP-00001\",\n            \"titulo\": \"Arroz Branco Tipo 1 5kg\",\n            \"descricao\": \"Fardo com 6 pacotes de 5kg\",\n            \"categoria\": \"Alimentos\",\n            \"marca\": \"Boa Safra\",\n            \"fabricante\": \"Boa Safra Alimentos SA\",\n            \"codigoBarras\": \"7891234567895\",\n            \"ncm\": \"10063021\",\n            \"cest\": \"1704300\",\n            \"pesoLiquido\": 5.0,\n            \"pesoBruto\": 5.1,\n            \"altura\": 12,\n            \"largura\": 25,\n            \"comprimento\": 35,\n            \"controleLote\": true,\n            \"controleValidade\": true,\n            \"diasMinimosValidade\": 90,\n            \"pesoVariavel\": false,\n            \"rotacao\": \"FEFO\",\n            \"permiteFracionamento\": true,\n            \"ativo\": true\n        }\n    ],\n    \"unidades\": [\n        {\n            \"codigoProduto\": \"ERP-00001\",\n            \"unidade\": \"UN\",\n            \"unidadeBase\": true,\n            \"fator\": 1,\n            \"descricao\": \"Pacote 5kg\",\n            \"codigoBarras\": \"7891234567895\",\n            \"picking\": true,\n            \"recebimento\": true,\n            \"expedicao\": true,\n            \"ativo\": true\n        },\n        {\n            \"codigoProduto\": \"ERP-00001\",\n            \"unidade\": \"CX\",\n            \"unidadeBase\": false,\n            \"fator\": 6,\n            \"descricao\": \"Fardo com 6 pacotes\",\n            \"codigoBarras\": \"17891234567892\",\n            \"picking\": false,\n            \"recebimento\": true,\n            \"expedicao\": true,\n            \"ativo\": true\n        }\n    ]\n}"
        },
        "url": {
          "raw": "{{baseUrl}}/v1/produtos/importar",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "v1",
            "produtos",
            "importar"
          ]
        },
        "description": "Upsert de produtos e unidades. Produto casado pelo `codigo`; unidade por `codigoProduto`+`unidade` (UN, CX, FD ou PAL). `categoria`, `marca` e `fabricante` são resolvidos por título — inexistentes são criados automaticamente; **vazio limpa a associação**. `rotacao`: FIFO, FEFO ou LIFO. Validação tudo-ou-nada: qualquer erro em qualquer item impede a gravação de todos."
      },
      "response": []
    },
    {
      "name": "Clientes — Importar (upsert)",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "[\n    {\n        \"titulo\": \"Supermercado Central Ltda\",\n        \"tipo\": \"PJ\",\n        \"cnpj\": \"12345678000195\",\n        \"razaoSocial\": \"Supermercado Central Ltda\",\n        \"nomeFantasia\": \"Central Supermercados\",\n        \"inscricaoEstadual\": \"123456789\",\n        \"telefoneComercial\": \"4133334444\",\n        \"celular\": \"41999998888\",\n        \"email\": \"compras@central.com.br\",\n        \"cep\": \"80010000\",\n        \"endereco\": \"Rua das Flores\",\n        \"numero\": \"1500\",\n        \"bairro\": \"Centro\",\n        \"cidade\": \"Curitiba\",\n        \"estado\": \"PR\",\n        \"ativo\": true\n    },\n    {\n        \"titulo\": \"Maria da Silva\",\n        \"tipo\": \"PF\",\n        \"cpf\": \"12345678909\",\n        \"nomeCompleto\": \"Maria da Silva\",\n        \"dataNascimento\": \"1985-03-20\",\n        \"sexo\": \"Feminino\",\n        \"celular\": \"41988887777\",\n        \"email\": \"maria.silva@email.com\",\n        \"ativo\": true\n    }\n]"
        },
        "url": {
          "raw": "{{baseUrl}}/v1/clientes/importar",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "v1",
            "clientes",
            "importar"
          ]
        },
        "description": "Upsert de clientes (array). Casamento pelo CNPJ/CPF (somente dígitos ou formatado — tanto faz), com fallback pelo `titulo`. `tipo` (PF/PJ) é deduzido do documento quando omitido. `sexo`: Masculino/Feminino (ou M/F)."
      },
      "response": []
    },
    {
      "name": "Fornecedores — Importar (upsert)",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "[\n    {\n        \"titulo\": \"Boa Safra Alimentos SA\",\n        \"tipo\": \"PJ\",\n        \"cnpj\": \"98765432000110\",\n        \"razaoSocial\": \"Boa Safra Alimentos SA\",\n        \"nomeFantasia\": \"Boa Safra\",\n        \"telefoneComercial\": \"1144445555\",\n        \"email\": \"vendas@boasafra.com.br\",\n        \"cep\": \"01310100\",\n        \"endereco\": \"Avenida Paulista\",\n        \"numero\": \"1000\",\n        \"bairro\": \"Bela Vista\",\n        \"cidade\": \"São Paulo\",\n        \"estado\": \"SP\",\n        \"ativo\": true\n    }\n]"
        },
        "url": {
          "raw": "{{baseUrl}}/v1/fornecedores/importar",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "v1",
            "fornecedores",
            "importar"
          ]
        },
        "description": "Upsert de fornecedores (array). Mesma semântica dos clientes: casamento pelo CNPJ/CPF com fallback pelo título."
      },
      "response": []
    },
    {
      "name": "Teste 401 — sem token",
      "request": {
        "auth": {
          "type": "noauth"
        },
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "[]"
        },
        "url": {
          "raw": "{{baseUrl}}/v1/clientes/importar",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "v1",
            "clientes",
            "importar"
          ]
        },
        "description": "Deve retornar 401 com a mensagem orientando o uso do Bearer token."
      },
      "response": []
    },
    {
      "name": "Teste 400 — validação (CNPJ inválido)",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "[\n    {\n        \"titulo\": \"Cliente com CNPJ errado\",\n        \"cnpj\": \"123\"\n    }\n]"
        },
        "url": {
          "raw": "{{baseUrl}}/v1/clientes/importar",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "v1",
            "clientes",
            "importar"
          ]
        },
        "description": "Deve retornar 400 com a lista de erros (CNPJ com menos de 14 dígitos). Nada é gravado."
      },
      "response": []
    }
  ],
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{token}}",
        "type": "string"
      }
    ]
  },
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "packages": {},
        "requests": {},
        "exec": [
          ""
        ]
      }
    },
    {
      "listen": "test",
      "script": {
        "type": "text/javascript",
        "packages": {},
        "requests": {},
        "exec": [
          ""
        ]
      }
    }
  ],
  "variable": [
    {
      "key": "baseUrl",
      "value": "http://localhost:5201"
    },
    {
      "key": "token",
      "value": "COLE_AQUI_O_TOKEN_GERADO_EM_ADMINISTRACAO_API_TOKENS"
    }
  ]
}