Divisão de conta por itens
Numa conta de 35 em comida, com 2,8 de imposto e 6,3 de gorjeta, Alice, que pediu 20,5, deve 25,83 e Bob, 18,27. Atribua cada prato e bebida a uma pessoa, e o imposto e a gorjeta acompanham o que cada um consumiu. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Tax
- 2,8
- Serviço
- 6,3
- Quantidade de itens
- 4
- Número de pessoas
- 2
- Total de comida
- 35
- Total geral
- 44,1
Contas de restaurante e pedidos em grupo raramente são justos quando todos pagam a mesma fração de um total compartilhado. Esta calculadora de divisão de conta por itens permite que você atribua cada prato, bebida ou linha a uma pessoa identificada, some o subtotal de comida dessa pessoa e distribua o imposto absoluto e a taxa de serviço do cupom em proporção a esses subtotais, para que pedidos maiores carreguem uma fatia maior do imposto e da gorjeta.
Como funcionam a atribuição de itens e o imposto e serviço proporcionais
Comece pelo cupom impresso ou do aplicativo como uma lista de linhas, e não como um único montante. Cada linha carrega um valor em uma moeda e uma string person que identifica quem pediu ou concordou em pagar aquele prato. Linhas com a mesma string person se acumulam em um subtotal de comida para aquele comensal.
A calculadora pega o valor absoluto do imposto e a taxa de serviço ou gorjeta impressos no cupom e aloca ambos com a regra proporcional clássica: a parte de imposto de cada pessoa é o imposto vezes o subtotal dessa pessoa dividido pelo total de comida da mesa, e a mesma razão multiplica o valor de serviço. Somar as três partes dá o que aquela pessoa deve: subtotal de comida mais parte de imposto mais parte de serviço.
É o padrão de divisão justa que as pessoas já usam no guardanapo quando um convidado pediu bife e outro só salada, porém sem erros de arredondamento manual que deixam centavos sem conciliação. A divisão igual de toda a conta, incluindo imposto e gorjeta entre N cabeças, é outra intenção de produto coberta em outro lugar; aqui a intenção SEO é explicitamente a atribuição por itens com encargos proporcionais.
Quando o total de comida é zero e o imposto ou o serviço ainda são positivos, a razão dividiria por zero, então o motor rejeita essa combinação em vez de inventar cotas arbitrárias. Quando todas as linhas são gratuitas e imposto e serviço são zero, todo total por pessoa é zero e a chamada ainda tem sucesso por completude.
Quando vale dividir a conta por prato
Jantares em grupo, almoços de coworking e pedidos de delivery compartilhados precisam de um detalhamento neutro que todos possam auditar linha a linha em vez de discutir metades iguais. Demos de hospitalidade e ferramentas de treinamento de ponto de venda podem mostrar como imposto e serviço se vinculam a quem realmente pediu, em vez de espalhar taxas fixas entre assentos que não pediram nada.
Mantenha as listas em tamanhos de mesa ordinários, fixe nos testes os totais arredondados por pessoa e obtenha acertos reproduzíveis para chats de grupo, exemplos LMS e workers na borda sem montar planilha nem um motor de gorjeta sob medida para cada idioma que você publicar.
Casos de uso
Mesas de restaurante com pedidos diferentes
Atribua cada prato e bebida a um comensal, cole as linhas de imposto e gorjeta do cupom e veja exatamente o que cada pessoa deve sem divisão igual.
Delivery e refeições para viagem em grupo
Mapeie as linhas do carrinho a colegas de casa ou de trabalho e distribua imposto e taxas de serviço da entrega proporcionalmente ao subtotal de comida de cada um.
Perguntas frequentes
Imposto e serviço são percentuais ou valores em dinheiro?
Valores absolutos na mesma moeda dos itens de linha. Copie o imposto e a gorjeta ou taxa de serviço do recibo; eles são distribuídos pela razão do subtotal de comida, não por contagem igual de cabeças.
E se duas pessoas dividirem um prato?
Divida o prato em duas linhas (metade do valor cada) atribuídas a cada pessoa, ou atribua a linha inteira a uma e acerte a metade em particular.
Como o imposto e a gorjeta são divididos entre as pessoas?
Na proporção do que cada um pediu de comida: a parte do imposto é o imposto vezes o subtotal da pessoa dividido pelo total de comida, e o mesmo vale para a gorjeta. Com 20,5 de 35, Alice paga 1,64 de imposto e 3,69 de gorjeta.
Por que não dividir a conta igualmente?
Porque quem pediu só uma salada pagaria o mesmo que quem comeu um filé, com imposto e gorjeta. Aqui cada pessoa paga os próprios pratos mais a parte proporcional dos adicionais; para uma divisão igual, use uma calculadora de divisão igualitária.
Como lanço vários pratos da mesma pessoa?
Escreva exatamente o mesmo nome em cada linha dessa pessoa. As linhas com o mesmo nome são somadas num único subtotal, então o hambúrguer e as fritas de Alice viram 20,5 antes da divisão do imposto e da gorjeta.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/life/itemized-bill-split \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":[{"description":"Burger","amount":14.5,"person":"Alice"},{"description":"Salad","amount":11,"person":"Bob"},{"description":"Fries","amount":6,"person":"Alice"},{"description":"Soda","amount":3.5,"person":"Bob"}]}'const res = await fetch("https://api.kit.forhosting.com/life/itemized-bill-split", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": [
{
"description": "Burger",
"amount": 14.5,
"person": "Alice"
},
{
"description": "Salad",
"amount": 11,
"person": "Bob"
},
{
"description": "Fries",
"amount": 6,
"person": "Alice"
},
{
"description": "Soda",
"amount": 3.5,
"person": "Bob"
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/life/itemized-bill-split",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": [
{
"description": "Burger",
"amount": 14.5,
"person": "Alice"
},
{
"description": "Salad",
"amount": 11,
"person": "Bob"
},
{
"description": "Fries",
"amount": 6,
"person": "Alice"
},
{
"description": "Soda",
"amount": 3.5,
"person": "Bob"
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/life/itemized-bill-split", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":[{"description":"Burger","amount":14.5,"person":"Alice"},{"description":"Salad","amount":11,"person":"Bob"},{"description":"Fries","amount":6,"person":"Alice"},{"description":"Soda","amount":3.5,"person":"Bob"}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":[{"description":"Burger","amount":14.5,"person":"Alice"},{"description":"Salad","amount":11,"person":"Bob"},{"description":"Fries","amount":6,"person":"Alice"},{"description":"Soda","amount":3.5,"person":"Bob"}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/life/itemized-bill-split", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"items": [
{
"description": "Burger",
"amount": 14.5,
"person": "Alice"
},
{
"description": "Salad",
"amount": 11,
"person": "Bob"
},
{
"description": "Fries",
"amount": 6,
"person": "Alice"
},
{
"description": "Soda",
"amount": 3.5,
"person": "Bob"
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.itemized_bill_split",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Listas de itens vazias, valores negativos, nomes de pessoa em branco e imposto ou serviço positivos sobre um subtotal de comida zero falham com um erro invalid_input claro e não são cobrados.
Contrato de entrada, campos de resposta e regras de validação
Cada objeto precisa de amount como número finito não negativo e person como nome ou id curto não vazio; description opcional rotula o prato no detalhamento ecoado. Ambos os encargos são valores monetários absolutos na mesma moeda das linhas, não pontos percentuais, para que você copie as linhas de imposto e gorjeta do recibo diretamente. Envie por POST um corpo JSON com um array items obrigatório de um a duzentos objetos. Os aliases lines, line_items, dishes e orders são aceitos para o array quando seu cliente já usa essas chaves. O tax opcional tem padrão zero e aceita aliases tax_amount, sales_tax e vat; o service opcional tem padrão zero e aceita service_amount, service_charge, tip e gratuity. Items ausentes, arrays vazios, valores de linha negativos, strings person em branco, tax ou service negativos e números não finitos falham com invalid_input nomeando o problema; essas falhas nunca consomem saldo pré-pago. Em sucesso o corpo retorna item_count, person_count, a lista items normalizada com index, description, amount e person, food_total, tax, service, grand_total e um array people ordenado pela primeira aparição de cada string person. Cada linha de people inclui person, subtotal, share_ratio, tax_share, service_share, total e item_count. Campos monetários usam arredondamento half-up para duas casas decimais com ajuste residual na última pessoa de subtotal positivo para que as partes de imposto arredondadas ainda somem tax, as de serviço somem service e os totais por pessoa somem grand_total. method é itemized_proportional_tax_service e formula reafirma a regra proporcional para exibição ao lado do resultado.
Onde uma API de divisão de conta por itens agrega valor
Bots de despesas e reembolso podem aceitar o mesmo payload estruturado que um formulário móvel coleta e devolver totais por pessoa prontos para uma mensagem de acerto ou um lançamento no livro. Como a implementação é aritmética analítica de nível A sem tokens de modelo e sem rede de saída, cada chamada bem-sucedida custa o preço base publicado US$ 0,002, e falhas de validação são gratuitas.
Casos de integração
Bots de despesas e apps de acerto
Chame um endpoint pré-pago estável que devolve totais por pessoa prontos para mensagens de reembolso, livros-razão ou interfaces de pedido de divisão.
Perguntas técnicas
Como funciona a calculadora de divisão de conta por itens?
Envie items como linhas {amount, person}, mais tax e service absolutos opcionais. O total de cada pessoa é o subtotal de comida mais uma parte proporcional de imposto e serviço com base em subtotal sobre food_total.
Quais erros a calculadora devolve?
invalid_input para items vazios, valores negativos, nomes de pessoa em branco, tax ou service negativos, ou tax/service positivos quando food_total é zero. Essas falhas não são cobradas.
Quanto custa a calculadora de divisão de conta por itens?
A ferramenta no navegador é gratuita. Pedidos API usam saldo pré-pago KIT a US$ 0,002 por chamada bem-sucedida; entrada inválida não é cobrada.