{
	"info": {
		"_postman_id": "smartpay-api-v6",
		"name": "Smart Pay API v7 — SaaS ",
		"description": "Smart Pay API — Multi-tenant SaaS completo: mesas, delivery, adicionais, comissões e guias turísticos.\n\n## Perfis de acesso\n| Role | Acesso |\n|---|---|\n| `admin` | Total — sem restrições |\n| `partner` | Seu tenant + descendants |\n| `sub_partner` | Igual partner, subárvore |\n| `operator` | Apenas sua system_unit |\n\n## Swagger UI\nAcesse `GET /api/docs` para documentação interativa.\n\n## Como usar\n1. Execute **POST /auth/token** → salva `admin_token`\n2. Execute **POST /operators/login** → salva `operator_token`\n3. Tokens são Bearer e ficam salvos nas variáveis da collection",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"variable": [
		{ "key": "baseUrl", "value": "http://localhost:8000/api" },
		{ "key": "admin_token", "value": "" },
		{ "key": "partner_token", "value": "" },
		{ "key": "operator_token", "value": "" },
		{ "key": "entregador_token", "value": "" },
		{ "key": "public_order_id", "value": "" },
		{ "key": "reservation_id", "value": "" },
		{ "key": "comanda_id", "value": "" },
		{ "key": "delivery_route_id", "value": "" },
		{ "key": "delivery_stop_id", "value": "" },
		{ "key": "parking_pricing_id", "value": "" },
		{ "key": "parking_ticket_id", "value": "" },
		{ "key": "monthly_customer_id", "value": "" },
		{ "key": "sales_order_id", "value": "" },
		{ "key": "pagamento_id", "value": "" },
		{ "key": "ticket_codigo", "value": "" },
		{ "key": "activation_key", "value": "" }
	],
	"auth": {
		"type": "bearer",
		"bearer": [{ "key": "token", "value": "{{admin_token}}", "type": "string" }]
	},
	"item": [
		{
			"name": "1 - Auth",
			"item": [
				{
					"name": "POST /auth/token — Login",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); if(pm.response.code===200){ pm.collectionVariables.set('admin_token',r.access_token); console.log('Role:',r.user.role,'| partner_id:',r.user.partner_id); }"] } }],
					"request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"email\": \"admin@smartpay.com\",\n    \"password\": \"password\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/auth/token", "host": ["{{baseUrl}}"], "path": ["auth","token"] } },
					"response": []
				},
				{
					"name": "POST /auth/register",
					"request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"name\": \"Partner SP\",\n    \"email\": \"partner@sp.com\",\n    \"password\": \"password\",\n    \"password_confirmation\": \"password\",\n    \"role\": \"partner\",\n    \"partner_id\": 2\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/auth/register", "host": ["{{baseUrl}}"], "path": ["auth","register"] } },
					"response": []
				},
				{
					"name": "GET /auth/me",
					"request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/auth/me", "host": ["{{baseUrl}}"], "path": ["auth","me"] } },
					"response": []
				},
				{
					"name": "POST /auth/logout",
					"request": { "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/auth/logout", "host": ["{{baseUrl}}"], "path": ["auth","logout"] } },
					"response": []
				},
				{
					"name": "POST /auth/refresh",
					"request": { "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/auth/refresh", "host": ["{{baseUrl}}"], "path": ["auth","refresh"] } },
					"response": []
				}
			]
		},
		{
			"name": "2 - Operators Auth",
			"item": [
				{
					"name": "POST /operators/login — Login por senha",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); if(pm.response.code===200){ pm.collectionVariables.set('operator_token',r.access_token); console.log('partner_id:',r.operator.partner_id,'| unit:',r.operator.system_unit_id); }"] } }],
					"request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"email\": \"joao@smartpay.com\",\n    \"password\": \"password\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/operators/login", "host": ["{{baseUrl}}"], "path": ["operators","login"] } },
					"response": [{ "name": "200 OK", "code": 200, "body": "{\n  \"access_token\": \"eyJ...\",\n  \"token_type\": \"bearer\",\n  \"expires_in\": 3600,\n  \"operator\": {\n    \"id\": 1,\n    \"role\": \"operator\",\n    \"partner_id\": 1,\n    \"system_unit_id\": 1\n  }\n}" }]
				},
				{
					"name": "POST /operators/login-pin — Login por PIN",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); if(pm.response.code===200){ pm.collectionVariables.set('operator_token',r.access_token); }"] } }],
					"request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"pin\": \"123456\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/operators/login-pin", "host": ["{{baseUrl}}"], "path": ["operators","login-pin"] } },
					"response": [{ "name": "200 OK", "code": 200, "body": "{\n  \"access_token\": \"eyJ...\",\n  \"token_type\": \"bearer\",\n  \"expires_in\": 3600,\n  \"operator\": { \"id\": 1, \"name\": \"Operador João\" }\n}" }]
				},
				{
					"name": "GET /operators/me",
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/operators/me", "host": ["{{baseUrl}}"], "path": ["operators","me"] } },
					"response": []
				},
				{
					"name": "POST /operators/logout",
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/operators/logout", "host": ["{{baseUrl}}"], "path": ["operators","logout"] } },
					"response": []
				}
			]
		},
		{
			"name": "3 - Partners (Multi-Tenant)",
			"description": "Partner vê apenas seu tenant + descendants. Tentativa fora da árvore → 403.",
			"item": [
				{ "name": "GET /partners/tree", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/partners/tree", "host": ["{{baseUrl}}"], "path": ["partners","tree"] } }, "response": [] },
				{ "name": "GET /partners/my/tree", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/partners/my/tree", "host": ["{{baseUrl}}"], "path": ["partners","my","tree"] } }, "response": [] },
				{ "name": "GET /partners", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/partners", "host": ["{{baseUrl}}"], "path": ["partners"] } }, "response": [] },
				{ "name": "POST /partners — Criar sub-partner", "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"name\": \"Filial SP\",\n    \"document\": \"12345678000199\",\n    \"email\": \"sp@smartpay.com\",\n    \"phone\": \"(11) 99999-9999\",\n    \"primary_color\": \"#2563eb\",\n    \"show_in_app\": true,\n    \"parent_id\": 1\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/partners", "host": ["{{baseUrl}}"], "path": ["partners"] } }, "response": [] },
				{ "name": "GET /partners/{id}", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/partners/1", "host": ["{{baseUrl}}"], "path": ["partners","1"] } }, "response": [{ "name": "403 Fora do tenant", "code": 403, "body": "{\n  \"message\": \"Acesso negado a este parceiro\"\n}" }] },
				{ "name": "PUT /partners/{id}", "request": { "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\n    \"name\": \"Filial SP Atualizada\",\n    \"primary_color\": \"#dc2626\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/partners/1", "host": ["{{baseUrl}}"], "path": ["partners","1"] } }, "response": [] },
				{ "name": "DELETE /partners/{id}", "request": { "method": "DELETE", "header": [], "url": { "raw": "{{baseUrl}}/partners/5", "host": ["{{baseUrl}}"], "path": ["partners","5"] } }, "response": [] },
				{ "name": "GET /partners/{id}/descendants", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/partners/1/descendants", "host": ["{{baseUrl}}"], "path": ["partners","1","descendants"] } }, "response": [] },
				{ "name": "PUT /partners/{id}/move", "request": { "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\n    \"new_parent_id\": 1\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/partners/3/move", "host": ["{{baseUrl}}"], "path": ["partners","3","move"] } }, "response": [] }
			]
		},
		{
			"name": "4 - Beneficiaries",
			"description": "Roles: admin, partner, sub_partner. partner_id vem do JWT.",
			"item": [
				{ "name": "GET /beneficiaries", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/beneficiaries", "host": ["{{baseUrl}}"], "path": ["beneficiaries"] } }, "response": [] },
				{ "name": "POST /beneficiaries — Pessoa Física", "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"name\": \"João Silva\",\n    \"document\": \"12345678901\",\n    \"type\": \"individual\",\n    \"phone\": \"(11) 99999-9999\",\n    \"email\": \"joao@email.com\",\n    \"cep\": \"01000-000\",\n    \"logradouro\": \"Rua Teste\",\n    \"numero\": \"123\",\n    \"bairro\": \"Centro\",\n    \"cidade\": \"São Paulo\",\n    \"estado\": \"SP\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/beneficiaries", "host": ["{{baseUrl}}"], "path": ["beneficiaries"] } }, "response": [] },
				{ "name": "POST /beneficiaries — Empresa", "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"name\": \"Empresa Ltda\",\n    \"document\": \"12345678000100\",\n    \"type\": \"company\",\n    \"regime_tributario\": \"ME\",\n    \"inscricao_estadual\": \"123456789\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/beneficiaries", "host": ["{{baseUrl}}"], "path": ["beneficiaries"] } }, "response": [] },
				{ "name": "GET /beneficiaries/{id}", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/beneficiaries/1", "host": ["{{baseUrl}}"], "path": ["beneficiaries","1"] } }, "response": [] },
				{ "name": "PUT /beneficiaries/{id}", "request": { "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\n    \"name\": \"João Atualizado\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/beneficiaries/1", "host": ["{{baseUrl}}"], "path": ["beneficiaries","1"] } }, "response": [] },
				{ "name": "DELETE /beneficiaries/{id}", "request": { "method": "DELETE", "header": [], "url": { "raw": "{{baseUrl}}/beneficiaries/1", "host": ["{{baseUrl}}"], "path": ["beneficiaries","1"] } }, "response": [] }
			]
		},
		{
			"name": "5 - System Units",
			"item": [
				{ "name": "GET /system-units", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/system-units", "host": ["{{baseUrl}}"], "path": ["system-units"] } }, "response": [] },
				{ "name": "POST /system-units", "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"beneficiary_id\": 1,\n    \"name\": \"Unidade Centro\",\n    \"document\": \"12345678000100\",\n    \"phone\": \"(11) 3333-3333\",\n    \"email\": \"centro@smartpay.com\",\n    \"cidade\": \"São Paulo\",\n    \"estado\": \"SP\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/system-units", "host": ["{{baseUrl}}"], "path": ["system-units"] } }, "response": [] },
				{ "name": "GET /system-units/{id}", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/system-units/1", "host": ["{{baseUrl}}"], "path": ["system-units","1"] } }, "response": [] },
				{ "name": "PUT /system-units/{id}", "request": { "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\n    \"name\": \"Unidade Atualizada\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/system-units/1", "host": ["{{baseUrl}}"], "path": ["system-units","1"] } }, "response": [] },
				{ "name": "DELETE /system-units/{id}", "request": { "method": "DELETE", "header": [], "url": { "raw": "{{baseUrl}}/system-units/1", "host": ["{{baseUrl}}"], "path": ["system-units","1"] } }, "response": [] },
				{ "name": "POST /system-units/{id}/modules — Vincular", "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"modulo_id\": 1,\n    \"status\": 1\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/system-units/1/modules", "host": ["{{baseUrl}}"], "path": ["system-units","1","modules"] } }, "response": [] }
			]
		},
		{
			"name": "6 - Machines (Parceiro → Beneficiário)",
			"item": [
				{ "name": "GET /machines", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/machines", "host": ["{{baseUrl}}"], "path": ["machines"] } }, "response": [] },
				{
					"name": "POST /machines — Cadastrar (parceiro + beneficiário)",
					"request": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"beneficiary_id\": 1,\n    \"system_unit_id\": 1,\n    \"name\": \"Terminal 01\",\n    \"serial_number\": \"SN123456\",\n    \"app_password\": \"123456\"\n}",
							"options": { "raw": { "language": "json" } }
						},
						"url": { "raw": "{{baseUrl}}/machines", "host": ["{{baseUrl}}"], "path": ["machines"] }
					},
					"response": [
						{ "name": "201 Criada", "code": 201, "body": "{\n  \"id\": 3,\n  \"name\": \"Terminal 01\",\n  \"codigo_ativacao\": \"ABCD1234\",\n  \"active\": false,\n  \"beneficiary\": { \"id\": 1, \"name\": \"Empresa Demo LTDA\" },\n  \"partner\": { \"id\": 1, \"name\": \"Smart Pay Matriz\" },\n  \"system_unit\": { \"id\": 1, \"name\": \"Loja Centro\" }\n}" },
						{ "name": "403 Beneficiário de outro parceiro", "code": 403, "body": "{\n  \"message\": \"Sem permissão para associar máquina a este beneficiário\"\n}" }
					]
				},
				{ "name": "GET /machines/{id}", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/machines/1", "host": ["{{baseUrl}}"], "path": ["machines","1"] } }, "response": [] },
				{ "name": "PUT /machines/{id}", "request": { "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\n    \"name\": \"Terminal Atualizado\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/machines/1", "host": ["{{baseUrl}}"], "path": ["machines","1"] } }, "response": [] },
				{
					"name": "POST /machines/{id}/revoke — Revogar ativação",
					"request": {
						"method": "POST",
						"header": [],
						"url": { "raw": "{{baseUrl}}/machines/1/revoke", "host": ["{{baseUrl}}"], "path": ["machines","1","revoke"] }
					},
					"response": [
						{ "name": "200 Revogada", "code": 200, "body": "{\n  \"message\": \"Ativação revogada com sucesso\",\n  \"machine\": { \"id\": 1, \"active\": false, \"activation_key\": null }\n}" }
					]
				},
				{ "name": "DELETE /machines/{id} — Remover", "request": { "method": "DELETE", "header": [], "url": { "raw": "{{baseUrl}}/machines/1", "host": ["{{baseUrl}}"], "path": ["machines","1"] } }, "response": [] }
			]
		},
		{
			"name": "7 - Operators (Admin)",
			"description": "Gestão de operadores. partner_id vem do JWT. commission_type: none | percentage | fixed",
			"item": [
				{ "name": "GET /operators-admin", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/operators-admin", "host": ["{{baseUrl}}"], "path": ["operators-admin"] } }, "response": [] },
				{
					"name": "POST /operators-admin — Criar com comissão",
					"request": {
						"method": "POST", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"system_unit_id\": 1,\n    \"name\": \"João Operador\",\n    \"email\": \"operador@unidade.com\",\n    \"password\": \"senha123\",\n    \"pin\": \"123456\",\n    \"commission_type\": \"percentage\",\n    \"commission_value\": 5.0\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/operators-admin", "host": ["{{baseUrl}}"], "path": ["operators-admin"] }
					},
					"response": []
				},
				{ "name": "GET /operators-admin/{id}", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/operators-admin/1", "host": ["{{baseUrl}}"], "path": ["operators-admin","1"] } }, "response": [] },
				{ "name": "PUT /operators-admin/{id}", "request": { "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\n    \"name\": \"Atualizado\",\n    \"pin\": \"654321\",\n    \"commission_type\": \"fixed\",\n    \"commission_value\": 10.00,\n    \"active\": true\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/operators-admin/1", "host": ["{{baseUrl}}"], "path": ["operators-admin","1"] } }, "response": [] },
				{ "name": "PUT /operators-admin/{id}/pin — Atualizar PIN", "request": { "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\n    \"pin\": \"123456\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/operators-admin/1/pin", "host": ["{{baseUrl}}"], "path": ["operators-admin","1","pin"] } }, "response": [{ "name": "200 OK", "code": 200, "body": "{\n  \"message\": \"PIN atualizado com sucesso\"\n}" }] },
				{ "name": "DELETE /operators-admin/{id}", "request": { "method": "DELETE", "header": [], "url": { "raw": "{{baseUrl}}/operators-admin/1", "host": ["{{baseUrl}}"], "path": ["operators-admin","1"] } }, "response": [] }
			]
		},
		{
			"name": "8 - Mesas (Tables)",
			"description": "Controle de mesas do restaurante.\n\n**Admin/Partner** → CRUD completo\n**Operator** → GET, open, close, reserve, release\n\nFluxo: `FREE → OCCUPIED` (open) → `FREE` (close)\n`FREE → RESERVED → FREE` (reserve/release)",
			"item": [
				{
					"name": "GET /tables?system_unit_id=1&status=FREE",
					"request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/tables?system_unit_id=1", "host": ["{{baseUrl}}"], "path": ["tables"], "query": [{ "key": "system_unit_id", "value": "1" }, { "key": "status", "value": "FREE", "disabled": true }] } },
					"response": []
				},
				{
					"name": "POST /tables — Criar mesa",
					"request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"system_unit_id\": 1,\n    \"number\": \"01\",\n    \"name\": \"Mesa da Janela\",\n    \"capacity\": 4\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/tables", "host": ["{{baseUrl}}"], "path": ["tables"] } },
					"response": []
				},
				{ "name": "GET /tables/{id}", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/tables/1", "host": ["{{baseUrl}}"], "path": ["tables","1"] } }, "response": [] },
				{ "name": "PUT /tables/{id}", "request": { "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\n    \"name\": \"Mesa VIP\",\n    \"capacity\": 6\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/tables/1", "host": ["{{baseUrl}}"], "path": ["tables","1"] } }, "response": [] },
				{ "name": "DELETE /tables/{id}", "request": { "method": "DELETE", "header": [], "url": { "raw": "{{baseUrl}}/tables/1", "host": ["{{baseUrl}}"], "path": ["tables","1"] } }, "response": [] },
				{
					"name": "POST /tables/{id}/open — Abrir mesa (Operator)",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"pessoa_id\": null\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/tables/1/open", "host": ["{{baseUrl}}"], "path": ["tables","1","open"] }
					},
					"response": [{ "name": "201 Created", "code": 201, "body": "{\n  \"message\": \"Mesa aberta\",\n  \"table\": { \"id\": 1, \"status\": \"OCCUPIED\", \"current_order_id\": 42 },\n  \"order\": { \"id\": 42, \"type\": \"TABLE\", \"status\": \"draft\" }\n}" }]
				},
				{
					"name": "POST /tables/{id}/close — Fechar mesa (Operator)",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST", "header": [],
						"url": { "raw": "{{baseUrl}}/tables/1/close", "host": ["{{baseUrl}}"], "path": ["tables","1","close"] }
					},
					"response": [{ "name": "200 OK", "code": 200, "body": "{\n  \"message\": \"Mesa fechada e pedido encerrado\",\n  \"table\": { \"status\": \"FREE\" },\n  \"order\": { \"status\": \"closed\", \"total\": 125.90, \"operator_commission\": { \"amount\": 6.30 } }\n}" }]
				},
				{
					"name": "POST /tables/{id}/reserve",
					"request": { "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/tables/1/reserve", "host": ["{{baseUrl}}"], "path": ["tables","1","reserve"] } },
					"response": []
				},
				{
					"name": "POST /tables/{id}/release",
					"request": { "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/tables/1/release", "host": ["{{baseUrl}}"], "path": ["tables","1","release"] } },
					"response": []
				}
			]
		},
		{
			"name": "9 - Produtos + Adicionais",
			"description": "Produtos com grupos de opções (adicionais).\n\nExemplo: Pizza → Grupo 'Borda' (min:1, max:1, required:true) → Opções: Cheddar +3.00, Catupiry +3.50",
			"item": [
				{ "name": "GET /produtos", "request": { "auth": { "type": "noauth" }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/produtos", "host": ["{{baseUrl}}"], "path": ["produtos"] } }, "response": [] },
				{ "name": "GET /produtos/{id}", "request": { "auth": { "type": "noauth" }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/produtos/1", "host": ["{{baseUrl}}"], "path": ["produtos","1"] } }, "response": [] },
				{
					"name": "POST /produtos — Criar",
					"request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"system_unit_id\": 1,\n    \"categoria_id\": 1,\n    \"nome\": \"Pizza Margherita\",\n    \"preco_venda\": 49.90,\n    \"preco_custo\": 20.00,\n    \"ativo\": true,\n    \"destaque\": true\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/produtos", "host": ["{{baseUrl}}"], "path": ["produtos"] } },
					"response": []
				},
				{
					"name": "GET /produtos/{id}/option-groups",
					"request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/produtos/1/option-groups", "host": ["{{baseUrl}}"], "path": ["produtos","1","option-groups"] } },
					"response": []
				},
				{
					"name": "POST /produtos/{id}/option-groups — Criar grupo",
					"request": {
						"method": "POST", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"name\": \"Escolha a borda\",\n    \"min_select\": 1,\n    \"max_select\": 1,\n    \"required\": true,\n    \"ordem\": 1\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/produtos/1/option-groups", "host": ["{{baseUrl}}"], "path": ["produtos","1","option-groups"] }
					},
					"response": []
				},
			{
				"name": "PUT /beneficiaries/{id} — Atualizar dados básicos",
				"request": { "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\n    \"name\": \"João Atualizado\",\n    \"phone\": \"(11) 98888-8888\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/beneficiaries/1", "host": ["{{baseUrl}}"], "path": ["beneficiaries","1"] } },
				"response": []
			},
			{
				"name": "PUT /beneficiaries/{id} — Config fiscal",
				"request": { "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\n    \"cert_password\": \"senha_certificado\",\n    \"csc\": \"seu_csc\",\n    \"csc_id\": \"seu_csc_id\",\n    \"fiscal_ambiente\": 2\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/beneficiaries/1", "host": ["{{baseUrl}}"], "path": ["beneficiaries","1"] } },
				"response": []
			},
				{
					"name": "DELETE /produtos/{id}/option-groups/{groupId}",
					"request": { "method": "DELETE", "header": [], "url": { "raw": "{{baseUrl}}/produtos/1/option-groups/1", "host": ["{{baseUrl}}"], "path": ["produtos","1","option-groups","1"] } },
					"response": []
				},
				{
					"name": "POST /produtos/{id}/option-groups/{groupId}/options — Criar opção",
					"request": {
						"method": "POST", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"name\": \"Borda de Cheddar\",\n    \"price\": 3.50,\n    \"ordem\": 1\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/produtos/1/option-groups/1/options", "host": ["{{baseUrl}}"], "path": ["produtos","1","option-groups","1","options"] }
					},
					"response": []
				},
				{
					"name": "PUT /produtos/{id}/option-groups/{groupId}/options/{optionId}",
					"request": { "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\n    \"name\": \"Borda Catupiry\",\n    \"price\": 4.00\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/produtos/1/option-groups/1/options/1", "host": ["{{baseUrl}}"], "path": ["produtos","1","option-groups","1","options","1"] } },
					"response": []
				},
				{
					"name": "DELETE /produtos/{id}/option-groups/{groupId}/options/{optionId}",
					"request": { "method": "DELETE", "header": [], "url": { "raw": "{{baseUrl}}/produtos/1/option-groups/1/options/1", "host": ["{{baseUrl}}"], "path": ["produtos","1","option-groups","1","options","1"] } },
					"response": []
				}
			]
		},
		{
			"name": "10 - Sales Orders",
			"description": "Pedidos com tipos: TABLE | COUNTER | DELIVERY\n\nAdicionais são enviados no `options[]` ao adicionar item.",
			"item": [
				{
					"name": "GET /sales-orders (Operator)",
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/sales-orders?status=draft&type=TABLE", "host": ["{{baseUrl}}"], "path": ["sales-orders"], "query": [{ "key": "status", "value": "draft" }, { "key": "type", "value": "TABLE", "disabled": true }] } },
					"response": []
				},
				{
					"name": "1 - POST /sales-orders — Criar pedido (COUNTER)",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Pedido criado',function(){ pm.expect(pm.response.code).to.eql(201); pm.expect(r.status).to.eql('draft'); }); if(pm.response.code===201){ pm.collectionVariables.set('sales_order_id',r.id); console.log('sales_order_id:',r.id,'| numero:',r.numero); }"] } }],
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"type\": \"COUNTER\",\n    \"observacao\": \"Teste via Postman\"\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/sales-orders", "host": ["{{baseUrl}}"], "path": ["sales-orders"] }
					},
					"response": []
				},
				{
					"name": "POST /sales-orders — Delivery",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"type\": \"DELIVERY\",\n    \"referrer_id\": 1,\n    \"service_fee\": 5.00\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/sales-orders", "host": ["{{baseUrl}}"], "path": ["sales-orders"] }
					},
					"response": []
				},
				{ "name": "GET /sales-orders/{id}", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/sales-orders/1", "host": ["{{baseUrl}}"], "path": ["sales-orders","1"] } }, "response": [] },
				{
					"name": "2 - POST /sales-orders/{id}/items — Adicionar itens",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST", "header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"produto_id\": 1,\n    \"quantidade\": 1,\n    \"preco_unitario\": 49.90,\n    \"desconto\": 0,\n    \"options\": [\n        { \"product_option_id\": 1 },\n        { \"product_option_id\": 5 }\n    ]\n}",
							"options": { "raw": { "language": "json" } }
						},
						"url": { "raw": "{{baseUrl}}/sales-orders/1/items", "host": ["{{baseUrl}}"], "path": ["sales-orders","1","items"] }
					},
					"response": [{ "name": "201 Created", "code": 201, "body": "{\n  \"id\": 1,\n  \"items\": [{\n    \"id\": 10,\n    \"nome_produto\": \"Pizza Margherita\",\n    \"preco_unitario\": 49.90,\n    \"total\": 57.40,\n    \"options\": [\n      { \"group_name\": \"Escolha a borda\", \"option_name\": \"Cheddar\", \"price\": 3.50 },\n      { \"group_name\": \"Adicional\", \"option_name\": \"Bacon\", \"price\": 4.00 }\n    ]\n  }]\n}" }]
				},
				{
					"name": "2b - DELETE /sales-orders/{id}/items — Remover item",
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "DELETE", "header": [], "url": { "raw": "{{baseUrl}}/sales-orders/1/items/1", "host": ["{{baseUrl}}"], "path": ["sales-orders","1","items","1"] } },
					"response": []
				},
				{
					"name": "3 - POST /sales-orders/{id}/discount — Taxas e desconto",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"desconto\": 5.00,\n    \"service_fee\": 10.00,\n    \"additional_fees\": 2.00\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/sales-orders/1/discount", "host": ["{{baseUrl}}"], "path": ["sales-orders","1","discount"] }
					},
					"response": []
				},
				{
					"name": "4 - POST /sales-orders/{id}/confirm — Confirmar pedido",
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/sales-orders/{{sales_order_id}}/confirm", "host": ["{{baseUrl}}"], "path": ["sales-orders","1","confirm"] } },
					"response": []
				},
				{
					"name": "5 - POST /sales-orders/{id}/close — Fechar pedido",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST", "header": [],
						"url": { "raw": "{{baseUrl}}/sales-orders/1/close", "host": ["{{baseUrl}}"], "path": ["sales-orders","1","close"] }
					},
					"response": [{ "name": "200 OK", "code": 200, "body": "{\n  \"message\": \"Pedido encerrado com sucesso\",\n  \"order\": {\n    \"status\": \"closed\",\n    \"subtotal\": 57.40,\n    \"service_fee\": 10.00,\n    \"desconto\": 5.00,\n    \"total\": 62.40,\n    \"operator_commission\": { \"amount\": 3.12 },\n    \"referrer_commission\": { \"amount\": 1.87 }\n  }\n}" }]
				},
				{
					"name": "6 - POST /sales-orders/{id}/cancel — Cancelar pedido",
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/sales-orders/1/cancel", "host": ["{{baseUrl}}"], "path": ["sales-orders","1","cancel"] } },
					"response": []
				}
			]
		},
		{
			"name": "11 - Delivery",
			"description": "Delivery com rastreamento de entregador e atualização de status.\n\n**Status flow:** CREATED → CONFIRMED → PREPARING → READY_FOR_PICKUP → OUT_FOR_DELIVERY → DELIVERED",
			"item": [
				{
					"name": "POST /deliveries/estimate — Calcular distância (Público)",
					"request": {
						"auth": { "type": "noauth" },
						"method": "POST", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"origin_lat\": -23.550520,\n    \"origin_lng\": -46.633308,\n    \"destination_lat\": -23.561414,\n    \"destination_lng\": -46.655881\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/deliveries/estimate", "host": ["{{baseUrl}}"], "path": ["deliveries","estimate"] }
					},
					"response": [{ "name": "200 OK", "code": 200, "body": "{\n  \"estimated_distance\": 2.847,\n  \"estimated_delivery_time\": 16\n}" }]
				},
				{
					"name": "POST /deliveries — Criar delivery",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST", "header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"sales_order_id\": 1,\n    \"destination_address\": \"Rua das Flores, 123\",\n    \"destination_reference\": \"Próximo ao mercado\",\n    \"destination_lat\": -23.561414,\n    \"destination_lng\": -46.655881,\n    \"customer_name\": \"Maria Silva\",\n    \"customer_phone\": \"(11) 99999-9999\",\n    \"delivery_fee\": 8.00,\n    \"origin_lat\": -23.550520,\n    \"origin_lng\": -46.633308,\n    \"origin_address\": \"Restaurante Central\",\n    \"delivery_user_id\": 3\n}",
							"options": { "raw": { "language": "json" } }
						},
						"url": { "raw": "{{baseUrl}}/deliveries", "host": ["{{baseUrl}}"], "path": ["deliveries"] }
					},
					"response": [{ "name": "201 Created", "code": 201, "body": "{\n  \"id\": 1,\n  \"status\": \"CREATED\",\n  \"estimated_distance\": 2.847,\n  \"estimated_delivery_time\": 16,\n  \"delivery_fee\": 8.00\n}" }]
				},
				{ "name": "GET /deliveries", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/deliveries?status=OUT_FOR_DELIVERY", "host": ["{{baseUrl}}"], "path": ["deliveries"], "query": [{ "key": "status", "value": "OUT_FOR_DELIVERY" }] } }, "response": [] },
				{ "name": "GET /deliveries/{id}", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/deliveries/1", "host": ["{{baseUrl}}"], "path": ["deliveries","1"] } }, "response": [] },
				{
					"name": "PUT /deliveries/{id}/status — Atualizar status",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "PUT", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"status\": \"OUT_FOR_DELIVERY\",\n    \"delivery_user_id\": 3\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/deliveries/1/status", "host": ["{{baseUrl}}"], "path": ["deliveries","1","status"] }
					},
					"response": [{ "name": "422 — Transição inválida", "code": 422, "body": "{\n  \"message\": \"Transição inválida: CREATED → OUT_FOR_DELIVERY\",\n  \"allowed\": [\"CONFIRMED\", \"CANCELED\"]\n}" }]
				},
				{
					"name": "PUT /deliveries/{id}/location — Rastrear entregador",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "PUT", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"lat\": -23.555000,\n    \"lng\": -46.644000\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/deliveries/1/location", "host": ["{{baseUrl}}"], "path": ["deliveries","1","location"] }
					},
					"response": []
				}
			]
		},
		{
			"name": "12 - Devices (PDV)",
			"description": "Dispositivos físicos: POS, TABLET, KIOSK. Roles: admin, partner, sub_partner.",
			"item": [
				{ "name": "GET /devices", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/devices?type=POS&system_unit_id=1", "host": ["{{baseUrl}}"], "path": ["devices"], "query": [{ "key": "type", "value": "POS", "disabled": true }, { "key": "system_unit_id", "value": "1", "disabled": true }] } }, "response": [] },
				{ "name": "POST /devices — Criar", "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"system_unit_id\": 1,\n    \"name\": \"Caixa 01\",\n    \"type\": \"POS\",\n    \"identifier\": \"POS-001-SP\",\n    \"status\": \"active\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/devices", "host": ["{{baseUrl}}"], "path": ["devices"] } }, "response": [] },
				{ "name": "GET /devices/{id}", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/devices/1", "host": ["{{baseUrl}}"], "path": ["devices","1"] } }, "response": [] },
				{ "name": "PUT /devices/{id}", "request": { "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\n    \"status\": \"blocked\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/devices/1", "host": ["{{baseUrl}}"], "path": ["devices","1"] } }, "response": [] },
				{ "name": "DELETE /devices/{id}", "request": { "method": "DELETE", "header": [], "url": { "raw": "{{baseUrl}}/devices/1", "host": ["{{baseUrl}}"], "path": ["devices","1"] } }, "response": [] }
			]
		},
		{
			"name": "13 - Referrers (Guias Turísticos)",
			"description": "Comissão automática para guias no fechamento do pedido.\n\n`commission_type`: percentage | fixed",
			"item": [
				{ "name": "GET /referrers", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/referrers?active=true", "host": ["{{baseUrl}}"], "path": ["referrers"], "query": [{ "key": "active", "value": "true" }] } }, "response": [] },
				{
					"name": "POST /referrers — Criar guia",
					"request": {
						"method": "POST", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"name\": \"Carlos Guia Turístico\",\n    \"document\": \"12345678901\",\n    \"phone\": \"(11) 99999-0000\",\n    \"email\": \"carlos@guias.com\",\n    \"commission_type\": \"percentage\",\n    \"commission_value\": 3.0\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/referrers", "host": ["{{baseUrl}}"], "path": ["referrers"] }
					},
					"response": []
				},
				{ "name": "GET /referrers/{id}", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/referrers/1", "host": ["{{baseUrl}}"], "path": ["referrers","1"] } }, "response": [] },
				{ "name": "PUT /referrers/{id}", "request": { "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\n    \"commission_value\": 5.0,\n    \"active\": true\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/referrers/1", "host": ["{{baseUrl}}"], "path": ["referrers","1"] } }, "response": [] },
				{ "name": "DELETE /referrers/{id}", "request": { "method": "DELETE", "header": [], "url": { "raw": "{{baseUrl}}/referrers/1", "host": ["{{baseUrl}}"], "path": ["referrers","1"] } }, "response": [] },
				{ "name": "GET /referrers/{id}/commissions — Histórico", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/referrers/1/commissions", "host": ["{{baseUrl}}"], "path": ["referrers","1","commissions"] } }, "response": [] }
			]
		},
		{
			"name": "14 - Cash Register (Operator)",
			"item": [
				{ "name": "GET /cash-register/status", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/cash-register/status", "host": ["{{baseUrl}}"], "path": ["cash-register","status"] } }, "response": [] },
				{ "name": "POST /cash-register/open", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"valor_abertura\": 100.00\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/cash-register/open", "host": ["{{baseUrl}}"], "path": ["cash-register","open"] } }, "response": [] },
				{ "name": "POST /cash-register/close", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"valor_fechamento\": 850.00\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/cash-register/close", "host": ["{{baseUrl}}"], "path": ["cash-register","close"] } }, "response": [] },
				{ "name": "POST /cash-register/supply", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"valor\": 200.00,\n    \"observacao\": \"Suprimento\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/cash-register/supply", "host": ["{{baseUrl}}"], "path": ["cash-register","supply"] } }, "response": [] },
				{ "name": "POST /cash-register/withdrawal", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"valor\": 50.00,\n    \"observacao\": \"Sangria\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/cash-register/withdrawal", "host": ["{{baseUrl}}"], "path": ["cash-register","withdrawal"] } }, "response": [] }
			]
		},
		{
			"name": "15 - Pagamentos (Operator)",
			"item": [
				{ "name": "GET /pagamentos", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/pagamentos", "host": ["{{baseUrl}}"], "path": ["pagamentos"] } }, "response": [] },
				{ "name": "GET /pagamentos/{id}", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/pagamentos/1", "host": ["{{baseUrl}}"], "path": ["pagamentos","1"] } }, "response": [] },
				{
					"name": "1 - POST /pagamentos — Criar pagamento pendente",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Pagamento criado',function(){ pm.expect(pm.response.code).to.eql(201); pm.expect(r.status).to.eql('pending'); }); if(pm.response.code===201){ pm.collectionVariables.set('pagamento_id',r.id); console.log('pagamento_id:',r.id); }"] } }],
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"sales_order_id\": {{sales_order_id}},\n    \"forma_pagamento\": \"dinheiro\",\n    \"valor\": 50.00\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/pagamentos", "host": ["{{baseUrl}}"], "path": ["pagamentos"] } },
					"response": []
				},
				{
					"name": "2 - PUT /pagamentos/{id} — Aprovar pagamento (retorno POS → gera tickets)",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); if(pm.response.code===200 && r.status==='approved'){ pm.test(\"Pagamento aprovado\", function(){ pm.expect(r.status).to.eql('approved'); }); }"] } }],
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "PUT",
						"header": [],
					"body": {
						"mode": "raw",
						"raw": "{\n    \"status\": \"approved\",\n    \"nsu\": \"123456\",\n    \"authorization_code\": \"123456\",\n    \"transaction_code\": \"1234567890\",\n    \"response_code\": \"00\",\n    \"reason_message\": \"Transação aprovada\",\n    \"brand\": \"VISA\",\n    \"card_number\": \"****1234\",\n    \"installments\": 1,\n    \"is_captured\": true\n}",
						"options": { "raw": { "language": "json" } }
					},
						"url": { "raw": "{{baseUrl}}/pagamentos/1", "host": ["{{baseUrl}}"], "path": ["pagamentos","1"] }
					},
					"response": []
				},
				{
					"name": "3 - PUT /pagamentos/{id}/status — Atualização simples (Flutter)",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "PUT",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"status\": \"approved\"\n}",
							"options": { "raw": { "language": "json" } }
						},
						"url": { "raw": "{{baseUrl}}/pagamentos/1/status", "host": ["{{baseUrl}}"], "path": ["pagamentos","1","status"] }
					},
					"response": []
				}
			]
		},
		{
			"name": "16 - Fiscal Documents (Operator)",
			"item": [
				{ "name": "GET /fiscal-documents", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/fiscal-documents", "host": ["{{baseUrl}}"], "path": ["fiscal-documents"] } }, "response": [] },
				{ "name": "POST /fiscal-documents/gerar", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"sales_order_id\": 1,\n    \"serie\": \"1\",\n    \"natureza_operacao\": \"Venda de mercadoria\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/fiscal-documents/gerar", "host": ["{{baseUrl}}"], "path": ["fiscal-documents","gerar"] } }, "response": [] },
				{ "name": "POST /fiscal-documents/{id}/cancelar", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"justificativa\": \"Erro na emissão\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/fiscal-documents/1/cancelar", "host": ["{{baseUrl}}"], "path": ["fiscal-documents","1","cancelar"] } }, "response": [] }
			]
		},
		{
			"name": "17 - Módulos (Admin only)",
			"item": [
				{ "name": "GET /modulos/status", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/modulos/status", "host": ["{{baseUrl}}"], "path": ["modulos","status"] } }, "response": [] },
				{ "name": "GET /modulos", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/modulos", "host": ["{{baseUrl}}"], "path": ["modulos"] } }, "response": [] }
			]
		},
		{
			"name": "18 - Monitor TEF (X-Activation-Key)",
			"description": "Rotas públicas do Monitor TEF. Autenticação via header X-Activation-Key (sem JWT). Escopo fixo: beneficiário da máquina ativada.",
			"item": [
				{
					"name": "GET /monitor/pagamentos?status=pending",
					"request": {
						"auth": { "type": "noauth" },
						"method": "GET",
						"header": [{ "key": "X-Activation-Key", "value": "{{activation_key}}", "type": "text" }],
						"url": { "raw": "{{baseUrl}}/monitor/pagamentos?status=pending", "host": ["{{baseUrl}}"], "path": ["monitor","pagamentos"], "query": [{ "key": "status", "value": "pending" }] }
					},
					"response": []
				},
				{
					"name": "GET /monitor/pagamentos/{id}",
					"request": {
						"auth": { "type": "noauth" },
						"method": "GET",
						"header": [{ "key": "X-Activation-Key", "value": "{{activation_key}}", "type": "text" }],
						"url": { "raw": "{{baseUrl}}/monitor/pagamentos/1", "host": ["{{baseUrl}}"], "path": ["monitor","pagamentos","1"] }
					},
					"response": []
				},
				{
					"name": "POST /monitor/pagamentos — Gerar cobrança (calculadora)",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); if(pm.response.code===201){ pm.collectionVariables.set('pagamento_id', r.id); console.log('pagamento_id:', r.id); }"] } }],
					"request": {
						"auth": { "type": "noauth" },
						"method": "POST",
						"header": [{ "key": "X-Activation-Key", "value": "{{activation_key}}", "type": "text" }],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"valor\": 35.00,\n    \"forma_pagamento\": \"pix\",\n    \"descricao\": \"Pagamento via calculadora\"\n}",
							"options": { "raw": { "language": "json" } }
						},
						"url": { "raw": "{{baseUrl}}/monitor/pagamentos", "host": ["{{baseUrl}}"], "path": ["monitor","pagamentos"] }
					},
					"response": [
						{ "name": "201 Criado", "code": 201, "body": "{\n  \"id\": 10,\n  \"amount\": 3500,\n  \"payment_type\": \"pix\",\n  \"status\": \"pending\",\n  \"descricao\": \"Pagamento via calculadora\"\n}" },
						{ "name": "401 Sem activation_key", "code": 401, "body": "{\n  \"message\": \"Header X-Activation-Key é obrigatório\"\n}" }
					]
				},
				{
					"name": "PUT /monitor/pagamentos/{id}/status — Retorno POS",
					"request": {
						"auth": { "type": "noauth" },
						"method": "PUT",
						"header": [{ "key": "X-Activation-Key", "value": "{{activation_key}}", "type": "text" }],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"status\": \"approved\",\n    \"nsu\": \"123456\",\n    \"authorization_code\": \"AUTH001\",\n    \"transaction_code\": \"TXN001\",\n    \"response_code\": \"00\",\n    \"reason_message\": \"Transação aprovada\",\n    \"brand\": \"VISA\",\n    \"card_number\": \"****1234\",\n    \"installments\": 1,\n    \"is_captured\": true\n}",
							"options": { "raw": { "language": "json" } }
						},
						"url": { "raw": "{{baseUrl}}/monitor/pagamentos/{{pagamento_id}}/status", "host": ["{{baseUrl}}"], "path": ["monitor","pagamentos","{{pagamento_id}}","status"] }
					},
					"response": []
				}
			]
		},
		{
			"name": "19 - Activation (Público)",
			"item": [
				{
					"name": "0. GET /activation/machine/{id}",
					"request": { "auth": { "type": "noauth" }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/activation/machine/1", "host": ["{{baseUrl}}"], "path": ["activation","machine","1"] } },
					"response": []
				},
				{
					"name": "1. GET /activation/machine?codigo=SPC001",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); if(pm.response.code===200 && r.activation_key){ pm.collectionVariables.set('activation_key', r.activation_key); console.log('activation_key salvo:', r.activation_key); }"] } }],
					"request": { "auth": { "type": "noauth" }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/activation/machine?codigo=SPC001", "host": ["{{baseUrl}}"], "path": ["activation","machine"], "query": [{ "key": "codigo", "value": "SPC001" }] } },
					"response": []
				},
				{
					"name": "2. GET /activation/verify-password",
					"request": {
						"auth": { "type": "noauth" },
						"method": "GET",
						"header": [
							{ "key": "X-Activation-Key", "value": "{{activation_key}}", "type": "text" },
							{ "key": "X-App-Password", "value": "senha123", "type": "text" }
						],
						"url": { "raw": "{{baseUrl}}/activation/verify-password", "host": ["{{baseUrl}}"], "path": ["activation","verify-password"] }
					},
					"response": []
				},
				{
					"name": "3. GET /activation/data",
					"request": {
						"auth": { "type": "noauth" },
						"method": "GET",
						"header": [
							{ "key": "X-Activation-Key", "value": "{{activation_key}}", "type": "text" }
						],
						"url": { "raw": "{{baseUrl}}/activation/data", "host": ["{{baseUrl}}"], "path": ["activation","data"] }
					},
					"response": []
				},
				{
					"name": "4. POST /activation/machine/{id}/ativar",
					"request": {
						"auth": { "type": "noauth" },
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"codigo_ativacao\": \"SPC001\"\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/activation/machine/1/ativar", "host": ["{{baseUrl}}"], "path": ["activation","machine","1","ativar"] }
					},
					"response": []
				}
			]
		},
		{
			"name": "20 - App Config (White Label)",
			"item": [
				{ "name": "GET /app-config/config", "request": { "auth": { "type": "noauth" }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/app-config/config", "host": ["{{baseUrl}}"], "path": ["app-config","config"] } }, "response": [] },
				{ "name": "GET /app-config/logo", "request": { "auth": { "type": "noauth" }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/app-config/logo", "host": ["{{baseUrl}}"], "path": ["app-config","logo"] } }, "response": [] }
			]
		},
		{
			"name": "20 - Swagger UI",
			"item": [
				{ "name": "GET /docs — Swagger UI", "request": { "auth": { "type": "noauth" }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/docs", "host": ["{{baseUrl}}"], "path": ["docs"] } }, "response": [] },
				{ "name": "GET /docs/openapi.json — Spec JSON", "request": { "auth": { "type": "noauth" }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/docs/openapi.json", "host": ["{{baseUrl}}"], "path": ["docs","openapi.json"] } }, "response": [] }
			]
		},
 		{
 			"name": "21 - Webhooks (Sistema)",
 			"description": "Endpoints internos para receber eventos do sistema. Usados pelo WebhookService para disparar eventos para URLs externas.",
 			"item": [
 				{
 					"name": "POST /webhooks/payment — Receber evento de pagamento",
 					"request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n    \"event\": \"payment.created\",\n    \"timestamp\": \"2026-04-23T13:00:00Z\",\n    \"data\": {\n        \"id\": 1,\n        \"amount\": 100.00,\n        \"status\": \"APPROVED\",\n        \"beneficiary_id\": 10,\n        \"order_id\": 5\n    }\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/webhooks/payment", "host": ["{{baseUrl}}"], "path": ["webhooks","payment"] } },
 					"response": []
 				},
 				{
 					"name": "POST /webhooks/order — Receber evento de pedido",
 					"request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n    \"event\": \"order.closed\",\n    \"timestamp\": \"2026-04-23T13:00:00Z\",\n    \"data\": {\n        \"id\": 5,\n        \"total\": 120.00,\n        \"status\": \"CLOSED\",\n        \"type\": \"DELIVERY\"\n    }\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/webhooks/order", "host": ["{{baseUrl}}"], "path": ["webhooks","order"] } },
 					"response": []
 				},
 				{
 					"name": "POST /webhooks/fiscal — Receber evento fiscal",
 					"request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n    \"event\": \"fiscal_document.issued\",\n    \"timestamp\": \"2026-04-23T13:00:00Z\",\n    \"data\": {\n        \"id\": 1,\n        \"type\": \"NFCe\",\n        \"status\": \"AUTHORIZED\",\n        \"number\": 12345\n    }\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/webhooks/fiscal", "host": ["{{baseUrl}}"], "path": ["webhooks","fiscal"] } },
 					"response": []
 				}
 			]
 		},
 		{
 			"name": "21/2 - ⚠️ Testes de Segurança Multi-Tenant",
			"item": [
				{ "name": "❌ Partner acessa parceiro fora da árvore → 403", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{partner_token}}", "type": "string" }] }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/partners/999", "host": ["{{baseUrl}}"], "path": ["partners","999"] } }, "response": [{ "name": "403 Esperado", "code": 403, "body": "{\n  \"message\": \"Acesso negado a este parceiro\"\n}" }] },
				{ "name": "❌ Operator acessa /beneficiaries → 403", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/beneficiaries", "host": ["{{baseUrl}}"], "path": ["beneficiaries"] } }, "response": [{ "name": "403 Esperado", "code": 403, "body": "{\n  \"message\": \"Acesso não autorizado para este perfil\",\n  \"required_roles\": [\"admin\",\"partner\",\"sub_partner\"],\n  \"your_role\": \"operator\"\n}" }] },
				{ "name": "❌ Partner cria módulo (admin only) → 403", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{partner_token}}", "type": "string" }] }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"nome\": \"Módulo Ilegal\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/modulos", "host": ["{{baseUrl}}"], "path": ["modulos"] } }, "response": [{ "name": "403 Esperado", "code": 403, "body": "{\n  \"message\": \"Acesso não autorizado para este perfil\",\n  \"required_roles\": [\"admin\"],\n  \"your_role\": \"partner\"\n}" }] },
				{ "name": "❌ Delivery status transição inválida → 422", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\n    \"status\": \"DELIVERED\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/deliveries/1/status", "host": ["{{baseUrl}}"], "path": ["deliveries","1","status"] } }, "response": [{ "name": "422 Esperado", "code": 422, "body": "{\n  \"message\": \"Transição inválida: CREATED → DELIVERED\",\n  \"allowed\": [\"CONFIRMED\",\"CANCELED\"]\n}" }] }
			]
		},
		{
			"name": "20 - Table Reservations",
			"item": [
				{
					"name": "GET /table-reservations — Listar reservas",
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/table-reservations?date=2026-05-01", "host": ["{{baseUrl}}"], "path": ["table-reservations"], "query": [{"key": "date", "value": "2026-05-01"}] } },
					"response": []
				},
				{
					"name": "POST /table-reservations — Criar reserva",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); if(pm.response.code===201){ pm.collectionVariables.set('reservation_id', r.id); }"] } }],
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"restaurant_table_id\": 1,\n    \"customer_name\": \"João Silva\",\n    \"customer_phone\": \"(11) 99999-9999\",\n    \"reservation_date\": \"2026-05-01\",\n    \"reservation_time\": \"19:30\",\n    \"num_people\": 4,\n    \"notes\": \"Mesa perto da janela\"\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/table-reservations", "host": ["{{baseUrl}}"], "path": ["table-reservations"] }
					},
					"response": []
				},
				{
					"name": "POST /table-reservations/{id}/confirm — Confirmar",
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/table-reservations/{{reservation_id}}/confirm", "host": ["{{baseUrl}}"], "path": ["table-reservations","{{reservation_id}}","confirm"] } },
					"response": []
				},
				{
					"name": "POST /table-reservations/{id}/complete — Cliente chegou",
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/table-reservations/{{reservation_id}}/complete", "host": ["{{baseUrl}}"], "path": ["table-reservations","{{reservation_id}}","complete"] } },
					"response": []
				},
				{
					"name": "POST /table-reservations/{id}/cancel — Cancelar",
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/table-reservations/{{reservation_id}}/cancel", "host": ["{{baseUrl}}"], "path": ["table-reservations","{{reservation_id}}","cancel"] } },
					"response": []
				},
				{
					"name": "POST /tables/{id}/reserve — Reservar mesa diretamente",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"customer_name\": \"Maria Santos\",\n    \"customer_phone\": \"(11) 88888-8888\",\n    \"reservation_date\": \"2026-05-01\",\n    \"reservation_time\": \"20:00\",\n    \"num_people\": 2\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/tables/1/reserve", "host": ["{{baseUrl}}"], "path": ["tables","1","reserve"] }
					},
					"response": []
				}
			]
		},
		{
			"name": "21 - Comandas",
			"item": [
				{
					"name": "GET /comandas — Listar comandas abertas",
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/comandas?status=aberta", "host": ["{{baseUrl}}"], "path": ["comandas"], "query": [{"key":"status","value":"aberta"}] } },
					"response": []
				},
				{
					"name": "POST /comandas — Abrir comanda",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); if(pm.response.code===201){ pm.collectionVariables.set('comanda_id', r.id); console.log('comanda:', r.numero); }"] } }],
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"restaurant_table_id\": 1,\n    \"cliente_nome\": \"Família Silva\",\n    \"num_pessoas\": 4\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/comandas", "host": ["{{baseUrl}}"], "path": ["comandas"] }
					},
					"response": []
				},
				{
					"name": "GET /comandas/{id} — Detalhe com itens",
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/comandas/{{comanda_id}}", "host": ["{{baseUrl}}"], "path": ["comandas","{{comanda_id}}"] } },
					"response": []
				},
				{
					"name": "POST /comandas/{id}/items — Adicionar item",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"produto_id\": 1,\n    \"quantidade\": 2,\n    \"observacao\": \"Sem cebola\"\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/comandas/{{comanda_id}}/items", "host": ["{{baseUrl}}"], "path": ["comandas","{{comanda_id}}","items"] }
					},
					"response": []
				},
				{
					"name": "POST /comandas/{id}/transferir — Mover para outra mesa",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"restaurant_table_id\": 2\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/comandas/{{comanda_id}}/transferir", "host": ["{{baseUrl}}"], "path": ["comandas","{{comanda_id}}","transferir"] }
					},
					"response": []
				},
				{
					"name": "POST /comandas/{id}/fechar — Fechar comanda",
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/comandas/{{comanda_id}}/fechar", "host": ["{{baseUrl}}"], "path": ["comandas","{{comanda_id}}","fechar"] } },
					"response": []
				},
				{
					"name": "POST /comandas/{id}/pagar — Pagar e liberar mesa",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST", "header": [],
						"body": { "mode": "raw", "raw": "{\n    \"payment_type\": \"pix\"\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/comandas/{{comanda_id}}/pagar", "host": ["{{baseUrl}}"], "path": ["comandas","{{comanda_id}}","pagar"] }
					},
					"response": []
				},
				{
					"name": "POST /comandas/{id}/cancelar — Cancelar",
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/comandas/{{comanda_id}}/cancelar", "host": ["{{baseUrl}}"], "path": ["comandas","{{comanda_id}}","cancelar"] } },
					"response": []
				}
			]
		},
		{
			"name": "22 - Tickets",
			"item": [
				{
					"name": "3 - POST /tickets/validate — Validar e consumir ticket (uso único)",
					"request": {
						"auth": { "type": "noauth" },
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"codigo\": \"550e8400-e29b-41d4-a716-446655440000\"\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/tickets/validate", "host": ["{{baseUrl}}"], "path": ["tickets","validate"] }
					},
					"response": []
				},
				{
					"name": "2 - GET /tickets/{codigo} — Buscar ticket por código",
					"request": {
						"auth": { "type": "noauth" },
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/tickets/{{ticket_codigo}}", "host": ["{{baseUrl}}"], "path": ["tickets","550e8400-e29b-41d4-a716-446655440000"] }
					},
					"response": []
				},
				{
					"name": "1 - GET /tickets/order/{orderId} — Listar tickets do pedido",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Tickets encontrados',function(){ pm.expect(pm.response.code).to.eql(200); }); if(pm.response.code===200 && r.length>0){ pm.collectionVariables.set('ticket_codigo',r[0].codigo_unico); pm.test('Ticket PENDING',function(){ pm.expect(r[0].status).to.eql('PENDING'); }); console.log('ticket_codigo:',r[0].codigo_unico,'| total:',r.length); }"] } }],
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/tickets/order/{{sales_order_id}}", "host": ["{{baseUrl}}"], "path": ["tickets","order","{{sales_order_id}}"] }
					},
					"response": []
				},
				{
					"name": "1b - POST /tickets/print/{orderId} — Dados para impressão",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST",
						"header": [],
						"url": { "raw": "{{baseUrl}}/tickets/print/{{sales_order_id}}", "host": ["{{baseUrl}}"], "path": ["tickets","print","1"] }
					},
					"response": []
				},
				{
					"name": "4 - POST /tickets/{codigo}/cancel — Cancelar ticket",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] },
						"method": "POST",
						"header": [],
						"url": { "raw": "{{baseUrl}}/tickets/{{ticket_codigo}}/cancel", "host": ["{{baseUrl}}"], "path": ["tickets","550e8400-e29b-41d4-a716-446655440000","cancel"] }
					},
					"response": []
				}
			]
		},
		{
			"name": "23 - Public Orders (Autoatendimento)",
			"item": [
				{
					"name": "1 - POST /public/orders — Criar pedido",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); if(pm.response.code===201){ pm.collectionVariables.set('public_order_id', r.id); console.log('public_order_id:', r.id); }"] } }],
					"request": {
						"auth": { "type": "noauth" },
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"partner_id\": 1,\n    \"system_unit_id\": 1,\n    \"observacao\": \"Pedido via totem\"\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/public/orders", "host": ["{{baseUrl}}"], "path": ["public","orders"] }
					},
					"response": []
				},
				{
					"name": "2 - POST /public/orders/{id}/items — Adicionar item",
					"request": {
						"auth": { "type": "noauth" },
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"produto_id\": 1,\n    \"quantidade\": 2\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/public/orders/{{public_order_id}}/items", "host": ["{{baseUrl}}"], "path": ["public","orders","{{public_order_id}}","items"] }
					},
					"response": []
				},
				{
					"name": "3 - POST /public/orders/{id}/checkout — Confirmar pedido",
					"request": {
						"auth": { "type": "noauth" },
						"method": "POST",
						"header": [],
						"url": { "raw": "{{baseUrl}}/public/orders/{{public_order_id}}/checkout", "host": ["{{baseUrl}}"], "path": ["public","orders","{{public_order_id}}","checkout"] }
					},
					"response": []
				},
				{
					"name": "4 - POST /public/payment — Pagar e gerar tickets",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Pagamento confirmado',function(){ pm.expect(pm.response.code).to.eql(201); }); pm.test('Tickets gerados',function(){ pm.expect(r.tickets.length).to.be.above(0); }); if(pm.response.code===201 && r.tickets && r.tickets.length>0){ pm.collectionVariables.set('ticket_codigo',r.tickets[0].codigo_unico); pm.test('Ticket PENDING',function(){ pm.expect(r.tickets[0].status).to.eql('PENDING'); }); console.log('ticket_codigo:',r.tickets[0].codigo_unico,'| total:',r.tickets.length); }"] } }],
					"request": {
						"auth": { "type": "noauth" },
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"sales_order_id\": {{public_order_id}},\n    \"amount\": 5000,\n    \"payment_type\": \"pix\"\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/public/payment", "host": ["{{baseUrl}}"], "path": ["public","payment"] }
					},
					"response": []
				}
			]
		},
		{
			"name": "24 - SmartRoute - Entregadores Auth",
			"item": [
				{
					"name": "POST /entregadores/login",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); if(pm.response.code===200){ pm.collectionVariables.set('entregador_token',r.access_token); console.log('Entregador:',r.entregador.name); }"] } }],
					"request": {
						"auth": { "type": "noauth" },
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"email\": \"entregador@smartpay.com\",\n    \"password\": \"password\"\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/entregadores/login", "host": ["{{baseUrl}}"], "path": ["entregadores","login"] }
					},
					"response": []
				},
				{
					"name": "GET /entregadores/me",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{entregador_token}}", "type": "string" }] },
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/entregadores/me", "host": ["{{baseUrl}}"], "path": ["entregadores","me"] }
					},
					"response": []
				},
				{
					"name": "POST /entregadores/logout",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{entregador_token}}", "type": "string" }] },
						"method": "POST",
						"header": [],
						"url": { "raw": "{{baseUrl}}/entregadores/logout", "host": ["{{baseUrl}}"], "path": ["entregadores","logout"] }
					},
					"response": []
				}
			]
		},
		{
			"name": "25 - SmartRoute - Entregadores (CRUD)",
			"item": [
				{
					"name": "GET /entregadores",
					"request": {
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/entregadores", "host": ["{{baseUrl}}"], "path": ["entregadores"] }
					},
					"response": []
				},
				{
					"name": "POST /entregadores — Criar",
					"request": {
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"name\": \"João Entregador\",\n    \"email\": \"entregador@smartpay.com\",\n    \"password\": \"password\",\n    \"system_unit_id\": 1,\n    \"active\": true\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/entregadores", "host": ["{{baseUrl}}"], "path": ["entregadores"] }
					},
					"response": []
				},
				{
					"name": "GET /entregadores/:id",
					"request": {
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/entregadores/1", "host": ["{{baseUrl}}"], "path": ["entregadores","1"] }
					},
					"response": []
				},
				{
					"name": "PUT /entregadores/:id",
					"request": {
						"method": "PUT",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"name\": \"João Silva\",\n    \"active\": true\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/entregadores/1", "host": ["{{baseUrl}}"], "path": ["entregadores","1"] }
					},
					"response": []
				},
				{
					"name": "DELETE /entregadores/:id",
					"request": {
						"method": "DELETE",
						"header": [],
						"url": { "raw": "{{baseUrl}}/entregadores/1", "host": ["{{baseUrl}}"], "path": ["entregadores","1"] }
					},
					"response": []
				}
			]
		},
		{
			"name": "26 - SmartRoute - Rotas (Admin/Operator)",
			"item": [
				{
					"name": "GET /delivery-routes",
					"request": {
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/delivery-routes?status=criada", "host": ["{{baseUrl}}"], "path": ["delivery-routes"], "query": [{"key":"status","value":"criada"}] }
					},
					"response": []
				},
				{
					"name": "POST /delivery-routes — Criar rota com paradas",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); if(pm.response.code===201){ pm.collectionVariables.set('delivery_route_id',r.id); if(r.stops && r.stops.length>0){ pm.collectionVariables.set('delivery_stop_id',r.stops[0].id); } }"] } }],
					"request": {
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"entregador_id\": 1,\n    \"notes\": \"Rota do turno da manhã\",\n    \"stops\": [\n        {\n            \"customer_name\": \"Maria da Silva\",\n            \"address\": \"Rua das Flores, 123 — São Paulo\",\n            \"latitude\": -23.550520,\n            \"longitude\": -46.633308,\n            \"payment_type\": \"antecipado\",\n            \"sales_order_id\": null,\n            \"notes\": \"Portaria B\"\n        },\n        {\n            \"customer_name\": \"Carlos Pereira\",\n            \"address\": \"Av. Paulista, 1000 — São Paulo\",\n            \"latitude\": -23.561684,\n            \"longitude\": -46.655981,\n            \"payment_type\": \"na_entrega\"\n        }\n    ]\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/delivery-routes", "host": ["{{baseUrl}}"], "path": ["delivery-routes"] }
					},
					"response": []
				},
				{
					"name": "GET /delivery-routes/:id",
					"request": {
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/delivery-routes/{{delivery_route_id}}", "host": ["{{baseUrl}}"], "path": ["delivery-routes","{{delivery_route_id}}"] }
					},
					"response": []
				},
				{
					"name": "PUT /delivery-routes/:id",
					"request": {
						"method": "PUT",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"notes\": \"Rota atualizada\"\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/delivery-routes/{{delivery_route_id}}", "host": ["{{baseUrl}}"], "path": ["delivery-routes","{{delivery_route_id}}"] }
					},
					"response": []
				},
				{
					"name": "POST /delivery-routes/:id/stops — Adicionar parada",
					"request": {
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"customer_name\": \"Ana Souza\",\n    \"address\": \"Rua Augusta, 500 — São Paulo\",\n    \"latitude\": -23.553000,\n    \"longitude\": -46.660000,\n    \"payment_type\": \"antecipado\"\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/delivery-routes/{{delivery_route_id}}/stops", "host": ["{{baseUrl}}"], "path": ["delivery-routes","{{delivery_route_id}}","stops"] }
					},
					"response": []
				},
				{
					"name": "GET /delivery-routes/:id/tracking — Rastreamento",
					"request": {
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/delivery-routes/{{delivery_route_id}}/tracking", "host": ["{{baseUrl}}"], "path": ["delivery-routes","{{delivery_route_id}}","tracking"] }
					},
					"response": []
				},
				{
					"name": "DELETE /delivery-routes/:id",
					"request": {
						"method": "DELETE",
						"header": [],
						"url": { "raw": "{{baseUrl}}/delivery-routes/{{delivery_route_id}}", "host": ["{{baseUrl}}"], "path": ["delivery-routes","{{delivery_route_id}}"] }
					},
					"response": []
				}
			]
		},
		{
			"name": "27 - SmartRoute - Entregador (execução da rota)",
			"item": [
				{
					"name": "GET /entregador/routes — Minhas rotas",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{entregador_token}}", "type": "string" }] },
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/entregador/routes", "host": ["{{baseUrl}}"], "path": ["entregador","routes"] }
					},
					"response": []
				},
				{
					"name": "POST /entregador/routes/:id/start — Iniciar rota",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{entregador_token}}", "type": "string" }] },
						"method": "POST",
						"header": [],
						"url": { "raw": "{{baseUrl}}/entregador/routes/{{delivery_route_id}}/start", "host": ["{{baseUrl}}"], "path": ["entregador","routes","{{delivery_route_id}}","start"] }
					},
					"response": []
				},
				{
					"name": "POST /entregador/routes/:id/location — Atualizar localização",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{entregador_token}}", "type": "string" }] },
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"latitude\": -23.551000,\n    \"longitude\": -46.634000\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/entregador/routes/{{delivery_route_id}}/location", "host": ["{{baseUrl}}"], "path": ["entregador","routes","{{delivery_route_id}}","location"] }
					},
					"response": []
				},
				{
					"name": "POST /entregador/stops/:id/start — Iniciar parada",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{entregador_token}}", "type": "string" }] },
						"method": "POST",
						"header": [],
						"url": { "raw": "{{baseUrl}}/entregador/stops/{{delivery_stop_id}}/start", "host": ["{{baseUrl}}"], "path": ["entregador","stops","{{delivery_stop_id}}","start"] }
					},
					"response": []
				},
				{
					"name": "POST /entregador/stops/:id/arrive — Registrar chegada",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{entregador_token}}", "type": "string" }] },
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"latitude\": -23.550610,\n    \"longitude\": -46.633400\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/entregador/stops/{{delivery_stop_id}}/arrive", "host": ["{{baseUrl}}"], "path": ["entregador","stops","{{delivery_stop_id}}","arrive"] }
					},
					"response": []
				},
				{
					"name": "POST /entregador/stops/:id/pay — Registrar pagamento na entrega",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{entregador_token}}", "type": "string" }] },
						"method": "POST",
						"header": [],
						"url": { "raw": "{{baseUrl}}/entregador/stops/{{delivery_stop_id}}/pay", "host": ["{{baseUrl}}"], "path": ["entregador","stops","{{delivery_stop_id}}","pay"] }
					},
					"response": []
				},
				{
					"name": "POST /entregador/stops/:id/deliver — Finalizar entrega",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{entregador_token}}", "type": "string" }] },
						"method": "POST",
						"header": [],
						"url": { "raw": "{{baseUrl}}/entregador/stops/{{delivery_stop_id}}/deliver", "host": ["{{baseUrl}}"], "path": ["entregador","stops","{{delivery_stop_id}}","deliver"] }
					},
					"response": []
				},
				{
					"name": "POST /entregador/routes/:id/finish — Finalizar rota",
					"request": {
						"auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{entregador_token}}", "type": "string" }] },
						"method": "POST",
						"header": [],
						"url": { "raw": "{{baseUrl}}/entregador/routes/{{delivery_route_id}}/finish", "host": ["{{baseUrl}}"], "path": ["entregador","routes","{{delivery_route_id}}","finish"] }
					},
					"response": []
				}
			]
		},
		{
			"name": "28 - Parking - Pricings",
			"item": [
				{
					"name": "GET /parking/pricings",
					"request": {
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/parking/pricings", "host": ["{{baseUrl}}"], "path": ["parking","pricings"] }
					},
					"response": []
				},
				{
					"name": "POST /parking/pricings — Criar tabela HOURLY",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); if(pm.response.code===201){ pm.collectionVariables.set('parking_pricing_id',r.id); }"] } }],
					"request": {
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"name\": \"Padrão\",\n    \"type\": \"HOURLY\",\n    \"price_per_hour\": 5.00,\n    \"price_per_minute_exceeded\": 0.10,\n    \"grace_period_minutes\": 10,\n    \"daily_max_price\": 30.00,\n    \"is_active\": true\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/parking/pricings", "host": ["{{baseUrl}}"], "path": ["parking","pricings"] }
					},
					"response": []
				},
				{
					"name": "POST /parking/pricings — Criar tabela MONTHLY",
					"request": {
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"name\": \"Mensalista\",\n    \"type\": \"MONTHLY\",\n    \"monthly_price\": 150.00,\n    \"is_active\": true\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/parking/pricings", "host": ["{{baseUrl}}"], "path": ["parking","pricings"] }
					},
					"response": []
				},
				{
					"name": "GET /parking/pricings/:id",
					"request": {
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/parking/pricings/{{parking_pricing_id}}", "host": ["{{baseUrl}}"], "path": ["parking","pricings","{{parking_pricing_id}}"] }
					},
					"response": []
				},
				{
					"name": "PUT /parking/pricings/:id",
					"request": {
						"method": "PUT",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"grace_period_minutes\": 15,\n    \"daily_max_price\": 35.00\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/parking/pricings/{{parking_pricing_id}}", "host": ["{{baseUrl}}"], "path": ["parking","pricings","{{parking_pricing_id}}"] }
					},
					"response": []
				},
				{
					"name": "DELETE /parking/pricings/:id",
					"request": {
						"method": "DELETE",
						"header": [],
						"url": { "raw": "{{baseUrl}}/parking/pricings/{{parking_pricing_id}}", "host": ["{{baseUrl}}"], "path": ["parking","pricings","{{parking_pricing_id}}"] }
					},
					"response": []
				}
			]
		},
		{
			"name": "29 - Parking - Monthly Customers",
			"item": [
				{
					"name": "GET /parking/monthly",
					"request": {
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/parking/monthly?status=ACTIVE", "host": ["{{baseUrl}}"], "path": ["parking","monthly"], "query": [{"key":"status","value":"ACTIVE"}] }
					},
					"response": []
				},
				{
					"name": "POST /parking/monthly — Cadastrar mensalista",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); if(pm.response.code===201){ pm.collectionVariables.set('monthly_customer_id',r.id); }"] } }],
					"request": {
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"name\": \"Maria Mensalista\",\n    \"document\": \"123.456.789-00\",\n    \"plate\": \"XYZ9876\",\n    \"pricing_id\": {{parking_pricing_id}},\n    \"start_date\": \"2026-04-01\",\n    \"end_date\": \"2026-04-30\",\n    \"status\": \"ACTIVE\"\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/parking/monthly", "host": ["{{baseUrl}}"], "path": ["parking","monthly"] }
					},
					"response": []
				},
				{
					"name": "GET /parking/monthly/:id",
					"request": {
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/parking/monthly/{{monthly_customer_id}}", "host": ["{{baseUrl}}"], "path": ["parking","monthly","{{monthly_customer_id}}"] }
					},
					"response": []
				},
				{
					"name": "PUT /parking/monthly/:id",
					"request": {
						"method": "PUT",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"end_date\": \"2026-05-31\",\n    \"status\": \"ACTIVE\"\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/parking/monthly/{{monthly_customer_id}}", "host": ["{{baseUrl}}"], "path": ["parking","monthly","{{monthly_customer_id}}"] }
					},
					"response": []
				},
				{
					"name": "DELETE /parking/monthly/:id",
					"request": {
						"method": "DELETE",
						"header": [],
						"url": { "raw": "{{baseUrl}}/parking/monthly/{{monthly_customer_id}}", "host": ["{{baseUrl}}"], "path": ["parking","monthly","{{monthly_customer_id}}"] }
					},
					"response": []
				}
			]
		},
		{
			"name": "30 - Parking - Tickets",
			"item": [
				{
					"name": "GET /parking/open — Veículos no estacionamento",
					"request": {
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/parking/open", "host": ["{{baseUrl}}"], "path": ["parking","open"] }
					},
					"response": []
				},
				{
					"name": "GET /parking/tickets",
					"request": {
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/parking/tickets?status=OPEN", "host": ["{{baseUrl}}"], "path": ["parking","tickets"], "query": [{"key":"status","value":"OPEN"}] }
					},
					"response": []
				},
				{
					"name": "POST /parking/entry — Registrar entrada",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); if(pm.response.code===201){ pm.collectionVariables.set('parking_ticket_id',r.id); console.log('Placa:',r.plate,'| Mensalista:',r.is_monthly); }"] } }],
					"request": {
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"plate\": \"ABC1234\",\n    \"vehicle_type\": \"car\",\n    \"pricing_id\": {{parking_pricing_id}}\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/parking/entry", "host": ["{{baseUrl}}"], "path": ["parking","entry"] }
					},
					"response": []
				},
				{
					"name": "POST /parking/entry — Entrada mensalista (placa XYZ9876)",
					"request": {
						"method": "POST",
						"header": [],
						"body": { "mode": "raw", "raw": "{\n    \"plate\": \"XYZ9876\",\n    \"vehicle_type\": \"car\",\n    \"pricing_id\": {{parking_pricing_id}}\n}", "options": { "raw": { "language": "json" } } },
						"url": { "raw": "{{baseUrl}}/parking/entry", "host": ["{{baseUrl}}"], "path": ["parking","entry"] }
					},
					"response": []
				},
				{
					"name": "GET /parking/tickets/:id",
					"request": {
						"method": "GET",
						"header": [],
						"url": { "raw": "{{baseUrl}}/parking/tickets/{{parking_ticket_id}}", "host": ["{{baseUrl}}"], "path": ["parking","tickets","{{parking_ticket_id}}"] }
					},
					"response": []
				},
				{
					"name": "POST /parking/exit/:id — Registrar saída e calcular valor",
					"request": {
						"method": "POST",
						"header": [],
						"url": { "raw": "{{baseUrl}}/parking/exit/{{parking_ticket_id}}", "host": ["{{baseUrl}}"], "path": ["parking","exit","{{parking_ticket_id}}"] }
					},
					"response": []
				}
			]
		},
		{
			"name": "31 - FLUXO E2E: Pedido Operador + Pagamento + Tickets",
			"description": "Fluxo completo ponta a ponta para operador POS. Execute na ordem 1→9.\n\nPré-requisito: operador joao@smartpay.com / password, produto id=1 cadastrado.\n\nVariáveis salvas automaticamente: operator_token → sales_order_id → pagamento_id → ticket_codigo\n\nResultado esperado: pedido criado (draft), confirmado, pago via POS e tickets gerados + validados.",
			"item": [
				{
					"name": "1 - POST /operators/login — Autenticar operador",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Login OK',function(){ pm.expect(pm.response.code).to.eql(200); }); if(pm.response.code===200){ pm.collectionVariables.set('operator_token',r.access_token); console.log('Operador:',r.operator.id,'| unit:',r.operator.system_unit_id); }"] } }],
					"request": { "auth": { "type": "noauth" }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"email\": \"joao@smartpay.com\",\n    \"password\": \"password\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/operators/login", "host": ["{{baseUrl}}"], "path": ["operators","login"] } },
					"response": []
				},
				{
					"name": "2 - POST /cash-register/open — Abrir caixa",
					"event": [{ "listen": "test", "script": { "exec": ["pm.test('Caixa aberto (ou já estava aberto)',function(){ pm.expect(pm.response.code).to.be.oneOf([200,201,422]); });"] } }],
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"valor_abertura\": 100.00\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/cash-register/open", "host": ["{{baseUrl}}"], "path": ["cash-register","open"] } },
					"response": []
				},
				{
					"name": "3 - POST /sales-orders — Criar pedido COUNTER",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Pedido criado com status draft',function(){ pm.expect(pm.response.code).to.eql(201); pm.expect(r.status).to.eql('draft'); }); if(pm.response.code===201){ pm.collectionVariables.set('sales_order_id',r.id); console.log('sales_order_id:',r.id,'| numero:',r.numero); }"] } }],
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"type\": \"COUNTER\",\n    \"observacao\": \"Teste E2E operador\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/sales-orders", "host": ["{{baseUrl}}"], "path": ["sales-orders"] } },
					"response": []
				},
				{
					"name": "4 - POST /sales-orders/{id}/items — Adicionar 2x produto",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Item adicionado',function(){ pm.expect(pm.response.code).to.eql(201); pm.expect(r.items.length).to.be.above(0); }); pm.test('Subtotal > 0',function(){ pm.expect(parseFloat(r.subtotal)).to.be.above(0); });"] } }],
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"produto_id\": 1,\n    \"quantidade\": 2,\n    \"preco_unitario\": 25.00\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/sales-orders/{{sales_order_id}}/items", "host": ["{{baseUrl}}"], "path": ["sales-orders","{{sales_order_id}}","items"] } },
					"response": []
				},
				{
					"name": "5 - POST /sales-orders/{id}/confirm — Confirmar pedido",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Status = confirmed',function(){ pm.expect(pm.response.code).to.eql(200); pm.expect(r.status).to.eql('confirmed'); }); pm.test('confirmed_at preenchido',function(){ pm.expect(r.confirmed_at).to.not.be.null; });"] } }],
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/sales-orders/{{sales_order_id}}/confirm", "host": ["{{baseUrl}}"], "path": ["sales-orders","{{sales_order_id}}","confirm"] } },
					"response": []
				},
				{
					"name": "6 - POST /pagamentos — Criar pagamento pendente",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Pagamento criado com status pending',function(){ pm.expect(pm.response.code).to.eql(201); pm.expect(r.status).to.eql('pending'); }); if(pm.response.code===201){ pm.collectionVariables.set('pagamento_id',r.id); console.log('pagamento_id:',r.id); }"] } }],
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"sales_order_id\": {{sales_order_id}},\n    \"forma_pagamento\": \"dinheiro\",\n    \"valor\": 50.00\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/pagamentos", "host": ["{{baseUrl}}"], "path": ["pagamentos"] } },
					"response": []
				},
				{
					"name": "7 - PUT /pagamentos/{id} — Aprovar (gera tickets automaticamente)",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Pagamento aprovado',function(){ pm.expect(pm.response.code).to.eql(200); pm.expect(r.status).to.eql('approved'); }); pm.test('Pedido marcado como paid',function(){ pm.expect(r.sales_order.status).to.eql('paid'); }); pm.test('paid_at preenchido',function(){ pm.expect(r.sales_order.paid_at).to.not.be.null; });"] } }],
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\n    \"status\": \"approved\",\n    \"nsu\": \"E2E-001\",\n    \"authorization_code\": \"E2E-AUTH\",\n    \"transaction_code\": \"E2ETEST001\",\n    \"response_code\": \"00\",\n    \"reason_message\": \"Aprovado E2E\",\n    \"brand\": \"VISA\",\n    \"card_number\": \"****9999\",\n    \"installments\": 1,\n    \"is_captured\": true\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/pagamentos/{{pagamento_id}}", "host": ["{{baseUrl}}"], "path": ["pagamentos","{{pagamento_id}}"] } },
					"response": []
				},
				{
					"name": "8 - GET /tickets/order/{id} — Listar tickets gerados",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Tickets gerados (1 por unidade de quantidade)',function(){ pm.expect(pm.response.code).to.eql(200); pm.expect(r.length).to.be.above(0); }); if(pm.response.code===200 && r.length>0){ pm.collectionVariables.set('ticket_codigo',r[0].codigo_unico); pm.test('Ticket está PENDING',function(){ pm.expect(r[0].status).to.eql('PENDING'); }); pm.test('QR code preenchido',function(){ pm.expect(r[0].qrcode).to.include('tickets/validate'); }); console.log('ticket_codigo:',r[0].codigo_unico,'| total tickets:',r.length); }"] } }],
					"request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{operator_token}}", "type": "string" }] }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/tickets/order/{{sales_order_id}}", "host": ["{{baseUrl}}"], "path": ["tickets","order","{{sales_order_id}}"] } },
					"response": []
				},
				{
					"name": "9 - POST /tickets/validate — Consumir ticket (uso único)",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Ticket válido e consumido',function(){ pm.expect(pm.response.code).to.eql(200); pm.expect(r.valid).to.be.true; pm.expect(r.status).to.eql('USED'); }); pm.test('used_at preenchido',function(){ pm.expect(r.used_at).to.not.be.null; });"] } }],
					"request": { "auth": { "type": "noauth" }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"codigo\": \"{{ticket_codigo}}\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/tickets/validate", "host": ["{{baseUrl}}"], "path": ["tickets","validate"] } },
					"response": []
				}
			]
		},
		{
			"name": "32 - FLUXO E2E: Autoatendimento Público + Tickets",
			"description": "Fluxo completo de autoatendimento (totem/app) sem autenticação. Execute na ordem 1→6.\n\nPré-requisito: partner_id=1, system_unit_id=1, produto id=1 cadastrado.\n\nVariáveis salvas automaticamente: public_order_id → ticket_codigo\n\nResultado esperado: pedido criado, pago via PIX, tickets gerados e validados.",
			"item": [
				{
					"name": "1 - POST /public/orders — Criar pedido",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Pedido criado com status draft',function(){ pm.expect(pm.response.code).to.eql(201); pm.expect(r.status).to.eql('draft'); }); if(pm.response.code===201){ pm.collectionVariables.set('public_order_id',r.id); console.log('public_order_id:',r.id,'| numero:',r.numero); }"] } }],
					"request": { "auth": { "type": "noauth" }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"partner_id\": 1,\n    \"system_unit_id\": 1,\n    \"observacao\": \"Pedido E2E totem\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/public/orders", "host": ["{{baseUrl}}"], "path": ["public","orders"] } },
					"response": []
				},
				{
					"name": "2 - POST /public/orders/{id}/items — Adicionar 2x produto",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Item adicionado',function(){ pm.expect(pm.response.code).to.eql(201); pm.expect(r.items.length).to.be.above(0); }); pm.test('Subtotal > 0',function(){ pm.expect(parseFloat(r.subtotal)).to.be.above(0); });"] } }],
					"request": { "auth": { "type": "noauth" }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"produto_id\": 1,\n    \"quantidade\": 2\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/public/orders/{{public_order_id}}/items", "host": ["{{baseUrl}}"], "path": ["public","orders","{{public_order_id}}","items"] } },
					"response": []
				},
				{
					"name": "3 - POST /public/orders/{id}/checkout — Confirmar",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Status = confirmed',function(){ pm.expect(pm.response.code).to.eql(200); pm.expect(r.status).to.eql('confirmed'); }); pm.test('confirmed_at preenchido',function(){ pm.expect(r.confirmed_at).to.not.be.null; });"] } }],
					"request": { "auth": { "type": "noauth" }, "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/public/orders/{{public_order_id}}/checkout", "host": ["{{baseUrl}}"], "path": ["public","orders","{{public_order_id}}","checkout"] } },
					"response": []
				},
				{
					"name": "4 - POST /public/payment — Pagar (PIX) e gerar tickets",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Pagamento confirmado',function(){ pm.expect(pm.response.code).to.eql(201); }); pm.test('Tickets gerados',function(){ pm.expect(r.tickets.length).to.be.above(0); }); pm.test('Pedido paid',function(){ pm.expect(r.order.status).to.eql('paid'); }); if(pm.response.code===201 && r.tickets && r.tickets.length>0){ pm.collectionVariables.set('ticket_codigo',r.tickets[0].codigo_unico); pm.test('Ticket está PENDING',function(){ pm.expect(r.tickets[0].status).to.eql('PENDING'); }); pm.test('QR code preenchido',function(){ pm.expect(r.tickets[0].qrcode).to.include('tickets/validate'); }); console.log('ticket_codigo:',r.tickets[0].codigo_unico,'| total:',r.tickets.length); }"] } }],
					"request": { "auth": { "type": "noauth" }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"sales_order_id\": {{public_order_id}},\n    \"amount\": 5000,\n    \"payment_type\": \"pix\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/public/payment", "host": ["{{baseUrl}}"], "path": ["public","payment"] } },
					"response": []
				},
				{
					"name": "5 - GET /tickets/{codigo} — Verificar ticket gerado",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Ticket encontrado e PENDING',function(){ pm.expect(pm.response.code).to.eql(200); pm.expect(r.status).to.eql('PENDING'); pm.expect(r.codigo_unico).to.be.a('string'); }); pm.test('QR code presente',function(){ pm.expect(r.qrcode).to.include('tickets/validate'); });"] } }],
					"request": { "auth": { "type": "noauth" }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/tickets/{{ticket_codigo}}", "host": ["{{baseUrl}}"], "path": ["tickets","{{ticket_codigo}}"] } },
					"response": []
				},
				{
					"name": "6 - POST /tickets/validate — Consumir ticket (uso único)",
					"event": [{ "listen": "test", "script": { "exec": ["var r=pm.response.json(); pm.test('Ticket válido e consumido',function(){ pm.expect(pm.response.code).to.eql(200); pm.expect(r.valid).to.be.true; pm.expect(r.status).to.eql('USED'); }); pm.test('used_at preenchido',function(){ pm.expect(r.used_at).to.not.be.null; }); pm.test('Produto identificado',function(){ pm.expect(r.produto).to.be.a('string'); });"] } }],
					"request": { "auth": { "type": "noauth" }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n    \"codigo\": \"{{ticket_codigo}}\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/tickets/validate", "host": ["{{baseUrl}}"], "path": ["tickets","validate"] } },
					"response": []
				}
			]
		}
	]
}
