This repository is no longer being maintained. It is now in read-only mode. If you have any inquiries, please contact the California Department of Public Health at: [email protected].
In June 2021, the California Department of Technology (CDT) launched the Digital COVID-19 Vaccine Record (DCVR) Portal, implementing the SMART Health Card framework. A Digital Vaccine Record is an electronic vaccination record drawn from the data stored in the California immunization registry. The digital record shows the same information as a resident's paper CDC vaccine card: name, date of birth, vaccination dates, and type of vaccine received. The digital record also includes a QR code that, when scanned by a SMART Health Card reader, will display to the reader your name, date of birth, vaccine dates, and vaccine type. The QR code also confirms the vaccine record as an official record of the state of California.
California's implementation of the application is a three-tier, logically and physically separated architecture:
- A web application using the React JavaScript Library,
- A middle tier written in Microsoft .NET Core with a Node.js API, and
- A backend data tier using Snowflake.
- Once the API determines that information submitted matches an existing record in the immunization registry, a 'found' message is sent via Twilio (SMS) or SendGrid (email).
- If a match is not found, a failure message is sent via Twilio (SMS) or SendGrid (email).
There are a total of three code repositories:
- DigitalCovid19VaccineRecord-UI
- DigitalCovid19VaccineRecord-API
- DigitalCovid19VaccineRecord-QR
Please view the readme file in each repo for further details.
- Deploy UI Code into a local directory.
- Deploy API Code into a local directory.
- Replace any backend return data set with a JSON data set specified in API readme file.
- Use this example string for recipID = "12345" to generate a sample QR code.
- Use expected JSON structure from database:
{ "vc": { "credentialSubject": { "fhirBundle": { "entry": [ { "fullUrl": "resource:0", "resource": { "birthDate": "1951-08-15", "name": [ { "family": "Doe", "given": [ "John" ] } ], "resourceType": "Patient" } }, { "fullUrl": "resource:1", "resource": { "occurrenceDateTime": "2021-02-23", "patient": { "reference": "resource:0" }, "performer": [ { "actor": { "display": "KAISER PERMANENTE NCAL" } } ], "resourceType": "Immunization", "status": "completed", "vaccineCode": { "coding": [ { "code": "208", "system": "http://hl7.org/fhir/sid/cvx" } ] } } }, { "fullUrl": "resource:2", "resource": { "lotNumber": "EN6207", "occurrenceDateTime": "2021-03-16", "patient": { "reference": "resource:0" }, "performer": [ { "actor": { "display": "KAISER PERMANENTE NCAL" } } ], "resourceType": "Immunization", "status": "completed", "vaccineCode": { "coding": [ { "code": "208", "system": "http://hl7.org/fhir/sid/cvx" } ] } } } ], "resourceType": "Bundle", "type": "collection" }, "fhirVersion": "4.0.1" }, "type": [ "https://smarthealth.cards#health-card", "https://smarthealth.cards#immunization", "https://smarthealth.cards#covid19" ] } }
The DCVR is most useful as an official, digital copy of an individual's CDC card. It is an official document issued by the State of California and is sufficient as proof of a vaccination record if a person cannot produce their CDC card.
Users who scan the QR code will see a long string of text, starting with the prefix "shc:/", which indicates that the information to follow is a SMART Health Card. (iPhone users who try scanning this with their camera get the "no usable data found" message because as of this writing, there is no application on the iPhone associated with the "shc:" prefix.) The long string of text is known as an "FHIR bundle" - FHIR stands for Fast Health Interoperability Resources and is an emerging collection of standards designed to improve healthcare data interoperability. More information is at fhir.org.
The State of California cryptographically signs this bundle; any reader can validate that signature by using the state's public key, published on the My Vaccine Record page at https://myvaccinerecord.cdph.ca.gov/creds/.well-known/jwks.json . The QR code includes the same information presented on the digital vaccine record webpage: your name, date of birth, and the date(s) of your vaccination(s). When a SMART Health Card-compatible reader scans the QR code, it gives the reader the ability to verify the signature, confirming the authenticity of underlying information. (If the FHIR bundle had been modified, the signature verification would fail, resulting in an unsuccessful scan.)
In this way, a reader can know for certain that an individual with the name presented, born on the day indicated, actually received the vaccination(s) mentioned in the QR code. Those vaccination(s) are registered in the California Immunization Registry.
It's worth mentioning what the SMART Health Card is not: it's not proof of identity, it is a confirmation of a vaccination record belonging to the individual named, born on the date specified. Any venue or organization that wants to rely on the SMART Health Card as proof of vaccination should match the information contained on an identity document (driver's license, for example).
A final note on the digital vaccine record system design and ongoing improvements to the system. In order to generate a digital vaccine record, we need to match the contact information you provide with contact information already on file with the California Immunization Registry. In most cases, the vaccination provider submitted the resident's contact information with the report of their vaccination. In those cases, the resident will successfully retrieve their digital vaccine record 100% of the time. However, if your contact information is missing from the immunization registry, we cannot match your information with the vaccination record, and therefore cannot send you a link. We worked hard before launch to ensure that we had as much contact information in the system as possible and have made great strides since we launched. By working closely with the vaccination providers, we've added even more contact information for several million California residents; as a result, we have improved the match rate on digital vaccine record requests. As we get more reports from residents who remain unable to retrieve their digital vaccine records, we are in close contact with each provider so that we can continue to make progress. In the meantime, any resident who wants to can reach out to their provider directly and ask that they send updated contact information to the state's immunization registry or can reach out to CDPH and upload a copy of their CDC card so that the state can update their records. (Submitted information will need to be verified and may take a bit of time before it's reflected in the system.)
Welcome to the State of California's Digital COVID-19 Vaccine Record (DCVR). The DCVR tool was created to allow anyone vaccinated in California to easily retrieve their digital vaccine record as a Quick Response (QR) code. The QR code follows the SMART Health Card protocol and can be used as proof of vaccination.
- SMART Health Card protocol ensures secure delivery of vaccine record
- QR code can be stored on mobile device using GPay or Apple Health
- Visual Studio Code
- Web Browsers (Chrome, Edge, Firefox, Safari)
- Clone this repository
- Use the command npm install to install the necessary dependencies.
- Use the command npm run start to start the application.
The URLs found in public/config.js will need to be updated to point to the API that you intend to call to retrieve vaccination data.
The default value is https://localhost:5001.
To use Google Analytics:
- Set up a Google Analytics account here to get an ID.
- Update the id number in the Google Analytics script, found in public/index.html.
Line 54: <script async src="https://www.googletagmanager.com/gtag/js?id=[your id goes here]"></script>
Line 67: gtag('config', '[your id goes here]');
Use the command npm run build
to generate a build folder containing the files to be hosted.
- Babel Core
- Date IO
- Material UI
- Testing Library
- Day.js
- i18next
- i18next Browser Language Detector
- i18next Http Backend
- ReactJS
- ReactDOM
- React Google Analytics
- React i18next
- React Router Dom
- React Scripts
- React Text Mask
- SASS
- Web Vitals
- html2pdf
- Digital COVID-19 Vaccine Record (Digital COVID-19 Vaccine Record Website)
Open the project in Visual Studio Code Note: create file under config > config.local.js to use localhost API settings
window.config = {
CREDENTIALS_API_STATUS: 'http://localhost:xxxx',
CREDENTIALS_API_QR: 'http://localhost:xxxx',
CREDENTIALS_GA_DEPARTMENT: '',
CREDENTIALS_GA_CDPH: ''
};
Select Terminal > New Terminal Run the following commands:
npm install
npm run start:local
Success!
- Node.js, ReactJS, git