◇ OpenCyber Academy
Professional · Chapter 4 · English

Chapter 4 — Privacy and data protection: core methods

Open, free learning for anyone who wants to protect people and technology. No account is required to read this text or its worked answers.

Chapter 4 — Privacy and data protection: core methods

Lesson map

Lesson 04 published. Map, example, EX016.

flowchart TD
  N0["Learning outcomes"]
  N1["4.1 Data mapping"]
  N2["4.2 Retention review"]
  N3["4.3 Lawful basis analysis"]
  N4["4.4 Recommendations"]
  N5["Lab — Candidate CVs past retention"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5
  N5 --> EX["Worked example"]
  EX --> Q["Exercise EX016"]

Logical drawing

flowchart LR
  N0["Learning outcomes"]
  N1["4.1 Data mapping"]
  N2["4.2 Retention review"]
  N3["4.3 Lawful basis analysis"]
  N4["4.4 Recommendations"]
  N5["Lab — Candidate CVs past retention"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX016"]
[Learning outcomes]
    |
    v
[4.1 Data mapping]
    |
    v
[4.2 Retention review]
    |
    v
[4.3 Lawful basis analysis]
    |
    v
[4.4 Recommendations]
    |
    v
[Lab — Candidate CVs past retention]
    |
    v
[Worked example] --> [Exercise EX016]

Learning outcomes

You will (1) apply data mapping, retention review and lawful basis analysis; (2) analyse CV retention with a lab; (3) recommend changes.

4.1 Data mapping

Marta builds a data map for Halden listing each category of data, its source, purpose, system, recipients and retention. Categories include contact details, CVs, interview notes, references, right-to-work documents, background check results and diversity monitoring answers. The map shows that diversity answers are stored with names in the recruitment system although they are used only for anonymous statistics. She recommends storing them separately without names, which supports minimisation and reduces the impact of any breach involving the main candidate database. The IT provider confirms feasibility.

4.2 Retention review

Halden's policy says CVs of unsuccessful candidates are deleted six months after last contact unless the candidate agrees to stay in the talent pool. Marta checks practice with a synthetic copy of the candidate database. The lab shows that 1,792 of 2,500 candidates, 71.7%, are past six months without talent-pool agreement, so the policy has not been applied. It also finds 216 talent-pool candidates with no contact for over two years, whose agreement is probably stale and should be refreshed or ended. Most expired profiles are years old.

4.3 Lawful basis analysis

With the data protection lead, Marta reviews lawful bases. Processing applications for a specific role relies on steps at the candidate's request before a contract, under Article 6(1)(b). Keeping candidates in the talent pool for future roles relies on consent, which must be specific and withdrawable. Right-to-work checks rely on legal obligation. Background checks need careful analysis, especially for criminal records, which Article 10 restricts. She documents each basis so that consultants know which data they may use for which purpose. Consultants receive a summary.

4.4 Recommendations

Marta recommends three changes: run an automated deletion job for expired CVs after a report-only trial, send a refresh request to talent-pool candidates who have not been in contact for two years and delete those who do not reply, and separate diversity data from names. She estimates that the first change alone removes over two-thirds of stored candidate profiles. The managing director approves, and the IT provider schedules the work with Marta preparing the test plan. Each change has an owner and a date, and the deletion job's first live run is scheduled after the trial.

Lab — Candidate CVs past retention

"""Check candidate CVs against a retention rule in a synthetic recruitment database (stdlib only)."""
import random, datetime
random.seed(21)
today = datetime.date(2026, 10, 1)
cands = []
for i in range(2500):
    last = today - datetime.timedelta(days=random.randint(0, 1500))
    pool = random.random() < 0.18          # candidate agreed to stay in talent pool
    cands.append((i, last, pool))
rule = 183                                  # six months after last contact
expired = [c for c in cands if (today - c[1]).days > rule and not c[2]]
pool_old = [c for c in cands if c[2] and (today - c[1]).days > 730]
print(f"candidates {len(cands)}; past six months without pool consent {len(expired)} ({100*len(expired)/len(cands):.1f}%)")
print(f"talent-pool candidates with no contact for over two years {len(pool_old)}")

Run with python3 lab_cvs.py. Verified output:

candidates 2500; past six months without pool consent 1792 (71.7%)
talent-pool candidates with no contact for over two years 216

Worked example

Marta maps data categories, finds 1,792 of 2,500 candidates (71.7%) past retention and 216 stale talent-pool entries, documents lawful bases and recommends deletion, consent refresh and separating diversity data.

Synthetic case. Records are synthetic; GDPR Articles 6(1)(b) and 10 are real.

Errors and limits

Some records may be needed for legal claims; agree exceptions before deleting.

Exercises

Continue studying — lesson 04 (chapter 04 of 12)

← Chapter 03 · Course chapter index · Chapter 05 →

Continue to the next authored lesson.

Worked answers

EX016. They were stored with names although only anonymous statistics use them.

EX017. 1,792 of 2,500 (71.7%).

EX018. 216.

EX019. Consent, specific and withdrawable.

EX020. Article 10.