Capítulo 8 — Validando ordens de reparo
Mapa da aula
Aula 08 publicada. Mapa, exemplo, EX022.
flowchart TD
N0["8.1 As regras"]
N1["8.2 Resultados"]
N2["8.3 Causas"]
N3["8.4 Relatório"]
N0 --> N1 --> N2 --> N3
N3 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX022"]
Desenho lógico
flowchart LR
N0["8.1 As regras"]
N1["8.2 Resultados"]
N2["8.3 Causas"]
N3["8.4 Relatório"]
N0 --> N1 --> N2 --> N3 --> Q["EX022"]
[8.1 As regras]
|
v
[8.2 Resultados]
|
v
[8.3 Causas]
|
v
[8.4 Relatório]
|
v
[Exemplo resolvido] --> [Exercício EX022]
Objetivos de aprendizagem
Você vai (1) validar registros de ordens com duas regras; (2) combinar os resultados das regras; (3) relatar as constatações ao curador.
8.1 As regras
Ravi valida as ordens de reparo com duas regras acordadas com o curador de reparos. O código de prioridade deve ser E, de emergência, U, de urgente, R, de rotina, ou P, de planejado. A data de conclusão não pode ser anterior à data de abertura da ordem. As duas regras importam para os relatórios regulatórios, porque a prioridade define o prazo-alvo e as datas definem se o prazo foi cumprido. Ele escreve cada regra como uma pequena função com nome claro, e o curador aprova as duas funções depois de conferi-las com exemplos reais de ordens anonimizadas.
"""Validate 6,000 synthetic repair job records: priority code and date order (stdlib only)."""
import random, datetime as dt
random.seed(21)
codes = ["E", "U", "R", "P"]
bad_code = bad_date = both = 0
for i in range(6000):
c = random.choice(codes) if random.random() > 0.03 else random.choice(["", "X", "e"])
raised = dt.date(2026, 1, 1) + dt.timedelta(days=random.randint(0, 180))
done = raised + dt.timedelta(days=random.randint(0, 30) if random.random() > 0.02 else -random.randint(1, 10))
bc, bd = c not in codes, done < raised
bad_code += bc; bad_date += bd; both += bc and bd
print(f"jobs 6000; invalid priority {bad_code}; completed before raised {bad_date}; both {both}")
print(f"valid on both rules {6000 - bad_code - bad_date + both} ({100*(6000 - bad_code - bad_date + both)/6000:.1f}%)")
Execute com python3 lab_jobs.py. Saída verificada:
jobs 6000; invalid priority 167; completed before raised 122; both 8
valid on both rules 5719 (95.3%)
8.2 Resultados
O laboratório verifica seis mil ordens sintéticas. Cento e sessenta e sete têm prioridade inválida, como um campo em branco, uma letra desconhecida ou um e minúsculo. Cento e vinte e duas foram concluídas antes de serem abertas. Oito falham nas duas regras. No total, 5.719 ordens, ou 95,3 por cento, passam nas duas regras. Ravi observa que as ordens que falham nas duas regras são contadas uma única vez no total, e por isso as falhas não podem simplesmente ser somadas. Ele apresenta os resultados em uma pequena tabela, com o número combinado primeiro e, em seguida, as falhas de cada regra.
8.3 Causas
Ravi examina uma amostra de ordens reprovadas e as discute com o curador. O e minúsculo vem de um portal de prestadora que não converte maiúsculas e minúsculas. Os campos em branco vêm de ordens criadas às pressas durante tempestades. A conclusão antes da abertura geralmente significa que um atendente criou a ordem depois que a prestadora já tinha resolvido uma emergência, registrando como data de abertura a data da ligação. Cada causa sugere uma correção diferente, da conversão de maiúsculas a orientações mais claras para emergências. Ravi registra cada causa com o número de uma ordem de exemplo em suas anotações.
8.4 Relatório
Ravi apresenta ao curador as contagens, a taxa combinada de aprovação, exemplos sem os dados dos inquilinos, as causas prováveis e as correções sugeridas. O curador aceita a conversão de maiúsculas e pede aos atendentes que registrem o horário do relato original nas emergências. Ravi acrescenta as duas regras à biblioteca de verificações, para rodarem toda noite. A Sra. Moreau observa que relatar as causas junto com as contagens ajuda o curador a agir, em vez de apenas se preocupar com um número. O curador apresenta o relatório na reunião mensal de reparos, e os gestores decidem acompanhar a taxa de aprovação todo mês.
Exemplo resolvido
Ravi valida 6.000 ordens e encontra 167 prioridades inválidas, 122 conclusões anteriores à abertura e 8 ordens com as duas falhas, com 5.719 (95,3 por cento) válidas; ele investiga as causas e acrescenta as regras às verificações noturnas.
Caso sintético. As ordens são sintéticas; as saídas vêm de lab_jobs.py.
Erros e limites
Somar as contagens de falhas conta duas vezes os registros que falham em mais de uma regra.
Exercícios
- EX022 — Parcela válida. Que parcela das ordens passa nas duas regras? Rubrica: 3 = 95,3% (5.719);; 2 = parcialmente correto;; 1 = errado;; 0 = nenhuma.
- EX023 — Causa do minúsculo. De onde vem o e minúsculo? Rubrica: 3 = de um portal que não converte maiúsculas e minúsculas;; 2 = parcialmente correto;; 1 = vago;; 0 = nenhuma.
- EX024 — Causa das datas. Por que algumas ordens foram concluídas antes de serem abertas? Rubrica: 3 = ordens de emergência criadas depois do conserto;; 2 = parcialmente correto;; 1 = vago;; 0 = nenhuma.
Continue estudando — aula 08 (capítulo 08 de 30)
← Capítulo 07 · Índice das aulas · Capítulo 09 →
Continue para a próxima aula já escrita.