Entry Data Model
Each library entry lives at library/<slug>/metadata.yaml. The slug is kebab-case and
must be unique across the library.
Full Field Reference
# ── Required ──────────────────────────────────────────────────────────────────
title: string
# Display name of the project or tool. Title case.
description: string
# 1–3 sentences. Plain English. What does it do, and who is it for?
category: enum
# One of: data_engineering | data_analytics | data_science |
# data_architecture | dataops_devops | ig_security
project_type: string
# Subtype within the category. See docs/reference/categories.md for valid values.
# Examples: "Data Pipelines (Automated)", "Ad Hoc Analysis", "Simulation & Modelling"
language:
- enum
# List. One or more of: python | r | sql | terraform | typescript |
# javascript | yaml | julia | other
repo_url: string
# Full GitHub URL, e.g. https://github.com/org/repo
repo_visibility: enum
# One of: public | private | internal
reusability_tier: enum
# One of: baseline | bronze | silver | gold
# See docs/reference/reusability_framework.md for what each tier means.
contact: string
# Email address or GitHub username of the maintainer.
# ── Recommended ───────────────────────────────────────────────────────────────
organisation: string
# NHS organisation or team. e.g. "NHS England Data Science", "UKHSA", "NHS Wales"
platforms:
- string
# Free-form list of platforms/tools the code targets.
# Suggested values: databricks | azure | aws | gcp | sql-server | postgresql |
# oracle | power-bi | tableau | jupyter | github-actions |
# gitlab-ci | docker | kubernetes | nhs-login | spine
tags:
- string
# Free-form searchable tags. Lowercase, hyphenated. Use for data types, standards,
# clinical areas, etc. e.g. nhsdd | icd-10 | snomed | waiting-lists | a-and-e |
# cancer | mental-health | primary-care | secondary-care | synthetic-data | rap
sul:
structural: bool # Templates, folder structures, project skeletons
utility: bool # Generic helper functions decoupled from project logic
logic: bool # Bespoke project-specific code, clearly separated
# Whether the entry demonstrates each element of the SUL principle.
# All three true = strong reuse candidate. See /about/ for the SUL explanation.
date_added: date
# ISO 8601 date, e.g. 2026-06-12. Set when the entry is first added.
last_updated: date
# ISO 8601 date. Update when the metadata or underlying repo changes significantly.
# ── Optional / Display ────────────────────────────────────────────────────────
tier_rationale: string
# 1–2 sentences explaining why this entry was assigned its tier.
# Shown on the detail page. Encouraged for Silver and Gold.
featured: bool # default: false
# If true, the entry appears in the Featured section on the home page.
# Reserve for mature, well-documented entries that represent best practice.
success_story: bool # default: false
# If true, the entry appears in the Success Stories section on the home page.
success_story_text: string
# Required if success_story is true. 1–2 sentences describing the measurable
# outcome or impact. e.g. "Reduced monthly reporting time from 4 hours to 15 minutes."
logo_url: string
# URL to a logo or screenshot. Shown on the entry card and detail page.
# Prefer a raw GitHub URL to an image in the repo, e.g.:
# https://raw.githubusercontent.com/org/repo/main/docs/logo.png
documentation_url: string
# URL to external documentation site, if separate from the repo.
package_url: string
# PyPI / CRAN / conda-forge URL, if the code is published as a package.
atlas_listed: bool # default: false
# If true, this entry is also listed on the HSMA Decision Intelligence Atlas.
atlas_url: string
# Required if atlas_listed is true. Full URL to the Atlas entry.
status: enum # default: active
# One of: active | withdrawn
# Withdrawn entries keep their YAML file in the repository as an audit trail
# but are excluded from every build output (catalogue, pages, JSON).
Category + Project Type Values
category |
Valid project_type values |
|---|---|
data_engineering |
Data Pipelines (Automated), Ad Hoc Extractions, Data Quality & Utility Tools |
data_analytics |
Automated Reporting Pipelines, Dashboards, Ad Hoc Analysis |
data_science |
Exploratory Research & Model Training, Production ML Pipelines, Simulation & Modelling, AI & NLP Implementations |
data_architecture |
Standard Infrastructure Pipelines, Ad Hoc Sandboxes, Database Schemas |
dataops_devops |
Project Templates, CI/CD Pipelines, Docker Images |
ig_security |
Data Masking Scripts, Audit Tools |
Validation Rules
The Pydantic model in src/nrcl/models.py enforces:
- All required fields present
categoryis one of the six valid valueslanguagelist is non-emptyrepo_visibilityis one of the three valid valuesreusability_tieris one of the four valid valuescontactis either a valid email or a GitHub username (starts with@or no spaces)success_story_textis present whensuccess_storyistrueatlas_urlis present whenatlas_listedistruedate_addedis a valid ISO 8601 dateslug(the directory name) matches^[a-z0-9-]+$status, when given, isactiveorwithdrawn
Quality score
The build derives a 0-100 quality score from these fields (src/nrcl/quality.py):
description length, tags, documentation link, tier rationale, SUL declaration,
recency of last_updated, platforms, organisation, repository visibility, and
package link. The score is not stored in the YAML; it is recomputed on every
build and shown on the entry page with the criteria met and missed.