CartItem (Item do Carrinho)
O CartItem representa um item individual dentro de uma venda, podendo ser produto, servico ou pacote.
Descricao
Cada cart item e uma linha na venda, contendo quantidade, preco, desconto e referencias ao item vendido (produto, servico ou pacote). O cart item tambem armazena informacoes de impostos apos a emissao da nota fiscal.
Dados
Informacoes Basicas
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
| name | Texto | Auto | Nome do item (copiado do SaleItem) |
| quantity | Decimal | Sim | Quantidade vendida |
| unit_price | Monetario | Sim | Preco unitario |
| discount | Decimal | Nao | Desconto em percentual (0-100) |
| total | Monetario | Calculado | Quantidade x Preco - Desconto |
| status | Selecao | Auto | Sincronizado com status da venda |
Informacoes Fiscais
| Campo | Tipo | Descricao |
|---|---|---|
| tax_calculation_base_value | Monetario | Base de calculo dos impostos |
| icms_cst | Texto | CST do ICMS |
| icms_aliquot | Decimal | Aliquota do ICMS |
| icms_value | Monetario | Valor do ICMS |
| pis_cst | Texto | CST do PIS |
| pis_aliquot | Decimal | Aliquota do PIS |
| pis_value | Monetario | Valor do PIS |
| pis_unity_aliquot | Decimal | Aliquota unitaria PIS |
| cofins_cst | Texto | CST do COFINS |
| cofins_aliquot | Decimal | Aliquota do COFINS |
| cofins_value | Monetario | Valor do COFINS |
| cofins_unity_aliquot | Decimal | Aliquota unitaria COFINS |
Flags de Comportamento
| Campo | Tipo | Descricao |
|---|---|---|
| ignore_pdv_discounts | Booleano | Se ignora descontos do PDV |
| request_pet | Booleano | Se requer vinculo com pet |
| is_delivery | Booleano | Se e item de entrega |
Relacionamentos
Pertence a
| Entidade | Obrigatorio | Descricao |
|---|---|---|
| Sale | Sim | Venda pai |
| Account | Sim | Conta do petshop |
| Store | Sim | Filial |
| Customer | Nao | Cliente (herdado da venda) |
| Pet | Condicional | Pet (obrigatorio se request_pet = true) |
| SaleItem | Sim | Produto/Servico/Pacote vendido |
Tipos de Item
SaleProduct (Produto)
- Possui codigo de barras
- Controle de estoque
- Calculo de impostos completo (ICMS, PIS, COFINS)
SaleService (Servico)
- Vinculado ao Beauty Center ou Clinica
- Pode exigir pet
- Gera agendamento ao ser pago
SalePackage (Pacote)
- Contem multiplos servicos
- Gera varios agendamentos ao ser pago
- Pode ter validade
DeliveryItem (Entrega)
- Representa taxa de entrega
- Ou servico de taxidog (transporte de pet)
Calculo do Total
total = (quantity * unit_price) - desconto_calculado
desconto_calculado = (quantity * unit_price) * (discount / 100)
Regras de Desconto
- Se
ignore_pdv_discounts = true: desconto sempre 0 - Se venda aplicar modo de desconto: item atualiza desconto
- Desconto individual pode ser alterado manualmente
Validacoes
Pet Obrigatorio
Quando request_pet = true:
- Pet deve ser atribuido antes da venda mudar para "pending"
- Erro: "Voce precisa vincular um pet aos itens [nome] antes de finalizar"
Estoque (se habilitado)
Quando pdv_settings.forbid_with_negative_stock = true:
- Quantidade nao pode exceder estoque disponivel
- Validado apenas para produtos
Sincronizacao de Status
O status do cart item sempre acompanha o status da venda:
| Status da Venda | Status do CartItem |
|---|---|
| open | open |
| pending | pending |
| paid | paid |
| canceled | canceled |
| partially_canceled | paid (ou canceled individualmente) |
Impostos
Quando Sao Preenchidos
Impostos sao preenchidos quando:
- Venda muda para status "paid"
- Nota fiscal e gerada com sucesso
- Sistema extrai dados do JSON da nota
Origem dos Dados
Acoes Disponiveis
| Acao | Condicao | Descricao |
|---|---|---|
| Editar quantidade | Status = "open" | Alterar quantidade do item |
| Editar desconto | Status = "open" | Alterar desconto individual |
| Remover | Status = "open" | Remover item da venda |
| Vincular pet | Status = "open" | Associar pet ao item |
| Cancelar | Status = "paid" | Cancelamento parcial |
Cancelamento de Item
Ao cancelar um item individualmente:
- Venda muda para "partially_canceled" (se primeira vez)
- Total da venda e recalculado
- Valor cancelado e registrado
- Cliente tem valores recalculados
Integracao com Estoque
Ao Pagar
Para produtos, o estoque e baixado:
- Cria StockTransaction tipo "exit"
- Quantidade = quantity do cart item
- Status = "done"
Ao Cancelar
Estoque e devolvido:
- Cria StockTransaction tipo "entry"
- Quantidade = quantity cancelada