BeautyService (Servico de Estetica)
O BeautyService representa um servico individual dentro de um agendamento, rastreando a execucao e pagamento.
Descricao
Cada BeautyService e uma instancia de um SaleService (tipo de servico) executado para um pet especifico. Ele pode ser criado diretamente no agendamento ou vir de uma venda ja realizada.
Dados
Informacoes do Servico
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
| name | Texto | Auto | Nome do servico (copiado do SaleService) |
| status | Selecao | Sim | Estado do servico |
| time_in_minutes | Numero | Sim | Duracao em minutos |
| price | Monetario | Sim | Valor do servico |
Rastreamento
| Campo | Tipo | Descricao |
|---|---|---|
| paid | Booleano | Se esta pago |
| purchased | Booleano | Se foi comprado via pacote |
Relacionamentos
Pertence a
| Entidade | Obrigatorio | Descricao |
|---|---|---|
| Account | Sim | Conta do petshop |
| Store | Sim | Filial |
| BeautyAppointment | Sim | Agendamento pai |
| SaleService | Sim | Tipo de servico |
| Pet | Sim | Pet atendido |
| Customer | Sim | Cliente |
| CartItem | Nao | Item de venda (se vendido) |
| Sale | Nao | Venda associada |
Ciclo de Vida
Estados
| Status | Descricao |
|---|---|
| available | Disponivel para agendamento |
| scheduled | Agendado em um BeautyAppointment |
| done | Servico executado |
| purchased | Comprado (pacote), aguardando agendamento |
Origem dos Servicos
Criado no Agendamento
- Usuario seleciona servicos ao criar agendamento
- BeautyService criado com status "available" ou "scheduled"
- Nao esta vinculado a venda inicialmente
Vindo de Venda (PDV)
- Cliente compra servico no PDV
- Venda e paga
- BeautyService criado com status "available"
- Servico fica disponivel para agendamento
Vindo de Pacote
- Cliente compra pacote de servicos
- Cria um BeautyService para cada item do pacote
- Status = "purchased"
- Servico pode ser agendado posteriormente
Integracao com Venda
Geracao de Venda no Checkout
Quando agendamento muda para "checkout":
- Busca servicos nao pagos
- Cria ou atualiza venda
- Cria CartItem para cada servico
- Vincula BeautyService ao CartItem e Sale
Pagamento
Quando venda e paga:
- BeautyService recebe
paid = true - CartItem recebe status "paid"
Calculo de Duracao
No Agendamento
agendamento.service_time = sum(beauty_services.time_in_minutes)
agendamento.end_time = date_time + (service_time / 1440) dias
Multiplos Servicos
Servicos sao executados sequencialmente, tempo total e a soma.
Sincronizacao de Status
Quando BeautyAppointment muda de status:
- Se muda para "checkout": todos BeautyServices mudam para "done"
- Status do servico acompanha o agendamento
Cancelamento
Ao Cancelar Agendamento
- Servicos pagos: voltam para status "purchased" (podem ser reagendados)
- Servicos nao pagos: sao destruidos
Ao Voltar para Scheduled
- Servicos desvinculados da venda
- CartItems destruidos
- Venda vazia e destruida
Validacoes
| Campo | Regra |
|---|---|
| sale_service_id | Obrigatorio |
| time_in_minutes | Obrigatorio, maior que 0 |
| price | Obrigatorio, maior ou igual a 0 |
Automacoes
Ao Criar
- Copia dados do SaleService (nome, preco, tempo)
- Define status inicial
Ao Atualizar
- Sincroniza status com agendamento
- Atualiza flag "paid" baseado no pagamento
Escopos
| Escopo | Descricao |
|---|---|
| available | Disponiveis para agendamento |
| scheduled | Ja agendados |
| done | Executados |
| paid | Pagos |
| pending | Nao pagos |