Building Your Own OpenEMR Custom Module Skeleton (with Examples!)

For OpenEMR users with a developer itch, crafting custom modules unlocks a world of personalized functionalities. But starting from scratch can be daunting. Here’s where the Custom Module Skeleton comes in, your friendly guide to building blocks and best practices. Buckle up, and let’s dive in, complete with examples!

Why the Skeleton?

Think of the Custom Module Skeleton as a pre-assembled framework. It provides the essential structure and files needed for a functional OpenEMR module, saving you precious time and effort. Gone are the days of manually setting up directories and configurations; the skeleton takes care of that, allowing you to focus on the unique elements of your module

Unveiling the Structure:

The skeleton boasts a well-organized directory structure, each folder serving a specific purpose:

  • SQL: Houses SQL files for creating and updating database tables relevant to your module.
  • Templates: Contains Smarty templates for defining the visual appearance of your module’s interface.
  • Language: Stores language files for translating your module’s text into different languages.
  • Logic: Holds PHP scripts responsible for the core functionality and logic of your module.
  • Tests: (Optional) Includes unit tests to ensure your module behaves as expected.

Let’s Get Coding!

Now comes the exciting part: customizing the skeleton to bring your idea to life. Here’s a glimpse into the process, with examples:

Module Information: Edit the config.php file to define your module’s name, description, dependencies, and other essential details.

// config.php

$moduleMetaData['name'] = 'My Custom Module';
$moduleMetaData['description'] = 'This module adds a custom patient report';
$moduleMetaData['dependencies'] = array('openemr' => '5.0.0');
  1. Database Tables: Craft your module’s data structure by writing SQL statements in the sql folder. These statements will create and modify tables in the OpenEMR database.
// sql/create_custom_table.sql

CREATE TABLE IF NOT EXISTS `custom_patient_reports` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `patient_id` INT NOT NULL,
  `report_date` DATE NOT NULL,
  `report_text` TEXT NOT NULL,
  ...
);

2. Visual Interface: Design your module’s user interface using Smarty templates within the templates folder. Smarty offers a flexible way to separate presentation logic from the underlying code.

<h2>Create Custom Patient Report</h2>
<form method="post" action="index.php">
  <input type="hidden" name="action" value="save_report">
  <label for="patient_id">Patient:</label>
  <select name="patient_id">
    {foreach from=$patients item=patient}
      <option value="{$patient.id}">{$patient.name}</option>
    {/foreach}
  </select>
  <label for="report_date">Report Date:</label>
  <input type="date" name="report_date">
  <label for="report_text">Report Text:</label>
  <textarea name="report_text"></textarea>
  <input type="submit" value="Save Report">
</form>

3. Module Logic: The heart of your module resides in the logic folder. Write PHP scripts to handle data manipulation, user interactions, and any specific functionalities your module offers.

// logic/controller.php

function save_report($data) {
  // Insert report data into the database
  $sql = "INSERT INTO custom_patient_reports (patient_id, report_date, report_text) VALUES (?, ?, ?)";
  $stmt = $GLOBALS['db']->prepare($sql);
  $stmt->execute([$data['patient_id'], $data['report_date'], $data['report_text']]);
  // Redirect to success page
  header('Location: index.php?success=true');
}

4. Internationalization: Make your module multilingual by adding translations in the language folder. This ensures accessibility for a wider audience.

// language/en.inc.php

$_lang['custom_module_name'] = 'Custom Module';
$_lang['patient_id'] = 'Patient ID';
$_

The Custom Module Skeleton empowers you to add unique functionalities to OpenEMR, tailoring it to your specific needs. With the right guidance and a dash of coding know-how, you can turn your ideas into tangible enhancements.


CapMinds OpenEMR consigns clinicians with the best features and ways to integrate. It makes their workflows more efficient and filtered. The integrated features will allow them to combine the ability of patient record management with conceptual and concurrent reminders. This enhances the process of decision-making and improves patient care and quality.

  • At CapMinds, custom solutions like OpenEMR are developed with much curation and accuracy to match the special practice needs
  • It will be low-cost, the perfect budget solution to the typical traditional subscription-based ones for your mental health practice’s long-term future
  • CapMinds OpenEMR prioritizes secure data management and ensures compliance with industry regulations, offering healthcare providers peace of mind

Get the best technologies and HIPAA-compliant and efficient OpenEMR that can be tailored to fit your practice from CapMinds. Our OpenEMR services facilitate a Modern User Interface (UI), customization, production support, and training. Also facilitates billing, report & specialty enhancements, clearing house integrations, e-prescription, cloud, and more.

Leave a Reply

Your email address will not be published. Required fields are marked *