Click here to Skip to main content
Click here to Skip to main content
Go to top

Introduction to Continuity of Care Record (CCR)

, 21 Mar 2013
Rate this:
Please Sign up or sign in to vote.
In this article we will see an introduction to CCR - Continuity of Care Record, what it is, and where it is used, etc.

Disclaimer

This is a beginner or intermediate level article. Please note the code that I have shared with you is a building block for generating the CCR, it's not a complete code to generate one.

Please feel free to use it. However never forget to include the Apache license information wherever applicable. Many things I have reused so please see the reference section for more information.

Terminologies

  • CCR -  Continuity of Care Record
  • EHR - Electronic Health Record
  • EMR - Electronic Medical Record
  • AAFP - American Academy of Family Physicians
  • HIMSS - Health Information Management and Systems Society
  • RHIO - Regional Health Information Organization  
  • HIS - Hospital Information System 

Introduction

A Continuity of Care Record (CCR) is a snapshot of patient information that allows one electronic medical records (EMR) system to send information about a medical patient to another EHR/EMR. Because the CCR is in a standard format, all EHRs or EMRs should theoretically be able to read it.

The CCR is an XML based standard used to exchange patient health information electronically from one system to another. It's a standard designed jointly by ASTM International, HIMSS - Health Information Management and Systems Society, and AAFP - American Academy of Family Physicians.

The purpose of this standard is to improve patient care, reduce medical errors, and provide interoperability when it comes to exchanging patient health information if the patient happens to be referred or transferred or otherwise seen by another provider.

CCR briefly includes patient, provider, insurance information. Also the patient’s health status includes allergies, medications, vital signs, diagnoses, recent procedures etc

Because the CCR is an XML standard document, it will be both machine and human readable, and the data content may be displayed or printed in a variety of formats, including by web browser, PDF reader, and word processor.

Below picture shows how a Healthcare Provider can export or share the patient information to a Care Provider.

Below picture shows the usage of CCR document. You can see the CCR record is being generated via a physician's EHR and transmitted to a EHR system accessible by patient /physician or other systems.

Contents of CCR

Header or Document Identifying Information

Contains required information about the referring clinician, as well as information about the referral or "to" provider, and document date.

Patient Identifying Information

Includes the required information to identify and distinguish the patient throughout the referral process, transitioning to and from hospital, clinic, physician office, or home environments (any care setting).

The CCR can be used in both a centralized system and/or federated or distributed identification system that links various providers and contains the minimal set of identifying information that could be used by any record system, it may be either paper or electronic to assign the individual their own identifier.

Patient’s Insurance and Financial Information: This individual’s Medicare or commercial insurance information. Data elements include Insurance Company Name, Subscriber’s Name, Subscriber’s Date of Birth, Subscriber’s Member ID, and Other Insurance Information. These are the minimal data elements from which eligibility for insurance coverage may be determined.

Health Status of the Patient:

This section includes the following information:

Diagnoses, Problems, and Conditions are preferably ranked by order of importance or in reverse chronological order. They are described in plain English and by code, according to the selected coding system. Also included are date of onset, date of most recent resolution, status, patient awareness of condition, family history, social history, and a source field. Adverse Reactions/Alerts lists allergies by agent and symptom with optional fields for source and date of last reaction, as well as other pertinent alerts about the patient.

Current Medications

Listed by brand name, generic name (optional), code system, code, start date, dose, schedule, refills, prescriber, status, and a comments field.

Immunizations documentation

This section includes information about each disease against which immunization was given, the date the immunization was received, and (optional) dose strength, unit and route of administration as well as manufacturer and lot#.

Vital Signs documentation

This section includes information about patients height, weight, blood pressure, temperature, respiratory rate, date vital signs were recorded, pulse oximetry, and optional peak expiratory flow rate (PEFR), as well as head circumference (for Pediatrics).

Laboratory Results

This section includes blood sugar, urine protein, creatinine, sodium, potassium, hemoglobin, hematocrit, WBC, and the date the sample was taken.

Procedures

This section includes descriptions of procedures, code system, procedure code, procedure date and time, location, result and performed by whom. Also included here are assessments, such as mental health assessment, functional assessment.

Health Status

This section may be amplified in the optional “extension” for medical specialty-specific information. For instance, pediatric providers may want to include a growth chart in the CCR.

Care Documentation

This section includes some detail on the patient-clinician encounter history, such as the dates and times of recent and pertinent visits and the purposes of the visits and names of clinicians or providers. This documentation section may be significantly expanded in the optional “extensions”.

Care Plan Recommendation

The Care Plan is a free text entry section that includes planned or scheduled tests, procedures, or regimens of care.

CCR Validators

One can make use of open source or implement a CCR validator (with the help of CCR XSD) and make sure the generated CCR is valid for exporting to other systems.

Here's one, you can give a try with it http://sourceforge.net/projects/ccrvalidator/

Background

Healthcare background knowledge is required to understand the terminologies and concepts of healthcare system.

Using the code

I have reused and refractored most of the code from OSEHRA - MDO project in github - https://github.com/OSEHRA/mdo

Below is the code block of CCRHelper, which is primarily used for building Medication, Problems, Lab, Allergy and Patient section information. We are building this with the help of helper classes which are responsible for constructing the section information.

public class CCRHelper
{
    public StructuredProductType buildMedObject(string medName, string medId,
       string startDate, string stopDate, string issueDate, string fillDate, string expirationDate,
       string sig, string strength, string units, string form, string dose, string frequency, string route,
       string refills, string fillsRemaining, string quantity, string authorName, string authorId,
       string status, string rxType)
    {
        var medicationHelper = new MedicationHelper();
        return medicationHelper.buildMedObject(medName, medId, startDate, stopDate, 
            issueDate, fillDate, expirationDate, sig, strength, units,
            form, dose, frequency, route, refills, fillsRemaining, 
            quantity, authorName, authorId, status, rxType);
    }

    public ProblemType buildProblemObject(string problemName, string problemId,
        string startDate, string stopDate, string entered, string lastUpdated, 
        string providerName, 
        string codingSystem, string codingValue, string codingVersion,
        string statusCode, string statusText)
    {
        var problems = new ProblemsHelper();
        return problems.buildProblemObject(problemName, problemId, startDate, 
            stopDate, entered, lastUpdated, providerName, codingSystem,
            codingValue, codingVersion, statusCode, statusText);
    }

    public TestType buildLabObject(string id, string accessionNumber, 
        string testType, string specimen, string status,
        string collectedDate, string completedDate,
        string result, string units, string codingValue, string codingSystem, 
        string normalLow, string normalHigh)
    {
        var labHelper = new LabHelper();
        return labHelper.buildLabObject(id, accessionNumber, testType, specimen, 
            status, collectedDate, completedDate, result, units, codingValue,
            codingSystem, normalLow, normalHigh);
    }

    public AlertType buildAllergyObject(string id, string localId, string name, 
        string allergyType, string allergyTypeCode,
        string enteredDate, string verifiedDate, string status,
        IList<string> reactions)
    {
        var allergyHelper = new AllergyHelper();
        return allergyHelper.buildAllergyObject(id, localId, name, allergyType, 
          allergyTypeCode, enteredDate, verifiedDate, status, reactions);
    }

    public ActorType buildPatientObject(string id, string ssn, 
        string firstname, string lastName, string middleName,
        string dob, string age, string gender, DemographicSet demogs)
    {
        var patientHelper = new PatientHelper();
        return patientHelper.buildPatientObject(id, ssn, firstname, 
                 lastName, middleName, dob, age, gender, demogs);
    }
}

Let us see the code blocks for few of the helper classes used as a basic building block for the generation of CCR.

Below is the code block for AllergyHelper.

The basic information required here is the AllergyId, Name, Type, Allergy status, Allergy reactions if any etc.

public class AllergyHelper
{
public AlertType buildAllergyObject(string id, string localId, string name, 
    string allergyType, string allergyTypeCode,
    string enteredDate, string verifiedDate, string status,
    IList<string> reactions)
{
    AlertType allergy = new AlertType();

    allergy.Description = new CodedDescriptionType() { Text = name };

    DateTimeType entered = new DateTimeType() { ExactDateTime = enteredDate, 
      Type = new CodedDescriptionType() { Text = "Entered date" } };
    DateTimeType verified = new DateTimeType() { ExactDateTime = verifiedDate, 
      Type = new CodedDescriptionType() { Text = "Verified date" } };
    allergy.DateTime = new List<datetimetype>() { entered, verified };

    IDType id1 = new IDType() { ID = id, Type = new CodedDescriptionType() { Text = "ID" } };
    IDType id2 = new IDType() { ID = localId, Type = new CodedDescriptionType() { Text = "Local ID" } };
    allergy.IDs = new List<idtype>() { id1, id2 };

    allergy.Type = new CodedDescriptionType() { Text = allergyType, Code = 
      new List<codetype>() { new CodeType() { Value = allergyTypeCode } } };
    allergy.Status = new CodedDescriptionType() { Text = status };

    allergy.Reaction = new List<reaction>();
    if (reactions != null && reactions.Count > 0)
    {
        foreach (string reaction in reactions)
        {
            allergy.Reaction.Add(new Reaction() { Description = new CodedDescriptionType() { Text = reaction } });
        }
    }

    return allergy;
}

Below is the code block for LabHelper.

The lab test section includes some of the information like Id, TestType, Specimen, Status, Collection date, Completion date, Lab Results, Units, Coding Systems, Normal and High value. Note - The IdType, TestType, TestResultType instances are created based on ContinuityOfCareRecord class which is auto-generated from CCR XSD.

public class LabHelper
{
    public TestType buildLabObject(string id, string accessionNumber,
        string testType, string specimen, string status,
        string collectedDate, string completedDate,
        string result, string units, string codingValue, string codingSystem,
        string normalLow, string normalHigh)
    {
        TestType test = new TestType();
        test.NormalResult = new List<normaltype>();
        test.NormalResult.Add(new NormalType() { Value = normalLow + " - " + normalHigh });

        test.Description = new CodedDescriptionType() { Text = testType + " - " + specimen };
        test.Description.Code = new List<codetype>();
        test.Description.Code.Add(new CodeType() { Value = codingValue, CodingSystem = codingSystem });

        test.Status = new CodedDescriptionType() { Text = status };

        DateTimeType collected = new DateTimeType() { ExactDateTime = collectedDate, 
          Type = new CodedDescriptionType() { Text = "Collection date" } };
        DateTimeType completed = new DateTimeType() { ExactDateTime = completedDate, 
          Type = new CodedDescriptionType() { Text = "Completed date" } };
        test.DateTime = new List<datetimetype>() { collected, completed };

        IDType testId = new IDType() { ID = id, Type = new CodedDescriptionType() { Text = "ID" } };
        IDType accessionId = new IDType() { ID = accessionNumber, Type = 
          new CodedDescriptionType() { Text = "Accession number" } };
        test.IDs = new List<idtype>() { testId, accessionId };

        TestResultType testResult = new TestResultType();
        testResult.Units = new RateTypeUnits();
        testResult.Units.Unit = units;
        testResult.Value = result;
        test.TestResult = testResult;

        return test;
    }
}

Medication CCR XML Info

Unit Tests

We will see how to unit test the helper classes.

Below is the code block for unit testing to verify the functionality of Lab tests.

[TestFixture]
public class TestCCRLab
{
    [Test]
    public void Test_CCR_Lab()
    {
        CCRHelper helper = new CCRHelper();
        TestType lab = helper.buildLabObject("CH;6899693.88;47", "CH 0323 1433", 
            "TRIGLYCERIDE", "SERUM", "completed", "3100305.12",
            "3100323.11314", "162", "mg/dL", 
            "2345-7", "LOINC", "60", "110");

        Assert.IsNotNull(lab);
        Assert.AreEqual(lab.IDs.Count, 2);
        Assert.IsTrue(String.Equals(lab.IDs[0].ID, "CH;6899693.88;47"));
        Assert.IsTrue(String.Equals(lab.IDs[0].Type.Text, "ID"));
        Assert.IsTrue(String.Equals(lab.IDs[1].ID, "CH 0323 1433"));
        Assert.IsTrue(String.Equals(lab.IDs[1].Type.Text, "Accession number"));
        Assert.IsNotNull(lab.TestResult);
        Assert.IsTrue(String.Equals(lab.TestResult.Value, "162"));
        Assert.IsTrue(String.Equals(lab.TestResult.Units.Unit, "mg/dL"));
        Assert.AreEqual(lab.DateTime.Count, 2);
        Assert.IsTrue(String.Equals(lab.DateTime[0].ExactDateTime, "3100305.12"));
        Assert.IsTrue(String.Equals(lab.DateTime[0].Type.Text, "Collection date"));
        Assert.IsTrue(String.Equals(lab.DateTime[1].ExactDateTime, "3100323.11314"));
        Assert.IsTrue(String.Equals(lab.DateTime[1].Type.Text, "Completed date"));
        Assert.IsNotNull(lab.NormalResult);
        Assert.IsTrue(String.Equals(lab.NormalResult.First().Value, "60 - 110"));
        Assert.IsTrue(String.Equals(lab.Description.Text, "TRIGLYCERIDE - SERUM"));
        Assert.IsTrue(String.Equals(lab.Description.Code[0].Value, "2345-7"));
        Assert.IsTrue(String.Equals(lab.Description.Code[0].CodingSystem, "LOINC"));
        Assert.IsTrue(String.Equals(lab.Status.Text, "completed"));
    }
}

Reference

Points of Interest

It was very interesting in implementing and sharing with you the basic building blocks for the generation of CCR document. Depending upon the target audience and requests if any, I have a plan to extend it further.

Please let me know your interests, feedback.

History

  • Version 1.0 - 3/19/2013 - Creating a basic building block of CCR. 

License

This article, along with any associated source code and files, is licensed under The Apache License, Version 2.0

Share

About the Author

Ranjan.D
Web Developer
United States United States
Profile
 
Around 9 years of professional software development experience in analysis, design, development, testing and implementation of enterprise web applications for healthcare domain with good exposure to object-oriented design, software architectures, design patterns, test-driven development and agile practices.
 
In Brief
 
Analyse and create High Level , Detailed Design documents.
Use UML Modelling and create Use Cases , Class Diagram , Component Model , Deployment Diagram, Sequence Diagram in HLD.
 
Area of Working : Dedicated to Microsoft .NET Technologies
Experience with : C# , J2EE , J2ME, Windows Phone 8, Windows Store App
Proficient in: C# , XML , XHTML, XML, HTML5, Javascript, Jquery, CSS, SQL, LINQ, EF
 
Software Development
 
Database: Microsoft SQL Server, FoxPro
Development Frameworks: Microsoft .NET 1.1, 2.0, 3.5, 4.5
UI: Windows Forms, Windows Presentation Foundation, ASP.NET Web Forms and ASP.NET MVC3, MVC4
Coding: WinForm , Web Development, Windows Phone, WinRT Programming, WCF, WebAPI
 
Healthcare Domain Experience
 
CCD, CCR, QRDA, HIE, HL7 V3, Healthcare Interoperability
 
Others:
 
TTD, BDD
 
Education
 
B.E (Computer Science)
 
CodeProject Contest So Far:
 
1. Windows Azure Developer Contest - HealthReunion - A Windows Azure based healthcare product , link - http://www.codeproject.com/Articles/582535/HealthReunion-A-Windows-Azure-based-healthcare-pro
 
2. DnB Developer Contest - DNB Business Lookup and Analytics , link - http://www.codeproject.com/Articles/618344/DNB-Business-Lookup-and-Analytics
 
3. Intel Ultrabook Contest - Journey from development, code signing to publishing my App to Intel AppUp , link - http://www.codeproject.com/Articles/517482/Journey-from-development-code-signing-to-publishin
 
4. Intel App Innovation Contest 2013 - eHealthCare - http://www.codeproject.com/Articles/635815/eHealthCare
 
5. Grand Prize Winner of CodeProject HTML5 &CSS3 Article Content 2014

Comments and Discussions

 
GeneralMy vote of 4 PinmemberPrasad Khandekar21-Mar-13 10:10 
GeneralRe: My vote of 4 PinmemberRanjan.D21-Mar-13 10:19 
QuestionThoughts PinmemberSimon_Whale20-Mar-13 23:57 
AnswerRe: Thoughts PinmemberRanjan.D21-Mar-13 4:23 
QuestionWhy don't you use the CCD schema file(xsd)? PinmemberBaeInho19-Mar-13 17:56 
AnswerRe: Why don't you use the CCD schema file(xsd)? PinmemberRanjan.D20-Mar-13 15:00 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web02 | 2.8.140926.1 | Last Updated 21 Mar 2013
Article Copyright 2013 by Ranjan.D
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid