A secure Chrome Extension for automated clinical billing invoice verification.
Bridges Gmail invoices, the EMR patient portal, and a Google Sheets audit ledger.
Neuropedia Invoice Validator automates a repetitive, error-prone billing reconciliation workflow in a pediatric neurology clinical setting. It:
- Scans Gmail for transactional invoice emails from
epg.support@etisalat.aewithin a configured date/time range. - Verifies patients against the clinic's web-based EMR (Electronic Medical Records) portal by auto-filling search fields and reading results from the DOM.
- Logs verified records to a Google Sheets cloud ledger via a Google Apps Script Web App endpoint.
⚠️ For Internal Clinical Use Only — This extension is not intended for public distribution. It handles sensitive billing data in strict compliance with clinic data policies.
| Feature | Description |
|---|---|
| 📧 Gmail Inbox Scanner | Scans a time range for Etisalat billing invoice emails via the GAS backend |
| 🔍 EMR Auto-Verification | Auto-fills MRN/Mobile in the EMR portal and reads the patient name back |
| ✅ Batch Verification | Verifies all queue items in sequence with the "Verify All (EMR)" button |
| 📱 Mobile Fallback | Secondary search by phone number when MRN lookup fails |
| 🟡 Self-Verified Override | Manual approval for edge cases (e.g., dual-sibling invoices) |
| 📊 Google Sheets Logging | Posts verified rows directly to a configurable spreadsheet tab |
| 🔒 Logs Privacy Toggle | Show/hide the system activity console to prevent casual screen viewing |
| ❓ Built-in How-To Guide | Locally hosted setup guide, accessible from the sidebar footer |
Chrome Web Store distribution is not applicable for this internal-use extension.
- Clone or download this repository.
- Open Chrome and navigate to
chrome://extensions/. - Enable Developer Mode (toggle in the top-right corner).
- Click Load unpacked and select the
src/folder inside this project. - The Neuropedia Invoice Validator extension icon will appear in your Chrome toolbar.
Create a Google Sheet with the following column headers in row 1:
Transaction Date | Patient Name | MRN | Transaction Amount | Billing Amount | Payment Link Charges | Transaction ID | Transaction Invoice No | Approval Code
- Open your Google Sheet → Extensions → Apps Script.
- Paste the contents of
script.gsinto the editor. - Click Deploy → New Deployment → Type: Web App.
- Set Execute as: Me and Who has access: Anyone.
- Copy the generated Web App URL.
If you see a Google account error, open the sheet in an Incognito window first.
- Click the extension icon in Chrome → open the Settings cog (⚙️).
- Paste the Web App URL into the "Google Apps Script Web App URL" field.
- Enter your target Sheet Tab Name (e.g.,
Sheet1). - Enter your EMR domain URLs (one per line).
- Click Save Settings.
Jibin_Invoice_Widget/
│
├── script.gs # Google Apps Script backend (deploy to GAS)
├── SKILL.md # Agent skill specification (internal)
├── invoice.png # Reference invoice image (internal)
│
└── src/ # Chrome Extension source (load unpacked from here)
├── manifest.json
├── icons/
│ ├── icon16.png
│ ├── icon32.png
│ ├── icon48.png
│ └── icon128.png
├── background/
│ └── background.js
├── content/
│ ├── gmail_scraper.js
│ └── emr_automator.js
├── options/
│ ├── options.html
│ ├── options.css
│ └── options.js
└── sidebar/
├── sidebar.html
├── sidebar.css
├── sidebar.js
└── howto.html
Gmail (Etisalat Invoice Emails)
│
▼ [GAS Web App scans via GmailApp API]
Extension Sidebar
│
▼ [Auto-injects EMR search via content script]
EMR Portal (DOM Automation)
│
▼ [fetch() POST to GAS Web App endpoint]
Google Sheets Audit Ledger
- No external telemetry — patient data never leaves the browser except to your own Google Workspace.
- Sandboxed storage — all queue data is stored in
chrome.storage.local, isolated from websites. - Webhook URL acts as private API key — keep the GAS Web App URL confidential.
- Logs visibility toggle — hides the activity log console for screen privacy in shared workspaces.
See SECURITY.md for the full vulnerability disclosure policy.
This project is licensed under the MIT License — see LICENSE for details.
© 2026 Stephen Dias