◇ OpenCyber Academy
Tecnólogo · Capítulo 8 · Português

Capítulo 8 — Validando ordens de reparo

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

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

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.