I’m pleased to announce the release of nhs-number.

This is a very small open source library available for both server-side and client-side use. It is written in Clojure/Script and so can be used, for example, on the JVM (servers) from Java or Clojure, or transpiled to JavaScript to be used in web browsers (clients).

In many domains, software developers make use of a range of foundational data and software services. They don’t need to re-invent the wheel; they’re focusing on getting to where they need to go.

Things are so very different in healthcare.

Not only do you have to overcome fundamental problems with the commercial market failure for health and care software, byzantine procurement rules, as well as considering your information governance and regulatory compliance obligations, you have very few libraries and frameworks on which you can build your point of differentiation.

Of course, we have access to general purpose libraries, such as supporting secure networking or encryption, or data storage. When we write software, whether for the web, or for iOS, or Android, or Windows, we think about making use of a general purpose computing platform. It is rare for us to build software without foundational core tools and services. Sometimes those platforms are open-source, and sometimes those are proprietary, but they are available and re-usable and composable so you can focus on the problems you are trying to solve.

But there is a dearth of high quality, well tested and functional libraries in health and care.

nhs-number is a small library that:

  • is published under a permissive open-source library you can view and modify the source code
  • has extensive tests, in including the use of synthetic (generative) tests
  • has an automated continuous test/integration/deployment pipeline so that any modifications result in updated tests and automated reports - e.g., see this report
  • reports on test coverage automatically

I already use it server-side for validation of data consumed from other services, and client-side to check user input is valid. I also use it to generate synthetic data for automated tests in other systems.