01
O problema
O cliente esquece a revisão e a IPO, e a oficina só se lembra quando ele aparece. A ficha guarda o histórico e daí tira as próximas datas, sem ninguém as escrever à mão.
02
O modelo
A viatura guarda a data da primeira matrícula, os quilómetros e as intervenções. A última revisão é a intervenção mais recente marcada como revisão.
| Tabela | Para que serve |
|---|---|
| vehicles | Matrícula, modelo, combustível, cliente, quilómetros e data da primeira matrícula. |
| jobs | Cada intervenção: data, quilómetros, descrição, valor e se conta como revisão. |
| reminders | Quando foi enviado o último lembrete, para não repetir. |
03
As regras das datas
Revisão: um ano ou 15 000 km depois da última, o que vier primeiro. IPO de ligeiros: aos 4 anos, depois de 2 em 2 até aos 8, e a partir daí todos os anos.
ts
// Revisão: um ano ou 15 000 km depois da última, o que vier primeiro.
export function nextService(v) {
const last = lastService(v) ?? { date: v.firstReg, km: 0 };
const dueKm = last.km + 15_000;
const date = v.km >= dueKm ? today() : addYears(last.date, 1);
return { date, km: dueKm };
}04
O que faria diferente em produção
Os lembretes sairiam por SMS através de um fornecedor, com registo de envio e um limite para não incomodar o cliente duas vezes na mesma semana.
ts
// IPO de ligeiros: aos 4 anos, de 2 em 2 até aos 8, depois todos os anos.
export function nextIpo(v) {
const due = [4, 6, 8, ...range(9, 40)].map(y => addYears(v.firstReg, y));
const last = lastIpo(v);
return due.find(d => !last || d > last.date);
}