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 🙏

© 2026 – Pkg Stats / Ryan Hefner

carestack-sdk

v1.0.11

Published

![Node.js](https://img.shields.io/badge/node-18.x-brightgreen) [![NPM](https://img.shields.io/npm/v/carestack.svg)](https://www.npmjs.com/package/carestack)

Readme

CareStack EHR SDK

Node.js NPM

A modern, reactive Node.js SDK for the EHR platform. This SDK simplifies integration with the API, providing type-safe, promise-based services for managing health records, appointments, ABHA/HPR workflows, and AI-powered features like document summarization and FHIR bundle generation.

Built with TypeScript and designed for asynchronous usage with async/await, it's ideal for building scalable healthcare applications.


📑 Table of Contents

✨ Key Features

This SDK supports a comprehensive suite of CareStack EHR functionalities:

  • Electronic Health Records (EHR): Secure and structured access to patient records.

  • ABHA (Ayushman Bharat Health Account) workflows: Generate, verify, and manage ABHA numbers using official NDHM APIs.

  • HPR (Healthcare Professional Registry) services: Professional identity creation and linking with ABHA.

  • HealthLake Resource Management: Interact with FHIR-compliant resources such as Patient, Practitioner, Organization, and more.

  • Appointment Management: Create, update, and retrieve patient appointment data.

  • FHIR Bundle Generation: Generate structured clinical documents in FHIR format, ready for interoperability.

  • AI-powered Document Summarization: Automatically summarize patient health documents using integrated AI services.

  • Comprehensive Resource Management:
    Full CRUD and search support for EHR resources such as Patient, Appointment, Organization, and Practitioner.

  • Workflow-Driven Services:
    Simplified step-by-step APIs for ABHA (Ayushman Bharat Health Account) and HPR (Healthcare Professional Registry) registration flows.

  • AI-Powered Document Processing:

    • Summarization: Generate concise summaries from clinical documents.
    • Entity Extraction: Extract structured data (diagnoses, medications, etc.) from free text.
    • FHIR Bundle Generation: Convert raw documents or structured JSON into HL7 FHIR-compliant bundles.
  • Asynchronous & Promise-Based:
    All APIs are fully asynchronous using modern Promise and async/await patterns.

  • Validation & Security:
    DTO-based validation and built-in support for RSA/JWE encryption of sensitive information.


🚀 Getting Started

Prerequisites

  • Node.js v18
  • An active API key for the CareStack EHR platform

Installation

Install via npm:

npm install carestack

🔐 Credential Configuration

const config = {
  apiUrl: 'your_api_url_here',
  apiKey: 'your_secret_api_key_here',
  hpridAuth: 'your-facility-hprid-auth-token' // Optional credential, mandatory for only organization related sdk services
};

🚀 Quick Start

import { CareStack } from 'carestack';

const config = {
  apiUrl: 'your_api_url_here', 
  apiKey: 'your_secret_api_key_here'
};

const carestack = new CareStack(config);
const data = await carestack.patient.findById("632df79b-67bc-415e-91d7-aa70cd99a79e");
console.log(data);

Services Overview

The SDK provides the following main services:

Core EHR Services

| Service | Description | Key Operations | |---------|-------------|----------------| | Patient | Manage patient records and demographics | Create, Read, Update, Delete, Search | | Practitioner | Handle healthcare provider information | CRUD operations, HPR integration | | Organization | Manage healthcare facilities | Organization registry, master data | | Appointment | Schedule and manage appointments | Booking, updates, availability |

AI & Document Services

| Service | Description | Key Operations | |---------|-------------|----------------| | AiService | AI-powered document generation | Discharge summaries, FHIR bundles | | DocumentLinking | Link health documents with care contexts | Multi-step workflow orchestration | | Encounter | Healthcare encounter workflows | FHIR generation, discharge processing |

Healthcare Identity Workflows

| Service | Description | Key Operations | |---------|-------------|----------------| | CreateABHA | ABHA registration workflows | Multi-step OTP verification | | CreateHPR | HPR registration processes | Professional registry enrollment |


Detailed Service Guide

Patient Resource Management

import { CareStack } from 'carestack';

const config = {
  apiUrl: 'your_api_url_here', 
  apiKey: 'your_secret_api_key_here'
};

const carestack = new CareStack(config);

#### Creating the Patient Resource

    // Input:
    const data = await carestack.patient.create({
      idNumber: "123456789012",
      idType: PatientIdTypeEnum.AADHAAR,
      abhaAddress: "[email protected]",
      patientType: PatientTypeEnum.REGULAR,
      firstName: "John",
      lastName: "Doe",
      birthDate: "1990-01-01",
      gender: 'male',
      mobileNumber: "+911234563291",
      emailId: "[email protected]",
      address: "123 Main St, Anytown, Anystate",
      pincode: "560001",
      state: StatesAndUnionTerritories.KARNATAKA,
      resourceType: "Patient"
    });
    console.log(data);

    // Expected Output:
    {
      message: 'Successfully created the Patient profile',
      type: 'Patient',
      resourceId: '791708f6-de6d-439e-bece-041e5d64e463',
      validationErrors: [],
      fhirProfileId: '',
      resource: {
        firstName: 'John',
        lastName: 'Doe',
        birthDate: '1990-01-01',
        gender: 'male',
        mobileNumber: '*********3291',
        emailId: '[email protected]',
        address: '123 Main St, Anytown, Anystate, 12345',
        pincode: '560001',
        resourceType: 'Patient',
        // ... other fields
      }
    }

#### Updating the Patient Resource

    // Input:
    const updatedPatient = await carestack.patient.update({
      "resourceType": "Patient",
      "resourceId": "791708f6-de6d-439e-bece-041e5d64e463",
      "emailId": "[email protected]",
      "mobileNumber": "+919182853291"
    });
    console.log(updatedPatient);

    // Expected Output:
    {
      message: 'Details Updated successfully',
      type: 'Patient',
      resource: {
        firstName: 'Vijaya',
        middleName: 'A',
        lastName: 'Doe',
        birthDate: '1980-01-01',
        gender: 'male',
        // ... other fields
      }
    }

#### Retrieving the Patient Resource by resource ID

    // Input:
    const patient = await carestack.patient.findById("123e4567-e89b-12d3-a456-426614174000");
    console.log(patient);

    // Expected Output:
    {
      type: 'Patient',
      message: 'Patient Found !!!',
      requestResource: {
          firstName: 'Sreenivasa',
          birthDate: '2025-07-23', 
          gender: 'male',
          mobileNumber: '*********0000',
          emailId: '',
          // ... other fields
      },
      totalNumberOfRecords: 1
    }

    // ... other methods

Practitioner Resource Management

import { CareStack } from 'carestack';

const config = {
  apiUrl: 'your_api_url_here', 
  apiKey: 'your_secret_api_key_here'
};

const carestack = new CareStack(config);

#### Creating the Practitioner Resource

    // Input:
    const createPractitioner = {
      registrationId: "1234567458",
      department: "urology",
      designation: "surgeon",
      status: "Active",
      joiningDate: "2023-05-15",
      staffType: "Full-Time",
      firstName: "Baipalli",
      middleName: "A",
      lastName: "Rama Rao",
      birthDate: "1980-12-25",
      gender: "male",
      mobileNumber: "+919182856790",
      emailId: "[email protected]",
      address: "123 Main Street, Cityville",
      pincode: "560001",
      state: "Karnataka",
      wantsToLinkWhatsapp: true,
      photo: "base64EncodedPhotoString",
      resourceType: "Practitioner"
    };

    const result = await carestack.practitioner.create(createPractitioner);
    console.log(result);

    // Expected Output:
    {
      message: "Successfully created the Practitioner profile",
      type: "Practitioner",
      resourceId: "43a0f739-0c54-4b9f-ab4b-08afbed0bf3c",
      validationErrors: [],
      fhirProfileId: "",
      resource: {
        firstName: "Baipalli",
        lastName: "Rama Rao",
        birthDate: "1980-12-25",
        registrationId: "1234567458",
        resourceId: "43a0f739-0c54-4b9f-ab4b-08afbed0bf3c",
        // ... other fields
      }
    }

#### Updating the Practitioner Resource

    // Input:
    const updatedData: UpdatePractitionerDTO = {
      registrationId: "PR12345",
      department: "Cardiology",
      designation: "Senior Surgeon",
      status: "Active",
      joiningDate: "2022-07-01",
      staffType: "Permanent",
      firstName: "Arjun",
      lastName: "Rao",
      birthDate: "1985-12-20",
      gender: "male",
      mobileNumber: "+911234567890",
      emailId: "[email protected]",
      address: "123 Hospital Road",
      pincode: "500001",
      state: "Telanagana",
      resourceType: "practitioner"
    };

    const result = await carestack.practitioner.update(updatedData);
    console.log(result);

    // Expected Output:
    {
      message: 'Details Updated successfully',
      type: 'Practitioner',
      resource: {
        firstName: 'Vijaya',
        middleName: 'A',
        lastName: 'Doe',
        //...Other Details
      }
    }

#### Retrieving the Practitioner Resource by resource ID

    // Input:
    const practitioner = await carestack.practitioner.findById("767113fd-aaaf-492f-8226-347f804757b6");
    console.log(practitioner);

    // Expected Output:
    {
      type: 'Practitioner',
      message: 'Practitioner Found !!!',
      requestResource: {
        firstName: 'Nandamuri',
        lastName: 'Taraka Rama Rao',
        birthDate: '1980-12-25',
        registrationId: '1234567890',
        resourceId: '767113fd-aaaf-492f-8226-347f804757b6',
        gender: 'male',
        // ...other fields
      },
      totalNumberOfRecords: 1
    }

    // ... other methods

Organization Management

import { CareStack } from 'carestack';

const config = {
  apiUrl: 'your_api_url_here', 
  apiKey: 'your_secret_api_key_here'
};

const carestack = new CareStack(config);

#### Creating the Organization 

    // Input:
    const response = await carestack.organization.register({
      basicInformation: {
          address: "123 Main Street, Hyderabad",
          state: "Telangana",
          pincode: "500001",
          contactNumber: "+919876543210"
        },
        // ... other organization fields
    });
    console.log(message);

    // Expected Output:
    "Facility added successfully. Your facility ID is IN6778"

#### Updating the Organization

    // Input:
    const response = await carestack.organization.update({
      id: "org-123",
      spocName: "Dr. Sneha",
      spocId: "spoc-001",
      consentManagerName: "Health Consent Inc.",
      consentManagerId: "cm-001"
    });

    // Expected Output:
    "Spoc and Consent Manager added Successfully"

    // ... other methods

ABHA Registration Workflow

#### Step 1: Register With Aadhaar

    // Input:
    const requestAadhaarOtpPayload = { aadhaar: '123456789012' };
    const aadhaarOtpResponse = await carestack.patient.abha.createAbha('RegisterWithAadhaar', requestAadhaarOtpPayload);

    // Expected Output:
    {
      "success": true,
      "message": "OTP sent successfully...",
      "response": {
        "txnId": "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6"
      },
      "nextStep": "VerifyAadhaarOtp",
      "nextStepHint": "Please enter the OTP..."
    }

#### Step 2: Verify Aadhaar OTP

    // Input:
    const verifyAadhaarOtpPayload = {
      otp: '123456',
      txnId: 'a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6',
      mobile: '9876543210'
    };
    const aadhaarVerificationResponse = await carestack.patient.abha.createAbha('VerifyAadhaarOtp', verifyAadhaarOtpPayload);

    // Expected Output:
    {
      "success": true,
      "message": "Aadhaar OTP verified successfully.",
      "response": {
        "ABHAProfile": { "mobile": "9876543210", "...": "..." }
      },
      "nextStep": "GetAbhaAddressSuggestions",
      "nextStepHint": "Mobile number is already verified. Proceed to select ABHA address."
    }
    // ... Workflow continues with other steps

HPR Registration Workflow

import  {CareStack} from 'carestack';
const config = {
  apiUrl: 'your_api_url_here', 
  apiKey: 'your_secret_api_key_here'         
};
const carestack = new CareStack(config);

#### Step 1: Register With Aadhaar

    // Input:
    const requestAadhaarOtpPayload = { aadhaar: '123456789012' };
    const aadhaarOtpResponse = await carestack.practitioner.hpr.createHpr(HprSteps.RegisterWithAadhaar, requestAadhaarOtpPayload);

    // Expected Output:
    {
      "success": true,
      "message": "OTP sent successfully...",
      "response": {
        "txnId": "a1b2c3d4-e5f6-4a5b-8c9d-e1f2a3b4c5d6",
        "mobileNumber": "******3210"
      },
      "nextStep": "VerifyAadhaarOtp",
      "nextStepHint": "Enter txnId and OTP to verify mobile number."
    }

#### Step 2: Verify Aadhaar OTP

    // Input:
    const verifyAadhaarOtpPayload = {
      otp: '123456',
      txnId: 'a1b2c3d4-e5f6-4a5b-8c9d-e1f2a3b4c5d6'
    };
    const aadhaarVerificationResponse = await carestack.practitioner.hpr.createHpr(HprSteps.VerifyAadhaarOtp, verifyAadhaarOtpPayload);

    // Expected Output:
    {
      "success": true,
      "message": "Aadhaar OTP verified successfully.",
      "response": {
        "txnId": "a1b2c3d4-e5f6-4a5b-8c9d-e1f2a3b4c5d6",
        "name": "Dr. Priya Sharma",
        "gender": "F",
        "birthdate": "15-08-1990",
        "state": "Telangana",
        "district": "Hyderabad"
      },
      "nextStep": "CheckAccountExists",
      "nextStepHint": "Please provide txnId to check account existence."
    }

    // ...  Workflow continues with other steps

Appointment Resource Management

import  {CareStack} from 'carestack';
const config = {
  apiUrl: 'your_api_url_here', 
  apiKey: 'your_secret_api_key_here'         
};
const carestack = new CareStack(config);

#### Creating the Appointment Resource

    // Input:
    const appointment = {
      patientReference: "a8654878-4202-4b47-bcc4-868060a75254",
      practitionerReference: "3c7271bb-4212-4291-9f75-64d886d69893",
      appointmentStartDate: "2025-02-28T09:00:00Z",
      appointmentEndDate: "2025-02-28T10:00:00Z",
      appointmentPriority: "Emergency",
      organizationId: "org123",
      appointmentSlot: "slot123",
      reference: "ref123"
    };

    const result = await carestack.appointment.create(appointment);
    console.log(result);

    // Expected Output:
    {
      message: 'Successfully created the Appointment profile',
      type: 'Appointment',
      resourceId: '2d9f1cfb-3ab0-4697-907a-78431678df1e',
      validationErrors: [],
      fhirProfileId: '',
      resource: {
        reference: '2d9f1cfb-3ab0-4697-907a-78431678df1e',
        practitionerReference: '3c7271bb-4212-4291-9f75-64d886d69893',
        patientReference: 'a8654878-4202-4b47-bcc4-868060a75254',
        priority: 'Emergency',
        slot: '02:30 PM - 03:30 PM',
        start: '2025-02-28T09:00:00Z',
        end: '2025-02-28T10:00:00Z',
        organizationId: 'ACHALA_HEALTH_01'
      }
    }

#### Retrieving a Appointment Resource by resource ID

    // Input:
    const appointment = await carestack.appointment.findById("d7d79e4c-a3db-4505-877d-f853610b7c4a");
    console.log(appointment);

    // Expected Output:
    {
      type: 'Appointment',
      message: 'Appointment Found !!!',
      requestResource: {
        reference: 'd7d79e4c-a3db-4505-877d-f853610b7c4a',
        practitionerReference: '3c7271bb-4212-4291-9f75-64d886d69893',
        patientReference: 'a8654878-4202-4b47-bcc4-868060a75254',
        priority: 'Emergency',
        slot: '02:30 PM - 03:30 PM',
        start: '2025-02-28T09:00:00Z',
        end: '2025-02-28T10:00:00Z',
        organizationId: 'ACHALA_HEALTH_01'
      },
      totalNumberOfRecords: 1
    }

  // ... other Methods

AI-Powered Discharge Summary and OpConsulation Generation from File URLs

import  {CareStack} from 'carestack';
const config = {
  apiUrl: 'your_api_url_here', 
  apiKey: 'your_secret_api_key_here'        
};
const carestack = new CareStack(config);

#### Generating Discharge Summary from File URL

    // Input:
    const processDSDto = {
      files: [
        'https://example-bucket.s3.amazonaws.com/discharge1.pdf',
        'https://example-bucket.s3.amazonaws.com/discharge2.pdf'
      ],
      publicKey: '-----BEGIN PUBLIC KEY-----...'
    };
    const summary = await carestack.ai.generateDischargeSummary(processDSDto);
    console.log('Discharge Summary:', summary);

    // Expected Output:
    Discharge Summary : {
      "id": "1db63a9f-ac82-41fa-b50b-69a09c2c839e",
      "dischargeSummary": {
        "patientDetails": {
          "Name": "MR. ARUN KUMAR MITRA",
          "Age": "81 Years",
          "Gender": "MALE",
          "RegNo": "600174610"
          // ...other details
        }
      },
      "extractedData": {
        "Patient Details": {
          "Name": "MR. ARUN KUMAR MITRA",
          "Age": "81 Years",
          "Sex": "MALE",
          "Date of Birth": "08/08/1943"
          // ...other details
        }
      },
      "fhirBundle": {}
    }

#### Generating OpConsultation from File URL

    // Input:
    const processDSDto = {
      files: [
        'https://example-bucket.s3.amazonaws.com/op-note1.pdf',
        'https://example-bucket.s3.amazonaws.com/op-note2.pdf'
      ],
      publicKey: '-----BEGIN PUBLIC KEY-----...'
    };
    const extractedText = await carestack.ai.extractOpCaseData(processDSDto);
    console.log('Extracted OP Case Data:', extractedText);

    // Expected Output:
    Extracted OP Case Data : {
      "id": "1db63a9f-ac82-41fa-b50b-69a09c2c839e",
      "OPCaseData": {
        "patientDetails": {
          "Name": "MR. ARUN KUMAR MITRA",
          "Age": "81 Years",
          "Gender": "MALE",
          "RegNo": "600174610"
          // ...other details
        }
      },
      "extractedData": {
        "Patient Details": {
          "Name": "MR. ARUN KUMAR MITRA",
          "Age": "81 Years",
          "Sex": "MALE",
          "Date of Birth": "08/08/1943"
          // ...other details
        }
      },
      "fhirBundle": {}
    }

#### Generating Fhir Bundle from Json Payload

    // Input:
    const extractedData = {
      "chiefComplaints": "Severe headache and nausea for the past 1 day",
      "physicalExamination": {
        "bloodPressure": { "value": "140/90", "unit": "mmHg" },
        "heartRate": { "value": "88", "unit": "bpm" },
        "respiratoryRate": { "value": "18", "unit": "breaths/min" },
        "temperature": { "value": "98.7", "unit": "°F" },
        "oxygenSaturation": { "value": "97", "unit": "%" },
        "height": { "value": "160", "unit": "cm" },
        "weight": { "value": "60", "unit": "kg" }
      },
      "conditions": ["Migraine (suspected)"],
      "medicalHistory": [
        { "condition": "Hypothyroidism diagnosed 3 years ago", "procedure": "None" }
      ],
      "familyHistory": [
        {
          "relation": "Sister",
          "healthNote": "Diagnosed with migraine at age 22",
          "condition": "Migraine"
        }
      ],
      "allergies": ["No known drug allergies"],
      "immunizations": ["Tetanus booster taken 2 years ago, Lot number: TET987, Expiry: 2026-06-30"],
      "investigations": {
        "observations": {
          "serumCreatinine": { "value": "1.1", "unit": "mg/dL" },
          "sodium": { "value": "138", "unit": "mmol/L" },
          "potassium": { "value": "4.2", "unit": "mmol/L" }
        },
        "status": "preliminary",
        "recordedDate": "2024-07-12"
      },
      "prescribedMedications": [
        "Sumatriptan 50 mg – once at onset – oral – for migraine",
        "Ondansetron 4 mg – as needed – oral – for nausea"
      ],
      "currentProcedures": [
        {
          "description": "Appendectomy surgery",
          "complications": "No postoperative complications"
        }
      ],
      "advisoryNotes": [
        "Avoid bright lights and loud noises",
        "Take rest in a dark, quiet room during episodes"
      ],
      "followUp": [
        "Review after MRI report – OP-87954 – In-person"
      ]
    };

    const dto = {
      extractedData: extractedData,
      enabledExtraction: true,
      caseType: "OPConsultation",
      patientDetails: {
        "firstName": "Ravi",
        "middleName": "Kumar",
        "lastName": "Sharma",
        "birthDate": "1980-05-20",
        // ... other patient details
      },
      practitionerDetails: [{
        "firstName": "Anita",
        "middleName": "S.",
        "lastName": "Verma",
        "birthDate": "1975-08-15",
        "gender": "female",
        "mobileNumber": "+919812345678",
        // ... other practitioner details
      }]
    };

    const response = await carestack.ai.generateFhirBundle(dto);
    console.log(response);

    // Expected Output:
    {
      resourceType: "Bundle",
      id: '7b3b5fef-7fd1-437b-940d-a55b64add446',
      meta: {
        lastUpdated: '2025-08-01T06:00:56.737721544Z',
        profile: [
          'https://nrces.in/ndhm/fhir/r4/StructureDefinition/DocumentBundle'
        ],
        security: [ [Object] ],
        versionId: '1'
      },
      identifier: {
        system: 'http://hip.in',
        value: '95328b17-adbf-49a0-b526-cd1ad8519e1c'
      },
      type: 'document',
      timestamp: '2025-08-01T06:00:56.308Z',
      entry: [
        {
          "resource": {
            "resourceType": "Patient",
            "name": [
              { "text": "John Doe" }
            ]
          }
        },
        // ... other entries
      ]
      // ... other entries
    }

Generating a FHIR Bundle from Health Information Data

This method supports two modes of input:

  1. File-based: Processes files provided in the dto.caseSheets array.
  2. JSON-based: Processes JSON payload provided in dto.payload, which must match one of the supported HI types.
  • In both cases, if the enableExtraction flag is set to false, document references will be mandatory.
  • patientDetails and practitionerDetails are mandatory for case-2 (JSON-based processing), irrespective of the enableExtraction flag.
  • PatinetDetails and PractitionerDetails are optional for case-1 (file-based processing) if enableExtraction is set to true. If easeExtraction is false, these details are mandatory.

Usage

// Case 1: Generating FHIR bundle from a case sheets url/base64 string of Health Document file

const fileData = {
  caseType: "OPConsultation",
  enableExtraction: true,
  dto: {
    caseSheets: ["base64_string_or_file_url"]
  }
};
const bundle = await carestack.encounter.create(fileData);
console.log("FHIR bundle generated:", bundle);

// Expected Output:
FHIR bundle generated: {
  id: '7b3b5fef-7fd1-437b-940d-a55b64add446',
  meta: {
    lastUpdated: '2025-08-01T06:00:56.737721544Z',
    profile: [
      'https://nrces.in/ndhm/fhir/r4/StructureDefinition/DocumentBundle'
    ],
    security: [ [Object] ],
    versionId: '1'
  },
  identifier: {
    system: 'http://hip.in',
    value: '95328b17-adbf-49a0-b526-cd1ad8519e1c'
  },
  type: 'document',
  timestamp: '2025-08-01T06:00:56.308Z',
  entry: [
    {
      fullUrl: 'urn:uuid:43cb61d7-d59d-4935-b4ef-bd411f9e034c',
      resource: [Object]
    },
    {
      fullUrl: 'urn:uuid:37570edb-0a0d-4b6b-bc5f1ddb0853b',
      resource: [Object]
    },
    // ...Other Details
  ],
  resourceType: 'Bundle'
}

// Case 2: Generating FHIR bundle from a Health Information sections JSON payload

const rawData = {
  caseType: "OPConsultation",
  enableExtraction: true,
  patientDetails: {
    "firstName": "Ravi",
    "middleName": "Kumar",
    "lastName": "Sharma",
    "birthDate": "1980-05-20",
    // ... other patient details
  },
  practitionerDetails: [{
    "firstName": "Anita",
    "middleName": "S.",
    "lastName": "Verma",
    "birthDate": "1975-08-15",
    "gender": "female",
    "mobileNumber": "+919812345678",
    // ... other practitioner details
  }],
  dto: {
    payload: {
      "chiefComplaints": "Severe headache and nausea for the past 1 day",
      "physicalExamination": {
        "bloodPressure": { "value": "140/90", "unit": "mmHg" },
        "heartRate": { "value": "88", "unit": "bpm" },
        "respiratoryRate": { "value": "18", "unit": "breaths/min" },
        "temperature": { "value": "98.7", "unit": "°F" },
        "oxygenSaturation": { "value": "97", "unit": "%" },
        "height": { "value": "160", "unit": "cm" },
        "weight": { "value": "60", "unit": "kg" }
      },
      "conditions": ["Migraine (suspected)"],
      "medicalHistory": [
        { "condition": "Hypothyroidism diagnosed 3 years ago", "procedure": "None" }
      ],
      "familyHistory": [
        {
          "relation": "Sister",
          "healthNote": "Diagnosed with migraine at age 22",
          "condition": "Migraine"
        }
      ],
      "allergies": ["No known drug allergies"],
      "immunizations": ["Tetanus booster taken 2 years ago, Lot number: TET987, Expiry: 2026-06-30"],
      "investigations": {
        "observations": {
          "serumCreatinine": { "value": "1.1", "unit": "mg/dL" },
          "sodium": { "value": "138", "unit": "mmol/L" },
          "potassium": { "value": "4.2", "unit": "mmol/L" }
        },
        "status": "preliminary",
        "recordedDate": "2024-07-12"
      },
      // ... other fields
    }
  }
};

const bundle = await carestack.encounter.create(rawData);
console.log("FHIR bundle generated:", bundle);

// Expected Output:
FHIR bundle generated: {
  id: '7b3b5fef-7fd1-437b-940d-a55b64add446',
  meta: {
    lastUpdated: '2025-08-01T06:00:56.737721544Z',
    profile: [
      'https://nrces.in/ndhm/fhir/r4/StructureDefinition/DocumentBundle'
    ],
    security: [ [Object] ],
    versionId: '1'
  },
  identifier: {
    system: 'http://hip.in',
    value: '95328b17-adbf-49a0-b526-cd1ad8519e1c'
  },
  type: 'document',
  timestamp: '2025-08-01T06:00:56.308Z',
  entry: [
    {
      fullUrl: 'urn:uuid:43cb61d7-d59d-4935-b4ef-bd411f9e034c',
      resource: [Object]
    },
    {
      fullUrl: 'urn:uuid:37570edb-0a0d-4b6b-bc5e-c5f1ddb0853b',
      resource: [Object]
    },
    ...Other Details
  ],
  resourceType: 'Bundle'
}

Linking the Health Document to ABHA

import  {CareStack} from 'carestack';
const config = {
  apiUrl: 'your_api_url_here', 
  apiKey: 'your_secret_api_key_here'        
};
const carestack = new CareStack(config);

// Input:
const linkingData = {
  patientReference: "a8654878-4202-4b47-bcc4-868060a75254",
  practitionerReference: "3c7271bb-4212-4291-9f75-64d886d69893",
  patientAddress: "123 Main St, Springfield, IL",
  patientName: "John Doe",
  appointmentStartDate: "2025-02-28T09:00:00Z",
  appointmentEndDate: "2025-02-28T10:00:00Z",
  organizationId: "org123",
  appointmentReference: "3c832da8-9cfd-446b-be1c-4a8d01f39374",
  patientAbhaAddress: "sbx@sbx",
  hiType: "OPConsultation",
  mobileNumber: "+911234567890",
  healthRecords: [
    {
      rawFhir: false,
      fhirDocument: null,
      informationType: "OPConsultation",
      dto: {
        chiefComplaints: "Severe headache and nausea for the past 1 day",
        physicalExamination: {
          bloodPressure: { value: "140/90", unit: "mmHg" },
          heartRate: { value: "88", unit: "bpm" },
          respiratoryRate: { value: "18", unit: "breaths/min" },
          temperature: { value: "98.7", unit: "°F" },
          oxygenSaturation: { value: "97", unit: "%" },
          height: { value: "160", unit: "cm" },
          weight: { value: "60", unit: "kg" }
        },
        conditions: ["Migraine (suspected)"],
        //... other fields
      }
    }
  ]
};
const result = await linkHealthDocument.linkHealthDocument(linkingData);
console.log(result);

// Expected Output:
true

📚 Documentation

For a deep dive into all available services, methods, and DTOs, please refer to our complete SDK documentation:

👉 View the Official Documentation


🛠️ Building from Source

To build the SDK from the source code, use the following command

npm run build

🧪 Running Tests

To execute the unit tests for the SDK, run:

npm test

📄 License

This SDK is licensed under the MIT License. See the LICENSE file for more details.