OpenCyber Academy
Graduação · Capítulo 21 · Português
Código do curso: OCA-095Capítulo 21: OCA-095-C021

Capítulo 21 — Códigos de referência na prática

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

Mapa da aula

Aula 21 publicada. Mapa, exemplo, EX061.

flowchart TD
  N0["21.1 A verificação"]
  N1["Laboratório — Códigos de loja em 2.000 linhas sintét"]
  N2["21.2 Resultados"]
  N3["21.3 Causas"]
  N4["21.4 Correções na origem"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX061"]

Desenho lógico

flowchart LR
  N0["21.1 A verificação"]
  N1["Laboratório — Códigos de loja em 2.000 linhas sintét"]
  N2["21.2 Resultados"]
  N3["21.3 Causas"]
  N4["21.4 Correções na origem"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX061"]
[21.1 A verificação]
    |
    v
[Laboratório — Códigos de loja em 2.000 linhas sintét]
    |
    v
[21.2 Resultados]
    |
    v
[21.3 Causas]
    |
    v
[21.4 Correções na origem]
    |
    v
[Exemplo resolvido] --> [Exercício EX061]

Objetivos de aprendizagem

Você vai (1) validar códigos contra uma lista de referência; (2) classificar os códigos inválidos pela causa; (3) projetar correções na origem.

21.1 A verificação

Depois que a área de operações assume a titularidade da lista de lojas, Amara confere os dados de vendas com ela. Cada linha de venda traz um código de loja, e os códigos válidos vão de S01 a S40. Ela escreve um script que compara cada código com a lista oficial e conta os códigos inválidos por valor. Ela explica que agrupar os códigos inválidos por valor é mais útil do que uma contagem única de erros, porque valores inválidos diferentes costumam ter causas diferentes e pessoas diferentes que podem corrigi-los. O script roda depois de cada carga noturna.

Laboratório — Códigos de loja em 2.000 linhas sintéticas de vendas conferidos com uma lista de referência

"""Check store codes in 2,000 synthetic sales rows against a reference list (stdlib only)."""
import random, collections
random.seed(3)
ref = {f"S{i:02d}" for i in range(1, 41)}
pool = sorted(ref) + ["S41", "s07", "S7", "S00"]
w = [1]*40 + [0.6, 0.5, 0.4, 0.3]
rows = random.choices(pool, weights=w, k=2000)
bad = collections.Counter(c for c in rows if c not in ref)
print(f"rows {len(rows)}; invalid codes {sum(bad.values())} ({100*sum(bad.values())/len(rows):.1f}%)")
print("by code:", dict(sorted(bad.items())))

Execute com python3 lab_codes.py. Saída verificada:

rows 2000; invalid codes 89 (4.5%)
by code: {'S00': 11, 'S41': 32, 'S7': 16, 's07': 30}

21.2 Resultados

O laboratório confere duas mil linhas de vendas. Oitenta e nove linhas trazem códigos inválidos, 4,5 por cento. Os valores inválidos são S41 em 32 linhas, s07 em 30 linhas, S7 em 16 linhas e S00 em 11 linhas. Amara observa que o resultado não é um problema, mas quatro, e que o maior grupo isolado, S41, é um código que ainda não existe na lista de referência, o que sugere uma falha de processo, e não digitação descuidada nas lojas. Amara compartilha a decomposição no mesmo dia com a área de operações, a TI e os gerentes das lojas envolvidas.

21.3 Causas

Amara investiga cada valor. S41 pertence a uma loja nova que abriu antes de a área de operações incluí-la na lista. O s07 em minúscula e o S7 abreviado vêm ambos de um sistema de loja que aceita texto livre nos lançamentos manuais. S00 é um valor padrão usado por um caixa de teste que nunca foi retirado da rede de produção. Cada causa tem um dono diferente: a área de operações para os códigos novos, a TI para a validação da entrada e o gerente da loja para o caixa de teste. Cada dono confirma a causa.

21.4 Correções na origem

Amara recomenda que os códigos de lojas novas entrem na lista antes da inauguração, como uma etapa da lista de verificação de abertura de loja; que o sistema da loja aceite apenas códigos de uma lista suspensa; e que o caixa de teste seja retirado. Mapear S7 e s07 para S07 no data warehouse corrige os dados passados, mas não impediria novos erros. O Dr. Lindqvist observa que corrigir as causas na origem evita um trabalho permanente de limpeza mais adiante. As três correções na origem ficam prontas em um mês, e os códigos inválidos novos deixam de aparecer.

Exemplo resolvido

Amara encontra 89 códigos inválidos em 2.000 linhas (4,5 por cento), divididos entre S41, s07, S7 e S00, rastreia cada um até uma causa e um dono diferentes e recomenda correções na origem.

Caso sintético. Os códigos são sintéticos; as saídas vêm de lab_codes.py.

Erros e limites

Mapear códigos errados mais adiante sem corrigir as origens cria uma limpeza sem fim.

Exercícios

Respostas comentadas

EX061. 4,5 por cento, 89 de 2.000 linhas.

EX062. Uma loja nova abriu antes de seu código entrar na lista.

EX063. Um caixa de teste que nunca foi retirado.