Page tree
Skip to end of metadata
Go to start of metadata

Component Identifier Service

A REST Server for managing the generation and assignment of Terminology Component Identifiers. Supports SNOMED CT Identifiers and other identifier Schemes. Pre-bundled implementations for optional generation of legacy identifiers in SNOMED CT (SNOMEDIDs and CTV3IDs)

Installation

This application requires a MySQL database running on localhost. A new Database with name "idservice" needs to be available before running the application.

Clone this project with:


$ clone https://github.com/termMed/component-identifier-service.git .

Cd to the application location and execute the schema creation scripts:

cd /opt/component-identifier-service
npm install
node config/createSchema.js dbuser=your_db_user dbpass=your_db_pass
node config/initializeIdSchemes.js dbuser=your_db_user dbpass=your_db_pass // Optional, only if Additional ids will be used

Start the Service:

node app.js dbuser=your_db_user dbpass=your_db_pass &

Now the web service and the admin tool will be available:

Component Identifiers

The application supports to basic types of component identifiers, SCTIDS and generic Identifier Schemes. SCTIDs are assigned based on namespaces, Namcespaces can be created and managed with the Api. Identifier Schemes represent additional identifiers, like SNOMEDIDs (legacy ids from previous SNOMED Versions) and CTV3IDs (legacy Ids from the UK NHS Read Codes). Other identifiers can be added using code extension points without the need for alterations in the data structure or the Api.

Current Deployed API

https://cis.ihtsdotools.org/docs/

The Identifier record

The application stores related metadata for each idenfier generated or registered in the satabase, the model for a SCTID Identifer Record is:

  "SCTIDRecord" : {
            "properties": {
                "sctid": {
                    "type": "string"
                },
                "sequence": {
                    "type": "integer"
                },
                "namespace": {
                    "type": "integer"
                },
                "partitionId": {
                    "type": "string"
                },
                "checkDigit": {
                    "type": "integer"
                },
                "systemId": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "author": {
                    "type": "string"
                },
                "software": {
                    "type": "string"
                },
                "expirationDate": {
                    "type": "string"
                },
                "comment": {
                    "type": "string"
                },
                "additionalIds": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/SchemeIdRecord"
                  }
                }
            }
        }

A similar model is used for Scheme Identifiers.

The identifiers life cyle

Identifiers are generated or regsitered using the Api, and they will change status to represent publications, reservations and other events that may make the identifer to be available again or to be defitively linked with a terminology component.

The set of valid statuses and actions are represented in the State Machine diagram included in this git project as a pdf file.

Authentication

The Application is integrated with Atlassian Crowd for authentication. Admin permissions are assgined using Crowd groups, and resources permissions.

Example REST Api calls

Integrating this service into an application will require to perform http calls to the Api, for example:

Retrieving the available namespaces for a user

GET http://localhost:3000/api/users/USERNAME/namespaces/?token=hdaskjdhakjdgy7

Generating a new SCTID for a concept in namespace 1000179

POST http://localhost:3000/api/sct/generate?token=hdaskjdhakjdgy7

(Ids metadata, like namespace and parititon is passed in the body)

See the full API Documentation in the Swagger Docs.

  • No labels