International Classification Of Diseases Codes - (ICD10)
A RESTful API of internationally recognized set of diagnosis codes, diseases, signs, symptoms, abnormal findings, compliants and causes. This API centers specifically on the 10th revision which is tagged ICD-10.
For further info please refer to: https://en.wikipedia.org/wiki/ICD-10
Setup
To run this project, please refer to the below listed guide:
- First Clone the git repo
- Then cd into the directory
- Next, build the docker image by running
- Finally run the docker image.
$ git clone https://github.com/otyang/icd-10.git
$ cd icd-10/
$ docker build -t icd10-go-app .
$ docker run -p 3000:3000 -t icd10-go-app
At this time, you have a RESTful API server running at http://127.0.0.1:3000. It provides the following endpoints:
API Reference
Response structure
Conventional HTTP response codes are used to indicate the success or failure of an API request.
Status Code |
Description |
200 - OK |
Everything worked as expected |
201 - Created |
Resource was created successfully |
400 - Bad Request |
Request was unacceptable, often due to missing a required parameter. |
404 - Not Found |
The requested resource doesn't exist |
405 - Not Allowed |
Create a new diagnosis code record |
409 - Conflict |
The request conflicts with another request |
500 - Server Error |
Very rare. It means something went wrong on code end. Contact me |
Error response body
{
"success": false,
"message": "error message",
"errorCode": "internal_server_error"
}
Endpoints
HTTP Verbs |
Endpoints |
Action |
GET |
/ |
Home or welcome page to the API |
GET |
/icd/:fullCode |
Retrieve diagnosis codes by ID |
GET |
/icd?limit=20&cursor=A0101 |
List diagnosis codes in batches of 20 |
POST |
/icd |
Create a new diagnosis code record |
PUT |
/icd/:fullCode |
Edit an existing diagnosis code record |
DELETE |
/icd/:fullCode |
Delete a diagnosis code by ID |
POST |
/icd-upload |
for uploading ICD CSV files with up to 10K diagnosis code records |
Please refer to this link for full documentation:
https://github.com/otyang/icd-10/blob/main/readme-endpoints.md
Project Layout, Architectural Considerations & Tech stack
The code uses the following project layout:
.
├── cmd main entry point applications of the project
│ └── icd Entry point for the icd service
├── internal private application and library code
│ ├── event pubsub or event related library
│ ├── icd icd features: entities, handlers, repository & likes
│ ├── entity entity definitions and domain logic
├── pkg public library code.
├── config configuration library.
├── datastore helpers for working with database
├── middleware middleware related handlers library
├── logger structured and context-aware logger
└── response handles http response, errors and request
└── validators helpers to efficiently handle validation
The top level directories cmd
, internal
, pkg
are commonly found in other popular Go projects, as explained in
Standard Go Project Layout.
Within internal
and pkg
, packages are structured by features in order to achieve the so-called
screaming architecture. For example,
the icd
directory contains the application logic related with the icd-10 feature.
Within each feature package, code are organized in layers (API, entity, repository, handlers-for-http, handlers-for-events), following the dependency guidelines
as described in the clean architecture.
- Golang - An open-source programming language supported by Google.
- Sqlite Database - This is a small, fast, self-contained, high-reliability, portable and most-used, SQL database engine. I selected this to reduce dependencies and for portability.
Screenshots
Over of 71,000+ records loaded into the database.
- I added a created and updated at time
- Since csv has no primary keys, i formatted the full_code to represent the primary keys. as it is the column with unique values. Its made up by combining the category_code and diagnosis_code
Running Tests
To run tests on the endpoint, run the following command
go test -v
If you can a vscode-code editor, you can make use of the 'cmd/icd/end_points.http' file to make request and see their response.
Acknowledgment
@k4m1113 - His csv file on the icd10 codes, was what i converted and loaded into a sqlite database.
Authors
License
MIT - This project is available for use under the MIT License.