MSP Teleplan Integration
MSP Module — User Manual
A practical guide for reception, billing staff, optometrists, and anyone using the MSP Teleplan module day-to-day. No code, no technical jargon — written so a new staff member can pick this up in under 30 minutes.
1. What this module does, in plain terms
- Before this module existed, billing MSP meant logging into Teleplan separately, typing PHN numbers, copy-pasting eligibility responses, and tracking remittances by hand.
- This module brings all of that into Odoo:
- The module mirrors how the existing OHIP (Ontario) module works, so if you've used that, the MSP one feels familiar.
| Without the module | With the module |
| Reception logs into Teleplan to check eligibility | One click on the patient profile |
| Eligibility result written on a sticky note | Auto-saved with audit trail (who, when, what response) |
| Claims typed into Teleplan manually | Auto-generated from sales orders |
| Remittances reconciled on paper | Auto-imported into batch payment workflow |
| No history of who clicked what | Every action logged in MSP Transaction Logs |
2. Who uses this module
| Role | What they do |
| Reception | Validate MSP eligibility before/during booking, authorize MSP on appointments |
| Billing staff | Submit claims, review remittances, handle refusals |
| Optometrists | (Background) — their Practitioner Number is on every claim, but they typically don't open the module |
| Office Manager / Admin | Set up clinic + doctor records, manage credentials, view audit logs |
3. Where things live in the menus
| What you want to do | Menu path |
| Find a patient and validate MSP eligibility | Patients menu → open patient |
| Book/edit an appointment with MSP authorization | Calendar / Appointments → open appointment |
| Submit or view a claim | MSP Claim → MSP Claim |
| View clinics | MSP Claim → MSP Clinic |
| View doctors | MSP Claim → Doctors |
| View remittance summaries | MSP Claim → Remittance Summaries |
| View who-did-what audit log | MSP Claim → Configuration → MSP Transaction Logs |
4. One-time setup (office manager / admin)
Done once per clinic. Skip this section if you're using the module day-to-day and the setup is already in place.
4a. Configure the company
Settings → General settings . Scroll to the MSP section:
| Field | What to enter |
| MSP User ID | Your Teleplan login (e.g. TTUV0092 ) |
| MSP Password | Your Teleplan password |
| MSP Test Mode | ✅ ON for staging / training instances. ❌ OFF for production |
| MSP Payee Number | 5-digit Payee Number for production |
| MSP Test Payee Number | Your test environment payee number (for conformance testing) |
| Default MSP Clinic | The clinic record this company bills under |

4b. Configure clinics
MSP Claim → MSP Clinic. One record per physical clinic location:
- Name, address
- Data Centre Number
- Payee Number

4c. Configure doctors
MSP Claim → Doctors. One record per practitioner who will bill MSP:
- Practitioner Name
- Practitioner Number (6-digit MSP number)
- Default clinic

5. Day-to-day: Validating MSP eligibility
The single most common action. Done before rendering service to make sure MSP covers the patient.
5a. Open the patient profile
- Patients menu → search for the patient → click their name
5b. Confirm MSP-relevant fields are filled
The MSP check needs these patient fields to work:
| Field | Required | Why |
| PHN (Personal Health Number) | ✅ Yes | The MSP-side patient identifier |
| Date of Birth | ✅ Yes | MSP cross-checks this |
| First Name / Last Name | Recommended | Used in audit log; mismatch with MSP's records will flag |
| Gender | Recommended | Used in audit log; mismatch with MSP's records will flag |
| Gender | Recommended | Mismatch with MSP's records will flag |

5c. Click "Validate MSP"
Top of the patient form. Click it.
What happens behind the scenes:
1. Odoo calls Teleplan over the internet (takes 1-3 seconds) 2. MSP responds with eligibility: Eligible / Not Eligible 3. Patient form updates: - "MSP Validated" toggle flips to ✅ - "Last MSP Check" timestamp updates - Green/orange banner shows the response message 4. Audit log row written (see Section 11)
5d. Reading the result
| Banner shows | What it means | What to do |
| 🟢 Eligible — Patient is eligible for MSP services | You're good. Patient can be booked / billed under MSP. | Proceed with the appointment |

| 🟠 Not Eligible — ** | MSP rejected. Common reasons: PHN typo, patient not enrolled, coverage lapsed | Verify the PHN with the patient; check MSP coverage status | | 🔴 **Error: | Network issue, MSP system down, or credentials wrong | Try again in a few minutes; if persistent, alert IT |

5e. The Returned Patient Data section in the audit log
When MSP returns the patient's name/DOB/gender, it's stored in the audit log row. If the returned name doesn't match the local record, that's a flag — possibly the PHN is wrong, or the local record was set up under a different name. Reception should verify with the patient.
6. Day-to-day: Authorizing MSP for appointments
Once the patient is MSP-validated, the appointment form will guide you through authorizing the specific services they're receiving.
6a. Open or create an appointment
- Calendar / Appointments → open or create a new event for the patient
6b. The MSP Authorization section auto-appears
If the patient has been MSP-validated, you'll see a new section on the appointment form titled MSP Authorization. It shows up automatically — no need to click anything to enable it.

6c. Add the services
Pick the service products on the appointment (e.g. "Eye Examination"). The MSP procedure codes for those services are pulled from inventory automatically — reception doesn't enter codes manually.
If extra modifier or CPT codes are needed beyond the standard procedure code, type them into the Additional CPT Codes free-form field (comma-separated, e.g. 99213, 25 ).
6d. Click "Authorize MSP"
What happens:
1. Odoo re-runs the eligibility check (in case anything changed) 2. The codes from the linked service products are confirmed 3. The "MSP Authorized" toggle on the appointment flips to ✅ 4. "Last MSP Authorize" timestamp updates 5. A success notification shows: "Authorized for codes [V404] + CPT [99213]" 6. Two audit rows written: one patient-level, one appointment-level

6e. Filter the calendar to MSP appointments
Calendar / Appointments → use the MSP Patients filter to see only patients with MSP coverage, or MSP Authorized to see appointments where MSP has already been authorized.

7. Day-to-day: Submitting a claim
Claims are usually auto-generated when you create a sales order with MSP-billable services and confirm the invoice. The flow:
Customer comes in → service rendered → sales order created → invoice generated → MSP Claim auto-created (claim_type=Regular MSP by default)
7a. Find your claim
MSP Claim → MSP Claim. New claims are in Draft status.
7b. Validate (optional pre-check)
- Click Validate — Odoo checks the claim has a PHN and a Practitioner Number
- If anything's missing, you'll see a friendly error
7c. Submit to MSP
Two ways:
| Button | When to use |
| Submit Single | Submitting one claim |
| Batch Submit | Selecting multiple draft claims in the list view |
1. Odoo builds the Teleplan V4.7 fixed-width record (~100 chars wide) 2. POSTs to MSP via the connector 3. MSP returns a C02 sequence number (auto-assigned) 4. Claim status moves: draft → sent 5. Claim's "Teleplan Sequence" field updates with the C02 number 6. A claim.manager stub is paired (for batch payment reconciliation later)

7d. Other claim type options
| Type | When to use |
| Regular MSP | Standard eligible patient |
| Reciprocal (Out of Province) | Patient covered by another province |
| ICBC | Motor vehicle accident |
| WSBC | Work Safe BC work injury |
| Encounter Record | Reporting only, no payment |
| Opted-Out Provider | Non-participating practitioner |
| Institutional | Institution-based billing |
| Correctional (Inmate) | Inmate billing |
| Debit Request (Reversal) | Reversing a previously paid claim |
| Claim with Note | Has explanatory note |
| E45 Eligibility Request | Async eligibility check |
| B04 Status Inquiry | Asking MSP about a previous claim |
|
|
|
For non-standard claims, change Claim Type before submitting:
The form fields adjust based on claim type — e.g. ICBC needs an ICBC Claim Number, Debit needs a reference to the original claim.
7e. Test the file before submission
If you want to inspect the Teleplan file Odoo would send, click Test Generate File. Downloads as a .txt you can open in any editor. Useful for troubleshooting V4.7 formatting issues.


8. Day-to-day: Receiving remittances
MSP processes claims on their schedule (typically within a few business days). Remittance files are downloaded periodically.
8a. Pull the latest remittance
- MSP Claim → Configuration → ...connector retrieval action (manual button or scheduled cron)
- Or via Teleplan's web UI, download the
.txtfile and import via Odoo's importer
8b. View remittance summaries
- MSP Claim → Remittance Summaries
- Each summary lists payments + refusals against the claims it covers

8c. Send to batch payment
- Open a remittance → click Send to Batch Payment
- The synthetic 835 translator turns the MSP remittance into X12-flavoured data that the existing Insurance batch-payment pipeline can read
- Claims marked paid, refusals show up for follow-up

8.e Day-to-day: Navigating between Patient, Claim, Sale Order, and Invoice
The MSP module is bi-directionally linked — you can pivot from any of these records to the related ones with a single click. No need to search across menus.
From an MSP Claim
The claim form has three smart buttons at the top:
| Smart Button | Opens | Visible when |
| Patient Profile | The patient's full got2.patient profile | A patient is set on the claim |
| Sale Order | The sales order this claim came from | A sale order is linked |
| Invoice | The customer invoice this claim was billed against | An invoice is linked |

8d.From a Sale Order
Sales orders that resulted in MSP claims show a count badge in the header:
- MSP Claims (with badge showing the count, e.g. "2 MSP Claims") — opens the linked claims
- Exactly one claim → opens the claim form directly
- Multiple claims → opens a filtered list scoped to this sale order
Useful when reception or sales is curious whether a particular order has been billed to MSP yet, and what the status is

8e. From an Invoice
Customer invoices have TWO MSP-related buttons in the header:
| Button | What it does |
| MSP Claims | Same behavior as on sale orders — opens linked claims |
| Create MSP Claim | One-click bridge: creates a new draft MSP claim from this invoice, pre-filled and ready to submit |
When you click Create MSP Claim, Odoo automatically fills:
- Patient — invoice's customer (must have PHN on file)
- Doctor — matched from invoice salesperson's MSP doctor record
- Service Date — invoice date
- Fee Item Code — first invoice line product's internal reference
- Billed Amount — first invoice line subtotal
- Clinic — company's default MSP clinic
- Back-links — to the invoice and source sale order, so both smart-button counts go up
If anything's missing (no PHN on the customer, no doctor linked to the salesperson, no product internal reference, etc.), the button shows a friendly error explaining exactly what to fix.
8f. The full navigation map
From any record in this set, you're one click away from any other:
Patient (got2.patient)
↑
│ "Patient Profile" smart button
│
┌──────── MSP Claim ─────────┐
│ ↑ │
│ │ │
"Sale Order" │ "Invoice"
smart button │ smart button
│ │ │
↓ │ ↓
Sale Order │ Invoice
│ │ │
│ │ │ "Create MSP Claim"
│ │ │ action button
└─→ "MSP Claims" smart button ←┘
(with count badges on both)
This means staff don't have to memorize "which menu has the X for record Y" — they just click whichever smart button takes them where they need to go.
9. Demo mode buttons (test mode only)
When your company has MSP Test Mode ON, two extra buttons appear:
9a. Simulate Eligible Demo (patient form)
- Pretends MSP returned "Eligible" — no network call
- Lets you demo the success path when the testlab is unavailable
- Audit log row gets
(SIMULATED)suffix - Disabled in production — even if a power user tries to invoke it on a customer instance, it raises an error

9b. Simulate Remittance (claim form)
- Creates a fake
msp.remittance.summarypaying the claim in full plus two fake refusals - Lets you demo the full claim → batch payment flow in one sitting
- Disabled in production

10. The Audit Log (MSP Transaction Logs)
Every Validate MSP / Authorize MSP click writes a row. This is the audit trail for compliance.
10a. Where to find it
MSP Claim → Configuration → MSP Transaction Logs
10b. What each column means
| Column | What it shows |
| Time/Date | When the action happened |
| PHN | Patient's PHN |
| Patient | The local patient record |
| Action/Event Detail | What triggered the call (e.g. Patient Validate MSP , Appointment Authorize MSP (event N, codes: V404, cpt: 99213) |
| MSP Service User | The Teleplan login used |
| Triggered By | The Odoo user who clicked the button |
| Duration (s) | How long the MSP call took |
| Result | Success / Failure badge |
| Eligible | ✓ if MSP responded Eligible |
| Response Message | Plain-English message from MSP |

10c. Drilling into a row
Click into any row to see:
- Returned Patient Data — what MSP knows about this PHN (name, gender, DOB). Mismatch with local record = potential billing issue
- MSP Response — full message, codes, action
- Error Messages — if it failed
10d. Filters
Save common searches:
- Success — only successful calls
- Failure — only failures (useful for troubleshooting)
- Eligible — only Eligible results
- Group by Patient / Result / Date
11. Common scenarios and troubleshooting
11a. "I clicked Validate MSP and nothing happened"
- Check the PHN and Date of Birth are filled on the patient
- Open MSP Transaction Logs → look for the most recent row by your user → check the Error Messages field
- Most common: network glitch (retry) or wrong credentials in company settings
11b. "MSP returned 'FUTURE DATE' error"
- Module sends yesterday's date as service date by default — this shouldn't happen
- If it does, check the patient's DOB is in the past (not future)
11c. "Patient name on the MSP response doesn't match my local record"
- This is the demographic mismatch detection — feature, not bug
- Verify the PHN with the patient (could be a typo) OR
- The local patient record may have been set up with the wrong name
- Either fix the local name to match MSP, or correct the PHN
11d. "Authorize MSP fails saying 'No MSP fee codes'"
- The appointment's service products aren't linked to MSP procedure codes
- Go to Inventory → open the service product → set the MSP Procedure Code field
- Save, go back to appointment, click Authorize MSP again
11e. "Claim went to 'refused' status — now what?"
- Open the claim → check Response Message field
- MSP returns 2-character explanation codes (AP, Y4, Y9, etc.)
- Common: AP (info not provided), Y4 (non-covered charge), Y9 (patient not insured)
- Resubmit with the explanation addressed, or contact MSP
11f. "I want to test the workflow without affecting real claims"
- Make sure
MSP Test Modeis ON on the company - Use the Simulate Eligible button to fake an Eligible response
- Submit a few test claims — they go to MSP's testlab, not production
- Use the Simulate Remittance button to fake a remittance for end-to-end demo
12. Whole model in one paragraph
> Reception validates a patient's MSP coverage by clicking one button on the patient profile. When the patient is booked, the appointment screen auto-shows an MSP Authorization section that pulls the right billing codes from inventory based on the services the patient is receiving. Reception confirms by clicking Authorize MSP. After the visit, sales orders auto-create MSP claims, billing staff submits them to MSP in batches, and remittances flow back into the existing batch payment workflow. Every click is logged in MSP Transaction Logs for compliance. In test mode, simulation buttons let you exercise the whole flow without real network calls — perfect for staff training.
13. Glossary
| Term | Plain meaning |
| MSP | Medical Services Plan — BC's public health insurance |
| Teleplan | MSP's electronic system for claim submission and eligibility checking |
| PHN | Personal Health Number — the patient's MSP identifier |
| HIBC | Health Insurance BC — administers MSP enrolment + certification |
| Practitioner Number | A 6-digit number unique to each optometrist enrolled in MSP |
| Data Centre Number | Identifies your clinic to MSP (e.g. V0092 ) |
| Payee Number | 5-digit number identifying who receives the MSP payments |
| C02 sequence | Teleplan's tracking number for each submitted claim |
| Folio | Your local claim number (Odoo's claim sequence) |
| C12 record | The refusal/explanation record in remittances |
| Eligibility | Confirmation MSP will pay for this patient's care |
| Authorization | The appointment-level confirmation that MSP will pay for these specific services |
| Remittance | The payment / refusal file MSP sends back after processing claims |
| Fee item code | The 5-character code identifying what service was rendered |
| Test mode | Mode where all MSP calls hit the testlab, simulation buttons appear |
| Production mode | Live billing — real claims, real money, simulation buttons hidden |
14. Quick reference card
For printing / pinning to reception desk:
``` ───────────────────────────────────────────────────── MSP WORKFLOW — Quick Reference ─────────────────────────────────────────────────────
BEFORE the visit: Patient form → Validate MSP button → 🟢 Eligible?
DURING booking: Appointment form → MSP Authorization section Pick services → Authorize MSP button → 🟢 Authorized?
AFTER the visit: Sales order → invoice → MSP Claim auto-created Submit → status: draft → sent
WHEN MSP responds: Remittance Summaries → Send to Batch Payment Claims marked paid or refused
TO CHECK who-did-what: MSP Claim → Configuration → MSP Transaction Logs
IF SOMETHING'S WRONG: Open the audit log row → check Error Messages Or contact IT
───────────────────────────────────────────────────── ```