Safeguarding - codelists?

Is there a definitive and recognised source of SNOMED, Safeguarding concepts used to create patient Safeguarding lists in GP Practices?
I’m looking to find out if there is a standardised list of concepts that identify patients as being listed on a safeguarding list or put another way if a patient was to be put on to a safeguarding list what code(s) would someone add?

I’m aware of the RCGP - Safeguarding guidance/list that details concepts as EMIS and/or SystmOne concepts but it feels like time has moved on since the creation of the document in 2017.

For example the RCGP list notes ‘Vulnerable Adult’.
In SNOMED, 417430008 |Vulnerable adult (finding)| ‘has child’ ‘247811000000108 |Vulnerable elderly person (finding)|’ which is not listed in the RCGP document. Extending to include the latter concept seems reasonable but I’m looking for assurance this approach might be matched in the real world.

Any insight in to this area would be greatly received.

Hi @alexwren and good question. I’m not aware that the RCGP guidance has been updated. (There is other, older, RCGP guidance which hasn’t been updated, but I’m happy to take this prompt to look into how to update it)

Not directly related to SNOMED Code Lists but there is some current work going on to try to bring CP-IS (Child Protection Information Sharing, a Spine service which ‘lives’ inside the Summary Care Record application SCRa) closer into GP systems so that: firstly, CP-IS information is natively visible in the GP clinical system, and secondly that GPs are easily able to update and add to the CP-IS data.

There are a load of shared CodeLists (but sadly none that seem to be relevant to Safeguarding) in the OpenSAFELY project:

Hi @alexwren

Sounds like it needs its own ref set in SNOMED perhaps? There is a small one there already but its not GP specific and only has 46 terms which doesn’t seem like many for such a complex area.

999002381000000108 |Safeguarding issues simple reference set (foundation metadata concept)|

Re refset.

Have you tried this tool for exploring? shrimp

You may need to register (I don’t know why you need to register, the international ones don’t need it)

I find it a lot easier to browse than some other tools, it’s more like how easy read code browsers were in the old days…

Thanks @pacharanero . I hadn’t looked too much at the CP-IS detail before so I’ll take a look. I’d looked at the the Open Codelists previously. Perhaps I’ll take the leap and see if it’d be of use to publish our attempt of a Safeguarding code list on there (with supporting authoring policy etc.) at least someone else looking in the future may have a starting point. I cant be the only one attempting this.

@john.salter Yes! Thank you. It looks a bit unloved as a reference set but I did try and leverage its use. It didn’t look to include ‘obvious’ Safeguarding concepts I’d expected to see in there (e.g. 766561000000109 |Adult safeguarding concern (finding)|). I’ve not looked at the background at how it’s been created to know if it’s relevant to my use case but its good there’s something there.

@mayfield.g.kev Thanks, I’ll admit the SNOMED browser is my Google default for viewing concepts although I’m aware there have been some issues with viewing retired/active concepts.

The link I posted above is for the new one. Not sure what’s happening with the termbrowser but I find the new one a lot easier to use

A colleague in the RCGP Health Informatics Group signposted me to this resource in the public domain

The code list is in Read V2 (because that’s what they use in Scotland) but there are available forward mapping tables (in the NHS TRUD I believe) which can take Read V2 and map to clinically assured CVT3 and then SNOMED-CT equivalents.

Thanks for your help Marcus. Much appreciated.

If I find the time I’ll author it in SNOMED and post it as an open code list.

1 Like

Hello Alex,

I am already doing a big piece of work on this sort of this - pls could you email me? (dont want to put my online)


1 Like

Hi Michelle. I’ve just emailed you.

Could I ask that if there are any useful products of the offline discussion they are shared here in the forum please? It’s super helpful to the community that more of these pieces of work are published openly so that we reduce duplication of effort across the informatics community. It’s one of the primary reasons I started this forum, because this stuff isn’t shared enough!

Sure - sometimes it can feel like shouting into the abyss.

FWIW - I have converted the Scottish Read v2 list in to SNOMED and done the same for the RCGP list (both referenced above). I’ve contacted opencodelists to see if they’d like to publish them, awaiting response. If anyone would like them, just let me know, happy to share and give you an idea of how I created them. I may need to re-author in line with future SNOMED releases. Things change!

Some potential issues for anyone attempting the same:

The Read v2 to SNOMED map is no longer maintained so some maps are to retired SNOMED concepts.

For example, the Read v2 concept, ‘13ZR. - At risk of emotional/psychological abuse’ walks to 416142000 |At risk of emotional/psychological abuse (finding)| which is retired.

I can get around this by including/assessing the equivalent live concept(s) via the SNOMED historical substitution tables which in the above example are:
‘is possibly equivalent to’:
771983008 |At risk of psychological abuse (finding)|
771984002 |At risk of emotional abuse (finding)|

That comes with a warning - only use these concepts if they fit your use case.

Some mapped terms may not be equivalent for your use case.

For example: Read v2 - ‘U3M1. Neglect and abandonment, by parent’ maps to the SNOMED concept: 52684005 |Assault (event)|

SNOMED can be broader.

For example: Read v2 ‘ZV1A3 - [V]Maternal family history of drug addiction’ walks to ‘160327004 |Family history: Drug dependency (situation)|’

Maternal now relates to family.

SNOMED may have child or other concepts worth being aware of if creating a list of reference terms. Reliance on a the map may not give you complete coverage.

For example:

Read v2 - ‘13II. - Child deserted by parents’ walks to ‘266954003 |Child deserted by parents (finding)|’ which also has the child SNOMED concept: 276098002 |Child deserted by mother (finding)|. (Note: there isn’t a father equivalent at the time of writing). You may not want to limit your reference terms to just the equivalent mapped concept.

With the RCGP list, the concepts are listed as EMIS and SytmOne concepts. As such the conversion to SNOMED is a more of a manual task that is open to interpretation but I have a list that may be a good starting point for anyone looking for one. Some similar areas to be aware of exist. Consider retired concepts. Consider other concepts in SNOMED not just the immediate seemingly mirrored concept.

The above is related to anything in SNOMED really but the starting point for me is always why I’m gathering the concepts for use.
I’ve no idea if any of that is helpful, hopefully it was!

1 Like

This is great stuff @alexwren

May I ask what you use to do the mapping process? It feels like there should be some helpful programming language libraries that could help out with the mapping, but I suspect it’s a manual task.

Would anyone be interested in trying to make something though? I don’t have experience of forward mapping in practice but I can supply the programming expertise to build something. I was also thinking of asking if anyone at OpenSAFELY would want to join in with such an endeavour. Clearly there would have to be caveats to the conversion and the codes would need manual review to ensure fitness for purpose, but that’s no reason that we can’t try to make that process easier and automate the parts that can be automated!

In this instance I’ve used the Read v2 to SNOMED UK map (Read v2 to SNOMED CT Mapping Lookup (April 2020) - Delen: Home - NHS Digital).

I have a version of the Read v2 to SNOMED map full data files that were released on TRUD that can be used to support walking between the terminologies and was my starting point in this instance to suggest the appropriate SNOMED concepts.

You could do this mapping again and given the time that has passed between the Read v2 to SNOMED map being produced, this isn’t a bad idea. I started with the production map as I needed it to be referenceable.

I am fortunate that I’ve got some internal tooling that is great for this sort of mapping and maintenance task.

I’ll happily investigate at my end to see if there’s a way we can share some of the tooling ability for people to use so they can start to understand the complexities of the process. Mapping, much like authoring reference term lists, is always a need driven task and maps produced for one use case may not be transferable to another.

It’s fairly easy for me to keep the SNOMED Safeguarding concepts up-to-date so if they are of use to anyone, just get in touch.


@alexwren would you consider posting them publicly on here, on in a GitHub repo?
(suitably Caveat Emptor’d of course)

When I look at how we handle refsets (which are the equivalent of ‘pharmaceutical compounds’ for informaticians) it really feels we’re still in the age of ‘mixing up our own drugs in the GP pharmacy’ like a scene from James Herriot. We need open tooling to supercharge the abilities of informaticians.

All of the benefits of modern therapeutics come from safe, standardised, reliable medications which can be studied and improved on. Informatics is still hand-prepping Tincture of Something Latin-named in the back rooms…

This might be useful to look at the ontology server which NHS Digital is hosting.

It does away with using TRUD and a number of codesystems and valuesets are already preloaded.


The snapper app does look like it will allow you to create a concept map. Snapper / 🔥

The shrimp app should allow you to browse.

I’ll try and get something on to GitHub and post a link back here when done. It looks like the OpenCodelists are limited to PRIMIS and OPENSafely at the moment (understandable) and its an area they are developing to enable sharing.

I think some refsets are definable and reusable. Something like QOF fits nicely as theoretically everyone is working off the same page for a calculated result.

I think others will always require an amount of tweaking dependant the use case but I do think sharing them is still valuable to share how you have ended up where you have and preventing some level of re-work.

1 Like

Do we have a good, simple, interoperable and most of all understandable standard for refsets? I don’t know of one, so could one be made? OpenSAFELY’s refsets and metadata are handled in their DB, hence it is somewhat coupled to their application (which I think is Django)

Simple refset spec (RFC)

  • A single flat file, editable anywhere including text editors and GitHub

  • Metadata as YAML in ‘front matter’ (fenced off with --- perhaps?)

  • Content is a list of SCTIDs with the text portion (as ‘comment’? or should that be dynamically filled by the tooling) But the file should be understandable in itself without reference to an external service, and human readable always.

  • Syntax to expand graph hierarchy of SNOMED, including or excluding specific SCTIDs (although I’ve always thought that having to specifically exclude some terms defeats the utility of the inheritance/parent-child feature of SNOMED)

  • Capability to ‘include’ or ‘import’ other refsets by file path or by URL or some other web repository mechanism (think like NPM, RubyGems, PyPi, etc) and specific versions

  • Versioning handled in metadata

  • Proper usage, intended purpose and “mis-use-cases” made very clear in the metadata

  • Tolerates comments within the SCTID list, to enable them to be tidily collected

Am I totally off the mark even wanting this? It feels unless we have a simple, human-readable, understandable, interchangeable way to store, manipulate and handle the refsets we will never get anywhere.


FHIR Valuesets give you most of this AFAIK @Marcus either for storage on a FHIR terminology service (or a simple Valueset store like HAPI-FHIR) or just as a set of JSON files. Becoming industry-standard. Can handle mixed terminology valuesets (I know!!), nesting.

and look for the JSON example.