npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

joi-fhir

v0.0.5

Published

Validate FHIR data with Joi

Downloads

5

Readme

joi-fhir -- Work in progress

CircleCI experimental

Node.js utility for validating FHIR resources.

Quick start

Prerequisites

  • Node.js 6+
  • npm
  • Publish permission to joi-fhir on NPM (Only for deployment)

Installing

npm install --save joi-fhir

Examples

const validateFhir = require('joi-fhir');
const Encounter = {
  resourceType: 'Encounter',
  id: 'ENC001',
  ...
}

// Validate any generic FHIR resource
validateFhir(Encounter)
.then((validated) => console.log('Validated encounter', validated))
.catch((error) => console.log('Error validating encounter', error));

// Ensure FHIR resource matches a certain type
validateFhir(Encounter, { resourceType: 'Encounter' })
.then((validated) => console.log('Validated encounter', validated))
.catch((error) => console.log('Error validating encounter', error));

API

This module exports a single Function that accepts a FHIR resource and an options object. The function validates the FHIR resource matches the spec and returns a promise with either the validated/formatted FHIR resource or an error detailing the malformed data.

Definition

validateFhir(resource);

Parameters

| Parameter | Type | Description | | :-------- | :--- | :---------- | | resource | Object | A FHIR resource |

options

| Parameter | Type | Description | Default | | :-------- | :------- | :---------- | :----- | | resourceType | String | If provided, ensure the resource is of this type. Otherwise, allow any FHIR resource | none |

Examples

Input

encounterA

Data about an encounter.

{
  "resourceType": "Encounter",
  "status": "in-progress",
  "subject": {
    "reference": "Patient/P01"
  },
  "reason": [
    {
      "text": "Laceration to leg"
    }
  ]
}

Invocation

const validateFhir = require('@agilemd/joi-fhir');

return validateFhir(encounter)
.then((validated) => {
  ...
})
.catch((err) => {
  // Handle error
})

Output

validated/formatted Encounter

{
  "id": "31a49ff9-2d10-481c-8720-a1a3e61fa981",
  "resourceType": "Encounter",
  "status": "in-progress",
  "subject": {
    "reference": "Patient/P01"
  },
  "reason": [
    {
      "text": "Laceration to leg"
    }
  ]
}

Development

Install

Clone the source repository, cd into the joi-fhir directory, and install dependencies:

git clone [email protected]:agilemd/joi-fhir.git
cd joi-fhir
npm install

Tests

To run the unit tests:

npm test

Changes must not reduce coverage of statements, branches, and functions. To determine unit test coverage:

npm run coverage

Debug

The debug module is used for runtime logging. Omit the DEBUG environment variable to squelch all logging. Set DEBUG to the desired level (e.g. DEBUG=@agilemd/joi-fhir:SUBMODULE) to restrict logging to a desired service. Or, use DEBUG=* to get all debug output from everywhere, including dependencies.

DEBUG=@agilemd/joi-fhir* npm test

Workflow

  1. Feature development and bug fixing MUST occur on a non-master branch.
  2. All changes SHOULD be submitted to master via a Pull Request.
  3. Pull Requests SHOULD be merged via a merge commit. Local "in-process" commits may be squashed prior to pushing to the remote feature branch.

To enable a git hook that runs npm test prior to pushing, cd into the project repo and run:

touch .git/hooks/pre-push
chmod +x .git/hooks/pre-push
echo "npm test" > .git/hooks/pre-push

Build

This project follows semantic versioning. After committing the latest code to GitHub master, update the version:

npm version [major/minor/patch]

Then push the tag to GitHub and publish this package to npm:

git push origin --tags
npm publish

References

  • https://www.hl7.org/fhir/resourcelist.html

Implementation checklist

This project is a work in progress. Any defined FHIR resource will pass validation; however, only certain resources are fully validated. The table below describes which resources have complete validation and which are in progress

Support legend

| Icon | Description | | :----------------- | :---------- | | :white_check_mark: | Completely implemented | | :o: | Partially implemented | | :no_entry_sign: | Not yet implemented |

| Resource Type | Support | | :---------------------------------------------------------------------- | :-------------- | | Account | :no_entry_sign: | | ActivityDefinition | :no_entry_sign: | | AllergyIntolerance | :no_entry_sign: | | AdverseEvent | :no_entry_sign: | | Appointment | :no_entry_sign: | | AppointmentResponse| :no_entry_sign: | | AuditEvent | :no_entry_sign: | | Basic | :no_entry_sign: | | Binary | :no_entry_sign: | | BodySite | :no_entry_sign: | | Bundle | :no_entry_sign: | | CapabilityStatement| :no_entry_sign: | | CarePlan | :no_entry_sign: | | CareTeam | :no_entry_sign: | | ChargeItem | :no_entry_sign: | | Claim | :no_entry_sign: | | ClaimResponse | :no_entry_sign: | | ClinicalImpression | :no_entry_sign: | | CodeSystem | :no_entry_sign: | | Communication | :no_entry_sign: | | CommunicationRequest| :no_entry_sign: | | CompartmentDefinition| :no_entry_sign: | | Composition | :no_entry_sign: | | ConceptMap | :no_entry_sign: | | Condition | :no_entry_sign: | | Consent | :no_entry_sign: | | Contract | :no_entry_sign: | | Coverage | :no_entry_sign: | | DataElement | :no_entry_sign: | | DetectedIssue | :no_entry_sign: | | Device | :no_entry_sign: | | DeviceComponent | :no_entry_sign: | | DeviceMetric | :no_entry_sign: | | DeviceRequest | :no_entry_sign: | | DeviceUseStatement | :no_entry_sign: | | DiagnosticReport | :no_entry_sign: | | DocumentManifest | :no_entry_sign: | | DocumentReference | :no_entry_sign: | | EligibilityRequest | :no_entry_sign: | | EligibilityResponse| :no_entry_sign: | | Encounter | :no_entry_sign: | | Endpoint | :no_entry_sign: | | EnrollmentRequest | :no_entry_sign: | | EnrollmentResponse | :no_entry_sign: | | EpisodeOfCare | :no_entry_sign: | | ExpansionProfile | :no_entry_sign: | | ExplanationOfBenefit| :no_entry_sign: | | FamilyMemberHistory| :no_entry_sign: | | Flag | :no_entry_sign: | | Goal | :no_entry_sign: | | GraphDefinition | :no_entry_sign: | | Group | :no_entry_sign: | | GuidanceResponse | :no_entry_sign: | | HealthcareService | :no_entry_sign: | | ImagingManifest | :no_entry_sign: | | ImagingStudy | :no_entry_sign: | | Immunization | :no_entry_sign: | | ImmunizationRecommendation| :no_entry_sign: | | ImplementationGuide| :no_entry_sign: | | Library | :no_entry_sign: | | Linkage | :no_entry_sign: | | List | :no_entry_sign: | | Location | :no_entry_sign: | | Measure | :no_entry_sign: | | MeasureReport | :no_entry_sign: | | Media | :no_entry_sign: | | Medication | :no_entry_sign: | | MedicationAdministration| :no_entry_sign: | | MedicationDispense | :no_entry_sign: | | MedicationStatement| :no_entry_sign: | | MessageDefinition | :no_entry_sign: | | MessageHeader | :no_entry_sign: | | NamingSystem | :no_entry_sign: | | NutritionOrder | :no_entry_sign: | | Observation | :no_entry_sign: | | OperationDefinition| :no_entry_sign: | | OperationOutcome | :no_entry_sign: | | Organization | :no_entry_sign: | | Parameters | :no_entry_sign: | | Patient | :no_entry_sign: | | PaymentNotice | :no_entry_sign: | | PaymentReconciliation| :no_entry_sign: | | Person | :no_entry_sign: | | PlanDefinition | :no_entry_sign: | | Practitioner | :no_entry_sign: | | PractitionerRole | :no_entry_sign: | | Procedure | :no_entry_sign: | | ProcedureRequest | :no_entry_sign: | | ProcessRequest | :no_entry_sign: | | ProcessResponse | :no_entry_sign: | | Provenance | :no_entry_sign: | | Questionnaire | :no_entry_sign: | | QuestionnaireResponse| :no_entry_sign: | | ReferralRequest | :no_entry_sign: | | RelatedPerson | :no_entry_sign: | | RequestGroup | :no_entry_sign: | | ResearchStudy | :no_entry_sign: | | ResearchSubject | :no_entry_sign: | | RiskAssessment | :no_entry_sign: | | Schedule | :no_entry_sign: | | SearchParameter | :no_entry_sign: | | Sequence | :no_entry_sign: | | ServiceDefinition | :no_entry_sign: | | Slot | :no_entry_sign: | | Specimen | :no_entry_sign: | | StructureDefinition| :no_entry_sign: | | StructureMap | :no_entry_sign: | | Subscription | :no_entry_sign: | | Substance | :no_entry_sign: | | SupplyDelivery | :no_entry_sign: | | SupplyRequest | :no_entry_sign: | | Task | :no_entry_sign: | | TestScript | :no_entry_sign: | | TestReport | :no_entry_sign: | | ValueSet | :no_entry_sign: | | VisionPrescription | :no_entry_sign: |