HTML Tips to Enhance Your eCRF

In some cases, the display of your OpenClinica eCRF may not be exactly what you had in mind. You may want to highlight key words or phrases, create a bullet point list, or insert a URL or image. Using HTML tags, you can make some simple manipulations to change the look and feel of your case report forms and make them more inviting for data entry.

Using HTML tags to enhance your eCRF

The HTML tags described in this document can be used in the following columns in the CRF Excel template:

  • Items Tab: LEFT_ITEM_TEXT
  • Items Tab: RIGHT_ITEM_TEXT
  • Items Tab: HEADER
  • Items Tab: SUBHEADER
  • Sections Tab: INSTRUCTIONS

What are HTML tags?

HTML, or Hyper Text Markup Language, is a markup language that is commonly used for web page development. HTML is written using “tags” that surround text or elements. These tags typically come in pairs, with a start tag and an end tag:

<start tag>Text to format</end tag>

To insert an HTML tag, simply surround the text you want to format with the desired tag. Below are the HTML tags that work in OpenClinica:

Table

You can download this HTML Tags Knowledge Article to help you to get started.

Inserting URLs and Images

HTML also allows you to insert a URL or Image into your CRF, which may be used to provide users with additional information or references.

Insert a URL

A URL may be inserted into a CRF in order to provide a link to further instructions or protocol information. To insert a URL into your CRF, use the following format:

Inserting images - using HTML tags to optimize your eCRF

Simply replace the areas highlighted in yellow with (a) your URL (inside the quotation marks) and (b) the hyperlinked text that you want to display to the user.

The following example will prompt the user to “Click Here!” and will open the OpenClinica website in a new browser tab:

<a href=”https://www.openclinica.com” target=”_blank”>Click Here!</a>

Inserting an image - using HTML tags to optimize your eCRF

Insert an Image

Similarly, HTML can be used to insert an image into your CRF. You might consider using an image to display a pain scale (or other reference image), or even to display your company’s logo.

Inserting an image - using HTML tags in OpenClinica

To insert an image into your CRF, use the following format:

<img src=”images/ImageName”>

Again, simply replace the highlighted text with your image name. You can use PNG, JPG, or GIF image extensions. You can control the height and width of the image using the following format:

<img src=”images/ImageName” width=“n” height=“n”>

The highlighted n corresponds to the desired width and height of the image in pixels.

The following example will insert an image (image1.png) with a width of 300 and a height of 150:

<img src=”images/image1.png” width=”300″ height=”150″>

You can download this Images & URLs Example CRF to help you practice.

The examples included in the above CRF Excel template will insert an image that already exists in the images directory of your OpenClinica application. To insert a custom image, community users will need to place the image in the following directory of the OpenClinica application:

tomcatwebappsOpenClinicaimages

OpenClinica Enterprise customers can request an image be placed on the application server by reaching out to the OpenClinica Enterprise Support team via the Issue Tracker.

Have you used HTML in your CRFs? Let us know if you have any other suggestions or tips!


IMPORTANT NOTES:

 The RESPONSE_OPTIONS_TEXT field is not included in the list above, as HTML tags are currently not supported for response options.

 The QUESTION_NUMBER field will display the text properly, but has been known to cause issues when extracting data. Therefore, HTML should not be used in this column.

Calculating ROI for ePRO

I recently delivered a webinar titled “Getting Started with eCOA/ePRO,” in which roughly a third of attendees polled cited expense as the number one reason that has prevented them from adopting an ePRO solution. So what does ePRO really cost? Is it worth it? Here I strive to provide a basic, high-level framework for thinking about the return on investment ROI of eCOA vs. paper.

Let’s start by taking a look at the costs that are unique to each approach.

Paper

In a traditional paper based model, you are incurring costs that stem from printing, mailing, data entry, and data cleaning. These are all expenses than can be estimated with a fair degree of accuracy, with the cost of data entry being the most significant of these. To estimate the cost of data entry, see how long it takes to key in a subject completed paper casebook, multiply this by your cost of labor (don’t forget to include overhead!).

ePRO

The cost side for ePRO is similarly straightforward, but the expense elements are different. You’re either building an ePRO system (which will almost carry a highly unpredictable cost) of buying one (much more predictable cost). Assuming you’re buying, here are the costs you may expect to incur:

· License
· Hosting
· Training and support
· Professional services (e.g. study configuration)
· Devices

You should evaluate whether your study and selected ePRO system will allow for patients to use their own devices, or if you will need to provision devices (or some mix thereof). The cost of provisioning devices, especially for a global study can be significant—in addition to the costs of the devices themselves, you will need to consider the costs of data plans, and logistics associated with supporting the devices. I’m a big fan of BYOD (bring your own device) but, depending on the study, it may not be feasible to utilize while maintaining scientific validity of data collected.

Once you’ve mapped out your costs of each route, you can begin to weigh these against the benefits of going eCOA.

cropped-istock_000037068804.jpg

Paper vs. eCOA

When you boil it down, people employ ePRO/eCOA to maximize data quality, increase productivity, and/or enable new capabilities that help answer their research questions. ePRO is e-source, so you don’t have worry about administering a paper data entry process. Depending on the study, the cost savings from this alone might justify ePRO.

There are some additional benefits ePRO offers over paper that may be harder to quantify, but nonetheless  very real. For example, there are clear data quality benefits to ePRO. The electronic system can ensure a minimum standard of data quality through edit checks and enforced data structures. ePRO data will always be cleaner than the same data captured on paper.

Benefits and Motivations for eCOA

 

The use of an ePRO system also allows you to know for sure when the data were recorded. For instance, patients can be reminded automatically when their diaries are overdue, and you now only have much stronger assurances that data were collected at the appropriate time (vs paper), you can also more easily monitor the study progress.

Bypassing manual data entry and having the system provide notifications to subjects to ensure data are captured in a timely way might allow for faster and better in-study decision making and even may accelerate study closeout. Also, an increasing amount of evidence exists that mobile-based messaging and communication strategies help increase patient engagement and treatment adherence. And of course, not having to deal with a stack of paper during a site visit might allow the clinician’s interaction with the patient to be higher quality.

Quantifying the benefits of all of these things can be tough, but start with those which are most quantifiable and see if those items alone these alone provide a compelling ROI (from my experience they often do).  Then the less tangible benefits become gravy to the ROI argument.  When modeling costs over time and a pay-back period, keep in mind that ePRO will typically carry a higher upfront cost than paper, with the cost saving benefits realized downstream over time. With today’s technologies, even most smaller studies should be able to realize a positive payback.

Naturally, there may be additional ROI factors to consider which are specific to your situation. If you have particular thoughts, questions, or experiences on this topic I encourage you to add a comment to this post.

OpenClinica CRF Features – Everything But the Kitchen Sink

Whenever I teach case report form (CRF) design in the OpenClinica Central User Training class, the thought that always comes to mind is, “so many features, so little time.”  OpenClinica has so many features available for building your CRFs, that there is no way to cover every possibility within the limited timeframe of a training class. Fortunately, there are other ways of getting information out to users, so here I am to introduce you to additional features you may want to incorporate into your CRFs.

Some of these features use JQuery, a cross-platform JavaScript library designed to simplify scripting HTML. The JQuery code in the attached CRF template was tested on Firefox 35.0.1; it may function differently in different browsers or different languages. As with anything you set up for your study, if you decide to use any of the features presented here, be sure to test them in your test environment prior to using them in production.

Click to download: Kitchen Sink CRF and Associated Rules (zip file)

The attached CRF has 10 sections, and each section focuses on different feature sets. To see a list of all the Sections, click the drop-down arrow in the “Jump” box and then click the appropriate Section topic to see the features included within that topic.

CRF tabs

Throughout the CRF, each feature is labeled so you can easily recognize it and locate it in the CRF template. For example, “Left Item Text” is not a prompt you would ever include on your CRF, but it is the feature being demonstrated and is labeled as such so you can easily see where Left Item Text appears on any CRF you design. Each  Section of the CRF is listed below with a brief description as well as a screenshot so you can see how the features are represented.

1. Text

The Text Section illustrates various text features such as bold, italics, colors, and displaying images or a URL.  This section also covers the positioning of left item text, right item text, header, subheader, title, subtitle, and instruction text. The Instruction area of this section includes many text options that you can apply. If you would like to include blue text on your CRF, simply reference “Text color can be changed” in the Instructions cell of the Section worksheet of the attached CRF template and copy the formatting into your CRF.

CRF Text Tab
Click to enlarge

2. Response Options

This Section illustrates the various means of displaying responses on your CRF. It also provides additional features such as the “undo” button for deselecting a radio button, and an example of how to include a Visual Analog Scale. Again, simply reference the associated items in the Response Options section of the attached CRF template and copy the features you’d like into your CRF.

CRF Response Options
Click to enlarge

3. Layouts

The Layouts Section features different layout options such as column positions, horizontal vs. vertical checkboxes, and grid displays.

CRF Layouts
Click to enlarge

4. Required Items, Show/Hide, Decimals

This section demonstrates show and hide functionality, shows how real numbers (decimals) are displayed, and illustrates how required items are represented.

CRF Required Items
Click to enlarge

5. Validations This section demonstrates the various simple validations that are possible within the CRF template (less than, greater than, ranges, etc.). It also includes examples of some regular expressions.

CRF Validations
Click to enlarge

6. Calculations I

This is the first of two calculation sections. In this section, you’ll see examples of calculations and group calculations. You’ll have to upload the CRF, associate it with an event, and enter data to see the calculations in action.

CRF Calculations1
Click to enlarge

7. Calculations II

This second calculation section shows additional calculations and includes JQuery code for including a “calculate” button and for doing instant calculations. As above, you’ll have to upload the CRF, associate it with an event, and  enter data to see the calculations in action.

CRF Calculations2
Click to enlarge

8. Discrepancy Note*

The Discrepancy Note Section illustrates the effect of a Discrepancy Note Action Rule.

CRF Discrepancy Note
Click to enlarge

9. Show and Insert Actions*

This Section illustrates the effect of  Show and Insert Action Rules.

Before the rule is fired:                                            After the rule is fired:

CRF Action1                                CRF Action2
Click to enlarge

10. Email Action*

This Section illustrates the effect of an Email Action Rule.

CRF Email Action
Click to enlarge

*These last three Sections listed have Rules associated with them, and the Rules must be uploaded in order to experience the full functionality of these Sections. The Rules are also attached to this post.  If you want to use these Rules in your Study, be aware that you’ll have to edit them to reference the correct Object IDs for your Study.

So there you have it – one CRF, with everything but the kitchen sink. Check out the features and use them as you like. Just keep in mind that when designing CRFs, keeping it simple is always the best approach. There are times, however, when adding a little style to a form can help clarify things for data entry and may even help reduce discrepancies.

Happy designing!

Laura

Acknowledgements: Special thanks to Gerben Rienk Visser of Trial Data Solutions for many of these ideas, and to OpenClinica Application Support Engineer Jessica Gosselin for creating the Kitchen Sink CRF – we hope you find it useful!

Demystifying the Decode() Function

When I started learning to use OpenClinica, I was mystified by all of the things there were to learn. One year later, I continue to be surprised by the number of new skills and tricks I am discovering – whether in the form of existing functionality, new features (EventAction Rules!) or community contributions.

In May, I was putting together a workshop for OC14, OpenClinica’s Global Conference, on best practices for building studies in OpenClinica, and a colleague suggested I spend some time explaining all of the functions in our platform that can be used for calculations.

Alright, I thought, that should be easy. Functions for calculations in OpenClinica, while useful, are pretty simple. After reviewing the information found in the CRF Excel template for calculations, this is what I found:

Decode() screenshot

Sum()? Got it.

Min() and max()? Easy.

Stdev()? Fine.

Decode()? … wait, what?

A vague memory of our trainer’s explanation of the decode() function at OpenClinica’s Central User Training flashed through my mind. My guess is that there are users out there who don’t even know this little gem exists. Some of you may have seen it and simply dismissed it.

So what exactly is the decode() function?

The decode() function allows you to create an IF-THEN-ELSE type of statement. An item is compared to a list of search values, one by one. If the item matches a search value, then a corresponding result value is returned.

Here is your basic format:

decode(ComparatorItem, SearchVal1, ResultVal1, SearchVal2, ResultVal2, … DefaultValue)

The ComparatorItem is compared to each SearchVal in the list, one at a time:

  • The ComparatorItem is first compared to SearchVal1.
    • If the ComparatorItem = SearchVal1, return ResultVal1.
    • Otherwise, if ComparatorItem = SearchVal2, return Result2
    • And so on…
  • If none of the values in the Search List match the ComparatorItem, then the DefaultValue is returned.
    • The DefaultValue is optional, and can be omitted entirely.

The decode() function is probably best explained using an example. I will start by illustrating the general format of the function, and then move on to a few examples that may prove useful in your OpenClinica studies.

Let’s say users are entering a cardinal direction initial (i.e. N, S, E, W) and you want to decode the initial to the actual cardinal direction name (i.e. North, South, East, West). Your decode function would resemble the following:

decode(DirectionInitial, N, North, S, South, E, East, W, West, Unknown)

decode() function

Upon clicking save, the entry in the DirectionInitial Item will first be compared to “N” and if there is a match, “North” is returned. Otherwise, the DirectionInitial Item is compared to “E” and if there is a match, “East” is returned, and so on. If DirectionInitial Item does not match any of the options (N, S, E, or W), then “Unknown” will be returned.

Let’s look at a few examples that may be more applicable to your OpenClinica studies…

Temperature

If you have a Vital Signs or Physical Exam CRF, you may be capturing the Subject’s temperature. In the case report form, there can be two options for temperature units (Celsius or Fahrenheit), but the statistician may be interested only in a final temperature in degrees Celsius. To please both your data entry person and your statistician, you can create a field to capture the Temperature, and then create another Units field to record either Celsius or Fahrenheit. The final Temperature item will contain the decode function, which would resemble the following:

decode(TemperatureUnits, Celsius, Temperature, Fahrenheit, ((Temperature-32)*(5/9)) )

If TemperatureUnits is equal to “Celsius,” then return the value recorded in the Temperature Item. Otherwise, if TemperatureUnits is equal to “Fahrenheit,” then convert the value recorded in the Temperature Item to Celsius.

decode() function example

Scoring

Additionally, the decode() function is a great tool when scoring responses. For example, you may have an eligibility questionnaire with response options Yes, No, and NA, corresponding to response values 1, 0, and 99. You would like to count the number of ‘Yes’ responses. However, a simple sum() function will not work because if ‘NA’ is selected, ‘99’ will be included in the calculation. This can be solved by combining the decode() function with the sum() function.

First, you will need to determine the decode function for each item. In this case your function would be as follows:

decode(ItemName,1,1,0,0,99,0)

If Yes is selected (value of 1), then 1 will be returned. If No is selected (value of 0) then 0 will be returned. If NA is selected (value of 99) then 0 will be returned.

Note: We only want to calculate the number of ‘Yes’ responses.

This can then be combined into a sum() function. If you have three eligibility items in your CRF, then your decode function would be as follows:

sum(decode(Item1, 1,1,0,0,99,0), decode(Item2, 1,1,0,0,99,0), decode(Item3, 1,1,0,0,99,0)

decode() function examples

Interested in seeing any of these examples in action?
You can download this CRF Excel template which includes each of the three above examples.

Also, if you found another useful way to use this function, feel free to comment and share your tips with us!

Video Demos: Printing Subject Casebooks, Blank Casebooks and Blank CRFs

We’re in the process of updating our documentation to include video demos of various OpenClinica features. Take a look at the video links below on printing subject casebooks and CRFs for a taste of what’s to come – and learn something cool in the process!

Printing a Subject Casebook is a great, though much overlooked feature of OpenClinica. First introduced in OpenClinica 3.2, this feature allows you to print a Subject’s entire casebook, including all the data entered for that Subject. You have various output formats and options to include the audit history and notes and discrepancies in the results. The Subject’s data, metadata, and provenance data – it’s all there, from start to finish. It’s easy to view online, and formatted beautifully for printing. Just for fun, we tossed in demos on printing blank casebooks and blank CRF pages as well.

Check out the videos below and…happy printing!

Laura

Forum upgrades and more

OpenClinica CommunityWhen you join OpenClinica as a user or a developer, you are joining an active, collaborative community. Our community is growing and with that growth it is constantly changing. Very soon you’ll see some changes that will allow you to interact with other community members in a richer, more powerful way.

The venerable GNU Mailman list software has been at the heart of the OpenClinica community for many years. It does it’s intended job (user and developer email lists) really well, but does not offer many features beyond that. Next week we are launching a new tool to power how the community works and corresponds.

The new OpenClinica Forums, powered by Vanilla, will offer the ability to post and read via the web. They still support email-based correspondence, so if you prefer to post and read via e-mail, you won’t notice much of a difference from how you’re used to doing things. In addition, the new web interface will have numerous features for search and collaboration that are simple yet powerful.

The forums will be organized into categories by topic. Some will be end-user focused, some will be IT/system admin focused, and some will be developer focused. Others may be a hybrid. If you’re currently subscribed to either the users or developers list, upon launch of the new forums, you’ll be subscribed to receive email from all of forum categories if you wish. However, you can log in to customize your settings to only receive emails from certain categories. If you have an idea for a new category, suggest it on the forums and if there’s support for it in the community we’ll create it for you.

Like any growing community, having a few ground rules about expected behavior is good for everyone. The OpenClinica community already does a great job being respectful and helpful, but it’s good to put the basics in writing so new and old participants alike know what to expect. New Community Guidelines (to be posted next week as well) are designed to help preserve the valuable culture our community has established, and ensure that participants continue to engage in the same meaningful, respectful ways as we grow. The guidelines are modeled off other successful open source communities and should be intuitive to most… however if you have feedback that can improve them, let us know (on the forums of course)!

Last and perhaps most exciting, we’ll soon be launching a new OpenClinica Extensions site. This site will allow you to easily share useful tools, add-ons, and integrations you have built to make OpenClinica more useful. It will be a catalog of useful OpenClinica resources from around the globe. We’ll have more information in the coming weeks as this gets closer to launch.

OpenClinica and TraIT: A Dutch National Research Infrastructure

Is it possible to set up an IT infrastructure for translational research for an entire country? The Dutch Translational Research IT (TraIT) project (http://www.ctmm-trait.nl/) believes it is. Admittedly, The Netherlands is not exactly the same size as China or the US, but nevertheless already 26 partners from industry and academia to collaborate in this consortium to organize, deploy, and manage a nationwide IT infrastructure for data and workflow management targeted specifically at the needs of translational research. It includes the Dutch university medical centers, notable companies like Philips, and charities such as Dutch heart and cancer foundations.

At its outset, TraIT worked closely with selected translational research projects and scientists, piloting potential solutions with real research data from these projects. This work resulted in the selection and implementation of central TraIT services for clinical data gathering (OpenClinica) and image archival and retrieval (NBIA). TraIT has now reached a very interesting phase where the first IT solutions put in place in each of the four major domains of translational research (clinical, imaging, biobanking and experimental (any-omics)) are starting to flourish.

Word is quickly spreading about the TraIT infrastructure available. In particular, OpenClinica is taking off very well with amazingly little advertisement: currently the TraIT installation (OpenClinica.nl) contains 47 studies with 256 users representing 77 institutions, and is still growing rapidly as can be seen in the following graph:

Uptake of OpenClinica in TraIT

Based on the input obtained from users, we decided to augment some of OpenClinica’s capabilities, in particular for data loading. Obviously, the improvements are made available to the community whenever possible. For further enhancements, TraIT and OpenClinica, LLC entered into a partnership focusing (initially) on improvements in the areas of role-based security, linking to external (imaging) data archives, and data import/export. Hopefully, the fruits of this collaboration will soon be available to the entire OpenClinica community.

The next challenge faced by the TraIT project is integrating the clinical data from OpenClinica with molecular profiling data, which is needed to address the key question in translational research: how to correlate the variation in disease phenotype to variations in underlying biology. Another open source solution has been selected for this purpose: tranSMART, a translational workbench and data integration environment supported by several major Pharma and research consortia. The open source tools selected promise to be a powerful combination: data collected in OpenClinica can be further shared and analyzed in the tranSMART environment.

View slides from a presentation on TraIT delivered at the 2013 OpenClinica Global Conference.

Jan-Willem Boiten
Project Manager
TraIT at the Center for Translational Molecular Medicine (CTMM)

Synchronizing OpenClinica Instances: Another Option for Using OpenClinica in Disconnected Settings

While tablet software maker Mi-Co is showcasing an integration of their Mi-Forms tablet-based forms software with OpenClinica that can be used in “offline” settings, elsewhere within the OpenClinica community, Raymond Omollo and Michael Ochieng have developed a separate option for using OpenClinica in settings without internet connectivity. Their method synchronizes multiple locally deployed instances of OpenClinica with a central OpenClinica database. Michael and Raymond recently presented their work at the OC13 conference. You can access their presentation slides here to see how they address key issues such as synchronization, back-ups, encryption, and user training.

Synchronization Flow Chart
Synchronization Flow Chart

While working for Drugs for Neglected Diseases initiative (DNDi), Michael and Raymond devised this approach for a WHO study of Buruli ulcers in West Africa (Ghana and Benin). The study, which is ongoing as of the date of this post, is a randomized controlled trial comparing the efficacy of 8 weeks treatment with clarithromycin and rifampicin versus streptomycin and rifampicin. It involves 430 subjects across 5 sites. The participating sites have limited or unstable internet connectivity, so a solution is needed that provided timely, auditable, and quality data entry given this constraint. A positive byproduct is enhancing the capacity of these disconnected sites to utilize EDC.

As they say, necessity is the mother of invention. And open source makes it easier for people to believe that what is necessary can in fact be accomplished. Kudos to Raymond and Michael for devising a solution that works for them. Perhaps it may work for others as well.  If you’d like to access the source code and documentation for their work, you can download these from the OpenClinica Tools and Tips page (scroll to bottom).  You can reach Raymond and Michael on the OpenClinica Developers mailing list: developers@openclinica.org.

– Ben Bauman

More About DNDi

Headquarted in Geneva, DNDi is a global organization that develops safe, effective, and affordable treatments for neglected diseases. The neglected diseases that DNDi tackles afflict many of the world’s poorest people (Malaria, Leishmaniasis, Chagas disease, Sleeping Sickness, Paediatric HIV, Filaria). DNDi’s goal to develop 11 to 13 new treatments by 2018. More at www.dndi.org.

OpenClinica 3.1.3 Now Available

We are thrilled to announce the general availability OpenClinica 3.1.3. This latest release of the OpenClinica clinical trial software provides over 100 fixes and enhancements, including:

  • Improved performance and stability, including 80% increase in max user load and 40% faster page turn times
  • Numerous improvements to OpenClinica’s internationalization/localization support
  • Support for CRF version migration of individual event CRFs
  • Enhanced security with strong password configuration options
  • Greater reliability when entering or editing data in repeating groups
  • Ability to run rules at data import and when loading data via web services
  • Fixes to nested simple conditional displays in CRFs

For a more complete overview, you may view the 3.1.3 release notes.

Download OpenClinica 3.1.3 Community Edition

Beyond Single-Selects – Managing Long Lists in OpenClinica

Here at the VU Medical Center Amsterdam, we’re implementing OpenClinica (OC) for CTMM TRACER. TRACER aims at improving diagnosis, prognosis and therapy selection for rheumatoid arthritis. A series of eCRFs are being developed, ranging from questionnaires to joint scoring and DAS-score calculations.

One of our most recent CRFs is concerned with a patient’s medication. In this CRF one of the items of interest is the medication the patient is currently on. The code system employed for medication is the Anatomical Therapeutic Chemical (ATC) Classification System, which contains over 500 entries. Initially, we intended to create a single-select field containing the ATC codes and their description. Unfortunately, the number of characters involved is way more than the maximum of 4000 allowed by OC. The easy alternative would have been to define a free text field, but it is generally best to avoid those, as the data in these fields tends to pollute easily.

The solution we created employs JavaScript and JQuery. Without getting into the technical details (you can get them here), the approach is to create a (read-only) text field in OC and let a non-OC single-select item write data to this field. This ensures that the values written to OC are limited to those specified in the list, without having to store the complete list in OC. The list entries themselves are stored in an external XML file, which is stored on the OC server. If at some point the ATC-codes need to be updated, we can simply update the XML file and the updates will be available for the users.

Whereas our problem was concerned with a long list of ATC-codes, the solution can be applied to any list which is longer than OC’s maximum number of characters. All you have to do is create an XML file, which describes the list, make some minor changes to the example code provided on the wiki page and upload two files to your OC server.

Sander de Ridder (MSc Computer Science, MSc Bioinformatics)