account
Used in the accounting section in chart of accounts. Not related to patient accounts in any way.
Order Name Type Summary
0 AccountNum bigint(20) Primary key.
1 Description varchar(255) .
2 AcctType tinyint Enum:AccountType Asset, Liability, Equity,Revenue, Expense
Asset: 0
Liability: 1
Equity: 2
Income: 3
Expense: 4
3 BankNumber varchar(255) For asset accounts, this would be the bank account number for deposit slips.
4 Inactive tinyint Set to true to not normally view this account in the list.
5 AccountColor int(11) .
6 IsRetainedEarnings tinyint(4) This will be set true for exactly one account, and it can't be changed. On the Balance Sheet report, this special account will also contain the sum of all expenses and income for all previous years.

accountingautopay
In the accounting section, this automates entries into the database when user enters a payment into a patient account. This table presents the user with a picklist specific to that payment type. For example, a cash payment would create a picklist of cashboxes for user to put the cash into.
Order Name Type Summary
0 AccountingAutoPayNum bigint(20) Primary key.
1 PayType bigint(20) FK to definition.DefNum.
2 PickList varchar(255) FK to account.AccountNum. AccountNums separated by commas. No spaces.

activeinstance
ActiveInstances are used to track OD sessions.
Order Name Type Summary
0 ActiveInstanceNum bigint(20) Primary key
1 ComputerNum bigint(20) FK to computer.ComputerNum
2 UserNum bigint(20) FK to userod.UserNum
3 ProcessId bigint(20) Windows Process ID of the Open Dental instance
4 DateTimeLastActive datetime Last datetime that was activity was recorded
5 DateTRecorded datetime The time at which we recorded DateTimeLastActive. This is not a TimeStamp column because we need to update it even if nothing else in the row changed.
6 ConnectionType tinyint(4) Enum:ConnectionTypes Used to distinguish the connection type.
Direct: 0 - Direct
MiddleTier: 1 - MiddleTier
Thinfinity: 2 - Thinfinity
AppStream: 3 - AppStream

adjustment
An adjustment in the patient account. Usually, adjustments are very simple, just being assigned to one patient and provider. But they can also be attached to a procedure to represent a discount on that procedure. Attaching adjustments to procedures is not automated, so it is not very common.
Order Name Type Summary
0 AdjNum bigint(20) Primary key.
1 AdjDate date The date that the adjustment shows in the patient account.
2 AdjAmt double Amount of adjustment. Can be pos or neg.
3 PatNum bigint(20) FK to patient.PatNum.
4 AdjType bigint(20) FK to definition.DefNum.
5 ProvNum bigint(20) FK to provider.ProvNum.
6 AdjNote text Note for this adjustment.
7 ProcDate date Procedure date. Not when the adjustment was entered.
8 ProcNum bigint(20) FK to procedurelog.ProcNum. Only used if attached to a procedure. Otherwise, 0.
9 DateEntry date Timestamp automatically generated and user not allowed to change. The actual date of entry.
10 ClinicNum bigint(20) FK to clinic.ClinicNum.
11 StatementNum bigint(20) FK to statement.StatementNum. Only used when the statement in an invoice.
12 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
13 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
14 TaxTransID bigint(20) (Deprecated) Holds the Avalara transaction ID associated with this adjustment so that we can track reported adjustments. Not editable in the UI.

alertcategory
A grouping of alert types that you can subscribe to. The alert types are stored as AlertCategoryLink rows attached to each category. Users can make their own custom categories by copying existing ones.
Order Name Type Summary
0 AlertCategoryNum bigint(20) Primary key.
1 IsHQCategory tinyint(4) False by default, indicates that this is a category that can not be edited or deleted. When a copy of a category is made, the copy changes this value from true to false.
2 InternalName varchar(255) Name used by HQ to identify the type of alert category this started as, allows us to associate new alerts.
3 Description varchar(255) Name displayed to user when subscribing to alerts categories.

alertcategorylink
Each row is an alert type for an alertcategory. Users can change which types are attached to custom categories.
Order Name Type Summary
0 AlertCategoryLinkNum bigint(20) Primary key.
1 AlertCategoryNum bigint(20) FK to alertcategory.AlertCategoryNum.
2 AlertType tinyint(4) Enum:AlertType Identifies what types of alert this row is associated to.
Generic: 0 - Generic. Informational, has no action associated with it
OnlinePaymentsPending: 1 - Opens the Online Payments Window when clicked
VoiceMailMonitor: 2 - Only used by Open Dental HQ. The server monitoring incoming voicemails is not working.
RadiologyProcedures: 3 - Opens the Radiology Order List window when clicked. For this type, FKey is provider.ProvNum.
CallbackRequested: 4 - A patient has clicked "Request Callback" on an e-Confirmation. For this type, FKey is appointment.AptNum.
WebSchedNewPat: 5 - Alerts related to the Web Sched New Pat eService.
WebSchedNewPatApptCreated: 6 - Alerts related to Web Sched New Patient Appointments. For this type, FKey is appointment.AptNum.
NumberBarredFromTexting: 7 - A number is not able to receive text messages. For this type, FKey is patient.PatNum.
MaxConnectionsMonitor: 8 - The number of MySQL connections to the server has exceeded half the allowed number of connections.
WebSchedASAPApptCreated: 9 - Alerts related to new ASAP appointments via web sched. For this type, FKey is appointment.AptNum.
AsteriskServerMonitor: 10 - Only used by Open Dental HQ. The Asterisk Server is not processing messages or is getting all blank payloads.
MultipleEConnectors: 11 - Multiple computers are running eConnector services. There should only ever be one.
EConnectorDown: 12 - The eConnector is in a critical state and not currently turned on. There should only ever be one.
EConnectorError: 13 - The eConnector has an error that is not critical but is worth looking into. There should only ever be one.
DoseSpotProviderRegistered: 14 - Alerts related to DoseSpot provider registration. For this type, FKey is providererx.ProviderErxNum.
DoseSpotClinicRegistered: 15 - Alerts related to DoseSpot clinic registration. For this type, FKey is clinicerx.ClinicErxNum.
WebSchedRecallApptCreated: 16 - An appointment has been created via Web Sched Recall. For this type, FKey is appointment.AptNum.
ClinicsChanged: 17 - Alerts related to turning clinics on or off for eServices.
ClinicsChangedInternal: 18 - Alerts related to turning clinics on or off for eServices. Internal, not displayed to the customer. Will be processed by the eConnector and then deleted.
MultipleOpenDentalServices: 19 - Multiple computers are running OpenDentalServices. There should only ever be one.
OpenDentalServiceDown: 20 - OpenDentalService is down.
WebMailReceived: 21 - Triggered when a new WebMail is received from the patient portal.
EconnectorEmailTooManySendFails: 22 - Triggered when the consecutive count of failed emails for clinic reaches greater than the value set in EmailAlertMaxConsecutiveFails preference.
SupplementalBackups: 23 - Alert the user for things like not making a local supplemental backup within the last month.
EConnectorMySqlTime: 24 - Alert the user that the local time on the eConnector does not closely match the time of the database. Intended to only have one instance max.
CareCreditBatchError: 25 - Alert the user that there are CareCredit batch errors.
PatientArrival: 26 - Alert the user that there are patients who have texted to indicate they have arrived for their appointment. For this type, FKey is appointment.AptNum.
EmailSecure: 27 - Alert the user that there are new secure emails that have been downloaded.
WebSchedExistingPatApptCreated: 28 - An appointment has been created via Web Sched Exising Pat. For this type, FKey is appointment.AptNum.
CloudAlertWithinLimit: 29 - Alert the user when they're approaching their Cloud Session Limit (determined by CloudAlertWithinLimit pref)
WebFormsReady: 30 - Alert that web forms are ready to be retrieved.
PushHubDown: 31 - Alert HQ that a push hub client has reached its failure threshold or all push hub clients are failing
Update: 32 - Alert that user action is required after an update.
ReplicationMonitor: 33 - Alert.
WebSchedRecallsNotSending: 34 - Alert that no recalls have sent in a period of time.
TenDlc: 35 - Alert if an account using 10DLC goes over their daily max limit or if we've neglected to set up our pref correctly
AddToCalendar: 36 - Alert if a clinic is not signed for eConfirmations but is trying to use the AddToCalendar tag. FKey on this alert type is used to determine the type of autocomm that created this alert rather than a FKey to a db row.
EConnectorRedistributableMissing: 37 - Alert that is created when an eClipboard/ODM/ODT device tries to get a tooth chart image, but their eConn server is missing a specific redistributable that allows the creation of the image.
SMSThread: 38 - Alert that is created when the SMSQueuer is turned on but no Broadcaster Servers are configured to send out text messages. Requires Engineers to update BroadcasterThreadSettings.
SignatureCleared: 39 - Alert that is created when a procedure or group note's signature is cleared by another user editing that note.
Pearl: 40 - Alert that is created when an error occurs while uploading an image to Pearl or processing Pearl results.
BetterDiagnostics: 41 - Alert that is created when an error occurs while uploading an image to BetterDiagnostics or processing BetterDiagnostics results.
MessageToPayTag: 42 - Alert that is created when running Billing and both email and SMS templates do not contain [MsgToPayURL] replacement tag.
MassEmailUpload: 43 - Alert that is created while a mass email audience is being uploaded.
MassEmailReceipt: 44 - Alert that commlogs have been created for a sent mass email.
HQNotification: 45 - Alert that is created by HQ to send a notification to specific customers.
TreatmentPlanImagesFolderInaccesible: 46 - Alert that is created when the eConnector is unable to gain access to or cannot find the images folder when saving Signed Treatment Plan PDFs for ODTouch or eClipboard.
PaymentPlanImagesFolderInaccesible: 47 - Alert that is created when the eConnector is unable to gain access to or cannot find the images folder when saving Signed Payment Plan PDFs for ODTouch or eClipboard.
CannotCreateOrAccessPatientFolder: 48 - Alert that is created when unable to create or access a Patient folder in the images folder for ODTouch or eClipboard.
DefaultEmailNotSet: 49 - Alert that is created when there is no default email address set for an office that is subscribed to an eService that uses email.
PaySuite: 50 - Alert that is created when the OpenDentalService processes PaySuitePayments.
EServiceListenerError: 51 - Alert that is created when the EServiceListener has encountered an error. usually when it cannot open inbound firewall ports.
MariaDbFullBackupError: 52 - Alert that is created when the Open Dental Service Full MariaDb backup encounters an error.
MariaDbIncrementalBackupError: 53 - Alert that is created when the Open Dental Service Incremental MariaDb backup encounters an error.
EConnectorCritical: 54 - Alert that is created by the eConnector due to a connection failure.

alertitem
Any row in this table will show up in the main menu of Open Dental to get the attention of the user. The user can click on the alert and take an action. The actions available to the user are also determined in this row.
Order Name Type Summary
0 AlertItemNum bigint(20) Primary key.
1 ClinicNum bigint(20) FK to clinic.ClinicNum. Can be 0 or -1. -1 indicates show the alert in all clinics.
2 Description varchar(2000) What is displayed in the menu item.
3 Type tinyint(4) Enum:AlertType Identifies what type of alert this row is.
Generic: 0 - Generic. Informational, has no action associated with it
OnlinePaymentsPending: 1 - Opens the Online Payments Window when clicked
VoiceMailMonitor: 2 - Only used by Open Dental HQ. The server monitoring incoming voicemails is not working.
RadiologyProcedures: 3 - Opens the Radiology Order List window when clicked. For this type, FKey is provider.ProvNum.
CallbackRequested: 4 - A patient has clicked "Request Callback" on an e-Confirmation. For this type, FKey is appointment.AptNum.
WebSchedNewPat: 5 - Alerts related to the Web Sched New Pat eService.
WebSchedNewPatApptCreated: 6 - Alerts related to Web Sched New Patient Appointments. For this type, FKey is appointment.AptNum.
NumberBarredFromTexting: 7 - A number is not able to receive text messages. For this type, FKey is patient.PatNum.
MaxConnectionsMonitor: 8 - The number of MySQL connections to the server has exceeded half the allowed number of connections.
WebSchedASAPApptCreated: 9 - Alerts related to new ASAP appointments via web sched. For this type, FKey is appointment.AptNum.
AsteriskServerMonitor: 10 - Only used by Open Dental HQ. The Asterisk Server is not processing messages or is getting all blank payloads.
MultipleEConnectors: 11 - Multiple computers are running eConnector services. There should only ever be one.
EConnectorDown: 12 - The eConnector is in a critical state and not currently turned on. There should only ever be one.
EConnectorError: 13 - The eConnector has an error that is not critical but is worth looking into. There should only ever be one.
DoseSpotProviderRegistered: 14 - Alerts related to DoseSpot provider registration. For this type, FKey is providererx.ProviderErxNum.
DoseSpotClinicRegistered: 15 - Alerts related to DoseSpot clinic registration. For this type, FKey is clinicerx.ClinicErxNum.
WebSchedRecallApptCreated: 16 - An appointment has been created via Web Sched Recall. For this type, FKey is appointment.AptNum.
ClinicsChanged: 17 - Alerts related to turning clinics on or off for eServices.
ClinicsChangedInternal: 18 - Alerts related to turning clinics on or off for eServices. Internal, not displayed to the customer. Will be processed by the eConnector and then deleted.
MultipleOpenDentalServices: 19 - Multiple computers are running OpenDentalServices. There should only ever be one.
OpenDentalServiceDown: 20 - OpenDentalService is down.
WebMailReceived: 21 - Triggered when a new WebMail is received from the patient portal.
EconnectorEmailTooManySendFails: 22 - Triggered when the consecutive count of failed emails for clinic reaches greater than the value set in EmailAlertMaxConsecutiveFails preference.
SupplementalBackups: 23 - Alert the user for things like not making a local supplemental backup within the last month.
EConnectorMySqlTime: 24 - Alert the user that the local time on the eConnector does not closely match the time of the database. Intended to only have one instance max.
CareCreditBatchError: 25 - Alert the user that there are CareCredit batch errors.
PatientArrival: 26 - Alert the user that there are patients who have texted to indicate they have arrived for their appointment. For this type, FKey is appointment.AptNum.
EmailSecure: 27 - Alert the user that there are new secure emails that have been downloaded.
WebSchedExistingPatApptCreated: 28 - An appointment has been created via Web Sched Exising Pat. For this type, FKey is appointment.AptNum.
CloudAlertWithinLimit: 29 - Alert the user when they're approaching their Cloud Session Limit (determined by CloudAlertWithinLimit pref)
WebFormsReady: 30 - Alert that web forms are ready to be retrieved.
PushHubDown: 31 - Alert HQ that a push hub client has reached its failure threshold or all push hub clients are failing
Update: 32 - Alert that user action is required after an update.
ReplicationMonitor: 33 - Alert.
WebSchedRecallsNotSending: 34 - Alert that no recalls have sent in a period of time.
TenDlc: 35 - Alert if an account using 10DLC goes over their daily max limit or if we've neglected to set up our pref correctly
AddToCalendar: 36 - Alert if a clinic is not signed for eConfirmations but is trying to use the AddToCalendar tag. FKey on this alert type is used to determine the type of autocomm that created this alert rather than a FKey to a db row.
EConnectorRedistributableMissing: 37 - Alert that is created when an eClipboard/ODM/ODT device tries to get a tooth chart image, but their eConn server is missing a specific redistributable that allows the creation of the image.
SMSThread: 38 - Alert that is created when the SMSQueuer is turned on but no Broadcaster Servers are configured to send out text messages. Requires Engineers to update BroadcasterThreadSettings.
SignatureCleared: 39 - Alert that is created when a procedure or group note's signature is cleared by another user editing that note.
Pearl: 40 - Alert that is created when an error occurs while uploading an image to Pearl or processing Pearl results.
BetterDiagnostics: 41 - Alert that is created when an error occurs while uploading an image to BetterDiagnostics or processing BetterDiagnostics results.
MessageToPayTag: 42 - Alert that is created when running Billing and both email and SMS templates do not contain [MsgToPayURL] replacement tag.
MassEmailUpload: 43 - Alert that is created while a mass email audience is being uploaded.
MassEmailReceipt: 44 - Alert that commlogs have been created for a sent mass email.
HQNotification: 45 - Alert that is created by HQ to send a notification to specific customers.
TreatmentPlanImagesFolderInaccesible: 46 - Alert that is created when the eConnector is unable to gain access to or cannot find the images folder when saving Signed Treatment Plan PDFs for ODTouch or eClipboard.
PaymentPlanImagesFolderInaccesible: 47 - Alert that is created when the eConnector is unable to gain access to or cannot find the images folder when saving Signed Payment Plan PDFs for ODTouch or eClipboard.
CannotCreateOrAccessPatientFolder: 48 - Alert that is created when unable to create or access a Patient folder in the images folder for ODTouch or eClipboard.
DefaultEmailNotSet: 49 - Alert that is created when there is no default email address set for an office that is subscribed to an eService that uses email.
PaySuite: 50 - Alert that is created when the OpenDentalService processes PaySuitePayments.
EServiceListenerError: 51 - Alert that is created when the EServiceListener has encountered an error. usually when it cannot open inbound firewall ports.
MariaDbFullBackupError: 52 - Alert that is created when the Open Dental Service Full MariaDb backup encounters an error.
MariaDbIncrementalBackupError: 53 - Alert that is created when the Open Dental Service Incremental MariaDb backup encounters an error.
EConnectorCritical: 54 - Alert that is created by the eConnector due to a connection failure.
4 Severity tinyint(4) Enum:SeverityType The severity will help determine what color this alert should be in the main menu.
Normal: 0 - White
Low: 1 - Yellow
Medium: 2 - Orange
High: 3 - Red
5 Actions tinyint(4) Enum:ActionType Bitwise flag that represents what actions are available for this alert.
None:
MarkAsRead:
OpenForm:
Delete:
ShowItemValue:
6 FormToOpen tinyint(4) Enum:FormType The form to open when the user clicks "Open Form".
None: 0 - No form.
FormEServicesWebSchedRecall: 1 - FormEServicesWebSchedRecall.
FormOnlinePayments: 2 - FormOnlinePayments.
FormRadOrderList: 3 - FormRadOrderList.
FormEServicesSignupPortal: 4 - FormEServicesSetup.
FormApptEdit: 5 - FormEServicesSetup. FKey will be the AptNum of the appointment to open.
FormEServicesWebSchedNewPat: 6 - FormEServicesSetup Web Sched New Pat.
FormWebSchedAppts: 7 - FormWebSchedAppts.
FormPatientEdit: 8 - FormPatientEdit. FKey will be PatNum.
FormEServicesEConnector: 9 - FormEServicesSetup eConnector Service.
FormDoseSpotAssignUserId: 10 - FormDoseSpotAssignUserId.
FormDoseSpotAssignClinicId: 11 - FormDoseSpotAssignClinicId.
FormEmailInbox: 12 - FormWebMailMessageEdit
FormEmailAddresses: 13 - FormEmailAddresses
FormCareCreditTransactions: 14 - FormCareCreditTransactions
FormCloudManagement: 15 - FormCloudUserManagement
FormWebForms: 16 - FormWebForms
FormModuleSetup: 17 - FormModuleSetup
FormEServicesAutoMsging: 18 - FormEServicesAutoMsging
FrmStatementSendSetup: 19 - FrmStatementSendSetup
FormAdvertisingMassEmailUpload: 20 - FormAdvertisingMassEmailUpload
FrmPaySuiteReconciliation: 21 - FrmPaySuiteReconciliation
7 FKey bigint(20) FK to provider.ProvNum AND Type=3, FK to appointment.AptNum AND Type IN(4,6,9,16,26,28), FK to patient.PatNum AND Type=7, FK to providererx.ProviderErxNum AND Type=14, FK to clinicerx.ClinicErxNum AND Type=15.
8 ItemValue varchar(4000) Like description, but more specific. When set use ActionType.ShowItemValue to show this variable within a MsgBoxCopyPaste window.
9 UserNum bigint(20) FK to userod.UserNum. Will only be shown to that specific user. 0 is all users.
10 SecDateTEntry datetime Date this row was added to the database. Not editable by the user

alertread
Order Name Type Summary
0 AlertReadNum bigint(20) Primary key.
1 AlertItemNum bigint(20) FK to alertitem.AlertItemNum.
2 UserNum bigint(20) FK to userod.UserNum.

alertsub
Subscribes a user and optional clinic to specific alert types. Users will not get alerts unless they have an entry in this table.
Order Name Type Summary
0 AlertSubNum bigint(20) Primary key.
1 UserNum bigint(20) FK to userod.UserNum.
2 ClinicNum bigint(20) FK to clinic.ClinicNum. Can be 0.
3 Type tinyint(4) Deprecated.
4 AlertCategoryNum bigint(20) FK to alertcategory.AlertCategoryNum.

allergy
An allergy attached to a patient and linked to an AllergyDef.
Order Name Type Summary
0 AllergyNum bigint(20) Primary key.
1 AllergyDefNum bigint(20) FK to allergydef.AllergyDefNum
2 PatNum bigint(20) FK to patient.PatNum
3 Reaction varchar(255) Adverse reaction description. When importing from eForms, this is where the allergy name goes for "Other" when there's no match.
4 StatusIsActive tinyint(4) True if still an active allergy. False helps hide it from the list of active allergies.
5 DateTStamp timestamp To be used for synch with web server for CertTimelyAccess.
6 DateAdverseReaction date The historical date that the patient had the adverse reaction to this agent.
7 SnomedReaction varchar(255) Snomed code for reaction. Optional and independent of the Reaction text field. Not needed for reporting. Only used for CCD export/import.

allergydef
An allergy definition. Gets linked to an allergy and patient. Allergies will not show in CCD messages unless they have a valid Medication (that has an RxNorm) or UniiCode.
Order Name Type Summary
0 AllergyDefNum bigint(20) Primary key.
1 Description varchar(255) Name of the drug. User can change this. If an RxCui is present, the RxNorm string can be pulled from the in-memory table for UI display in addition to the Description.
2 IsHidden tinyint(4) Because user can't delete.
3 DateTStamp timestamp The last date and time this row was altered. Not user editable.
4 SnomedType tinyint(4) Enum:SnomedAllergy SNOMED Allergy Type Code. Only used to create CCD in FormSummaryOfCare.
None: 0-No SNOMED allergy type code has been assigned.
AllergyToSubstance: 1-Allergy to substance (disorder), code number 418038007.
DrugAllergy: 2-Drug allergy (disorder), code number 416098002.
DrugIntolerance: 3-Drug intolerance (disorder), code number 59037007.
FoodAllergy: 4-Food allergy (disorder), code number 414285001.
FoodIntolerance: 5-Food intolerance (disorder), code number 235719002.
AdverseReactions: 6-Propensity to adverse reactions (disorder), code number 420134006.
AdverseReactionsToDrug: 7-Propensity to adverse reactions to drug (disorder), code number 419511003
AdverseReactionsToFood: 8-Propensity to adverse reactions to food (disorder), code number 418471000.
AdverseReactionsToSubstance: 9-Propensity to adverse reactions to substance (disorder), code number 419199007.
5 MedicationNum bigint(20) FK to medication.MedicationNum. Optional, only used with CCD messages.
6 UniiCode varchar(255) The Unii code for the Allergen. Optional, but there must be either a MedicationNum or a UniiCode. Used to create CCD in FormSummaryOfCare, or set during CCD allergy reconcile.

apikey
Used to keep track of Customer's API Key and Developer's name. Just a copy from OD HQ for convenience.
Order Name Type Summary
0 APIKeyNum bigint(20) Primary key.
1 CustApiKey varchar(255) Customer's API key.
2 DevName varchar(255) Developer's name, exactly as they entered it in FHIR developer portal.

apisubscription
A subscription by an API client that requests events to be fired for db changes or ui actions. Events are currently sent blindly. In the future, we could support acking for db events, but not very useful for ui events.
Order Name Type Summary
0 ApiSubscriptionNum bigint(20) Primary key.
1 EndPointUrl varchar(255) This is the URL endpoint to which events will be sent.
2 Workstation varchar(255) Name of the workstation that will fire events. Blank if you want all workstations to fire events.
3 CustomerKey varchar(255) API Key the subscribing developer gave the customer. There can be multiple 3rd parties products for one database, each with their own key.
4 WatchTable varchar(255) Enum: EnumWatchTable, stored as string
5 PollingSeconds int(11) Frequency of database polling, in seconds.
6 UiEventType varchar(255) Enum: EnumApiUiEventType, stored as string.
7 DateTimeStart datetime When the subscription started. This gets updated each time db is polled so that it represents the start of the date range for the next polling.
8 DateTimeStop datetime When the subscription will expire. MinVal 01-01-0001 if no expiration.
9 Note varchar(255) .
10 DateTimeLastFailure datetime The time of the most recent failure to connect to a subscription's endpoint.
11 FailureReason text The reason for the last failure to the connect to a subscription's endpoint.
12 SubsequentFailures int(11) The number of back to back failures for this subscription's attempt to send event data. Resets to 0 upon a successful send.
13 DateTimeNextRetry datetime The datetime that this subscription will attempt to retry a send after a failed attempt. MinVal 01-01-0001 if this subscription is healthy. Resets to MinVal on a successful send. For each failure, the interval gradually grows until 30 min.

appointment
Appointments can show in the Appointments module, or they can be on the unscheduled list. An appointment object is also used to store the Planned appointment. The planned appointment never gets scheduled, but instead gets copied. Also see histappointment, which keeps a historical record.
Order Name Type Summary
0 AptNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum. The patient that the appointment is for.
2 AptStatus tinyint Enum:ApptStatus .
None: 0- No appointment should ever have this status.
Scheduled: 1- Shows as a regularly scheduled appointment.
Complete: 2- Shows greyed out.
UnschedList: 3- Only shows on unscheduled list.
ASAP: 4- Deprecated in 17.4.1. Use Appointment.Priority instead.
Broken: 5- Shows with a big X on it.
Planned: 6- Planned appointment. Only shows in Chart module. User not allowed to change this status, and it does not display as one of the options.
PtNote: 7- Patient "post-it" note on the schedule. Shows light yellow. Shows on day scheduled just like appt, as well as in prog notes, etc.
PtNoteCompleted: 8- Patient "post-it" note completed
3 Pattern varchar(255) Time pattern, X for Dr time, / for assist time. Stored in 5 minute increments. Converted as needed to 10 or 15 minute representations for display. There's not a hard limit on this. When dragging, the max is 6.5 hours. Within the AptEdit window, it can be set to 9 hours.
4 Confirmed bigint(20) FK to definition.DefNum. This field can also be used to show patient arrived, in chair, etc. The Category column in the definition table is DefCat.ApptConfirmed.
5 TimeLocked tinyint(1) If true, then the program will not attempt to reset the user's time pattern and length when adding or removing procedures.
6 Op bigint(20) FK to operatory.OperatoryNum.
7 Note text Note.
8 ProvNum bigint(20) FK to provider.ProvNum.
9 ProvHyg bigint(20) FK to provider.ProvNum. Optional. Only used if a hygienist is assigned to this appt.
10 AptDateTime datetime Appointment Date and time. Use a datetime range instad of DATE(AptDateTime) or TIME(AptDateTime) in any query to avoid slowness.
11 NextAptNum bigint(20) FK to appointment.AptNum. A better description of this field would be PlannedAptNum. Only used to show that this apt is derived from specified planned apt. Otherwise, 0.
12 UnschedStatus bigint(20) FK to definition.DefNum. The definition.Category in the definition table is DefCat.RecallUnschedStatus. Only used if this is an Unsched or Planned appt.
13 IsNewPatient tinyint This is the first appoinment this patient has had at this office. Somewhat automated.
14 ProcDescript text A one line summary of all procedures. Can be used in various reports, Unscheduled list, and Planned appointment tracker. Not user editable right now, so it doesn't show on the screen.
15 Assistant bigint(20) FK to employee.EmployeeNum. You can assign an assistant to the appointment.
16 ClinicNum bigint(20) FK to clinic.ClinicNum. 0 if no clinic.
17 IsHygiene tinyint Set true if this is a hygiene appt. This flag is frequently not set even when it is a hygiene appointment because some offices want the dentist color on the appointments.
18 DateTStamp timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable.
19 DateTimeArrived datetime The date and time that the patient checked in.
20 DateTimeSeated datetime The date and time that the patient was seated in the chair in the operatory.
21 DateTimeDismissed datetime The date and time that the patient got up out of the chair. Date is largely ignored since it should be the same as the appt.
22 InsPlan1 bigint(20) FK to insplan.PlanNum for the primary insurance plan at the time the appointment is set complete. May be 0. We can't tell later which subscriber is involved; only the plan.
23 InsPlan2 bigint(20) FK to insplan.PlanNum for the secoondary insurance plan at the time the appointment is set complete. May be 0. We can't tell later which subscriber is involved; only the plan.
24 DateTimeAskedToArrive datetime Date and time patient asked to arrive, or minval if patient not asked to arrive at a different time than appt.
25 ProcsColored text Stores XML for the procs colors
26 ColorOverride int(11) If set to anything but 0, then this will override the graphic color for the appointment. Typically set to the color of the corresponding appointment type (if one is set) or a color manually picked by the user.
27 AppointmentTypeNum bigint(20) FK to appointmenttype.AppointmentTypeNum. Make sure to update ColorOverride to the corresponding color associated to this appointment type when changing the appointment type.
28 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
29 SecDateTEntry datetime Timestamp automatically generated and user not allowed to change. The actual date of entry.
30 Priority tinyint(4) Enum:ApptPriority 0 for normal appointments, 1 for ASAP.
Normal: 0 - Default priority
ASAP: 1 - Used to identify items for the ASAP list
31 ProvBarText varchar(60) Text that is superimposed on the provbar at the left of each appointment. One character per 10 or 15 minute increment, not per 5 min.
32 PatternSecondary varchar(255) Time pattern, X for secondary provider time, / for spacing. Stored in 5 minute increments. Converted as needed to 10 or 15 minute representations for display. This could be Dr or Hyg, depending on if the IsHyg box is checked. Does not have any effect on appointment length. Probably same length as Pattern, but no guarantee.
33 SecurityHash varchar(255) Holds the salted hash of the following appointment fields: AptStatus, Confirmed, AptDateTime.
34 ItemOrderPlanned int(11) One-indexed order of patnum specific planned appointments. Column moved from the deprecated table plannedappt.
35 IsMirrored tinyint(4) If true, then this appointment will show a duplicate mirrored on the secondary provider's operatory. The length of the mirror will be based on the provider time set for the secondary provider, so it won't be the same size as the original. Default for new appointments is based on ApptMirrorSecondary. The mirrored appointments can be set to show/hide using ApptView.ShowMirroredAppts.

appointmentrule
For now, the rule is simple. It simply blocks all double booking of the specified code range. The double booking would have to be for the same provider. This can later be extended to provide more complex rules, such as partial double booking, time limitations, etc.
Order Name Type Summary
0 AppointmentRuleNum bigint(20) Primary key.
1 RuleDesc varchar(255) The description of the rule which will be displayed to the user.
2 CodeStart varchar(15) The procedure code of the start of the range.
3 CodeEnd varchar(15) The procedure code of the end of the range.
4 IsEnabled tinyint Usually true. But this does allow you to turn off a rule temporarily without losing the settings.

appointmenttype
Appointment type is used to override appointment color. Might control other properties on appointments in the future.
Order Name Type Summary
0 AppointmentTypeNum bigint(20) Primary key.
1 AppointmentTypeName varchar(255)
2 AppointmentTypeColor int(11)
3 ItemOrder int(11) 0 based
4 IsHidden tinyint(4)
5 Pattern varchar(255) Time pattern, X for Dr time, / for assist time. Stored in 5 minute increments. Convert as needed to 10 or 15 minute representations for display. Will be blank if the pattern should be dynamically calculated via the procedures found in CodeStr.
6 CodeStr varchar(4000) Comma delimited list of procedure codes. E.g. T1234,T4321,N3214
7 CodeStrRequired varchar(4000) Comma delimited list of procedure codes that are required for this appt type. E.g. T1234,T4321,N3214.
8 RequiredProcCodesNeeded tinyint(4) Enum:EnumRequiredProcCodesNeeded 0=None,1=AtLeastOne,2=All
None: No ProcCodes from CodeStrRequired are needed to schedule appointments of this AppointmentType.
AtLeastOne: At least one ProcCode from CodeStrRequired is needed to schedule appointments of this AppointmentType.
All: All ProcCodes from CodeStrRequired are needed to schedule appointments of this AppointmentType.
9 BlockoutTypes varchar(255) Comma delimited list of Blockout Types (definition.DefNums where definition.Category=25) this appointment type can be associated to.

apptfield
These are custom fields added to appointments and managed by the user.
Order Name Type Summary
0 ApptFieldNum bigint(20) Primary key.
1 AptNum bigint(20) FK to appointment.AptNum
2 FieldName varchar(255) FK to apptfielddef.FieldName. The full name is shown here for ease of use when running queries. But the user is only allowed to change fieldNames in the patFieldDef setup window.
3 FieldValue text Any text that the user types in. Will later allow some automation.

apptfielddef
These are the definitions for the custom patient fields added and managed by the user.
Order Name Type Summary
0 ApptFieldDefNum bigint(20) Primary key.
1 FieldName varchar(255) The name of the field that the user will be allowed to fill in the appt edit window. Duplicates are prevented.
2 FieldType tinyint(4) Enum:ApptFieldType Text=0,PickList=1
Text: 0
PickList: 1
3 PickList text The text that contains pick list values, each separated by \r\n. Length 4000.
4 ItemOrder int(11) Zero based ordering for the items.

apptgeneralmessagesent
When a general message is sent for an appointment a record of that send is stored here. This is used to prevent re-sends of the same message.
Order Name Type Summary
0 ApptGeneralMessageSentNum bigint(20) Primary key.
1 ApptNum bigint(20) FK to appointment.AptNum. If true then we need to consider the subject in an autocomm object
2 PatNum bigint(20) FK to patient.PatNum for the corresponding patient.
3 ClinicNum bigint(20) FK to clinic.ClinicNum for the corresponding appointment.
4 DateTimeEntry datetime Generated by OD. Timestamp when row is created.
5 TSPrior bigint(20) This was the TSPrior used to send this reminder.
6 ApptReminderRuleNum bigint(20) FK to apptreminderrule.ApptReminderRuleNum. Allows us to look up the rules to determine how to send this apptcomm out.
7 SendStatus tinyint(4) Indicates status of message.
8 ApptDateTime datetime The Date and time of the original appointment. We need this in case the appointment was moved and needs another reminder sent out.
9 MessageType tinyint(4)
10 MessageFk bigint(20) FK to smstomobile.SmsToMobileNum AND MessageType=1, FK to emailmessage.EmailMessageNum AND MessageType=2.
11 DateTimeSent datetime DateTime the message was sent.
12 ResponseDescript text Generated by OD in some cases and HQ in others. Any human readable error message generated by either HQ or EConnector. Used for debugging.

apptnewpatthankyousent
When a reminder is sent for an appointment, a record of that send is stored here. Only want to send new patient thank yous once per patient.
Order Name Type Summary
0 ApptNewPatThankYouSentNum bigint(20) Primary key.
1 ApptNum bigint(20) FK to appointment.AptNum. Foreign key to the appointment represented by this AutoCommAppt.
2 ApptDateTime datetime The Date and time of the original appointment. We need this in case the appointment was moved and needs another reminder sent out.
3 ApptSecDateTEntry datetime The Date and time of the original appointment.
4 TSPrior bigint(20) This was the TSPrior used to send this reminder.
5 ApptReminderRuleNum bigint(20) FK to apptreminderrule.ApptReminderRuleNum. Allows us to look up the rules to determine how to send this apptcomm out.
6 ClinicNum bigint(20) FK to clinic.ClinicNum for the corresponding appointment.
7 PatNum bigint(20) FK to patient.PatNum for the corresponding patient.
8 ResponseDescript text Generated by OD in some cases and HQ in others. Any human readable error message generated by either HQ or EConnector. Used for debugging.
9 DateTimeNewPatThankYouTransmit datetime Generated by OD. Timestamp when EConnector sent this ApptNewPatThankYouSent to HQ. Stored in local customer timezone.
10 ShortGUID varchar(255) Generated by HQ. Identifies this AutoCommGuid in future transactions between HQ and OD.
11 SendStatus tinyint(4) Indicates status of message.
12 MessageType tinyint(4)
13 MessageFk bigint(20) FK to smstomobile.SmsToMobileNum AND MessageType=1, FK to emailmessage.EmailMessageNum AND MessageType=2.
14 DateTimeEntry datetime Generated by OD. Timestamp when row is created.
15 DateTimeSent datetime DateTime the message was sent.

apptreminderrule
This is called eServices Automated Messaging Rules in the UI. These are used to track the automated generation and sending of appointment reminders and confirmations. Users are allowed to define up to two reminders and one confirmation (per clinic). These can be sent out any number of Days, Hours, and/or Minutes before a scheduled appointment. PRACTICE - Appointment Reminder Rules will be saved and edited with clinicNum=0. This denotes the "Defaults" when using clinics, but for a practice the defaults become the practice rules.CLINICS - When using clinics, each clinic has a bool "IsConfirmEnabled" that determines if a particular clinic has automated reminders/confirmations enabled. If not, no reminders will be sent out for the clinic. If enabled, and no rules are defined for the clinic, then the clinic will attempt to use the defaults that have been defined with clinicNum==0. If a clinic is enabled and has at least one AppointmentReminderRule defined, then NO defaults will be used for that clinic.REMINDERS - reminders are sent out using the ApptComm system implemented by DerekG. These used to be stored as preferences for the practice only. Now users are allowed to define them on a per-clinic basis. Reminders should be considered one way communications and should not be desingned with a customer response in mind.CONFIRMATIONS - confirmations are sent using the new automated-confirmation system implemented by RyanM (proper) and SamO (web backend). Confirmations are intended to allow end patients to respond to OpenDental via text or email and automatically confirm, or set to a desired status, the appointments on the schedule.
Order Name Type Summary
0 ApptReminderRuleNum bigint(20) Primary key.
1 TypeCur tinyint(4) Enum:ApptReminderType
Undefined: -1 - Used to define an Undefined ApptReminderType.
Reminder: 0 - Used to define the rules for when reminders should be sent out.
ConfirmationFutureDay: 1 - Defines rules for when confirmations should be sent out.
ReminderFutureDay: 2 - DEPRECATED. As of 17.4, all reminders have a status of Reminder.
PatientPortalInvite: 3 - Send emails to patients with their credentials to the Patient Portal.
ScheduleThankYou: 4 - Defines rules for when Schedule Verify ("Thank You"s) should be sent out.
Arrival: 5 - Defines rules for when Arrival instructions should be sent out.
Birthday: 6 - Birthday. Defines rule for sending out automated birthday emails.
GeneralMessage: 7 - General Message. Defines rules for sending out automated messages after an appointment is set complete. TSPrior will always be negative (occurs in future) for GeneralMessage. Allowing GM before appointment is prohibited since it would simply be duplicating eReminder behavior.
WebSchedRecall: 8 - WebSchedRecall. (Note, not yet used in db, but could be if we ever want clinic specific templates) Defines rules for sending out automated messages for Recalls.
NewPatientThankYou: 9 - NewPatientThankYou, Thank you for New Patient which is able to send with a new patient web form URL.
PayPortalMsgToPay: 10 - PaymentPortal Msg-To-Pay, used to send msg-to-pay messages to patients. Currently not an AutoComm feature but doing this now so functionality can be easier added in the future.
EClipboardWeb: 11 - EClipboard Web, used to send eClipboard web URLs to existing patients. No automation yet. Sent by right clicking on appt.
2 TSPrior bigint(20) Positive value indicates time BEFORE appointment that this rule should be sent. Negative value indicates time AFTER appointment that this rule should be sent. GeneralMessage: will always be negative (occurs in future). Allowing GM before appointment is prohibited since it would simply be duplicating eReminder behavior.
3 SendOrder varchar(255) Comma Delimited List of comm types. Enum values of ApptComm.CommType. 0=pref,1=sms,2=email; Like the deprecated pref "ApptReminderSendOrder"
4 IsSendAll tinyint(4) Set to True if both an email AND a text should be sent.
5 TemplateSMS text If using SMS, this template will be used to generate the body of the text message.
6 TemplateEmailSubject text If using email, this template will be used to generate the subject of the email.
7 TemplateEmail text If using email, this template will be used to generate the body of the email.
8 ClinicNum bigint(20) FK to clinic.ClinicNum. Allows reminder rules to be configured on a per clinic basis. If ClinicNum==0 then it is the practice/HQ/default settings.
9 TemplateSMSAggShared text Used when aggregating multiple appointments together into a single message.
10 TemplateSMSAggPerAppt text Used when aggregating multiple appointments together into a single message.
11 TemplateEmailSubjAggShared text Used when aggregating multiple appointments together into a single message.
12 TemplateEmailAggShared text Used when aggregating multiple appointments together into a single message.
13 TemplateEmailAggPerAppt text Used when aggregating multiple appointments together into a single message.
14 DoNotSendWithin bigint(20) The time before the appointment in which this reminder should NOT be sent. E.g., if this value is 2 days, and an appt is created one day in the future, a reminder will not be sent.
15 IsEnabled tinyint(4) Enables/Disables the ApptReminderRule.
16 TemplateAutoReply text Used when auto replying single eConfirmations.
17 TemplateAutoReplyAgg text Used when auto replying multiple patient eConfirmations.
18 IsAutoReplyEnabled tinyint(4) Enables/Disables eConfirmation auto replies. Only for when the patient responds positively via text.
19 Language varchar(255) When set, matched by text against the patient's language. Typically eng (English), fra (French), spa (Spanish), or similar. If it's a custom language, then it might look like Tahitian. Empty string implies that this rule uses the default language of the practice.
20 TemplateComeInMessage text Used when inviting patient to come into office.
21 EmailTemplateType varchar(255) Enum. The Type of email for the template.
22 AggEmailTemplateType varchar(255) Enum:EmailType The type of email for the aggregated template.
Regular: 0 - This is a regular email that may contain our special wiki markup. Not converted to html.
Html: 1 - Html. Basic html email which uses the master template supplied by OD. Template includes header, styles, and the opening body tag. The user only needs to provide the body itself, which can inclcude tags that get automatically replaced.
RawHtml: 2 - More advanced html that does not include the master template. User must provide everything.
23 IsSendForMinorsBirthday tinyint(4) Boolean false by default. Controls if birthday messages will get sent to a minor for their birthday.
24 EmailHostingTemplateNum bigint(20) FK to emailhostingtemplate.EmailHostingTemplateNum. If used, rules fields will be based from the template.
25 MinorAge int(11) When IsSendForMinorsBirthday is true, this is the age that defines what a minor is.
26 TemplateFailureAutoReply text Used when auto replying to appointment confirmations that failed.
27 SendMultipleInvites tinyint(4) Enum:SendMultipleInvites . Whether we are able to send multiple invites.
UntilPatientVisitsPortal: 0 - Send a patient portal invite if the patient has not visited patient portal before.
EveryAppointment: 1 - Send a patient portal invite every appointment.
NoVisitInTimespan: 2 - Send a patient portal invite if the patient hasn't visited patient portal within TimeSpanMultipleInvites pref.
28 TimeSpanMultipleInvites bigint(20) Used in conjunction with CanSendMultipleInvites. We will not send an invite if a patient has visited Patient Portal within this timespan.

apptremindersent
When a reminder is sent for an appointment a record of that send is stored here. This is used to prevent re-sends of the same reminder.
Order Name Type Summary
0 ApptReminderSentNum bigint(20) Primary key.
1 ApptNum bigint(20) FK to appointment.AptNum. Foreign key to the appointment represented by this AutoCommAppt.
2 ApptDateTime datetime The Date and time of the original appointment. We need this in case the appointment was moved and needs another reminder sent out.
3 DateTimeSent datetime DateTime the message was sent.
4 TSPrior bigint(20) This was the TSPrior used to send this reminder.
5 ApptReminderRuleNum bigint(20) FK to apptreminderrule.ApptReminderRuleNum. Allows us to look up the rules to determine how to send this apptcomm out.
6 PatNum bigint(20) FK to patient.PatNum for the corresponding patient.
7 ClinicNum bigint(20) FK to clinic.ClinicNum for the corresponding appointment.
8 SendStatus tinyint(4) Indicates status of message.
9 MessageType tinyint(4)
10 MessageFk bigint(20) FK to smstomobile.SmsToMobileNum AND MessageType=1, FK to emailmessage.EmailMessageNum AND MessageType=2.
11 DateTimeEntry datetime Generated by OD. Timestamp when row is created.
12 ResponseDescript text Generated by OD in some cases and HQ in others. Any human readable error message generated by either HQ or EConnector. Used for debugging.

apptthankyousent
When a reminder is sent for an appointment a record of that send is stored here. This is used to prevent re-sends of the same Thank You.
Order Name Type Summary
0 ApptThankYouSentNum bigint(20) Primary key.
1 ApptNum bigint(20) FK to appointment.AptNum. Foreign key to the appointment represented by this AutoCommAppt.
2 ApptDateTime datetime The Date and time of the original appointment. We need this in case the appointment was moved and needs another reminder sent out.
3 ApptSecDateTEntry datetime The Date and time of the original appointment. We need this in case the appointment was moved and needs another reminder sent out.
4 TSPrior bigint(20) This was the TSPrior used to send this reminder.
5 ApptReminderRuleNum bigint(20) FK to apptreminderrule.ApptReminderRuleNum. Allows us to look up the rules to determine how to send this apptcomm out.
6 ClinicNum bigint(20) FK to clinic.ClinicNum for the corresponding appointment.
7 PatNum bigint(20) FK to patient.PatNum for the corresponding patient.
8 ResponseDescript text Generated by OD in some cases and HQ in others. Any human readable error message generated by either HQ or EConnector. Used for debugging.
9 DateTimeThankYouTransmit datetime Generated by OD. Timestamp when EConnector sent this ApptThankYouSent to HQ. Stored in local customer timezone.
10 ShortGUID varchar(255) Generated by HQ. Identifies this AutoCommGuid in future transactions between HQ and OD.
11 SendStatus tinyint(4) Indicates status of message.
12 DoNotResend tinyint(4) Indicates that the ApptThankYouSent should not be resent if changes were made.
13 MessageType tinyint(4)
14 MessageFk bigint(20) FK to smstomobile.SmsToMobileNum AND MessageType=1, FK to emailmessage.EmailMessageNum AND MessageType=2.
15 DateTimeEntry datetime Generated by OD. Timestamp when row is created.
16 DateTimeSent datetime DateTime the message was sent.

apptview
Enables viewing a variety of operatories or providers. This table holds the views that the user picks between. The apptviewitem table holds the items attached to each view.
Order Name Type Summary
0 ApptViewNum bigint(20) Primary key.
1 Description varchar(255) Description of this view. Gets displayed in Appt module.
2 ItemOrder smallint 0-based order to display in lists. This is unique per clinic. So this does allow duplicate numbers if they are in different clinics.
3 RowsPerIncr tinyint Number of rows per time increment. Usually 1 or 2. Programming note: Value updated to ApptDrawing.RowsPerIncr to track current state.
4 OnlyScheduledProvs tinyint If set to true, then the only operatories that will show will be for providers that have schedules for the day, ops with no provs assigned.
5 OnlySchedBeforeTime time If OnlyScheduledProvs is set to true, and this time is not 0:00, then only provider schedules with start or stop time before this time will be included.
6 OnlySchedAfterTime time If OnlyScheduledProvs is set to true, and this time is not 0:00, then only provider schedules with start or stop time after this time will be included.
7 StackBehavUR tinyint(4) Enum:ApptViewStackBehavior
Vertical:
Horizontal:
8 StackBehavLR tinyint(4) Enum:ApptViewStackBehavior
Vertical:
Horizontal:
9 ClinicNum bigint(20) FK to clinic.ClinicNum. 0=All clinics. This appointment view will only be visible when the current clinic showing is set to this clinic. Within the appointment edit window, this setting is used to filter the list of available operatories. Also used in conjunction with 'OnlyScheduledProvs' (when enabled) in order to filter the visible operatories within the Appt module.
10 ApptTimeScrollStart time Time the appointment module's view will scroll to on load.
11 IsScrollStartDynamic tinyint(4) If set to true, the appointment view scrolls to the first scheduled operatory start time or the first scheduled appointment.
12 IsApptBubblesDisabled tinyint(4) If set to true, the appointment view will not show appointment bubbles.
13 WidthOpMinimum smallint Zero is default and old behavior. For any larger number, appointments won't shrink past that number but they may be wider. Instead of getting narrower, a horizontal scrollbar shows up.
14 WaitingRmName tinyint(4) Enum:EnumWaitingRmName - Shows how patient name is displayed in the waiting room. Defaults to Last, First.
LastFirst: 0
FirstLastI: 1
First: 2
15 OnlyScheduledProvDays tinyint(4) If set to true, then the only days that will show in Week view will be days that have providers scheduled or an appointment scheduled.
16 ShowMirroredAppts tinyint(4) Default false. See Appointment.IsMirrored and Pref.ApptMirrorSecondary

apptviewitem
Each item is attached to a row in the apptview table. Each item specifies ONE of: OpNum, ProvNum, ElementDesc, ApptFieldDefNum, or PatFieldDefNum. The other 4 will be 0 or "".
Order Name Type Summary
0 ApptViewItemNum bigint(20) Primary key.
1 ApptViewNum bigint(20) FK to apptview.ApptViewNum.
2 OpNum bigint(20) FK to operatory.OperatoryNum.
3 ProvNum bigint(20) FK to provider.ProvNum.
4 ElementDesc varchar(255) Must be one of the hard coded strings picked from the available list.
5 ElementOrder tinyint If this is a row Element, then this is the 0-based order within its area. For example, UR starts over with 0 ordering.
6 ElementColor int(11) If this is an element, then this is the color.
7 ElementAlignment tinyint(4) Enum:ApptViewAlignment If this is an element, then this is the alignment of the element within the appointment.
Main: 0
UR: 1
LR: 2
8 ApptFieldDefNum bigint(20) FK to apptfielddef.ApptFieldDefNum. If this is an element, and the element is an appt field, then this tells us which one.
9 PatFieldDefNum bigint(20) FK to patfielddef.PatFieldDefNum. If this is an element, and the element is an pat field, then this tells us which one.
10 IsMobile tinyint(4) Bool indicating if this ApptViewItem is for use in Mobile App appointment view. A mobile view has a completely independent set of rows in this table. Just like non-mobile, there will be 5 kinds of rows, as described in the table summary. There is no separate mobile UI for OpNum and ProvNum, so those will always be duplicates of the non-mobile rows.

asapcomm
Used by the Web Sched ASAP feature to quickly send text messages to patients on the ASAP List about last minute appointment openings. In OD proper, in the ASAP list, a user can send a text message to a patient for either an existing ASAP appointment or a recall ASAP appointment. It contains a link that patient clicks on to schedule via WebSchedASAP. The entry first gets created in this table. Then, separately, the rows are consumed by a listener thread on the eConnector which handles the actual sending.
Order Name Type Summary
0 AsapCommNum bigint(20) Primary key.
1 FKey bigint(20) FK to appointment.AptNum AND FKeyType=1 AND appointment.AptStatus=1, FK to appointment.AptNum AND FKeyType=2 AND appointment.AptStatus=3, FK to appointment.AptNum AND FKeyType=3, FK to recall.RecallNum AND FKeyType=4, FK to appointment.AptNum AND FKeyType=5 AND appointment.AptStatus=5.
2 FKeyType tinyint(4) Enum:AsapCommFKeyType The type of object for which this communication was made.
None: 0 - Should not be present in database.
ScheduledAppt: 1 - A scheduled appointment marked ASAP. For this type, FKey is appointment.AptNum.
UnscheduledAppt: 2 - An unscheduled appointment marked ASAP. For this type, FKey is appointment.AptNum.
PlannedAppt: 3 - A planned appointment marked ASAP. For this type, FKey is appointment.AptNum.
Recall: 4 - A recall marked ASAP. For this type, FKey is recall.RecallNum.
Broken: 5 - A broken appointment marked ASAP. For this type, FKey is appointment.AptNum.
3 ScheduleNum bigint(20) FK to schedule.ScheduleNum. The block on the schedule for which this communication was made.
4 PatNum bigint(20) FK to patient.PatNum.
5 ClinicNum bigint(20) FK to clinic.ClinicNum. The clinic that is sending this AsapComm.
6 ShortGUID varchar(255) An identifier that is used to communicate with OD HQ regarding this communication item.
7 DateTimeEntry datetime When this communication item was entered into the database.
8 DateTimeExpire datetime When this communication item will expire.
9 DateTimeSmsScheduled datetime The date and time when a text message is scheduled to be sent.
10 SmsSendStatus tinyint(4) Enum:AutoCommStatus The status of sending the text for this communication.
Undefined: 0 - Should not be in the database but can be used in the program.
DoNotSend: 1 - Do not send a reminder.
SendNotAttempted: 2 - We will send, but send has not been attempted yet.
SendSuccessful: 3 - Has been sent successfully.
SendFailed: 4 - Attempted to send but not successful.
SentAwaitingReceipt: 5 - Has been sent successfully, awaiting receipt.
11 EmailSendStatus tinyint(4) Enum:AutoCommStatus The status of sending the email for this communication.
Undefined: 0 - Should not be in the database but can be used in the program.
DoNotSend: 1 - Do not send a reminder.
SendNotAttempted: 2 - We will send, but send has not been attempted yet.
SendSuccessful: 3 - Has been sent successfully.
SendFailed: 4 - Attempted to send but not successful.
SentAwaitingReceipt: 5 - Has been sent successfully, awaiting receipt.
12 DateTimeSmsSent datetime The date and time a text message was sent.
13 DateTimeEmailSent datetime The date and time an email was sent.
14 EmailMessageNum bigint(20) FK to emailmessage.EmailMessageNum. The email message that was sent to the patient.
15 ResponseStatus tinyint(4) Enum:AsapRSVPStatus How the patient has responded to this communication.
UnableToSend: 0 - Neither text nor email was permitted to be sent.
AwaitingTransmit: 1 - EConnector will pickup and send to HQ and change to pendingRsvp.
PendingRsvp: 2 - EConnector has sent this to HQ and will remain in this status until it is either terminated or receives a response from the patient.
Viewed: 3 - The patient viewed the portal and took no action.
ViewedNotAvailable: 4 - The patient viewed the portal but the slot was no longer available.
AcceptedAndMoved: 5 - The patient accepted the appointment and the appointment was successfully moved.
AcceptedAndNotAvailable: 6 - The patient accepted the appointment but the appointment was not successfully moved.
Declined: 7 - The patient declined any open slots.
ChoseDifferentSlot: 8 - The patient declined this slot but chose a different time slot.
Expired: 9 - Patient took no action by the time DateTimeExpired passed and the message was terminated.
Failed: 10 - HQ or EConnector was unable to send the message so it was terminated prematurely.
DeclinedStopComm: 11 - The patient declined and requested that we do not continue contacting them for this appointment.
16 DateTimeOrig datetime The date and time of the appointment when this communication was made or the date and time of the recall date due.
17 TemplateText text The template that will be used when sending a text message.
18 TemplateEmail text The template that will be used when creating the body of the email message.
19 TemplateEmailSubj varchar(100) The template that will be used for the email subject line.
20 Note text Any notes regarding this communication item.
21 GuidMessageToMobile text FK to smstomobile.GuidMessage. Generated at HQ when the SMS is generated.
22 EmailTemplateType varchar(255) Enum:EmailType Type of markup for the template.
Regular: 0 - This is a regular email that may contain our special wiki markup. Not converted to html.
Html: 1 - Html. Basic html email which uses the master template supplied by OD. Template includes header, styles, and the opening body tag. The user only needs to provide the body itself, which can inclcude tags that get automatically replaced.
RawHtml: 2 - More advanced html that does not include the master template. User must provide everything.
23 UserNum bigint(20) FK to userod.UserNum. The user that is sending this AsapComm. Will be 0 if unknown.

autocode
An autocode automates entering procedures. The user only has to pick composite, for instance, and the autocode figures out the code based on the number of surfaces, and posterior vs. anterior. Autocodes also enforce and suggest changes to a procedure code if the number of surfaces or other properties change.
Order Name Type Summary
0 AutoCodeNum bigint(20) Primary key.
1 Description varchar(255) Displays meaningful decription, like "Amalgam".
2 IsHidden tinyint User can hide autocodes
3 LessIntrusive tinyint This will be true if user no longer wants to see this autocode message when closing a procedure. This makes it less intrusive, but it can still be used in procedure buttons.

autocodecond
AutoCode condition. Always attached to an AutoCodeItem, which is then, in turn, attached to an autocode. There is usually only one or two conditions for a given AutoCodeItem.
Order Name Type Summary
0 AutoCodeCondNum bigint(20) Primary key.
1 AutoCodeItemNum bigint(20) FK to autocodeitem.AutoCodeItemNum.
2 Cond tinyint Enum:AutoCondition
Anterior: 0
Posterior: 1
Premolar: 2
Molar: 3
One_Surf: 4
Two_Surf: 5
Three_Surf: 6
Four_Surf: 7
Five_Surf: 8
First: 9
EachAdditional: 10
Maxillary: 11
Mandibular: 12
Primary: 13
Permanent: 14
Pontic: 15
Retainer: 16
AgeOver18: 17

autocodeitem
Corresponds to the autocodeitem table in the database. There are multiple AutoCodeItems for a given AutoCode. Each Item has one ADA code.
Order Name Type Summary
0 AutoCodeItemNum bigint(20) Primary key.
1 AutoCodeNum bigint(20) FK to autocode.AutoCodeNum
2 OldCode varchar(15) Do not use
3 CodeNum bigint(20) FK to procedurecode.CodeNum

autocommexcludedate
AutoComms are sent a certain number of days in advance. Clinicpref called eConfirmExcludeDays handles excluding weekends, and this table handles excluding holidays. So AutoComms only go out when office is open. (First iteration currently only applies to eConfirmations)
Order Name Type Summary
0 AutoCommExcludeDateNum bigint(20) Primary key.
1 ClinicNum bigint(20) ClinicNum this row applies to. 0 for HQ
2 DateExclude datetime

automation
A trigger event causes one or more actions.
Order Name Type Summary
0 AutomationNum bigint(20) Primary key.
1 Description text .
2 Autotrigger tinyint(4) Enum:EnumAutomationTrigger What triggers this automation
ProcedureComplete: 0
ApptBreak: 1
ApptNewPatCreate: 2
PatientOpen: 3. Regardless of module. Usually only used with conditions.
ApptCreate: 4
ProcSchedule: 5. Attaching a procedure to a scheduled appointment.
BillingTypeSet: 6
RxCreate: 7
ClaimCreate: 8
ClaimOpen: 9
ApptComplete: 10
DoNotBillInsuranceCheck: 11-When clicking in the proc edit window.
3 ProcCodes text If this has a CompleteProcedure trigger, this is a comma-delimited list of codes that will trigger the action.
4 AutoAction tinyint(4) Enum:AutomationAction The action taken as a result of the trigger. To get more than one action, create multiple automation entries.
PrintPatientLetter:
CreateCommlog:
PrintReferralLetter: If a referral does not exist for this patient, then notify user instead.
ShowExamSheet:
PopUp:
SetApptASAP:
ShowConsentForm:
SetApptType:
PopUpThenDisable10Min: Similar to PopUp, but will only show once per WS per 10 minutes.
PatRestrictApptSchedTrue: When triggered, automatically restricts patient from being scheduled. See also PatRestriction.cs
PatRestrictApptSchedFalse: When triggered, automatically removes patient from scheduling restriction. See also PatRestriction.cs
PrintRxInstruction: When triggered, it will automatically print a copy of the Patient Rx Instructions
ChangePatStatus: When triggered, automatically set a patient's status to the status type in the PatStatus column. Delete should never be used.
5 SheetDefNum bigint(20) FK to sheetdef.SheetDefNum. If the action is to print a sheet, then this tells which sheet to print. So it must be a custom sheet. Also, not that this organization does not allow passing parameters to the sheet such as which procedures were completed, or which appt was broken.
6 CommType bigint(20) FK to definition.DefNum. Only used if action is CreateCommlog.
7 MessageContent text If a commlog action, then this is the text that goes in the commlog. If this is a ShowStatementNoteBold action, then this is the NoteBold. Might later be expanded to work with email or to use variables.
8 AptStatus tinyint(4) Enum:ApptStatus . This column is not used anymore.
None: 0- No appointment should ever have this status.
Scheduled: 1- Shows as a regularly scheduled appointment.
Complete: 2- Shows greyed out.
UnschedList: 3- Only shows on unscheduled list.
ASAP: 4- Deprecated in 17.4.1. Use Appointment.Priority instead.
Broken: 5- Shows with a big X on it.
Planned: 6- Planned appointment. Only shows in Chart module. User not allowed to change this status, and it does not display as one of the options.
PtNote: 7- Patient "post-it" note on the schedule. Shows light yellow. Shows on day scheduled just like appt, as well as in prog notes, etc.
PtNoteCompleted: 8- Patient "post-it" note completed
9 AppointmentTypeNum bigint(20) FK to appointmenttype.AppointmentTypeNum.
10 PatStatus tinyint(4) Enum:PatientStatus - used to determine which status to change to for ChangePatientStatus automation actions. Should never be 'Deleted'
Patient: 0
NonPatient: 1
Inactive: 2
Archived: 3 - This status is also used for a merged patient that you're not keeping.
Deleted: 4
Deceased: 5
Prospective: 6- Not an actual patient yet.

automationcondition
Each condition evaluates to true or false. A single automation can have multiple conditions. Multiple conditions for a single automation are usually ANDed together. But for DoNotBillInsuranceCheck, the carriers are ORed.
Order Name Type Summary
0 AutomationConditionNum bigint(20) Primary key.
1 AutomationNum bigint(20) FK to automation.AutomationNum.
2 CompareField tinyint(4) Enum:AutoCondField
NeedsSheet: 0- Condition based on if a patient doesn't have a sheet filled. CompareString stores sheetdef.Description. Comparison is typically Equals, but Contains can also be used.
Problem: 1- Condition based on if a patient has an active disease. CompareString stores the diseasedef.DiseaseName. Contains or Equals is used for Comparison.
Medication: 2- Condition based on if a patient is actively taking a medication. CompareString stores the medication.MedName. Contains or Equals is used for Comparison.
Allergy: 3- Condition based on if a patient has an active allergy. CompareString stores the allergydef.Description. Contains or Equals is used for Comparison.
Age: 4- Condition based on patient.Age. Age to compare is stored in CompareString. Contains, Equals, GreaterThan, and LessThan can be used for Comparison. This is the only CompareField that can use GreaterThan or LessThan for Comparison.
Gender: 5- Condition based on patient.Gender. CompareString can store the string values "M" or "F" (not case sensitive). Comparison can be Contains or Equals, though they both perform the same comparison since the logic only uses the first letter of the patient's gender. PatientGender.Unknown and PatientGender.Other are not currently supported.
Labresult: 6- Condition based on if a labresult exists for a patient. CompareString stores labresult.TestName. Comparison can be Contains or Equals.
InsuranceNotEffective: 7- Condition based on if a patient's lowest ordinal insurance plan is not effective. CompareString not used. Comparison=None.
BillingType: 8- Condition based on if a patient has a given billing type. CompareString stores the definition.ItemName where definition.Category=4. Comparison can be Contains or Equals.
IsProcRequired: 9- Only used for the RxCreate automation trigger. Condition based on if RxPat.IsProcRequired=true on creation. CompareString not used. Comparison=None.
IsControlled: 10- Only used for the RxCreate automation trigger. Condition based on if RxPat.IsControlled=true on creation. CompareString not used. Comparison=None.
IsPatientInstructionPresent: 11- Only used for the RxCreate automation trigger. Condition based on if RxPat.PatientInstruction is not null/whitespace on creation. CompareString not used. Comparison=None.
PlanNum: 12- Condition based on insplan.PlanNum, all inssubs for a patient are considered. CompareString stores the value of insplan.PlanNum. Comparison can be Contains or Equals.
ClaimContainsProcCode: 13- Only used for CreateClaim and OpenClaim automation triggers. Condition based on if a claim contains a specific procedurecode. CompareString stores the value of procedurecode.ProcCode. Comparison=None.
PatientProcedureClinicMismatch: 14- Only used for ProcedureComplete automation trigger. Condition based on if a procedure is completed at a different clinic from the patient's home clinic. CompareString not used. Comparison=None.
CarriersMatch: 15- Only used for the DoNotBillInsuranceClick automation trigger. Condition based on if a patient's insurance carriers match those in the CompareString. CompareString will hold a CarrierNum. Comparison=None.
3 Comparison tinyint(4) Enum:AutoCondComparison Not all comparisons are allowed with all data types.
Equals: 0- Not sensitive to capitalization.
GreaterThan: 1- Only used when CompareField is AutoCondField.Age.
LessThan: 2- Only used when CompareField is AutoCondField.Age.
Contains: 3- aka Like
None: 4- Should not be displayed to users to choose from. Used when the condition has one and only one 'comparison' to trigger it. E.g. ins not effective.
4 CompareString varchar(255) Used for CompareFields that take user input.

autonote
A single autonote template.
Order Name Type Summary
0 AutoNoteNum bigint(20) Primary key
1 AutoNoteName varchar(50) Name of AutoNote
2 MainText text Was 'ControlsToInc' in previous versions.
3 Category bigint(20) FK to definition.DefNum. This is the AutoNoteCat definition category (DefCat=41), for categorizing autonotes. Uncategorized autonotes will be set to 0.

autonotecontrol
In the program, this is now called an autonote prompt.
Order Name Type Summary
0 AutoNoteControlNum bigint(20) Primary key
1 Descript varchar(50) The description of the prompt as it will be referred to from other windows.
2 ControlType varchar(50) 'Text', 'OneResponse', or 'MultiResponse'. More types to be added later.
3 ControlLabel varchar(255) The prompt text.
4 ControlOptions text For TextBox, this is the default text. For a ComboBox, this is the list of possible responses, one per line.

benefit
Corresponds to the benefit table in the database which replaces the old covpat table. A benefit is usually a percentage, deductible, limitation, max, or similar. Each row represents a single benefit. A benefit can have a value in EITHER PlanNum OR PatPlanNum. If it is for a PlanNum, the most common, then the benefit is attached to an insurance plan. If it is for a PatPlanNum, then it overrides the plan benefit, usually a percentage, for a single patient. Benefits we can't handle yet include posterior composites, COB duplication, amounts used, in/out of plan network, authorization required, missing tooth exclusion, and any date related limitations like waiting periods.Here are examples of typical usage which parallel X12 usage.Example fields shown in this order:CovCat, ProcCode(- indicates blank), BenefitType, Percent, MonetaryAmt, TimePeriod, QuantityQualifier, Quantity, CoverageLevelAnnual Max Indiv $1000: None/General,-,Limitations,-1,1000,CalendarYear,None,0,IndividualRestorative 80%: Restorative,-,CoInsurance,80,-1,CalendarYear,None,0,None$50 deductible: None/General,-,Deductible,-1,50,CalendarYear,None,0,IndividualDeductible waived on preventive: Preventive,-,Deductible,-1,0,CalendarYear,None,0,Individual1 pano every 5 years: None,D0330,Limitations,-1,-1,Years?,Years,5,None2 exams per year: Preventive(or Diagnostic),-,Limitations,-1,-1,BenefitYear,NumberOfServices,2,NoneFluoride limit 18yo: None, D1204, Limitations, -1, -1, CalendarYear/None, AgeLimit, 18,None (might require a second identical entry for D1205)4BW every 6 months: None, D0274, Limitations, -1, -1, None, Months, 6,None.The text above might be difficult to read. We are trying to improve the white spacing.
Order Name Type Summary
0 BenefitNum bigint(20) Primary key.
1 PlanNum bigint(20) FK to insplan.PlanNum. Most benefits should be attached using PlanNum. The exception would be if each patient has a different percentage. If PlanNum is used, then PatPlanNum should be 0.
2 PatPlanNum bigint(20) FK to patplan.PatPlanNum. It is rare to attach benefits this way. Usually only used to override percentages for patients. In this case, PlanNum should be 0.
3 CovCatNum bigint(20) FK to covcat.CovCatNum. Corresponds to X12 EB03- Service Type code. Situational, so it can be 0. Will probably be 0 for general deductible and annual max. There are very specific categories covered by X12. Users should set their InsCovCats to the defaults we provide.
4 BenefitType tinyint Enum:InsBenefitType Corresponds to X12 EB01. Examples: 0=ActiveCoverage, 1=CoInsurance, 2=Deductible, 3=CoPayment, 4=Exclusions, 5=Limitations. ActiveCoverage doesn't really provide meaningful information.
ActiveCoverage: 0- Informational only. Not usually used. Would only be used if you are just indicating that the patient is covered, but without any specifics.
CoInsurance: 1- Used for percentages to indicate portion that insurance will cover. When interpreting electronic benefit information, this is the opposite percentage, the percentage that the patient will pay after deductible.
Deductible: 2- The deductible amount. Might be two entries if, for instance, deductible is waived on preventive.
CoPayment: 3- Informational only. A dollar amount.
Exclusions: 4- Services that are simply not covered at all. Age is never considered. Tooth numbers (ToothRange) can sometimes be considered. For example, an exclusion for porcelain crowns on second molars would need to list all 4 second molars as part of the exclusion.
Limitations: 5- Covers a variety of limitations, including Max, frequency, history, fee reductions, age, ToothRange, etc. Example: limitation for sealants only being covered on first molars for age 8 and under. AgeLimit=8, so not covered if over 8. If 8 or under, we also consider ToothRange.
WaitingPeriod: 6- Sets a period of time after the effective date where a benefit will not be used.
5 Percent tinyint(4) Only used if BenefitType=CoInsurance. Valid values are 0 to 100. -1 indicates empty, which is almost always true if not CoInsurance. The percentage that insurance will pay on the procedure. Note that benefits coming from carriers are usually backwards, indicating the percentage that the patient is responsible for.
6 MonetaryAmt double Used for CoPayment, Limitations, and Deductible. -1 indicates empty
7 TimePeriod tinyint Enum:BenefitTimePeriod Corresponds to X12 EB06, Time Period Qualifier. Examples: 0=None,1=ServiceYear,2=CalendarYear,3=Lifetime,4=Years. Might add Visit and Remaining.
None: 0- A timeperiod is frequenly not needed. For example, percentages.
ServiceYear: 1- The renewal month is not Jan. In this case, we need to know the effective date so that we know which month the benefits start over in.
CalendarYear: 2- Renewal month is Jan.
Lifetime: 3- Usually used for ortho max.
Years: 4- Wouldn't be used alone. Years would again be specified in the quantity field along with a number.
NumberInLast12Months: 5- # in last 12 months. Does not care about when benefit year begins. Looks at previous 12 months.
8 QuantityQualifier tinyint Enum:BenefitQuantity Corresponds to X12 EB09. Not used very much. Examples: 0=None,1=NumberOfServices,2=AgeLimit,3=Visits,4=Years,5=Months
None: 0- This is used a lot. Most benefits do not need any sort of quantity.
NumberOfServices: 1- For example, two exams per year
AgeLimit: 2- Only used with Limitations. For example, 18 when fluoride only covered to 18 y.o. UI does not allow this to be used with exclusion, but if that combination exists in the db for some reason, age will not be considered.
Visits: 3- For example, copay per 1 visit.
Years: 4- For example, pano every 5 years.
Months: 5- For example, BWs every 6 months.
9 Quantity tinyint Corresponds to X12 EB10. Qualify the quantity using QuantityQualifier. Must be a numeric value max 255.
10 CodeNum bigint(20) FK to procedurecode.CodeNum. Typical uses include fluoride, sealants, etc. If a specific code is used here, then the CovCat should be None.
11 CoverageLevel int(11) Enum:BenefitCoverageLevel Corresponds to X12 EB02. None, Individual, or Family. Individual and Family are commonly used for deductibles and maximums. None is commonly used for percentages and copays.
None: 0- Since this is a situational X12 field, we can also have none. Typical for percentages and copayments.
Individual: 1- The default for deductibles and maximums.
Family: 2- For example, family deductible or family maximum.
12 SecDateTEntry datetime Timestamp automatically generated and user not allowed to change. The actual date of entry.
13 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed.
14 CodeGroupNum bigint(20) FK to codegroup.CodeGroupNum The group of procedure codes that apply to this frequency limitation benefit.
15 TreatArea tinyint(4) Enum:TreatmentArea . Only for frequency limitations, ignored for all other benefits. Enforced by the UI. Example 3 fillings per year [mouth]. Example: on any particular tooth, one crown every 5 years. Tests: 140 through 147. 0 means default.
None: 0-goes on claims as blank.
Surf: 1
Tooth: 2
Mouth: 3-goes on claims as 00.
Quad: 4
Sextant: 5
Arch: 6
ToothRange: 7
16 ToothRange varchar(255) Single tooth numbers separated by commas. When displayed to user, it can contain hyphens and commas. Example: "2,15" or "1" or "23-26,7-10". Used for age limitations by teeth. Example: D1351 sealant limitation on primary molars through age 8. "A,B,I,J,K,L,S,T". Also used for exclusions which never take ages into account. Example: D2740 porcelain crown is not covered on "2,15". No matter how old the patient is, that procedure will not be covered if it happens on tooth 2 or 15.

branding
Replaces MobileBrandingProfile. Stores clinic level customizations to the way eServices are displayed to users (colors, logos, etc). Colors use the MaterialColorUtilities package which implements Google's Material Color Utilities for C#. Material Color is a system for generating a theme of color variations based on a single source color. Changes made to the primary, secondary, or tertiary colors on the theme will cause the other colors to change slightly as well. This table is stored in the dental office database, not at OD HQ.
Order Name Type Summary
0 BrandingNum bigint(20) Primary key.
1 BrandingType tinyint(4) Enum:EnumBrandingType
None: 0: No branding should have this type.
LogoImage: 1: Base64 encoded data for a logo image. Previously stored as file path. Only used for eClipboard. Shows as 90x90 pixels.
MaterialColorPalette: 2: JSON serialized light and dark Schemes for a Material Color palette as well as the source color. Colors will be represented as either their respective RGB values (255,255,255) or simply the name of the color (White). Users are only able to edit the primary, secondary, and tertiary colors of a Scheme.
OfficeDescription: 3: The Clinic Name that will be shown on eClipboard CheckIn
2 ClinicNum bigint(20) FK to clinic.ClinicNum. 0 indicates a global default Branding.
3 ValueString mediumtext Stores the value for the branding type. MediumText (16MB) to hold logos as base64 encoded strings, although we will recommend smaller for better performance. Colors will be stored as JSON Serialized SchemesAndSource, which will hold both light and dark Schemes as well as the source color. Example serialized Scheme: {"Primary": "109, 94, 15","OnPrimary": "White","PrimaryContainer": "248, 226, 135", etc for the 39 generated colors}
4 DateTimeUpdated datetime The last time this row was updated. Some eServices store relevant rows locally, and will only need to update when this exceeds their locally stored values. Saves calls to database.

canadiannetwork
Not user-editable.
Order Name Type Summary
0 CanadianNetworkNum bigint(20) Primary key.
1 Abbrev varchar(20) This will also be the folder name
2 Descript varchar(255) .
3 CanadianTransactionPrefix varchar(255) A01. Up to 12 char.
4 CanadianIsRprHandler tinyint(4) Set to true if this network is in charge of handling all Request for Payment Reconciliation (RPR) transactions for all carriers within this network, as opposed to the individual carriers wihtin the network processing the RPR transactions themselves.

carecreditwebresponse
This table will never delete records, only upsert. CareCreditResponseWeb rows are records of all CareCredit made.
Order Name Type Summary
0 CareCreditWebResponseNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 PayNum bigint(20) FK to payment.PayNum.
3 RefNumber varchar(255) The RefNumber associated to this request.
4 Amount double The amount of the request. This can be purchases or refund amount.
5 WebToken varchar(255) New: The sessionId is returned from the prefill response that we use to send the user to the portal. Old: The web token used for pullback request.
6 ProcessingStatus varchar(255) Enum:CareCreditWebStatus Used to determine if the request is pending, needs action, or is completed.
Created: 0.
CreatedError: 1.
Pending: 2.
PendingError: 3.
Expired: 4.
Completed: 5.
PreApproved: 6.
Cancelled: 7.
Declined: 8.
CallForAuth: 9.
DupQS: 10.
AccountFound: 11.
Unknown: 12.
BatchError: 13.
UnknownError: 14.
ErrorAcknowledged: 15.
ExpiredBatch: 16.
AccountNotFoundQS: 17.
7 DateTimeEntry datetime Timestamp automatically generated and user not allowed to change. The actual datetime of entry.
8 DateTimePending datetime DateTime that the request went to a pending status.
9 DateTimeCompleted datetime DateTime that the request went to a completed status.
10 DateTimeExpired datetime DateTime that the request expired.
11 DateTimeLastError datetime DateTime of the last time the request had an error.
12 LastResponseStr text Raw JSON response (or error) from CareCredit.
13 ClinicNum bigint(20) FK to clinic.ClinicNum.
14 ServiceType varchar(255) Enum:CareCreditServiceType Used to determine what service was requested for this web response.
Batch: 0.
Prefill: 1.
IndividualQS: 2.
15 TransType varchar(255) Enum:CareCreditTransType Used to determine the transaction type.
None: 0.
Purchase: 1.
Refund: 2.
16 MerchantNumber varchar(20) The MerchantNumber associated to this request.
17 HasLogged tinyint(4) True if row has been logged at HQ, otherwise false.

carrier
Every InsPlan has a Carrier. The carrier stores the name and address.
Order Name Type Summary
0 CarrierNum bigint(20) Primary key.
1 CarrierName varchar(255) Name of the carrier.
2 Address varchar(255) .
3 Address2 varchar(255) Second line of address.
4 City varchar(255) .
5 State varchar(255) 2 char in the US.
6 Zip varchar(255) Postal code.
7 Phone varchar(255) Includes any punctuation.
8 ElectID varchar(255) E-claims electronic payer id. 5 char in USA. 6 digits in Canada. I've seen an ID this long before: "LA-DHH-MEDICAID". The user interface currently limits length to 20, although db limits length to 255. X12 requires length between 2 and 80.
9 NoSendElect tinyint Enum:NoSendElectType 0 - send electronically, 1 - don't send electronically, 2 - don't send non-primary (secondary,tertiary, etc.) claims electronically.
SendElect: 0 - Sending electronically is allowed for this carrier.
NoSendElect: 1 - Do not send electronically for this carrier.
NoSendSecondaryElect: 2 - Do not send electronically for this carrier if the carrier is not the primary insurance for the patient.
10 IsCDA tinyint Canada: True if a CDAnet carrier. This has significant implications: 1. It can be filtered for in the list of carriers. 2. An ElectID is required. 3. The ElectID can never be used by another carrier. 4. If the carrier is attached to any etrans, then the ElectID cannot be changed (and, of course, the carrier cannot be deleted or combined).
11 CDAnetVersion varchar(100) The version of CDAnet supported. Either 02 or 04.
12 CanadianNetworkNum bigint(20) FK to canadiannetwork.CanadianNetworkNum. Only used in Canada. Right now, there is no UI to the canadiannetwork table in our db.
13 IsHidden tinyint(4) .
14 CanadianEncryptionMethod tinyint(4) 1=No Encryption, 2=CDAnet standard #1, 3=CDAnet standard #2. Field A10. Deprecated for all Canadian carriers. Will always be 1 (No Encryption).
15 CanadianSupportedTypes int(11) Bit flags.
16 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
17 SecDateEntry date Timestamp automatically generated and user not allowed to change. The actual date of entry.
18 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
19 TIN varchar(255) Tax ID Number. Not user editable. No UI for this field. Used in when importing insurance plans from 834s to uniquely identify carriers.
20 CarrierGroupName bigint(20) FK to definition.DefNum. Links carriers into groups for queries.
21 ApptTextBackColor int(11) Color that the carrier is highlighted within the appointment module appointment and popup bubble. 0 represents empty no color.
22 IsCoinsuranceInverted tinyint(4) False by default. Determines if the carrier supplied EB08 field of 271 transactions should be inverted for coinsurance percentages. When true carriers sent us insurance percentage so we do not need to invert it, it is already inverted for us.
23 TrustedEtransFlags tinyint(4) Enum:TrustedEtransTypes Bit flags. None (0) by default. Stores trusted user selected X12 transaction types related to this carrier.
None: 0 - Default, no trusted types.
RealTimeEligibility: 1 - When used in bit-wise value enables the automated import of certain fields for 271s, otherwise disabled.
24 CobInsPaidBehaviorOverride tinyint(4) Enum:EclaimCobInsPaidBehavior When sending X12 5010 eclaims, if not set to Default, then this setting overrides the ClaimCobInsPaidBehavior preference.
Default: Use the global preference value instead of the carrier override.
ClaimLevel: Only send COB eclaim data claim totals.
ProcedureLevel: Only send COD eclaim data respective procedure amounts.
Both: Send COB eclaim data claim totals and respective procedure amounts.
25 EraAutomationOverride tinyint(4) Enum:EraAutomationMode UseGlobal (0) by default. Determines the level of ERA processing automation for this carrier. This will override the EraAutomationBehavior preference when not set to UseGlobal.
UseGlobal: 0 - Never used for the EraAutomationBehavior preference. Only used for Carrier.EraAutomationOverride to indicate that the carrier uses the EraAutomationBehavior preference instead of an override.
ReviewAll: 1 - ERAs are manually processed.
SemiAutomatic: 2 - Allows ERAs to be processed with a single button click.
FullyAutomatic: 3 - When ERAs are imported, they are fully processed without any input from a user.
26 OrthoInsPayConsolidate tinyint(4) Enum:EnumOrthoInsPayConsolidate Global (0) by default. Determines how this carrier requires payments made to ortho claims made by the Auto Ortho Tool. This will override the OrthoInsPayConsolidated preference when not set to Global.
Global: Uses the preference value of OrthoInsPayConsolidated.
ForceConsolidateOn: Overrides the preference value of OrthoInsPayConsolidated and blocks users from entering payments on claims created by the Auto Ortho Tool.
ForceConsolidateOff: Overrides the preference value of OrthoInsPayConsolidated and allows users to enter payments on claims created by the Auto Ortho Tool.
27 PaySuiteTransSup tinyint(4) Enum:EnumPaySuiteTransTypes (0) None by default. Indicates which PaySuite transaction types a Canadian carrier supports.
None: 0
ExtendedReversal: 1 - Carrier supports PaySuite Extend Reversals which are reversals made more than 24 hours after sending the claim.
PlanDetails: 2 - Carrier supports PaySuite Plan Details requests which return plan/benefit details.
Both: 3 - Carrier supports both Extended Reversals and Plan Details Requests.
28 PreAuthCodes text List of D codes with commas and hyphens. No spaces. Defines the procedure code ranges that require a preauthorization for this carrier. Example: "D0000-D0999,D2140-D2161,D2750" would mean all exams and xrays, some amalgams, and a crown requires a preauthorization. The normal hyphens in the db get converted to non-breaking hyphens (\u2011) for display to prevent wrapping.

cdcrec
CDC Race and Ethnicity. About 200 rows.
Order Name Type Summary
0 CdcrecNum bigint(20) Primary key.
1 CdcrecCode varchar(255) CDCREC Code. Example: 1002-5. Not allowed to edit this column once saved in the database.
2 HeirarchicalCode varchar(255) Heirarchical Code. Example: R1 =="American Indian or alaska Native"R1.01 =="American Indian"R1.01.001=="Abenaki"Not allowed to edit this column once saved in the database.
3 Description varchar(255) Description.

cdspermission
User to specify user level permissions used for CDS interventions. Unlike normal permissions and security, each permission has its own column and each employee has their own row.
Order Name Type Summary
0 CDSPermissionNum bigint(20) Primary key.
1 UserNum bigint(20) FK to userod.UserNum.
2 SetupCDS tinyint(4) True if allowed to edit EHR Triggers.
3 ShowCDS tinyint(4) True if user should see EHR triggers that are enabled. If false, no CDS interventions will show.
4 ShowInfobutton tinyint(4) True if user can see Infobutton.
5 EditBibliography tinyint(4) True if user can edit to bibliographic information.
6 ProblemCDS tinyint(4) True to enable Problem based CDS interventions for this user.
7 MedicationCDS tinyint(4) True to enable Medication based CDS interventions for this user.
8 AllergyCDS tinyint(4) True to enable Allergy based CDS interventions for this user.
9 DemographicCDS tinyint(4) True to enable Demographic based CDS interventions for this user.
10 LabTestCDS tinyint(4) True to enable Lab Test based CDS interventions for this user.
11 VitalCDS tinyint(4) True to enable Vital Sign based CDS interventions for this user.

centralconnection
Used by the Central Manager. Stores the information needed to establish a connection to a remote database.
Order Name Type Summary
0 CentralConnectionNum bigint(20) Primary key.
1 ServerName varchar(255) If direct db connection. Can be ip address.
2 DatabaseName varchar(255) If direct db connection.
3 MySqlUser varchar(255) If direct db connection.
4 MySqlPassword varchar(255) If direct db connection. Symmetrically encrypted.
5 ServiceURI varchar(255) If connecting to the web service. Can be on VPN, or can be over https.
6 OdUser varchar(255) Deprecated. If connecting to the web service.
7 OdPassword varchar(255) Deprecated. If connecting to the web service. Symmetrically encrypted.
8 Note text When being used by ConnectionStore xml file, must deserialize to a ConnectionNames enum value. Otherwise just used as a generic notes field.
9 ItemOrder int(11) 0-based.
10 WebServiceIsEcw tinyint(4) If set to true, the password hash is calculated differently.
11 ConnectionStatus varchar(255) Contains the most recent information about this connection. OK if no problems, version information if version mismatch, nothing for not checked, and OFFLINE if previously couldn't connect.
12 HasClinicBreakdownReports tinyint(4) If set to True, display clinic breakdown in reports, else only show practice totals.

cert
A single certification that any employee may complete.
Order Name Type Summary
0 CertNum bigint(20) Primary key.
1 Description varchar(255) .
2 WikiPageLink varchar(255) The exact name of a wiki page.
3 ItemOrder int(11) 0-indexed. This is a little tricky because a cert can be in multiple categories. So users can only reorder when they are looking at the entire list of certs not ordered by category.
4 IsHidden tinyint(4) If hidden, then this cert won't normally show in the main list.
5 CertCategoryNum bigint(20) FK to definition.DefNum.

certemployee
A certification completed by an employee on a specific date.
Order Name Type Summary
0 CertEmployeeNum bigint(20) Primary key.
1 CertNum bigint(20) FK to cert.CertNum.
2 EmployeeNum bigint(20) FK to employee.EmployeeNum.
3 DateCompleted date
4 Note varchar(255) Rarely, a very short note is required.
5 UserNum bigint(20) FK to userod.UserNum. The user who made this entry. Usually some sort of supervisor.

chartview
Enables viewing a variety of views in chart module.
Order Name Type Summary
0 ChartViewNum bigint(20) Primary key.
1 Description varchar(255) Description of this view. Gets displayed at top of Progress Notes grid.
2 ItemOrder int(11) 0-based order to display in lists.
3 ProcStatuses tinyint(4) Enum:ChartViewProcStat None=0,TP=1,Complete=2,Existing Cur Prov=4,Existing Other Prov=8,Referred=16,Deleted=32,Condition=64,All=127.
None: 0- None.
TP: 1- Treatment Plan.
C: 2- Complete.
EC: 4- Existing Current Provider.
EO: 8- Existing Other Provider.
R: 16- Referred Out.
D: 32- Deleted.
Cn: 64- Condition.
All: 127- All.
4 ObjectTypes smallint(6) Enum:ChartViewObjs None=0,Appointments=1,Comm Log=2,Comm Log Family=4,Tasks=8,Email=16,LabCases=32,Rx=64,Sheets=128,Comm Log Super Family=256,All=511.
None: 0- None
Appointments: 1- Appointments
CommLog: 2- Comm Log
CommLogFamily: 4- Comm Log Family
Tasks: 8- Tasks
Email: 16- Email
LabCases: 32- Lab Cases
Rx: 64- Rx
Sheets: 128- Sheets
CommLogSuperFamily: 256- Comm Log Super Family
All: 511- All
5 ShowProcNotes tinyint(4) Set true to show procedure notes.
6 IsAudit tinyint(4) Set true to enable audit mode.
7 SelectedTeethOnly tinyint(4) Set true to only show information regarding the selected teeth.
8 OrionStatusFlags int(11) Enum:OrionStatus Which orion statuses to show. Will be zero if not orion.
None: 0- None. While a normal orion proc would never have this status2, it is still needed for flags in ChartViews. And it's also possible that a status2 slipped through the cracks and was not assigned, leaving it with this value.
TP: 1– Treatment planned
C: 2– Completed
E: 4– Existing prior to incarceration
R: 8– Refused treatment
RO: 16– Referred out to specialist
CS: 32– Completed by specialist
CR: 64– Completed by registry
CA_Tx: 128- Cancelled, tx plan changed
CA_EPRD: 256- Cancelled, eligible parole
CA_PD: 512- Cancelled, parole/discharge
S: 1024– Suspended, unacceptable plaque
ST: 2048- Stop clock, multi visit
W: 4096– Watch
A: 8192– Alternative
9 DatesShowing tinyint(4) Enum:ChartViewDates All,Today,Yesterday,ThisYear,LastYear
All: 0- All
Today: 1- Today
Yesterday: 2- Yesterday
ThisYear: 3- This Year
LastYear: 4- Last Year
10 IsTpCharting tinyint(4) set true to show treatment plan controls in chart module.

chat
A single chat object can contain any number of users. The users attached to a chat can change over time as users are removed or added. A chat can be named. It can contain any number of chatMessages. Visibility of messages to a user is based on whether they are currently attached. The chat feature works out of the box for all normal OD customers. It runs as a separate .exe so that it can run even when the main OD program has a dialog open or is shut down for update. Every workstation that's using chat will poll the database about every 5 seconds. This might cause slowness in larger offices, so they will want to use one or more of the following advanced features: You can set up a read-only slave database in OD, and the chat will automatically use it for frequent read operations. If you want to use the mobile app, you will need to download and install a windows service to sit between the db and all mobile users. We might install this windows service by default for all users just in case, but at least the exe will be in the normal OD folder. If you want to use a dedicated db for chat, that's a manual process that involves moving those 6 tables to their own db with no other tables in it, and then setting the prefs ChatServer... from in the prefs window.
Order Name Type Summary
0 ChatNum bigint(20) Primary key.
1 Name varchar(255)

chatattach
An image or file attached to a chat message. Always stored entirely in db to avoid file permission issues and to allow mobile use. To support massive scalability, the plan is to eventually support a dedicated db for chat if a larger office desires.
Order Name Type Summary
0 ChatAttachNum bigint(20) Primary key.
1 ChatMsgNum bigint(20) FK to chatmsg.ChatMsgNum.
2 FileName varchar(255) Any filename plus extension. It will show to the user in some cases like a pdf. Doesn't need to be unique, so many might just be Image.png.
3 Thumbnail mediumblob This is a pretty big thumbnail, but much smaller than the FileData. Max 150 pixels width or height. Same proportions as original image. Stored as png. Not always present. For example a PDF would not have a thumbnail.
4 FileData mediumblob mediumblob can hold up to 16,777,215 bytes. Stored as png. User gets an error message if they try to attach bigger. This doesn't get downloaded from db unless user manually clicks to open a file or image.

chatmsg
An individual message on a chat.
Order Name Type Summary
0 ChatMsgNum bigint(20) Primary key.
1 ChatNum bigint(20) FK to chat.ChatNum.
2 UserNum bigint(20) FK to userod.UserNum. The author of this msg
3 DateTimeSent datetime The DateTime this message was added to the Db. Uses server time.
4 Message text If the EventType is None, this is a standard XAML FlowDocument with bold, etc. Emojis are in runs as plain text tokens like :thumbsup:. For User Added/Removed messages, this is plain text that is displayed without formatting.
5 SeqCount bigint(20) See SequenceCounter.cs table for information on how this is used. More accurate than using a datetime cutoff for getting new messages.
6 Quote bigint(20) FK to chatmsg.ChatMsgNum. A reference to this quote will show above this message. You can click on it to go to the original.
7 EventType tinyint(4) Some messages aren't messages, but are instead event notifications. This tells us which kind of event. This is on the ChatMsg table so that the clients can just pull from this single table every 5 seconds and also simultaneously be notified about other events. Most event types are always deleted when a new row of that type supercedes it, because we only care about the most recent. UsersChanged events are different. They have messages that are shown to the user in the stack of msgs for a chat, so they don't get deleted. Also see ChatUserAttach.DateTimeRemoved which is related but used for completely different purposes.
8 IsImportant tinyint(4)

chatreaction
A single reaction to a chat msg.
Order Name Type Summary
0 ChatReactionNum bigint(20) Primary key.
1 ChatMsgNum bigint(20) FK to chatmsg.ChatMsgNum.
2 UserNum bigint(20) FK to userod.UserNum. The author of this reaction.
3 EmojiName varchar(255) One from the list of 192 that we use. Example: "Angry face with horns". Colons are not used here.

chatuserattach
Attaches a user to a chat. When the user leaves the chat, this object gets deleted. Also keeps track of whether that user has any new messages.
Order Name Type Summary
0 ChatUserAttachNum bigint(20) Primary key.
1 UserNum bigint(20) FK to userod.UserNum. User being attached to the chat.
2 ChatNum bigint(20) FK to chat.ChatNum. Chat to attach user to.
3 IsRead tinyint(4) True if the user has read the most recent message in the chat. If false, it will show bold in their list. Each time a msg is added, all these flags for the chat get set to false. No need to do anything if adding a user to a chat becaue it's already false.
4 DateTimeRemoved datetime Also see chatmsg.EventType UsersChanged which is for displaying to users. This field is closely related but used for a different purpose. This is used when getting a list of chats because we need to not consider msgs after this date for sorting purposes. This chat will still show for the user, but will fall gradually into the past instead of popping to the top again. It's also used to suppress showing any recent msgs in the list of msgs for a chat. It also prevents any new msg notifications and makes the user not show as part of the group.
5 IsMute tinyint(4)

chatuserod
Status and options for a user. Name is pulled from Userod table. A new ChatUserod will be created the first time it's needed if it doesn't already exist.
Order Name Type Summary
0 ChatUserodNum bigint(20) Primary key.
1 UserNum bigint(20) FK to userod.UserNum. One one row per user
2 UserStatus tinyint(4) Enum:EnumUserStatus Available, Away, DoNotDisturb. If the user is linked to an Employee in OD, then this status will mirror the clocked in status. If there is no linkage, then it's based on whether PC gets locked from inactivity
3 DateTimeStatusReset datetime User can manually change status for a duration. That duration is translated into this reset time for when the status gets reset automatically.
4 Photo text Any photo. The import process resamples it to 100 pixels high with proportional width to the original. The crop is stored separately in PhotoCrop. Text, so max length=65k base64.
5 PhotoCrop varchar(255) This is a composite of 3 numbers that determine the size and position of the circle crop. Diameter of the circle is in pixels. X,Y is the position of the center of the circle within the Photo. Format is "D,X,Y". The numbers are all double, rounded to 1/10th of a pixel. Example: 70,60.1,47.3
6 OpenBackground tinyint(4) If true, when auto starting, the main window will not open. Instead, just the tray icon will show. This does not apply to manually starting.
7 CloseKeepRunning tinyint(4) If true, when closing, the main window will close, but the tray icon will continue to show.
8 MuteNotifications tinyint(4) If true, no regular notifications will pop up.
9 DismissNotifySecs int(11) The number of seconds for a regular popup to show before it goes away on its own. If 0, it will show a default of 5 seconds. Max 2_147_483 seconds, which is int max divided by 1000.
10 MuteImportantNotifications tinyint(4) If true, important notifications will be treated the same as normal notifications. This would be unusual and this would normally be false.
11 DismissImportantNotifySecs int(11) The number of seconds for an important popup to show before it goes away on its own. If 0, it will show a default of 99,999, a little over a day. Max 2_147_483 seconds, which is int max divided by 1000.
12 PlayNotificationSound tinyint(4) If true, play a sound when a user recieves a chat message.Defaults to false.

claim
The claim table holds information about individual claims. Each row represents one claim.
Order Name Type Summary
0 ClaimNum bigint(20) Primary key
1 PatNum bigint(20) FK to patient.PatNum. Must always match claimProc.PatNum
2 DateService date Usually the same date as the procedures, but it can be changed if you wish.
3 DateSent date Usually the date it was created. It might be sent a few days later if you don't send your e-claims every day.
4 ClaimStatus char(1) Single char: U,H,W,P,S,R, or I. U=Unsent, H=Hold Until Prior received, W=Waiting in queue, S=Sent, R=Received, I=Hold for In Process. A(adj) is no longer used. P(prob sent) is no longer used.
5 DateReceived date Date the claim was received.
6 PlanNum bigint(20) FK to insplan.PlanNum. Every claim is attached to one plan.
7 ProvTreat bigint(20) FK to provider.ProvNum. Treating provider for dental claims. For institutional claims, this is called the attending provider.
8 ClaimFee double Total fee of claim.
9 InsPayEst double Amount insurance is estimated to pay on this claim.
10 InsPayAmt double Amount insurance actually paid.
11 DedApplied double Deductible applied to this claim.
12 PreAuthString varchar(40) The predetermination of benefits number received from ins. In X12, REF G3.
13 IsProsthesis char(1) Single char for No, Initial, or Replacement.
14 PriorDate date Date prior prosthesis was placed. Note that this is only for paper claims. E-claims have a date field on each individual procedure.
15 ReasonUnderPaid varchar(255) Note for patient for why insurance didn't pay as expected.
16 ClaimNote varchar(400) Note to be sent to insurance. Max 400 char. E-claims also have notes on each procedure.
17 ClaimType varchar(255) "P"=primary, "S"=secondary, "PreAuth"=preauth, "Other"=other, "Cap"=capitation. Not allowed to be blank. Might need to add "Med"=medical claim.
18 ProvBill bigint(20) FK to provider.ProvNum. Billing provider. Assignment can be automated from the setup section.
19 ReferringProv bigint(20) FK to referral.ReferralNum.
20 RefNumString varchar(40) Referral number for this claim.
21 PlaceService tinyint Enum:PlaceOfService .
Office: 0. Code 11
PatientsHome: 1. Code 12
InpatHospital: 2. Code 21
OutpatHospital: 3. Code 22
SkilledNursFac: 4. Code 31
CustodialCareFacility: 5. Code 33. In X12, a similar code AdultLivCareFac 35 is mentioned.
OtherLocation: 6. Code 99. We use 11 for office.
MobileUnit: 7. Code 15
School: 8. Code 03
MilitaryTreatFac: 9. Code 26
FederalHealthCenter: 10. Code 50
PublicHealthClinic: 11. Code 71
RuralHealthClinic: 12. Code 72
EmergencyRoomHospital: 13. Code 23
AmbulatorySurgicalCenter: 14. Code 24
TelehealthOutsideHome: 15. Code 02.
TelehealthInHome: 16. Code 10
OutreachSiteOrStreet: 17. Code 27
22 AccidentRelated char(1) blank or A=Auto, E=Employment, O=Other.
23 AccidentDate date Date of accident, if applicable. Canada only.
24 AccidentST varchar(2) Accident state.
25 EmployRelated tinyint Enum:YN .
Unknown: 0
Yes: 1
No: 2
26 IsOrtho tinyint True if is ortho.
27 OrthoRemainM tinyint Remaining months of ortho. Valid values are 1-36, although we allow greater than or equal to 0.
28 OrthoDate date Date ortho appliance placed.
29 PatRelat tinyint Enum:Relat Relationship to subscriber. The relationship is copied from InsPlan when the claim is created. It might need to be changed in both places.
Self: 0
Spouse: 1
Child: 2
Employee: 3
HandicapDep: 4
SignifOther: 5
InjuredPlaintiff: 6
LifePartner: 7
Dependent: 8
30 PlanNum2 bigint(20) FK to insplan.PlanNum. Other coverage plan number. 0 if none. This provides the user with total control over what other coverage shows. This obviously limits the coverage on a single claim to two insurance companies.
31 PatRelat2 tinyint Enum:Relat The relationship to the subscriber for other coverage on this claim.
Self: 0
Spouse: 1
Child: 2
Employee: 3
HandicapDep: 4
SignifOther: 5
InjuredPlaintiff: 6
LifePartner: 7
Dependent: 8
32 WriteOff double Sum of ClaimProc.Writeoff for this claim.
33 Radiographs tinyint The number of x-rays enclosed.
34 ClinicNum bigint(20) FK to clinic.ClinicNum. 0 if no clinic. Since one claim cannot have procs from multiple clinics, the clinicNum is set when creating the claim and then cannot be changed. The claim would have to be deleted and recreated. Otherwise, if changing at the claim level, a feature would have to be added that synched all procs, claimprocs, and probably some other tables.
35 ClaimForm bigint(20) FK to claimform.ClaimFormNum. 0 if not assigned to use the claimform for the insplan.
36 AttachedImages int(11) The number of intraoral images attached. Not the number of files attached. This is the value that goes on the 2006 claimform.
37 AttachedModels int(11) The number of models attached.
38 AttachedFlags varchar(255) A comma-delimited set of flag keywords. Can have one or more of the following: EoB,Note,Perio,Misc,Unsup. Must also contain one of these: Mail or Elect. Additionally, the Submitted flag is for determining when DentalXChange attachment was submitted.
39 AttachmentID varchar(255) Example: NEA#1234567 or dxc123456789. If present, and if the claim note does not already start with this Id, then it will be prepended to the claim note for both e-claims and mail. If using e-claims, this same ID will be used for all PWK segements.
40 CanadianMaterialsForwarded varchar(10) A08. Any combination of E(email), C(correspondence), M(models), X(x-rays), and I(images). So up to 5 char. Gets converted to a single char A-Z for e-claims.
41 CanadianReferralProviderNum varchar(20) B05. Optional. The 9-digit CDA number of the referring provider, or identifier of referring party up to 10 characters in length.
42 CanadianReferralReason tinyint(4) B06. A number 0(none) through 13.
43 CanadianIsInitialLower varchar(5) F18. Y, N, or X(not a lower denture, crown, or bridge).
44 CanadianDateInitialLower date F19. Mandatory if F18 is N.
45 CanadianMandProsthMaterial tinyint(4) F21. If crown, not required. If denture or bridge, required if F18 is N. Single digit number code, 0-6. We added type 7, which is crown.
46 CanadianIsInitialUpper varchar(5) F15. Y, N, or X(not an upper denture, crown, or bridge).
47 CanadianDateInitialUpper date F04. Mandatory if F15 is N.
48 CanadianMaxProsthMaterial tinyint(4) F20. If crown, not required. If denture or bridge, required if F15 is N. 0 indicates empty response. Single digit number code, 1-6. We added type 7, which is crown.
49 InsSubNum bigint(20) FK to inssub.InsSubNum.
50 InsSubNum2 bigint(20) FK to inssub.InsSubNum. The fk to the 'Other' insurance subscriber. For a primary claim, this will be the secondary insurance subscriber. For a secondary claim, this will be primary insurance subscriber.
51 CanadaTransRefNum varchar(255) G01 assigned by carrier/network and returned in responses. Used for claim matching and reversals. EOBs are expected to contain a unique transaction reference number. In other response types, the field may contain a series of spaces because CDAnet uses a positional format where each field occupies a fixed number of characters. An unprocessed claim may have a blank value. Claim Acknowledgements forwarded to the carrier as part of a batch may also return G01 as a series of spaces, which is effectively blank.
52 CanadaEstTreatStartDate date F37 Used for predeterminations.
53 CanadaInitialPayment double F28 Used for predeterminations.
54 CanadaPaymentMode tinyint F29 Used for predeterminations.
55 CanadaTreatDuration tinyint F30 Used for predeterminations.
56 CanadaNumAnticipatedPayments tinyint F31 Used for predeterminations.
57 CanadaAnticipatedPayAmount double F32 Used for predeterminations.
58 PriorAuthorizationNumber varchar(255) This is NOT the predetermination of benefits number. In X12, this is REF G1.
59 SpecialProgramCode tinyint(4) Enum:EnumClaimSpecialProgram This is used to track EPSDT.
none:
EPSDT_1:
Handicapped_2:
SpecialFederal_3:
Disability_5:
SecondOpinion_9:
60 UniformBillType varchar(255) A three digit number used on 837I. Aka Bill Code. UBO4 4. Examples: 321,823,131,652. The third digit is claim frequency code. If this is used, then our CorrectionType should be 0=original.
61 MedType tinyint(4) Enum:EnumClaimMedType 0=Dental, 1=Medical, 2=Institutional
Dental: 0
Medical: 1
Institutional: 2
62 AdmissionTypeCode varchar(255) Used for inst claims. Single digit. X12 2300 CL101. UB04 14. Should only be required for IP, but X12 clearly states required for all.
63 AdmissionSourceCode varchar(255) Used for inst claims. Single char. X12 2300 CL102. UB04 15. Should only be required for IP, but X12 clearly states required for all.
64 PatientStatusCode varchar(255) Used for inst claims. Two digit. X12 2300 CL103. UB04 17. Should only be required for IP, but X12 clearly states required for all.
65 CustomTracking bigint(20) FK to definition.DefNum. Most users will leave this blank. Some offices may set up tracking statuses such as 'review', 'hold', 'riskmanage', etc.
66 DateResent date Used for historical purposes only, not sent electronically. Automatically set when CorrectionType is original and the claim is resent.
67 CorrectionType tinyint(4) Enum:ClaimCorrectionType X12 CLM05-3. Usually set to original, but can be used to resubmit claims. Also used in 1500 Medical Claim Form field 22.
Original: 0 - X12 1. Use for claims that are not ongoing.
Replacement: 1 - X12 7. Use to entirely replace an original claim. A claim reference number will be required.
Void: 2 - X12 8. Use to undo an original claim. A claim reference number will be required.
68 ClaimIdentifier varchar(255) X12 CLM01. Semi-unique identifier for the claim within the current database. Defaults to PatNum/ClaimNum, but can be edited by user, and is often modified by the clearinghouse to ensure uniqueness on their end. This also set for PreAuth claims. The ClaimIdentifier for a PreAuth will probably not match the ClaimIdentifier for a regular claim, which makes ERA claim matching more straight forward for both PreAuths and regular claims.
69 OrigRefNum varchar(255) X12 2300 REF (F8). Used when resending claims to refer to the original claim. The user must type this value in after reading it from the original claim response report.
70 ProvOrderOverride bigint(20) FK to provider.ProvNum. Ordering provider override. Goes hand-in-hand with OrderingReferralNum. Medical eclaims only. Defaults to zero.
71 OrthoTotalM tinyint Total estimated months of ortho. Valid values are 1-36, although we allow greater than or equal to 0.
72 ShareOfCost double Sum of all amounts paid specifically to this claim by the patient or family. Goes out in X12 4010/5010 loop 2300 AMT segment if greater than zero. Default value is 0, thus will not go out by default unless the user enters a value. This field was added for Denti-Cal certification, but can go out for any clearinghouse.
73 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
74 SecDateEntry date Timestamp automatically generated and user not allowed to change. The actual date of entry.
75 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
76 OrderingReferralNum bigint(20) FK to referral.ReferralNum. Goes hand-in-hand with ProvOrderOverride. Medical eclaims only. Defaults to zero. If set, and the ProvOrderOverride is not set, then this referral will go out at the ordering provider on medical e-claims.
77 DateSentOrig date The original date the claim was sent.
78 DateIllnessInjuryPreg date Date of Current Illness, Injury, or Pregnancy (LMP). (LMP = Last Menstrual Period) For use in 1500 Medical Claim Form box 14. Identifies the first date of onset of illness, the actual date of injury, or the LMP for pregnancy.
79 DateIllnessInjuryPregQualifier smallint(6) Enum:DateIllnessInjuryPregQualifier 3 digit code used in 1500 Medical Claim Form, 'Qual' box of field 14. Valid values are 431 or 484.
None: 0 - None
OnsetCurSymptoms: 431 - Onset of Current Symptoms or Illness
LastMenstrualPeriod: 484 - Last Menstrual Period
80 DateOther date Another date related to the patient's condition or treatment. For use in 1500 Medical Claim Form box 15.
81 DateOtherQualifier smallint(6) Enum:DateOtherQualifier 3 digit code used in 1500 Medical Claim Form, 'Qual' box of field 15. Valid values are 090, 091, 304, 439, 444, 453,454, 455, and 471.
None: 0 - None
ReportStart: 090 - Report Start
ReportEnd: 091 - Report End
LatestVisitConsult: 304 - Latest Visit or Consultation
Accident: 439 - Accident
FirstVisitConsult: 444 - First Visit or Consultation
ChronicCondManifest: 453 - Acute Manifestation of a Chronic Condition
InitialTreatment: 454 - Initial Treatment
LastXray: 455 - Last X-ray
Prescription: 471 - Prescription
82 IsOutsideLab tinyint(4) Used in 1500 Medical Claim Form field 20. Place an 'X' the 'Yes' if true and the 'No' if false.
83 SecurityHash varchar(255) Holds the salted hash of the following claim fields: ClaimFee, ClaimStatus, InsPayEst, InsPayAmt.
84 Narrative text A note that pertains to all attachments on the claim. Currently only applies to DentalXChange, but could be expanded. 2000 character limit put in place by DentalXChange.

claimattach
Keeps track of one image file attached to a claim. Multiple files can be attached to a claim using this method. DentalXChange uses the term "attachment" differently, referring to a group of images.
Order Name Type Summary
0 ClaimAttachNum bigint(20) Primary key.
1 ClaimNum bigint(20) FK to claim.ClaimNum
2 DisplayedFileName varchar(255) The name of the file that shows on the claim. For example: tooth2.jpg.
3 ActualFileName varchar(255) The actual file is stored in the A-Z folder in EmailAttachments. (yes, even though it's not actually an email attachment) The files are named automatically based on Date/time along with a random number. This ensures that they will be sequential as well as unique.
4 ImageReferenceId int(11) This is the image Id that DentalXChange gives back after calling addImage(). Storing this will allow users to delete images they sent to DentalXChange.

claimcondcodelog
There is either one or zero per claim.
Order Name Type Summary
0 ClaimCondCodeLogNum bigint(20) Primary key.
1 ClaimNum bigint(20) FK to claim.ClaimNum.
2 Code0 varchar(2) Corresponds with condition code 18 on the UB04.
3 Code1 varchar(2) Corresponds with condition code 19 on the UB04.
4 Code2 varchar(2) Corresponds with condition code 20 on the UB04.
5 Code3 varchar(2) Corresponds with condition code 21 on the UB04.
6 Code4 varchar(2) Corresponds with condition code 22 on the UB04.
7 Code5 varchar(2) Corresponds with condition code 23 on the UB04.
8 Code6 varchar(2) Corresponds with condition code 24 on the UB04.
9 Code7 varchar(2) Corresponds with condition code 25 on the UB04.
10 Code8 varchar(2) Corresponds with condition code 26 on the UB04.
11 Code9 varchar(2) Corresponds with condition code 27 on the UB04.
12 Code10 varchar(2) Corresponds with condition code 28 on the UB04.

claimform
Stores the information for printing different types of claim forms. Each claimform has many claimformitems attached to it, one for each field on the claimform. This table has nothing to do with the actual claims. It just describes how to print them.
Order Name Type Summary
0 ClaimFormNum bigint(20) Primary key.
1 Description varchar(50) eg. ADA2002 or CA Medicaid
2 IsHidden tinyint If true, then it will not be displayed in various claim form lists as a choice.
3 FontName varchar(255) Valid font name for all text on the form.
4 FontSize float Font size for all text on the form.
5 UniqueID varchar(255) Deprecated as of version 17.2. Internal claimforms have been moved over to XML files in OpenDentBusiness.Properties.Resources.
6 PrintImages tinyint Set to false to not print images. This removes the background for printing on premade forms.
7 OffsetX smallint(5) Shifts all items by x/100th's of an inch to compensate for printer, typically less than 1/4 inch.
8 OffsetY smallint(5) Shifts all items by y/100th's of an inch to compensate for printer, typically less than 1/4 inch.
9 Width int(11) The width of the claim form.
10 Height int(11) The height of the claim form.

claimformitem
One item is needed for each field on a claimform.
Order Name Type Summary
0 ClaimFormItemNum bigint(20) Primary key.
1 ClaimFormNum bigint(20) FK to claimform.ClaimFormNum
2 ImageFileName varchar(255) If this item is an image. Usually only one per claimform. eg ADA2002.emf. Otherwise it MUST be left blank, or it will trigger an error that the image cannot be found.
3 FieldName varchar(255) Must be one of the hardcoded available fieldnames for claims.
4 FormatString varchar(255) For dates, the format string. ie MM/dd/yyyy or M d y among many other possibilities.
5 XPos float The x position of the item on the claim form. In pixels. 100 pixels per inch.
6 YPos float The y position of the item.
7 Width float Limits the printable area of the item. Set to zero to not limit.
8 Height float Limits the printable area of the item. Set to zero to not limit.

claimpayment
Each row represents a single check from the insurance company. The amount may be split between patients using claimprocs. The amount of the check must always exactly equal the sum of all the claimprocs attached to it. There might be only one claimproc.
Order Name Type Summary
0 ClaimPaymentNum bigint(20) Primary key.
1 CheckDate date Date the check was entered into this system, not the date on the check.
2 CheckAmt double The amount of the check.
3 CheckNum varchar(25) The check number.
4 BankBranch varchar(25) Bank and branch.
5 Note text Note for this check if needed. Size limit is 65k because this field is used for automated incoming notes.
6 ClinicNum bigint(20) FK to clinic.ClinicNum. 0 if no clinic (unassigned).
7 DepositNum bigint(20) FK to deposit.DepositNum. 0 if not attached to any deposits.
8 CarrierName varchar(255) Descriptive name of the carrier just for reporting purposes. We use this because the CarrierNums could conceivably be different for the different claimprocs attached.
9 DateIssued date Date that the carrier issued the check. Date on the check.
10 IsPartial tinyint(4) .
11 PayType bigint(20) FK to definition.DefNum. 0 if not attached to any definitions
12 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
13 SecDateEntry date Timestamp automatically generated and user not allowed to change. The actual date of entry.
14 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
15 PayGroup bigint(20) FK to definition.DefNum. The payment group for this claim payment.

claimproc
Links procedures to claims. Also links ins payments to procedures or claims. Also used for estimating procedures even if no claim yet. Warning: One proc might be linked twice to a given claim if insurance made two payments. Many of the important fields are actually optional. For instance, ProcNum is only required if itemizing ins payment, and ClaimNum is blank if Status=adjustment,cap,or estimate.
Order Name Type Summary
0 ClaimProcNum bigint(20) Primary key.
1 ProcNum bigint(20) FK to procedurelog.ProcNum. Is 0 for payments by total or for Canadian Carrier Issued Procedures.
2 ClaimNum bigint(20) FK to claim.ClaimNum. Is 0 for estimates, adjustments and capitation (CapClaim and CapComplete).
3 PatNum bigint(20) FK to patient.PatNum. Must always match claim.PatNum
4 ProvNum bigint(20) FK to provider.ProvNum.
5 FeeBilled double Fee billed to insurance. Might not be the same as the actual fee. The fee billed can be different than the actual procedure. For instance, if you have set the insurance plan to bill insurance using standard provider fees, then this field will contain the standard provider fee instead of the fee that the patient was charged. A zero dollar FeeBilled means this claimproc can represent an insurance under/over payment, total payment, or a proc only really meant to provide information to insurance.
6 InsPayEst double Actual amount this carrier is expected to pay, after taking everything else into account. Considers annual max, override, percentAmt, copayAmt, deductible, etc. This estimate is computed automatically when sent to ins.
7 DedApplied double 0 if blank. Deductible applied to this procedure only. Only for procedures attached to claims. Otherwise, the DedEst and DedEstOverride are used.
8 Status tinyint Enum:ClaimProcStatus . When setting recieved\supplemental must set DateEntry.
NotReceived: 0: For claims that have been created or sent, but have not been received.
Received: 1: For claims that have been received.
Preauth: 2: For preauthorizations.
Adjustment: 3: The only place that this status is used is to make adjustments to benefits from the coverage window. It is never attached to a claim.
Supplemental: 4:This differs from Received only slightly. It's for additional payments on procedures already received. Most fields are blank.
CapClaim: 5: CapClaim is used when you want to send a claim to a capitation insurance company. These are similar to Supplemental in that there will always be a duplicate claimproc for a procedure. The first claimproc tracks the copay and writeoff, has a status of CapComplete, and is never attached to a claim. The second claimproc has status of CapClaim.
Estimate: 6: Estimates have replaced the fields that were in the procedure table. Once a procedure is complete, the claimprocstatus will still be Estimate. An Estimate can be attached to a claim and status gets changed to NotReceived.
CapComplete: 7: For capitation procedures that are complete. This replaces the old procedurelog.CapCoPay field. This stores the copay and writeoff amounts. The copay is only there for reference, while it is the writeoff that actually affects the balance. Never attached to a claim. If procedure is TP, then status will be CapEstimate. Only set to CapComplete if procedure is Complete.
CapEstimate: 8: For capitation procedures that are still estimates rather than complete. When procedure is completed, this can be changed to CapComplete, but never to anything else.
InsHist: 9: For InsHist procedures. Corresponds to Existing Other (EO) procs.
9 InsPayAmt double Amount insurance actually paid.
10 Remarks varchar(255) The remarks that insurance sends in the EOB about procedures.
11 ClaimPaymentNum bigint(20) FK to claimpayment.ClaimPaymentNum(the insurance check).
12 PlanNum bigint(20) FK to insplan.PlanNum
13 DateCP date This is the date that is used for payment reports and tracks the payment date. Once a payment has been attached, the DateCP will exactly match the date of the ClaimPayment it's attached to. See the note under Ledgers.ComputePayments. This will eventually not be used for aging. The ProcDate will instead be used. See ProcDate.
14 WriteOff double Amount not covered by ins which is written off. The writeoff estimate goes in a different column. This is filled with the WriteOffEst value when a claim is created.
15 CodeSent varchar(15) The procedure code that was sent to insurance. This is not necessarily the usual procedure code. It will already have been trimmed to 5 char if it started with "D", or it could be the alternate code. Not allowed to be blank if it is procedure.
16 AllowedOverride double The allowed fee (not the override) is a complex calculation which is performed on the fly in Procedure.ComputeEstimates/ClaimProc.ComputeBaseEst. It is the amount that the percentage is based on. If this carrier has a lower UCR than the standard fee for the office, then the allowed fee is where that is handled. It can be pulled from an allowed fee schedule. It is also where substitutions for posterior composites are handled. The AllowedOverride allows the user to override the calculation. -1 indicates blank. A new use of this field is for when entering insurance payments. On the eob, it will tell you what the allowed/UCR fee is. The user will now be able to enter this information into the AllowedOverride field. They will simultaneously pass the info to the allowed fee schedule. AllowedOverride is never changed automatically by the program except to sometimes set it to -1 if NoBillIns.
17 Percentage tinyint(4) -1 if blank. Otherwise a number between 0 and 100. The percentage that insurance pays on this procedure, as determined from insurance categories. Not user editable.
18 PercentOverride tinyint(4) -1 if blank. Otherwise a number between 0 and 100. Can only be changed by user.
19 CopayAmt double -1 if blank or uninitialized, but otherwise should be 0 or positive. Calculated automatically. User cannot edit but can use CopayOverride instead. Opposite of InsEst, because this is the patient portion estimate. Two different uses: 1. For capitation, this automates calculation of writeoff. 2. For any other insurance, it gets deducted during calculation as shown in the edit window. Neither use directly affects patient balance.
20 NoBillIns tinyint Set to true to not bill to this insurance plan. This gets automatically set only when inserting. It's based on procedurecode.NoBillIns and insplanpreference.ValueString.
21 PaidOtherIns double -1 if blank. The amount paid or estimated to be paid by another insurance. This amount is then subtracted from what the current insurance would pay. When running the calculation and considering other claimprocs, it will ignore any patPlan with a higher ordinal. So, always blank for primary claims. User cannot edit, but can use PaidOtherInsOverride.
22 BaseEst double Always has a value. Used in TP, etc. The base estimate is the ((fee or allowedOverride)-Copay) x (percentage or percentOverride). Does not include all the extras like ded, annualMax,and paidOtherIns that InsEstTotal holds. BaseEst cannot be overridden by the user. Instead, the following fields can be manipulated: allowedOverride, CopayOverride, PercentOverride.
23 CopayOverride double -1 if blank. See description of CopayAmt. This lets the user set a copay that will never be overwritten by automatic calculations.
24 ProcDate date Date of the procedure, or the last date for multi-visit procedures. Displayed in Edit Claim window procedures grid. Currently only used for tracking annual insurance benefits remaining. Important in Adjustments to benefits. For total claim payments, MUST be the date of the procedures to correctly figure benefits. Will eventually transition to use this field to actually calculate aging. See the note under Ledgers.ComputePayments.
25 DateEntry date Date that it was changed to status received or supplemental. It is usually attached to a claimPayment at that point, but not if user forgets. This is still the date that it becomes important financial data. Only applies if Received or Supplemental. Otherwise, the date is disregarded. User may never edit. Important in audit trail.
26 LineNumber tinyint Assigned when claim is created as a way to order the procs showing on a claim. Indirectly goes out in X12 loop 2400. Used in Canadian eclaims (field F07). One based index. Zero for converted databases.
27 DedEst double -1 if blank. Not sure why we need to allow -1. Calculated automatically. User cannot edit, but can use DedEstOverride instead.
28 DedEstOverride double -1 if blank. Overrides the DedEst value.
29 InsEstTotal double Always has a value. BaseEst-(DedEst or DedEstOverride)-PaidOtherIns-OverAnnualMax. User cannot edit, but can instead use InsEstTotalOverride. Recalculated each time TP is viewed, is saved as the value calculated for the last viewed TP. This variable should probably just be moved to memory and removed as a DB field.
30 InsEstTotalOverride double -1 if blank. Overrides the InsEstTotal value.
31 PaidOtherInsOverride double -1 if blank. Overrides the PaidOtherIns value.
32 EstimateNote varchar(255) An automatically generated note that displays information about over max, exclusions, and other limitations for which there are no fields. Only applies to estimate. Once it's attached to a claim, similar information can go in the remarks field.
33 WriteOffEst double -1 if blank. The estimated writeoff as calculated by OD. Usually only used for PPOs.
34 WriteOffEstOverride double -1 if blank. Overrides WriteOffEst. Usually only used for PPOs.
35 ClinicNum bigint(20) FK to clinic.ClinicNum. Can be zero. No user interface for editing. Forced to always be the same as the procedure, or if no procedure, then the claim.
36 InsSubNum bigint(20) FK to inssub.InsSubNum.
37 PaymentRow int(11) 1-indexed. Allows user to sort the order of payments on an EOB. All claimprocs for a payment will have the same PaymentRow value.
38 PayPlanNum bigint(20) FK to payplan.PayPlanNum. 0 if not attached to a payplan.
39 ClaimPaymentTracking bigint(20) FK to definition.DefNum. Connected to the ClaimPaymentTracking DefCat.
40 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
41 SecDateEntry date Timestamp automatically generated and user not allowed to change. The actual date of entry.
42 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
43 DateSuppReceived date The date the claim proc was first set to received or supplemental. If status is set to something other than received/supplemental, this field will be set to DateTime.MinValue if DateSuppReceived is today. If DateSuppReceived is set to a day in the past and the status is changed from received/supplemental to something else, the field will not be cleared or updated. Db only field used by one customer and this is how they requested it. PatNum #19191
44 DateInsFinalized date Date of the first claimPayment for this claim.
45 IsTransfer tinyint(4) Bool, defaults to false. When true, indicates that a claimproc was created automatically by the Income Transfer Manager to reallocate a claim paid "As Total" (which has no direct procedure links) into procedure-level claimprocs on that claim so the payment remains tied to the procedures on that claim. This flag is set on all supplemental claimprocs created as part of the transfer, including both the offsetting supplemental that cancels out the original As Total amounts before they are redistributed to procedures and the supplemental claimprocs attached to matching procedures that distribute those amounts. These rows are stored with Status=Supplemental, but are shown in the UI as "Txfr" to distinguish them from user-created supplementals.
46 ClaimAdjReasonCodes varchar(255) Holds a comma delimited list of Claim Adjustment Reason Codes from an ERA. https://x12.org/codes/claim-adjustment-reason-codes
47 IsOverpay tinyint(4) Bool, defaults to false. When true, Status is NotReceived and indicates that the claimproc represents an insurance overpayment OR underpayment. Example insurance has partially paid on a claim, this procedure has still been paid 0, so it's an underpayment. The status column in the claim edit window will show PndSup.
48 SecurityHash varchar(255) Holds the salted hash of the following claimproc fields: ClaimNum, Status, InsPayEst, InsPayAmt.
49 Etrans835AttachNum bigint(20) FK to etrans835attach.Etrans835AttachNum. Can be zero. Only set for claimprocs attached to an X12 electronic EOB, also known as an ERA 835. When set, links claimproc to a specific ERA claim (not to a specific proc on an ERA claim).

claimsnapshot
Stores the original insurance writeoff, fee, and expected insurance payment information on claims.
Order Name Type Summary
0 ClaimSnapshotNum bigint(20) Primary key.
1 ProcNum bigint(20) FK to procedurelog.ProcNum
2 ClaimType varchar(255) "P"=primary, "S"=secondary, "Other"=other, "Cap"=capitation. Never "PreAuth" as PreAuths will never be in this table
3 Writeoff double
4 InsPayEst double Expected amount the insurance will pay on the procedure.
5 Fee double Procedure's ProcFee
6 DateTEntry datetime The date/time that the snapshot was created. Not user editable.
7 ClaimProcNum bigint(20) FK to claimproc.ClaimProcNum
8 SnapshotTrigger tinyint(4) Enum:ClaimSnapshotTrigger Stores the trigger to which this ClaimSnapshot was created.
ClaimCreate: 0
Service: 1
InsPayment: 2

claimtracking
Order Name Type Summary
0 ClaimTrackingNum bigint(20) Primary key.
1 ClaimNum bigint(20) FK to claim.ClaimNum
2 TrackingType varchar(255) Enum:ClaimTrackingType Identifies the type of claimtracking row.
StatusHistory:
ClaimUser:
ClaimProcReceived:
3 UserNum bigint(20) FK to userod.UserNum
4 DateTimeEntry timestamp Automatically updated by MySQL every time a row is inserted or modified.
5 Note text Generic column for additional info.
6 TrackingDefNum bigint(20) FK to definition.DefNum for custom tracking when TrackingType=StatusHistory
7 TrackingErrorDefNum bigint(20) FK to definition.DefNum for custom tracking errors when TrackingType=StatusHistory

claimvalcodelog
Value codes for institutional 'claims'. Can have up to 12 per claim.
Order Name Type Summary
0 ClaimValCodeLogNum bigint(20) Primary key.
1 ClaimNum bigint(20) FK to claim.ClaimNum.
2 ClaimField varchar(5) Descriptive abbreviation to help place field on form (Ex: "FL55" for field 55).
3 ValCode char(2) Value Code. 2 char.
4 ValAmount double Value Code Amount.
5 Ordinal int(10) Order of Value Code

clearinghouse
Since we can send e-claims to multiple clearinghouses, this table keeps track of each clearinghouse. Will eventually be used for individual carriers as well if they accept
Order Name Type Summary
0 ClearinghouseNum bigint(20) Primary key.
1 Description varchar(255) Description of this clearinghouse
2 ExportPath text The path to export the X12 file to. \ is now optional. Can be overridden by clinic-level clearinghouses.
3 Payors text A list of all payors which should have claims sent to this clearinghouse. Comma delimited with no spaces. Not necessary if IsDefault.
4 Eformat tinyint Enum:ElectronicClaimFormat The format of the file that gets sent electronically.
None: 0-Not in database, but used in various places in program.
x837D_4010: 1-The American standard through 12/31/11.
Renaissance: 2-Proprietary format for Renaissance.
Canadian: 3-CDAnet format version 4.
Dutch: 4-CSV file adaptable for use in Netherlands.
x837D_5010_dental: 5-The American standard starting on 1/1/12.
x837_5010_med_inst: 6-Either professional or medical. The distiction is stored at the claim level.
Ramq: 7-A specific Canadian carrier located in Quebec which has their own format.
5 ISA05 varchar(255) Sender ID Qualifier. Usually ZZ, sometimes 30. Seven other values are allowed as specified in X12 document, but probably never used.
6 SenderTIN varchar(255) Used in ISA06, GS02, 1000A NM1, and 1000A PER. If blank, then 810624427 is used to indicate Open Dental. Can be overridden by clinic-level clearinghouses.
7 ISA07 varchar(255) Receiver ID Qualifier. Usually ZZ, sometimes 30. Seven other values are allowed as specified in X12 document, but probably never used.
8 ISA08 varchar(255) Receiver ID. Also used in GS03. Provided by clearinghouse. Examples: BCBSGA or 0135WCH00(webMD)
9 ISA15 varchar(255) "P" for Production or "T" for Test.
10 Password varchar(255) Password is usually combined with the login ID for user validation. Can be overridden by clinic-level clearinghouses.
11 ResponsePath varchar(255) The path that all incoming response files will be saved to. \ is now optional. Can be overridden by clinic-level clearinghouses.
12 CommBridge tinyint Enum:EclaimsCommBridge One of the included hard-coded communications bridges. Or none to just create the claim files without uploading.
None: 0-No comm bridge will be activated. The claim files will be created to the specified path, but they will not be uploaded.
WebMD: 1
BCBSGA: 2
Renaissance: 3
ClaimConnect: 4
RECS: 5
Inmediata: 6
AOS: 7
PostnTrack: 8
ITRANS: 9 Canadian clearinghouse.
Tesia: 10
MercuryDE: 11
ClaimX: 12
DentiCal: 13
EmdeonMedical: 14
Claimstream: 15 Canadian clearinghouse.
NHS: 16 UK clearinghouse.
EDS: 17
Ramq: 18
EdsMedical: 19
Lantek: 20
ITRANS2: 21 Canadian clearinghouse. Similar to ITRANS except supports certificate and carrier list web fetching.
VyneDental: 22
13 ClientProgram varchar(255) If applicable, this is the name of the client program to launch. It is even used by the hard-coded comm bridges, because the user may have changed the installation directory or exe name. Can be overridden by clinic-level clearinghouses.
14 LastBatchNumber smallint Each clearinghouse increments their batch numbers by one each time a claim file is sent. User never sees this number. Maxes out at 999, then loops back to 1. This field must NOT be cached and must be ignored in the code except where it explicitly retrieves it from the db. Defaults to 0 for brand new clearinghouses, which causes the first batch to go out as #1.
15 ModemPort tinyint Was not used. 1,2,3,or 4. The port that the modem is connected to if applicable. Always uses 9600 baud and standard settings. Will crash if port or modem not valid.
16 LoginID varchar(255) A clearinghouse usually has a login ID that is used with the password in order to access the remote server. This value is not usualy used within the actual claim. Can be overridden by clinic-level clearinghouses.
17 SenderName varchar(255) Used in 1000A NM1 and 1000A PER. But if SenderTIN is blank, then OPEN DENTAL SOFTWARE is used instead. Can be overridden by clinic-level clearinghouses.
18 SenderTelephone varchar(255) Used in 1000A PER. But if SenderTIN is blank, then 8776861248 is used instead. 10 digit phone is required by WebMD and is universally assumed, so for now, this must be either blank or 10 digits. Can be overridden by clinic-level clearinghouses.
19 GS03 varchar(255) Usually the same as ISA08, but at least one clearinghouse uses a different number here.
20 ISA02 varchar(10) Authorization information. Almost always blank. Used for Denti-Cal.
21 ISA04 varchar(10) Security information. Almost always blank. Used for Denti-Cal.
22 ISA16 varchar(2) X12 component element separator. Two digit hexadecimal string representing an ASCII character or blank. Usually blank, implying 3A which represents ':'. For Denti-Cal, hexadecimal value 22 must be used, corresponding to '"'.
23 SeparatorData varchar(2) X12 data element separator. Two digit hexadecimal string representing an ASCII character or blank. Usually blank, implying 2A which represents '*'. For Denti-Cal, hexadecimal value 1D must be used, corresponding to the "group separator" character which has no visual representation.
24 SeparatorSegment varchar(2) X12 segment terminator. Two digit hexadecimal string representing an ASCII character or blank. Usually blank, implying 7E which represents '~'. For Denti-Cal, hexadecimal value 1C must be used, corresponding to the "file separator" character which has no visual representation.
25 ClinicNum bigint(20) FK to clinic.ClinicNum. ClinicNum=0 for HQ.
26 HqClearinghouseNum bigint(20) FK to clearinghouse.ClearingHouseNum. Never 0. Points to the HQ copy of this clearinghouse. If this copy is the HQ copy, then HqClearinghouseNum=ClearinghouseNum.
27 IsEraDownloadAllowed tinyint(4) Enum:EraBehaviors EraBehaviors.DownloadAndReceive by default. This flag is implemented individually within each clearinghouse. Can be overridden by clinic-level clearinghouses.
None: 0 - Do not download ERAs/EOBs
DownloadDoNotReceive: 1 - Download ERAs/EOBs, but do not mark claims and claim procedures as 'Received'.
DownloadAndReceive: 2 - Download ERAs/EOBs, and mark claims and claim procedures as 'Received'.
28 IsClaimExportAllowed tinyint(4) True by default. This flag is implemented individually within each clearinghouse. Can be overridden by clinic-level clearinghouses.
29 IsAttachmentSendAllowed tinyint(4) Currently only used for DentalXChange's attachment service. This indicates that the user has set up the attachment service and would like to use it in Open Dental.
30 LocationID varchar(255) A unique identifier provided by the clearinghouse to identify the practice in their system. This is separate from the issue of clinics, where we already enforce only one clinic per clearinghouse.
31 EnableXConnect tinyint(4) False by default. This bool is used to control whether a clinic has enabled XConnect for the clearinghouse.

clinic
A clinic is usually a separate physical office location. If multiple clinics are sharing one database, then this is used. Patients, Operatories, Claims, and many other types of objects can be assigned to a clinic.
Order Name Type Summary
0 ClinicNum bigint(20) Primary key. Used in patient,payment,claimpayment,appointment,procedurelog, etc.
1 Description varchar(255) Use Abbr for all user-facing forms. Description is required and should not be blank.
2 Address varchar(255) .
3 Address2 varchar(255) Second line of address.
4 City varchar(255) .
5 State varchar(255) 2 char in the US.
6 Zip varchar(255) .
7 Phone varchar(255) Does not include any punctuation. Exactly 10 digits or blank in USA and Canada.
8 BankNumber varchar(255) The account number for deposits.
9 DefaultPlaceService tinyint Enum:PlaceOfService Usually 0 unless a mobile clinic for instance.
Office: 0. Code 11
PatientsHome: 1. Code 12
InpatHospital: 2. Code 21
OutpatHospital: 3. Code 22
SkilledNursFac: 4. Code 31
CustodialCareFacility: 5. Code 33. In X12, a similar code AdultLivCareFac 35 is mentioned.
OtherLocation: 6. Code 99. We use 11 for office.
MobileUnit: 7. Code 15
School: 8. Code 03
MilitaryTreatFac: 9. Code 26
FederalHealthCenter: 10. Code 50
PublicHealthClinic: 11. Code 71
RuralHealthClinic: 12. Code 72
EmergencyRoomHospital: 13. Code 23
AmbulatorySurgicalCenter: 14. Code 24
TelehealthOutsideHome: 15. Code 02.
TelehealthInHome: 16. Code 10
OutreachSiteOrStreet: 17. Code 27
10 InsBillingProv bigint(20) FK to provider.ProvNum. 0=Default practice provider, -1=Treating provider.
11 Fax varchar(50) Does not include any punctuation. Exactly 10 digits or empty in USA and Canada.
12 EmailAddressNum bigint(20) FK to emailaddress.EmailAddressNum.
13 DefaultProv bigint(20) FK to provider.ProvNum. Used in place of the default practice provider when making new patients.
14 SmsContractDate datetime DateSMSContract was signed.
15 SmsMonthlyLimit double Always stored in USD, this is the desired limit for SMS out for a given month.
16 IsMedicalOnly tinyint(4) True if this clinic is a medical clinic. Used to hide/change certain areas of Open Dental, like hiding the tooth chart and changing 'dentist' to 'provider'.
17 BillingAddress varchar(255) Overrides Address on claims if not blank.
18 BillingAddress2 varchar(255) Second line of billing address.
19 BillingCity varchar(255) Overrides City on claims if BillingAddress is not blank.
20 BillingState varchar(255) Overrides State on claims if BillingAddress is not blank.
21 BillingZip varchar(255) Overrides Zip on claims if BillingAddress is not blank.
22 PayToAddress varchar(255) Overrides practice PayTo address if not blank.
23 PayToAddress2 varchar(255) Second line of PayTo address.
24 PayToCity varchar(255) Overrides practice PayToCity if PayToAddress is not blank.
25 PayToState varchar(255) Overrides practice PayToState if PayToAddress is not blank.
26 PayToZip varchar(255) Overrides practice PayToZip if PayToAddress is not blank.
27 UseBillAddrOnClaims tinyint(4) True if this clinic's billing address should be used on outgoing claims.
28 Region bigint(20) FK to definition.DefNum when definition.DefCat is Regions. A region is a way of grouping multiple clinics. Used in Ins Verification and Tasks.
29 ItemOrder int(11) 0 based. Clinics cache is sorted by ItemOrder if the preference ClinicListIsAlphabetical is false.
30 IsInsVerifyExcluded tinyint(4) True if this clinic should be excluded from showing up in the Insurance Verification List.
31 Abbr varchar(255) Abbreviation for the Clinic's description. Sorted by Abbr if ClinicListIsAlphabetical is true. Use this for all user-facing forms. Abbr is required and should not be blank.
32 MedLabAccountNum varchar(16) FK to medlab.PatAccountNum. Used to filter MedLab results by the MedLab Account Number assigned to each clinic.
33 IsConfirmEnabled tinyint(4) Clinic level preference. (Better Name is "IsAutomationEnabled" but that conflicts with other definitions of what Automation means. Determines if autocomm should be sent for/from this clinic.
34 IsConfirmDefault tinyint(4) Deprecated. Clinic level preference. If true then this clinic is using the default automated reminder/confirmation settings as defined by the user.
35 IsNewPatApptExcluded tinyint(4) Deprecated as of 17.1, use signup portal. Indicates whether or not the New Patient Appointment version of Web Sched is excluded for this specifc clinic.
36 IsHidden tinyint(4) Indicates whether or not the clinic is hidden.
37 ExternalID bigint(20) Not currently used by Open Dental but is used by other software's.
38 SchedNote varchar(255) Indicates if the clinic should only be scheduled in a certain way (e.g. ortho only, etc)
39 HasProcOnRx tinyint(4) Defaults to false. If true, will require procedure be attached to controlled prescriptions written from this clinic.
40 TimeZone varchar(75) Allows adding timezone info to FHIR datetimes. This does not actually change the datetime of any field.
41 EmailAliasOverride varchar(255) Overrides the SenderAddress (aka Alias) for emails sent from this clinic. Used when multiple clinics share a single EmailAddress table entry, but each clinic wants to show a different email address sender when sending. This is also known as a "send as" alias.

clinicerx
Tracks which clinics have access to eRx based on ClinicDescr. Synchronized with HQ.
Order Name Type Summary
0 ClinicErxNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum. Holder of registration key only for HQ record, in customer record this will be 0.
2 ClinicDesc varchar(255) Description of a clinic from the clinic table. Only used by OD HQ. For customer records, use ClinicNum.
3 ClinicNum bigint(20) FK to clinic.ClinicNum. Is the clinic that is used for accessing eRx.
4 EnabledStatus tinyint(4) Enum:ErxStatus Set to true if the clinic with the given ClinicName has access to eRx.
Disabled: 0.
Enabled: 1.
Undefined: 2.
PendingAccountId: 3.
NeedsManualAccountId: 4.
PendingEmail: 5.
Pending: 6.
PendingEconnTransmit: 7.
InTransitToEconn: 8.
NeedsManualOfficeContact: 9.
NeedsErxId: 10.
5 ClinicId varchar(255) Clinic identifier used by the erx option. Only used by OD HQ.
6 ClinicKey varchar(255) Unique key used by the erx option. Only used by OD HQ.
7 AccountId varchar(25) Only used by OD HQ.
8 RegistrationKeyNum bigint(20) FK to registrationkey.RegistrationKeyNum. HQ only, links to the registration key used to make this clinicerx row.

clinicpref
Used to store preferences specific to clinics. Works in conjunction with the Pref table.
Order Name Type Summary
0 ClinicPrefNum bigint(20) Primary key.
1 ClinicNum bigint(20) FK to clinic.ClinicNum. Never 0 because that would indicate HQ, but all HQ prefs are stored in Pref table instead of here.
2 PrefName varchar(255) Enum: PrefName
3 ValueString text The stored value.

clockevent
One clock-in / clock-out pair. Or, if the pair is a break, then it's an out/in pair. With normal clock in/out pairs, we want to know how long the employee was working. It's the opposite with breaks. We want to know how long they were not working, so the pair is backwards. This means that a normal clock in is left incomplete when the clock out for break is created. And once both are finished, the regular in/out will surround the break. Breaks cannot be viewed easily on the same grid as regular clock events for this reason. And since breaks do not affect pay, they should not clutter the normal grid.
Order Name Type Summary
0 ClockEventNum bigint(20) Primary key.
1 EmployeeNum bigint(20) FK to employee.EmployeeNum
2 TimeEntered1 datetime The actual time that this entry was entered. Cannot be 01-01-0001.
3 TimeDisplayed1 datetime The time to display and to use in all calculations. Cannot be 01-01-0001.
4 ClockStatus tinyint Enum:TimeClockStatus Home, Lunch, or Break. The status really only applies to the clock out. Except the Break status applies to both out and in.
Home: 0
Lunch: 1
Break: 2
5 Note text .
6 TimeEntered2 datetime The user can never edit this, but the program has to be able to edit this when user clocks out. Can be 01-01-0001 if not clocked out yet.
7 TimeDisplayed2 datetime User can edit. Can be 01-01-0001 if not clocked out yet.
8 OTimeHours time This is a manual override for OTimeAuto. Typically -1 hour (-01:00:00) to indicate no override. When used as override, allowed values are zero or positive. This is an alternative to using a TimeAdjust row.
9 OTimeAuto time Automatically calculated OT. Will be zero if none.
10 Adjust time This is a manual override of AdjustAuto. Ignored unless AdjustIsOverridden set to true. When used as override, it's typically negative, although zero and positive are also allowed.
11 AdjustAuto time Automatically calculated Adjust. Will be zero if none.
12 AdjustIsOverridden tinyint(4) True if AdjustAuto is overridden by Adjust.
13 Rate2Hours time This is a manual override for Rate2Auto. Typically -1 hour (-01:00:00) to indicate no override. When used as override, allowed values are zero or positive. This is the portion of the hours worked which are at Rate2, so it's not in addition to the hours worked. Also used to calculate the Rate2 OT.
14 Rate2Auto time Automatically calculated rate2 pay. Will be zero if none.
15 ClinicNum bigint(20) FK to clinic.ClinicNum. The clinic the ClockEvent was entered at.
16 Rate3Hours time This is a manual override for Rate3Auto. Typically -1 hour (-01:00:00) to indicate no override. When used as override, allowed values are zero or positive. This is the portion of the hours worked which are at Rate3, so it's not in addition to the hours worked. Also used to calculate the Rate3 OT.
17 Rate3Auto time Automatically calculated Rate3 pay. Will be zero if none.
18 IsWorkingHome tinyint(4) True if the Clock Event is made by choosing "Available at Home" when clocking in. Will be false if "Available At Office" is selected instead.

cloudaddress
Order Name Type Summary
0 CloudAddressNum bigint(20) Primary key.
1 IpAddress varchar(50) The IP address the user is connecting from.
2 UserNumLastConnect bigint(20) FK to userod.UserNum.
3 DateTimeLastConnect datetime DateTime of the last successful login from the address.

codegroup
These groups of procedure codes are used in Benefit Frequencies (and Insurance History?). We can't use CovCats because those spans are frequently far too broad. We often need specific codes. Cached.
Order Name Type Summary
0 CodeGroupNum bigint(20) Primary key.
1 GroupName varchar(50) .
2 ProcCodes text List of D codes with commas and hyphens. No spaces. Example: "D0000-D0999,D2140-D2161,D2750" would mean all exams and xrays, some amalgams, and a crown. The normal hyphens in the db get converted to non-breaking hyphens (\u2011) for display to prevent wrapping.
3 ItemOrder int(11) Zero-based. CodeGroups that don't show in either list (IsHidden=true and ShowInAgeLimit=false) get higher ItemOrders so that then are at the bottom of the setup list.
4 CodeGroupFixed tinyint(4) Enum:EnumCodeGroupFixed 1=BW, 2=PanoFMX, 3=Exam, 4=Perio, 5=Prophy, 6=SRP. Only used in sheet static text fields (example StaticTextField.dateLastBW) and eClaims. This enum is no longer used in the Ins History Window.
None: 0
BW: 1
PanoFMX: 2
Exam: 3
Perio: 4
Prophy: 5
SRP: 6- When used in InsHist window, the quadrant is hard coded for each of the 4 rows.
FMDebride: 7 - DO NOT USE. No longer used for insurance history.
Fluoride: 8 - DO NOT USE. No longer used for insurance history.
Sealant: 9 - DO NOT USE. No longer used for insurance history.
5 IsHidden tinyint(4) If true, a user will not be able to see this codegroup as an option in the benefit edit form or any grid on FormInsBenefits.
6 ShowInAgeLimit tinyint(4) If true, this codegroup will show in Age Limitations grid. Control of showing in Freq Lim is done separately using ShowInFrequency.
7 ShowInFrequency tinyint(4) If true, this codegroup will show in the Frequency Limitations Grid.
8 ShowInOther tinyint(4) If true, this codegroup will show in the Ins Benefits Window in the Other Benefits grid.
9 ShowInHistory tinyint(4) If true, this codegroup will show as a new row in the Ins History window inside of Ins Plan.
10 HistProcCode varchar(255) Stores a single procedure code used in InsHist. When determining history, multiple codes are used from the codegroup.ProcCodes field above. But when automation creates history, it must have a single code. This is the D code that it uses. Example D1234. Required whenever ShowInHistory=true. Not allowed to have a value when ShowInHistory=false.
11 IsPerioFourQuads tinyint(4) If true, this codegroup will appear four times in the Ins History Window as, "Perio Scaling UL", "Perio Scaling UR", "Perio Scaling LL", and "Perio Scaling LR".

codesystem
Used for tracking code systems imported to OD. HL7OID used for sending messages. This must be a database table in order to keep track of VersionCur between sessions.
Order Name Type Summary
0 CodeSystemNum bigint(20) Primary key. Not currently referenced anywhere.
1 CodeSystemName varchar(255) .
2 VersionCur varchar(255) Only used for display, not actually interpreted. Updated by Code System importer. Examples: 2013 or 1
3 VersionAvail varchar(255) Only used for display, not actually interpreted. Updated by Convert DB script.
4 HL7OID varchar(255) Example: 2.16.840.1.113883.6.13
5 Note varchar(255) Notes to display to user. Examples: "CDT codes distributed via program updates.", "CPT codes require purchase and download from www.ama.com

commlog
Tracks all forms of communications with patients, including emails, phonecalls, postcards, etc. Any changes made to this table need to be added to CommlogHist and CommlogHists.CreateFromCommlog().
Order Name Type Summary
0 CommlogNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum. This will be 0 if Referral.
2 CommDateTime datetime Date and time of entry
3 CommType bigint(20) FK to definition.DefNum. If ReferralNum is 0, this is a normal commlog and this will be linked to def category CommLogTypes. If ReferralNum is set, then this is a referral commlog entry and this will be linked to def category CommLogReferralTypes.
4 Note text Note for this commlog entry.
5 Mode_ tinyint Enum:CommItemMode Phone, email, etc.
None: 0-
Email: 1-
Mail: 2
Phone: 3
InPerson: 4
Text: 5
EmailAndText: 6
PhoneAndText: 7
Fax: 8
6 SentOrReceived tinyint Enum:CommSentOrReceived Neither=0,Sent=1,Received=2.
Neither: 0
Sent: 1
Received: 2
7 UserNum bigint(20) FK to userod.UserNum.
8 Signature text Signature. For details, see procnote.Signature.
9 SigIsTopaz tinyint(4) True if signed using the Topaz signature pad, false otherwise.
10 DateTStamp timestamp Automatically updated by MySQL every time a row is added or changed.
11 DateTimeEnd datetime Date and time when commlog ended. Mainly for internal use.
12 CommSource tinyint(4) Enum:CommItemSource Set to the source of the entity that created this commlog. E.g. WebSched.
User: 0
WebSched: 1
ProgramLink: 2
ApptReminder: 3
EServices: 4 - HQ Only
SupplementalBackup: 5
ApptThankYou: 6
FHIR: 7 - Includes non-FHIR API.
NewPatThankYou: 8
MsgToPay: 9
MassEmail: 10
13 ProgramNum bigint(20) FK to program.ProgramNum. This will be 0 unless CommSource is set to ProgramLink.
14 DateTEntry datetime Track Date Created for commlogs. Value for existing commlogs show as blank in the UI. Not editable by user.
15 ReferralNum bigint(20) FK to referral.ReferralNum. When this is set, then PatNum will be 0 and a different edit window is used and CommType uses a different def category.
16 CommReferralBehavior tinyint(4) Enum:EnumCommReferralBehavior If this is a referral commlog (ReferralNum is set), then this determines how it displays within grids.
None: 0
TopAnchored: 1
Hidden: 2

commoptout
The patient does not want to recieve messages for a particular type of communication.
Order Name Type Summary
0 CommOptOutNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum. The patient who is opting out of this form of communication.
2 OptOutSms int(11) Enum:CommOptOutType The type of communication for which this patient does not want to receive automated sms.
All: 1 - All. Allows adding new entries to this enum without requiring a convert script.
eConfirm:
eReminder:
eThankYou:
WebSchedRecall:
WebSchedASAP:
PatientPortalInvites:
Verify:
Statements:
Arrivals:
Birthdays:
GeneralMessages:
MsgToPay:
3 OptOutEmail int(11) Enum:CommOptOutType The type of communication for which this patient does not want to receive automated email.
All: 1 - All. Allows adding new entries to this enum without requiring a convert script.
eConfirm:
eReminder:
eThankYou:
WebSchedRecall:
WebSchedASAP:
PatientPortalInvites:
Verify:
Statements:
Arrivals:
Birthdays:
GeneralMessages:
MsgToPay:

computer
Keeps track of the computers in an office. The list will eventually become cluttered with the names of old computers that are no longer in service. The old rows can be safely deleted. Although the primary key is used in at least one table, this will probably be changed, and the computername will become the primary key.
Order Name Type Summary
0 ComputerNum bigint(20) Primary key.
1 CompName varchar(100) Name of the computer.
2 LastHeartBeat datetime Allows us to tell which computers are running. All workstations record a heartbeat here at an interval of 3 minutes. So if the heartbeat is fairly fresh, then that's an accurate indicator of whether Open Dental is running on that computer.

computerpref
Enables preference specific to individual computers on a customer network.
Order Name Type Summary
0 ComputerPrefNum bigint(20) Primary key.
1 ComputerName varchar(64) The human-readable name of the computer on the network (not the IP address).
2 GraphicsUseHardware tinyint(1) Set to true if the tooth chart is to use a hardware accelerated OpenGL window when available. Set to false to use software rendering when available. Of course, the final pixel format on the customer machine depends on the list of available formats. Best match pixel format is always used. This option only applies if GraphicsSimple is set to false.
3 GraphicsSimple tinyint(1) Enum:DrawingMode Set to 1 to use the low-quality 2D tooth chart in the chart module. Set to 0 to use a 3D DirectX based tooth chart in the chart module. This option helps the program run even when the local graphics hardware is buggy or unavailable.
DirectX: 0
Simple2D: 1
OpenGL: 2
4 SensorType varchar(255) Indicates the type of Suni sensor connected to the local computer (if any). This can be a value of A, B, C, or D.
5 SensorBinned tinyint(4) Indicates wether or not the Suni sensor uses binned operation.
6 SensorPort int(11) Indicates which Suni box port to connect with. There are 2 ports on a box (ports 0 and 1).
7 SensorExposure int(11) Indicates the exposure level to use when capturing from a Suni sensor. Values can be 1 through 7.
8 GraphicsDoubleBuffering tinyint(4) Indicates if the user prefers double-buffered 3D tooth-chart (where applicable).
9 PreferredPixelFormatNum int(11) Indicates the current OpenGL pixel format by number which the user prefers (if using OpenGL).
10 AtoZpath varchar(255) The path of the A-Z folder for the specified computer. Overrides the officewide default. Used when multiple locations are on a single virtual database and they each want to look to the local data folder for images.
11 TaskKeepListHidden tinyint(1) If the global setting for showing the Task List is on, this controls if it should be hidden on this specified computer
12 TaskDock int(11) Dock task bar on bottom (0) or right (1).
13 TaskX int(11) X pos for right docked task list.
14 TaskY int(11) Y pos for bottom docked task list.
15 DirectXFormat varchar(255) Holds a semi-colon separated list of enumeration names and values representing a DirectX format. If blank, then no format is currently set and the best theoretical format will be chosen at program startup. If this value is set to 'opengl' then this computer is using OpenGL and a DirectX format will not be picked.
16 ScanDocSelectSource tinyint(4) Show the select scanner dialog when scanning documents. This can also be set to prevent a couple of issues that can happen after scanning with some Canon scanners. One issue is when the Imaging Module won't load some PDFs. The other issue is when listbox selections won't visually update in other windows like the commlog.
17 ScanDocShowOptions tinyint(4) Show the scanner options dialog when scanning documents.
18 ScanDocDuplex tinyint(4) Attempt to scan in duplex mode when scanning multipage documents with an ADF.
19 ScanDocGrayscale tinyint(4) Scan in gray scale when scanning documents.
20 ScanDocResolution int(11) Scan at the specified resolution when scanning documents. Example: 150.
21 ScanDocQuality tinyint 0-100. Quality of jpeg after compression when scanning documents. 100 indicates full quality. Opposite of compression. Should only be used when scanning.
22 ClinicNum bigint(20) FK to clinic.ClinicNum. The most recent clinic for this computer. Determines which clinic is used when loading Open Dental.
23 ApptViewNum bigint(20) FK to apptview.ApptViewNum. The most recent appt view num for this computer. Used when opening with the Appts module in conjunction with ClinicNum if this ApptViewNum is associated to the ClinicNum.
24 RecentApptView tinyint Deprecated. The index of the most recent appt view for this computer. Uses it when opening. This column cannot be dropped due to older versions using it upon opening (prior to calling the update file copier code) so they will throw a UE if this column is ever dropped.
25 PatSelectSearchMode tinyint(4) Enum:SearchMode The search mode that is used when loading the patient select window, and while typing. When 0 the patient select window will use the DB wide pref PatientSelectUsesSearchButton.
Default: 0
UseSearchButton: 1
RefreshWhileTyping: 2
26 NoShowLanguage tinyint(4)
27 NoShowDecimal tinyint(4) If true, don't warn user if the region's decimal setting is not 2.
28 ComputerOS varchar(255) Enum:PlatformOD The current operating system platform for the computer.
Undefined: Only happens when workstation has not ran through convert script yet.
Win32S: The operating system is Win32s. Win32s is a layer that runs on 16-bit versions of Windows to provide access to 32-bit applications.
Win32Windows: The operating system is Windows 95 or Windows 98.
Win32NT: The operating system is Windows NT or later.
WinCE: The operating system is Windows CE.
Unix: The operating system is Unix.
MacOSX: The operating system is Macintosh.
29 HelpButtonXAdjustment double Deprecated.
30 GraphicsUseDirectX11 tinyint(4) Enum:YN Unknown, Yes, No.
Unknown: 0
Yes: 1
No: 2
31 Zoom int(11) Default 0. Typically a bit above 100. Example 120. Below 100 is allowed but rare, like 80. In addition to normal monitor scale set in Windows. 0 is treated the same as 100, or no additional zoom.
32 VideoRectangle varchar(255) This is x,y,w,h format for the desktop location of the Video window. This is saved each time the Video window closes. If the Video window is maximized, then the form will instead be like this: "100,120,600,800,Max". The rectangle here defines the RestoreBounds when user unmaximizes.
33 CreditCardTerminalId varchar(255) Holds the value of the last Terminal used in a transaction. Used for PayConnect2 in FormPayConnect2 to set the default value of the Terminal list loading a new terminal payment. Also used by MeetInTheCloud (UI: Global Payments V2). One user would not be using both services simultaneously.

confirmationrequest
Requests that have been sent via EConnector to HQ. HQ will process and update status as responses become available.
Order Name Type Summary
0 ConfirmationRequestNum bigint(20) PK. Generated by HQ.
1 ClinicNum bigint(20) FK to clinic.ClinicNum for the corresponding appointment.
2 PatNum bigint(20) FK to patient.PatNum for the corresponding patient.
3 ApptNum bigint(20) FK to appointment.AptNum. Foreign key to the appointment represented by this AutoCommAppt.
4 DateTimeConfirmExpire datetime Generated by OD. Typically the time of the appointment. This is the time at which HQ will consider this unconfirmed and auto terminate.
5 ShortGUID varchar(255) Generated by HQ. Identifies this AutoCommGuid in future transactions between HQ and OD.
6 ConfirmCode varchar(255) Generated by HQ. The code that the patient will text back in order to confirm the appointment. If received then it indicates a positive response.
7 DateTimeEntry datetime Generated by OD. Timestamp when row is created.
8 DateTimeConfirmTransmit datetime Generated by OD. Timestamp when EConnector sent this confirm request to HQ. Stored in local customer timezone.
9 DateTimeRSVP datetime Generated by OD. Timestamp when HQ updates this request to indicate that it has been terminated. RSVPStatusCode will change to its final state at this time. Stored in local customer timezone.
10 RSVPStatus tinyint(4) Enum:RSVPStatusCodes Generated by OD in some cases and HQ in others. Indicates current status in the lifecycle of this ConfirmationRequest.
AwaitingTransmit: Entered manually by something other than EConnector. EConnector will pickup and send to HQ and change to pendingRsvp.
PendingRsvp: EConnector has sent this to HQ and will remain in this status until it is either terminated or receives a response from the patient.
PositiveRsvp: Patient responded with an affirmative confirmation.
NegativeRsvp: Patient responded and declined the confirmation.
Callback: Patient responded by requesting a callback.
Expired: Patient took no action by the time DateTimeExpired passed and the confirmation was terminated.
Failed: HQ or EConnector was unable to create the confirmation so it was terminated prematurely.
ApptChanged: 7 - The appointment date/time was changed before the patient responded to the original confirmation. OD proper will simply delete these ConfirmationRequests. HQ will move them to the terminated table and mark them ApptChanged.
11 ResponseDescript text Generated by OD in some cases and HQ in others. Any human readable error message generated by either HQ or EConnector. Used for debugging.
12 GuidMessageFromMobile text FK to smsfrommobile.GuidMessage. Generated at HQ when the confirmation pending is terminated with confirmation text message. Also allows SmsFromMobile to be linked to ConfirmationRequest in OD proper.
13 ApptDateTime datetime The Date and time of the original appointment. We need this in case the appointment was moved and needs another reminder sent out.
14 TSPrior bigint(20) This was the TSPrior used to send this reminder.
15 DoNotResend tinyint(4) Indicates whether the user has chosen to not resend the confirmation request when the AptDateTime has changed.
16 SendStatus tinyint(4) Indicates status of message.
17 ApptReminderRuleNum bigint(20) FK to apptreminderrule.ApptReminderRuleNum. Allows us to look up the rules to determine how to send this apptcomm out.
18 MessageType tinyint(4)
19 MessageFk bigint(20) FK to smstomobile.SmsToMobileNum AND MessageType=1, FK to emailmessage.EmailMessageNum AND MessageType=2.
20 DateTimeSent datetime DateTime the message was sent.

connectiongroup
Used in the Central Enterprise Management Tool for creating a group of connections.
Order Name Type Summary
0 ConnectionGroupNum bigint(20) Primary key.
1 Description varchar(255) Description of the connection group

conngroupattach
Used in the Central Enterprise Management Tool to link CentralConnections and ConnectionGroups. Each connection can be in multiple groups.
Order Name Type Summary
0 ConnGroupAttachNum bigint(20) Primary Key
1 ConnectionGroupNum bigint(20) FK to connectiongroup.ConnectionGroupNum
2 CentralConnectionNum bigint(20) FK to centralconnection.CentralConnectionNum

contact
Like a rolodex for businesses that the office interacts with. Used to store pharmacies, etc.
Order Name Type Summary
0 ContactNum bigint(20) Primary key.
1 LName varchar(255) Last name or, frequently, the entire name.
2 FName varchar(255) First name is optional.
3 WkPhone varchar(255) Work phone.
4 Fax varchar(255) Fax number.
5 Category bigint(20) FK to definition.DefNum
6 Notes text Note for this contact.

county
Used in public health.
Order Name Type Summary
0 CountyNum bigint(20) Primary Key.
1 CountyName varchar(255) Frequently used as the primary key of this table. But it's allowed to change. Change is programmatically synchronized.
2 CountyCode varchar(255) Optional. Usage varies.

covcat
Insurance coverage categories. They need to look like in the manual for the American calculations to work properly.
Order Name Type Summary
0 CovCatNum bigint(20) Primary key. Only used in Benefit and CovSpan tables.
1 Description varchar(50) Description of this category.
2 DefaultPercent smallint(6) Default percent for this category. -1 to skip this category and not apply a percentage.
3 CovOrder int(11) The order in which the categories are displayed. Includes hidden categories. 0-based.
4 IsHidden tinyint If true, this category will be hidden.
5 EbenefitCat tinyint Enum:EbenefitCategory The X12 benefit categories. Each CovCat can link to one X12 category. Default is 0 (unlinked).
None: 0- Default. Applies to all codes.
General: 1- X12: 30 and 35. All ADA codes except ortho. D0000-D7999 and D9000-D9999
Diagnostic: 2- X12: 23. ADA D0000-D0999. This includes DiagnosticXray.
Periodontics: 3- X12: 24. ADA D4000
Restorative: 4- X12: 25. ADA D2000-D2699, and D2800-D2999.
Endodontics: 5- X12: 26. ADA D3000
MaxillofacialProsth: 6- X12: 27. ADA D5900-D5999
Crowns: 7- X12: 36. Exclusive subcategory of restorative. D2700-D2799
Accident: 8- X12: 37. ADA range?
Orthodontics: 9- X12: 38. ADA D8000-D8999
Prosthodontics: 10- X12: 39. ADA D5000-D5899 (removable), and D6200-D6899 (fixed)
OralSurgery: 11- X12: 40. ADA D7000
RoutinePreventive: 12- X12: 41. ADA D1000
DiagnosticXRay: 13- X12: 4. ADA D0200-D0399. So this is like an optional category which is otherwise considered to be diagnosic.
Adjunctive: 14- X12: 28. ADA D9000-D9999

covspan
Always attached to covcats, this describes the span of procedure codes to which the category applies.
Order Name Type Summary
0 CovSpanNum bigint(20) Primary key.
1 CovCatNum bigint(20) FK to covcat.CovCatNum.
2 FromCode varchar(15) Lower range of the span. Does not need to be a valid code.
3 ToCode varchar(15) Upper range of the span. Does not need to be a valid code.

cpt
Other tables generally use the CptCode as their foreign key.
Order Name Type Summary
0 CptNum bigint(20) Primary key. .
1 CptCode varchar(255) Cpt code. Not allowed to edit this column once saved in the database.
2 Description varchar(4000) Short Description provided by Cpt documentation.
3 VersionIDs varchar(255) Comma delimited list of years the Cpt code existed in that have been imported into this table.

creditcard
One credit card along with any recurring charge information.
Order Name Type Summary
0 CreditCardNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 Address varchar(255) .
3 Zip varchar(255) Postal code.
4 XChargeToken varchar(255) Token for X-Charge. Alphanumeric, upper and lower case, about 15 char long. Passed into Xcharge instead of the actual card number. Used for GlobalPayments/EdgeExpress (UI: Global Payments V1) as well.
5 CCNumberMasked varchar(255) Credit Card Number. Will be stored masked: XXXXXXXXXXXX1234.
6 CCExpiration date Only month and year are used, the day will usually be 1.
7 ItemOrder int(11) The order that multiple cards will show. Zero-based. First one will be default.
8 ChargeAmt double Amount set for recurring charges.
9 DateStart date Start date for recurring charges.
10 DateStop date Stop date for recurring charges.
11 Note varchar(255) Any notes about the credit card or account goes here.
12 PayPlanNum bigint(20) FK to payplan.PayPlanNum.
13 PayConnectToken varchar(255) Token for PayConnect. PayConnect returns a token and token expiration, when requested by the merchant's system, to be used instead of actual credit card number in subsequent transactions.
14 PayConnectTokenExp date Expiration for the PayConnect token. Used with the PayConnect token instead of the actual credit card number and expiration.
15 Procedures text Comma delimited list of the ProcCodes authorized to allow a recurring charge to be processed for the credit card. When empty, ProcCodes will not be considered when authorizing recurring charges.
16 CCSource tinyint(4) Enum:CreditCardSource Indicates which application made this credit card and token.
None: 0 - This is used when the payment is not a Credit Card. If CC, then this means we are storing the actual credit card number. Not recommended.
XServer: 1 - Local installation of X-Charge
XWeb: 2 - Credit card created via X-Web (an eService)
PayConnect: 3 - PayConnect web service (from within OD).
XServerPayConnect: 4 - Credit card has been added through the local installation of X-Charge and the PayConnect web service.
XWebPortalLogin: 5 - Made from the login screen of the Patient Portal.
PaySimple: 6 - PaySimple web service (from within OD).
PaySimpleACH: 7 - PaySimple ACH web service (from within OD).
PayConnectPortal: 8 - PayConnect credit card (made from Patient Portal)
PayConnectPortalLogin: 9 - PayConnect credit card (made from Patient Portal Login screen).
CareCredit: 10 - CareCredit.
EdgeExpressRCM: 11 - Global Payments V1 Cloud (formerly EdgeExpress/GlobalPayments) when calling the RCM program.
EdgeExpressCNP: 12 - Global Payments V1 Card Not Present API (formerly EdgeExpress/GlobalPayments).
API: 13 - Payment taken through Open Dental API.
EdgeExpressPaymentPortal: 14 - Global Payments V1 (formerly EdgeExpress/GlobalPayments) payment taken through the Payment Portal.
EdgeExpressPaymentPortalGuest: 15 - Global Payments V1 (formerly EdgeExpress/GlobalPayments) payment taken through the Payment Portal as a guest.
PayConnectPaymentPortal: 16 - PayConnect payment taken through the Payment Portal.
PayConnectPaymentPortalGuest: 17 - PayConnect payment taken through the Payment Portal as a guest.
PaySimplePaymentPortal: 18 - PaySimple payment taken through the Payment Portal.
PaySimplePaymentPortalGuest: 19 - PaySimple payment taken through the Payment Portal as a guest.
PaySimplePaymentPortalACH: 20 - PaySimple ACH Payment taken through the Payment Portal.
XWebPaymentPortal: 21 - XWeb payment taken through the Payment Portal.
XWebPaymentPortalGuest: 22 - XWeb payment taken through the Payment Portal as a guest.
MeetInTheCloudTerminal: 23 - MeetInTheCloud (UI: Global Payments V2) payment via terminal.
MeetInTheCloudPaymentPortal: 25 - MeetInTheCloud payment taken through the Payment Portal.
MeetInTheCloudPaymentPortalGuest: 26 - MeetInTheCloud payment taken through the Payment Portal as a guest.
17 ClinicNum bigint(20) FK to clinic.ClinicNum. The clinic where this card was added. Each clinic could have a different AuthKey and different AuthKeys could generate overlapping tokens.
18 ExcludeProcSync tinyint(4) Only used at OD HQ. Excludes credit card from syncing default procedures. False by default.
19 PaySimpleToken varchar(255) Token for PaySimple. PaySimple returns a token, when requested by the merchant's system, to be used instead of actual credit card number in subsequent transactions.
20 ChargeFrequency varchar(150) Stores how often the credit card gets charged for a recurring charge. The card can either be charged fixed days of the month or fixed week days of the month. Some examples of the former are "4th day of the month" or "1st and 16th day of the month". Some examples of the latter are "Third Monday of the month" or "Every other Friday of the month". If the first character of this column is a 0, then the frequency is fixed day of the month. If the first character is 1, the frequency is fixed week days of the month. The next character is a pipe for separation. If fixed day of the month, the remaining characters will be a comma-separated list of days of the month. If fixed week days, the next character will represent type of frequency (Every, EveryOther, First, etc.). Then a pipe follows. The last character will be the day of the week (0 for Sunday, 1 for Monday, etc.).
21 CanChargeWhenNoBal tinyint(4) Set true to indicate the Credit Card in question can be charged when the Patient account balance is $0, which corresponds directly to a preference called "RecurringChargesAllowedWhenPatNoBal" (true by default) which must be turned on via Module>Account>Misc to be available.
22 PaymentType bigint(20) FK to definition.DefNum. Payment type override for recurring charges.
23 IsRecurringActive tinyint(4) True by default. Set to false to inactivate this specific credit card from the recurring charges (both manual and via the service).
24 Nickname varchar(255) Nickname or alias. Currently only used in Web API for PaySimple.
25 CardHolderName varchar(255) The card holder name associated with the credit card. Not used by all merchant services.

custrefentry
Only used by OD HQ and distributors. Customers providing references to other customers.
Order Name Type Summary
0 CustRefEntryNum bigint(20) Primary key.
1 PatNumCust bigint(20) FK to patient.PatNum. The customer seeking a reference.
2 PatNumRef bigint(20) FK to patient.PatNum. The chosen reference. This is the customer who was given as a reference to the new customer.
3 DateEntry date Date the reference was chosen.
4 Note varchar(255) Notes specific to this particular reference entry, mostly for a special reference situation.

custreference
Only for OD HQ and distributors. One to one relation with the patient table representing each customer as a reference (like a referral).
Order Name Type Summary
0 CustReferenceNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 DateMostRecent date Most recent date the reference was used.Updated when creating a new CustRefEntry. Can be manually updated.
3 Note varchar(255) Notes specific to this customer as a reference.
4 IsBadRef tinyint(4) Set to true if this customer was a bad reference.

cvx
Vaccines administered. Other tables generally use the CvxCode as their foreign key.
Order Name Type Summary
0 CvxNum bigint(20) Primary key. .
1 CvxCode varchar(255) Cvx code. Not allowed to edit this column once saved in the database.
2 Description varchar(255) Short Description provided by Cvx documentation.
3 IsActive varchar(255) Not currently in use. Might not need this column. If we use this in the future, then convert from string to bool. 1 if the code is an active code, 0 if the code is inactive.

dashboardar
A table just used by the graphic reports to store historical AR because it never changes and it takes too long (1 second for each of the 12 dates) to compute on the fly. One entry per month going back at least 12 months. This table gets automatically filled the first time that the graphic reports window is used. The most recent month also gets added by using the graphic reports.
Order Name Type Summary
0 DashboardARNum bigint(20) Primary key.
1 DateCalc date This date will always be the last day of a month.
2 BalTotal double Bal_0_30+Bal_31_60+Bal_61_90+BalOver90 for all patients. This should also exactly equal BalTotal for all patients with positive amounts. Negative BalTotals are credits, not A/R.
3 InsEst double Sum of all InsEst for all patients for the month.

dashboardcell
Each DashboardLayout can include multiple DashboardCell(s). DashboardLayout and DashboardCell work in conjunction to form the dashboard layout.
Order Name Type Summary
0 DashboardCellNum bigint(20) PK.
1 DashboardLayoutNum bigint(20) FK to dashboardlayout.DashboardLayoutNum. This foreign key object will include the 0 based DashboardTabOrder, which is used to place this DashboardCell.
2 CellRow int(11) The row to which this DashboardCell belongs. 0 based.
3 CellColumn int(11) The column to which this DashboardCell belongs. 0 based.
4 CellType varchar(255) Enum:DashboardCellType Determines what type of control will be docked in this cell.
NotDefined:
ProductionGraph:
IncomeGraph:
AccountsReceivableGraph:
NewPatientsGraph:
BrokenApptGraph:
HQMtMessage: HQ only. Will not be saved to DashboardCell table.
HQBillingInboundOutbound: HQ only. Will not be saved to DashboardCell table.
HQBillingUsageAccess: HQ only. Will not be saved to DashboardCell table.
HQMoMessage: HQ only. Will not be saved to DashboardCell table.
HQPhone: HQ only. Will not be saved to DashboardCell table.
HQSignups: HQ only. Will not be saved to DashboardCell table.
5 CellSettings text Typically a serialized string that the control will accept in order to change view attributes.
6 LastQueryTime datetime Not used yet. Timestamp at which the cached data behind this cell was last retrieved.
7 LastQueryData text Not used yet. Cached data behind this cell.
8 RefreshRateSeconds int(11) Not used yet. Frequency at which the cached data behind this cell should be retrieved.

dashboardlayout
Each tab in the dashboard has a corresponding DashboardLayout. DashboardLayout and DashboardCell work in conjunction to form the dashboard layout.
Order Name Type Summary
0 DashboardLayoutNum bigint(20) PK.
1 UserNum bigint(20) FK to userod.UserNum.
2 UserGroupNum bigint(20) FK to usergroup.UserGroupNum.
3 DashboardTabName varchar(255) Text shown in the tab header.
4 DashboardTabOrder int(11) Orders the tabs in the tab control. 0 based.
5 DashboardRows int(11) Number of rows for this DashboardLayout. Min value of 1.
6 DashboardColumns int(11) Number of columns for this DashboardLayout. Min value of 1.
7 DashboardGroupName varchar(255) Groups multiple DashboardLayout(s) together.

databasemaintenance
This is a list of DBM actions that can run.
Order Name Type Summary
0 DatabaseMaintenanceNum bigint(20) Primary key.
1 MethodName varchar(255) The name of the databasemaintenance name.
2 IsHidden tinyint(4) Set to true to indicate that the method is hidden.
3 IsOld tinyint(4) Set to true to indicate that the method is old.
4 DateLastRun datetime Updates the date and time they run the method.

dbmlog
Order Name Type Summary
0 DbmLogNum bigint(20) Primary key.
1 UserNum bigint(20) FK to userod.UserNum. This is the assigned user dbm log.
2 FKey bigint(20) FK to appointment.AptNum AND FKeyType IN(1,23), FK to autocode.AutoCodeNum AND FKeyType=2, FK to automation.AutomationNum AND FKeyType=3, FK to benefit.BenefitNum AND FKeyType=4, FK to carrier.CarrierNum AND FKeyType=5, FK to claim.ClaimNum AND FKeyType=6, FK to claimpayment.ClaimPaymentNum AND FKeyType=7, FK to claimproc.ClaimProcNum AND FKeyType=8, FK to clinic.ClinicNum AND FKeyType=9, FK to creditcard.CreditCardNum AND FKeyType=10, FK to discountplansub.DiscountSubNum AND FKeyType=11, FK to etrans.EtransNum AND FKeyType=12, FK to fee.FeeNum AND FKeyType=13, FK to feesched.FeeSchedNum AND FKeyType=14, FK to insplan.PlanNum AND FKeyType=15, FK to inssub.InsSubNum AND FKeyType=16, FK to patplan.PatPlanNum AND FKeyType=17, FK to patient.PatNum AND FKeyType=18, FK to payment.PayNum AND FKeyType=19, FK to payplan.PayPlanNum AND FKeyType=20, FK to payplancharge.PayPlanChargeNum AND FKeyType=21, FK to paysplit.SplitNum AND FKeyType=22, FK to procedurelog.ProcNum AND FKeyType=24, FK to securitylog.SecurityLogNum AND FKeyType=25, FK to histappointment.HistApptNum AND FKeyType=26, FK to procedurecode.CodeNum AND FKeyType=27, FK to toothinitial.ToothInitialNum AND FKeyType=28, FK to provider.ProvNum AND FKeyType=29.
3 FKeyType tinyint(4) Enum:DbmLogFKeyType The type of log.
None: This means FKey should be 0.
Appointment: This means FKey will link to AptNum.
AutoCode: This means FKey will link to AutoCodeNum.
Automation: This means FKey will link to AutomationNum.
Benefit: This means FKey will link to BenefitNum.
Carrier: This means FKey will link to CarrierNum.
Claim: This means FKey will link to ClaimNum.
ClaimPayment: This means FKey will link to ClaimPaymentNum.
ClaimProc: This means FKey will link to ClaimProcNum.
Clinic: This means FKey will link to ClinicNum.
CreditCard: This means FKey will link to CreditCardNum.
DiscountPlanSub: This means FKey will link to DiscountSubNum.
Etrans: This means FKey will link to EtransNum.
Fee: This means FKey will link to FeeNum.
FeeSched: This means FKey will link to FeeSchedNum.
InsPlan: This means FKey will link to PlanNum.
InsSub: This means FKey will link to InsSubNum.
PatPlan: This means FKey will link to PatPlanNum.
Patient: This means FKey will link to PatNum.
Payment: This means FKey will link to PayNum.
PayPlan: This means FKey will link to PayPlanNum.
PayPlanCharge: This means FKey will link to PayPlanChargeNum.
PaySplit: This means FKey will link to SplitNum.
PlannedAppt: This means FKey will link to PlannedApptNum.
Procedure: This means FKey will link to ProcNum.
Securitylog: This means FKey will link to SecurityLogNum.
HistAppointment: This means FKey will link to HistApptNum.
ProcedureCode: This means FKey will link to CodeNum.
ToothInitial: This means FKey will link to ToothInitialNum
Provider: This means FKey will link to ProvNum
4 ActionType tinyint(4) Enum:DbmLogActionType The type of verification.
Insert: 0. This means the action done was an Insert.
Update: 1. This means the action done was an Update
Delete: 2. This means the action done was a Delete
5 DateTimeEntry datetime DateTime the row was added.
6 MethodName varchar(255) The name of the DBM that created this row.
7 LogText text The description of exactly what was done.

definition
The info in the definition table is used by other tables extensively. Almost every table in the database links to definition. Almost all links to this table will be to a DefNum. Using the DefNum, you can find any of the other fields of interest, usually the ItemName. Make sure to look at the Defs class to see how the definitions are used. Loaded into memory ahead of time for speed.
Order Name Type Summary
0 DefNum bigint(20) Primary key.
1 Category tinyint Enum:DefCat
AccountColors: 0- Colors to display in Account module.
AdjTypes: 1- Adjustment types.
ApptConfirmed: 2- Appointment confirmed types.
ApptProcsQuickAdd: 3- Procedure quick add list for appointments. Example: D1023,D1024. Single tooth numbers are allowed, example D1151#8,D0220#15. This is really only useful for PAs. Tooth number is stored in user's nomenclature, not American numbering.
BillingTypes: 4- Billing types.
ClaimFormats: 5- Not used.
DunningMessages: 6- Not used.
FeeSchedNamesOld: 7- Not used.
MedicalNotes: 8- Not used.
OperatoriesOld: 9- Not used.
PaymentTypes: 10- Payment types.
ProcCodeCats: 11- Procedure code categories.
ProgNoteColors: 12- Progress note colors.
RecallUnschedStatus: 13- Statuses for recall, reactivation, unscheduled, and next appointments.
ServiceNotes: 14- Not used.
DiscountTypes: 15- Not used.
Diagnosis: 16- Diagnosis types.
AppointmentColors: 17- Colors to display in the Appointments module.
ImageCats: 18- Image categories. ItemValue can be one or more of the following, no delimiters. X = Show in Chart Module, M=Show Thumbnails, F = Show in Patient Forms, L = Show in Patient Portal, P = Show in Patient Pictures, S = Statements, T = Graphical Tooth Charts, R = Treatment Plans, E = Expanded, A = Payment Plans, C = Claim Attachments, B = Lab Cases, U = Autosave Forms, Y = Task Attachments, N = Claim Responses.
ApptPhoneNotes: 19- Not used.
TxPriorities: 20- Treatment plan priority names.
MiscColors: 21- Miscellaneous color options. See enum DefCatMisColors.
ChartGraphicColors: 22- Colors for the graphical tooth chart.
ContactCategories: 23- Categories for the Contact list.
LetterMergeCats: 24- Categories for Letter Merge.
BlockoutTypes: 25- Types of Schedule Blockouts.
ProcButtonCats: 26- Categories of procedure buttons in Chart module
CommLogTypes: 27- Types of commlog entries.
SupplyCats: 28- Categories of Supplies
PaySplitUnearnedType: 29- Types of unearned income used in accrual accounting.
Prognosis: 30- Prognosis types.
ClaimCustomTracking: 31- Custom Tracking, statuses such as 'review', 'hold', 'riskmanage', etc.
InsurancePaymentType: 32- PayType for claims such as 'Check', 'EFT', etc.
TaskPriorities: 33- Categories of priorities for tasks.
FeeColors: 34- Categories for fee override colors.
ProviderSpecialties: 35- Provider specialties. General, Hygienist, Pediatric, Primary Care Physician, etc.
ClaimPaymentTracking: 36- Reason why a claim proc was rejected. This must be set on each individual claim proc.
AccountQuickCharge: 37- Procedure quick charge list for patient accounts.
InsuranceVerificationStatus: 38- Insurance verification status such as 'Verified', 'Unverified', 'Pending Verification'.
Regions: 39- Regions that clinics can be assigned to.
ClaimPaymentGroups: 40- ClaimPayment Payment Groups.
AutoNoteCats: 41 - Auto Note Categories. Used to categorize autonotes into custom categories.
WebSchedNewPatApptTypes: 42 - Web Sched New Patient Appointment Types. Displays in Web Sched. Each appointment can be assigned one appointment.AppointmentTypeNum. Multiple AppointmentTypes are linked to this definition through the DefLink table, where deflink.DefNum=definition.DefNum, deflink.LinkType=2, and deflink.FKey=appointmenttype.AppointmentTypeNum.
ClaimErrorCode: 43 - Custom Claim Status Error Code.
ClinicSpecialty: 44 - Specialties that clinics perform. Useful for separating patient clones across clinics.
JobPriorities: 45 - HQ Only job priorities.
CarrierGroupNames: 46 - Carrier Group Name.
PayPlanCategories: 47 - PayPlanCategory
AutoDeposit: 48 - Associates an insurance payment to an account number. Currently only used with "Auto Deposits".
InsuranceFilingCodeGroup: 49 - Code Group used for insurance filing.
TimeCardAdjTypes: 50 - Time card adjustment types. Currently for PTO, but in future could be used for other types as well if we implement the Usage def field.
WebSchedExistingApptTypes: 51 - Web Sched Existing Appt Types. Each appointment can be assigned one appointment.AppointmentTypeNum. Multiple AppointmentTypes are linked to this definition through the DefLink table, where deflink.DefNum=definition.DefNum, deflink.LinkType=2, and deflink.FKey=appointmenttype.AppointmentTypeNum.
CertificationCategories: 52 - Categories for the Certifications feature.
EClipboardImageCapture: 53 - Images the office prompts the patient to submit when checking in via eClipboard
TaskCategories: 54 - Task categories.
OperatoryTypes: 55 - Operatory Types. This field is only informational. The value isn't used for functionality.
EmployeeTitles: 56 - Employee Job Titles. Only used to assign employees job titles for display.
CommLogReferralTypes: 57 - Commlog Referral Types. Similar to Commlog Types, but are used for Referral Commlogs.
2 ItemOrder smallint Order that each item shows on various lists. 0-indexed.
3 ItemName varchar(255) Each category is a little different. This field is usually the common name of the item.
4 ItemValue varchar(255) This field can be used to store extra info about the item. Used extensively by ImageCategories to store single letter codes.
5 ItemColor int(11) Some categories include a color option.
6 IsHidden tinyint If hidden, the item will not show on any list, but can still be referenced.
7 Supp varchar(255) Some categories need more columns. We would normally use a dedicated table or rework the schema, but that would break many existing queries. It would also break API, warehousing, etc. We only use this Supp field strategy when expanding existing categories. Jordan will always be very involved. Only used currently for AdjTypes as the default percent setting Adjustments in FormAdjMulti and FormAdjust. Example: "90.50". Allow 0 through 1000. Empty string in the db means no default percentage.

deflink
This table holds rows for linking a definition object to another object. Allows for a many-to-many relationship between definitions and other object types.
Order Name Type Summary
0 DefLinkNum bigint(20) Primary key.
1 DefNum bigint(20) FK to definition.DefNum. The definition that is linked to
2 FKey bigint(20) FK to clinic.ClinicNum AND LinkType=0, FK to patient.PatNum AND LinkType=1, FK to appointmenttype.AppointmentTypeNum AND LinkType=2, FK to operatory.OperatoryNum AND LinkType=3, FK to definition.DefNum AND LinkType=4, FK to recalltype.RecallTypeNum AND LinkType=5, FK to userod.UserNum AND LinkType=6.
3 LinkType tinyint(4) Enum:DefLinkType The type of link.
ClinicSpecialty: 0. Specialties for a clinic. For this type, FKey is clinic.ClinicNum.
Patient: 1. One definition of Category DefCat.ClinicSpecialty is linked to one patient.PatNum. This is how specialties are assigned to patient clones.
AppointmentType: 2. One definition can be linked to multiple appointment types. See definition.Category: DefCat.WebSchedNewPatApptTypes and WebSchedExistingApptTypes. For this type, FKey is appointmenttype.AppointmentTypeNum.
Operatory: 3. One definition can be linked to multiple operatories where definition.Category=(DefCat.WebSchedNewPatApptTypes(42) or WebSchedExistingApptTypes(51)), deflink.DefNum=definition.DefNum, deflink.LinkType=3, and deflink.FKey=operatory.OperatoryNum.
BlockoutType: 4. The definition is linked to another definition that is in the BlockoutType category. Used by WebSched for restricting available time slots. For this type, FKey is definition.DefNum.
RecallType: 5. The definition is linked to a recall type. Used by WebSched for identifying available time slots for recalls. For this type, FKey is recalltype.RecallTypeNum.
User: 6. HQ Only. FKey links DefNum to userod.UserNum. Used to associate Task Category definitions with users. DefNum=Task Category DefNum. FKey=Userod.UserNum.

deletedobj
An archived snapshot of an object. Certain objects will generate these upon being deleted. Not allowed to use random primary keys with this table because PK is used to supplement dateT to get new rows.
Order Name Type Summary
0 DeletedObjNum bigint(20) Primary key.
1 DateTEntry datetime The DateTime that this deletedobj was added to the Db. Uses server time.
2 ObjType tinyint(4) Enum:EnumDeletedObjType
None: 0- Not used
Schedules: 1- includes blockouts.
LabCases: 2-
MedicationPats: 3-
PatFields: 4-
ToothInitials: 5-
3 ObjSerialized mediumtext A serialized snapshot of the original object at time of deletion. mediumtext 16mb max. Serialized using our custom SerializerCompact. Example: 258|2022-07-21|08:00:00|12:00:00|1|2|0|Example Note|0|15|2018-11-15 11:50:15|25|5~

deletedobject
When some objects are deleted, we sometimes need a way to track them for synching purposes. Other objects already have fields for IsHidden or PatStatus which track deletions just fine. Those types of objects will not use this table.
Order Name Type Summary
0 DeletedObjectNum bigint(20) Primary key.
1 ObjectNum bigint(20) Foreign key to a number of different tables, depending on which type it is.
2 ObjectType int(11) Enum:DeletedObjectType
Appointment: 0
ScheduleProv: 1 - A schedule object. Only provider schedules are tracked for deletion.
RecallPatNum: 2 - When a recall row is deleted, this records the PatNum for which it was deleted.
RxPat: Deprecated
LabPanel: Deprecated
LabResult: Deprecated
DrugUnit: Deprecated
Medication: Deprecated
MedicationPat: Deprecated
Allergy: Deprecated
AllergyDef: Deprecated
Disease: Deprecated
DiseaseDef: Deprecated
ICD9: Deprecated
Provider: Deprecated
Pharmacy: Deprecated
Statement: Deprecated
Document: Deprecated
Recall: Deprecated
3 DateTStamp timestamp Updated any time the row is altered in any way.

deposit
A deposit slip. Contains multiple insurance and patient checks.
Order Name Type Summary
0 DepositNum bigint(20) Primary key.
1 DateDeposit date The date of the deposit.
2 BankAccountInfo text User editable. Usually includes name on the account and account number. Possibly the bank name as well.
3 Amount double Total amount of the deposit. User not allowed to directly edit.
4 Memo varchar(255) Short description to help identify the deposit.
5 Batch varchar(25) Holds the batch number for the deposit. Does not have a default value. 25 character limit.
6 DepositAccountNum bigint(20) FK to definition.DefNum. Links this deposit to a definition of type AutoDeposit. When set to a valid value, it indicates that this deposit is an "auto deposit".
7 IsSentToQuickBooksOnline tinyint(4) Bool that indicates of a deposit has already been sent via QuickBooks Online. Defaults to false. Only true when successfully sent from FormDepositEdit.cs

dictcustom
Spell check custom dictionary, shared by the whole office.
Order Name Type Summary
0 DictCustomNum bigint(20) Primary key.
1 WordText varchar(255) No space or punctuation allowed.

discountplan
Discount plans will automatically create adjustments when procedures are completed. The fee schedule associated to the discount plan will be used with the UCR fee schedule in order to determine the "discount". The associated DefNum will be the adjustment type that is used so that users can quickly query adjustments to see discount plan usage.
Order Name Type Summary
0 DiscountPlanNum bigint(20) Primary key
1 Description varchar(255) Description of this discount plan
2 FeeSchedNum bigint(20) FK to feesched.FeeSchedNum
3 DefNum bigint(20) FK to definition.DefNum. Represents the adjustment type of the feesched plan.
4 IsHidden tinyint(4) Set true to hide in Discount Plan list.
5 PlanNote text Note for this plan.
6 ExamFreqLimit int(11) Number of Procedures allowed for a discount plans Exam category.
7 XrayFreqLimit int(11) Number of Procedures allowed for a discount plans X-Ray category.
8 ProphyFreqLimit int(11) Number of Procedures allowed for a discount plans Prophylaxis category.
9 FluorideFreqLimit int(11) Number of Procedures allowed for a discount plans Fluoride category.
10 PerioFreqLimit int(11) Number of Procedures allowed for a discount plans Periodontal category.
11 LimitedExamFreqLimit int(11) Number of Procedures allowed for a discount plans Limited Exam category.
12 PAFreqLimit int(11) Number of Procedures allowed for a discount plans Periapical X-Ray category.
13 AnnualMax double Annual discount maximum for frequency limitations. -1 indicates blank or no annual max limitation.

discountplansub
Table used to determine discount plan subscribers, as well as the effective date range of a discount plan.
Order Name Type Summary
0 DiscountSubNum bigint(20) PK
1 DiscountPlanNum bigint(20) FK to discountplan.DiscountPlanNum, represents which plan the patient is subscribed to.
2 PatNum bigint(20) FK to patient.PatNum which represents the subscriber
3 DateEffective date When the discount plan should start to impact procedure fees.
4 DateTerm date When the discount plan should no longer impact procedure fees.
5 SubNote text Note for this sub.

disease
Each row is one disease that one patient has. Now called a problem in the UI. Must have a DiseaseDefNum.
Order Name Type Summary
0 DiseaseNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum
2 DiseaseDefNum bigint(20) FK to diseasedef.DiseaseDefNum. The disease description is in that table.
3 PatNote text Any note about this disease that is specific to this patient. When importing from eForms, this is where the disease name goes for "Other" when there's no match.
4 DateTStamp timestamp The last date and time this row was altered. Not user editable.
5 ProbStatus tinyint(4) Enum:ProblemStatus Active=0, Resolved=1, Inactive=2.
Active: 0
Resolved: 1
Inactive: 2
6 DateStart date Date that the disease was diagnosed. Can be minval if unknown.
7 DateStop date Date that the disease was set resolved or inactive. Will be minval if still active. ProbStatus should be used to determine if it is active or not.
8 SnomedProblemType varchar(255) FK to snomed.SnomedCode. Used in EHR CCD export/import only. Must be one of the following SNOMED codes: Problem/Concern (55607006 or blank), Finding (404684003), Complaint (409586006), Dignosis (282291009), Condition (64572001), FunctionalLimitation (248536006), Symptom (418799008).
9 FunctionStatus tinyint(4) Enum:FunctionalStatus Used to export EHR CCD functional status and/or cognitive status information only.
Problem: 0 - Default value. If not using EHR, then each diseasedef will use this value.
CognitiveResult: 1 - This clinical statement contains details of an evaluation or assessment of a patient’s cognitive status. The evaluation may include assessment of a patient's mood, memory, and ability to make decisions. The statement will include, if present, supporting caregivers, non-medical devices, and the time period for which the evaluation and assessment were performed.
CognitiveProblem: 2 - A cognitive status problem observation is a clinical statement that describes a patient's cognitive condition, findings or symptoms. Examples of cognitive problem observations are inability to recall, amnesia, dementia, and aggressive behavior. A cognitive problem observation is a finding or medical condition. This is different from a cognitive result observation, which is a response to a question that provides insight to the patient's cognitive status. It reflects findings that provide information about a medical condition, while a result observation reflects responses to questions in a cognitive test or those that provide information about a person's judgement, comprehension ability, and response speed.
FunctionalResult: 3 - This clinical statement represents details of an evaluation or assessment of a patient’s functional status. The evaluation may include assessment of a patient's language, vision, hearing, activities of daily living, behavior, general function, mobility and self-care status. The statement will include, if present, supporting caregivers, non-medical devices, and the time period for which the evaluation and assessment were performed.
FunctionalProblem: 4 - A functional status problem observation is a clinical statement that represents a patient’s functional perfomance and ability.

diseasedef
A list of diseases that can be assigned to patients. Cannot be deleted if in use by any patients.
Order Name Type Summary
0 DiseaseDefNum bigint(20) Primary key.
1 DiseaseName varchar(255) .
2 ItemOrder smallint 0-based. The order that the diseases will show in various lists.
3 IsHidden tinyint If hidden, the disease will still show on any patient that it was previously attached to, but it will not be available for future patients.
4 DateTStamp timestamp The last date and time this row was altered. Not user editable.
5 ICD9Code varchar(255) FK to icd9.Icd9Code. Example: 250.00 for diabetes. User not allowed to enter any string anymore, must pick one from the Icd9Code table. Some may exist in the databases without linking to a valid Icd9Code table entry if the ConvertDatabase could not find the user typed string in the list of valid Icd9Codes.
6 SnomedCode varchar(255) FK to snomed.SnomedCode. Example: 230572002 for diabetic neuropathy. User not allowed to enter any string anymore, must pick from the Snomed table. Some may exist in the databases without linking to a valid Snomed table entry if the ConvertDatabase could find the user typed string in the list of valid SnomedCodes.
7 Icd10Code varchar(255) FK to icd10.Icd10Code. Example: E10.1 for 'Type 1 diabetes mellitus with ketoacidosis'. User not allowed to enter any string anymore, must pick one from the Icd10Code table.

displayfield
Allows customization of which fields display in various lists and grids. For now, the only grid is ProgressNotes. Will also eventually let users set column widths and translate titles. For now, the selections are the same for all computers.
Order Name Type Summary
0 DisplayFieldNum bigint(20) Primary key.
1 InternalName varchar(255) This is the internal name that OD uses to identify the field within this category. This will be the default description if the user doesn't specify an alternate in Description. For Ortho chart, this column will be "Signature", "Provider", or blank. For SuperFamilyGridCols, if this is a patfield column, then this will be blank.
2 ItemOrder int(11) Order to display in the grid or list. Every entry must have a unique itemorder.
3 Description varchar(255) Optional alternate description to display for field. Can be in another language. For Ortho, this is the 'key', since InternalName is blank sometimes. For SuperFamilyGridCols, if this is a patfield column, then this will be the name of the patfield.FieldName.
4 ColumnWidth int(11) For grid columns, this lets user override the column width. Especially useful for foreign languages.
5 Category int(11) Enum:DisplayFieldCategory If category is 0, then this is attached to a ChartView.
None: 0- Badly named. This should be called Progress Notes.
PatientSelect: 1
PatientInformation: 2- Family module. Entries with this category represent rows, not columns and so we do not show the Width in the grid or allow the user to edit it.
AccountModule: 3
RecallList: 4
ChartPatientInformation: 5-Patient information grid on the Chart. Entries with this category represent rows, not columns and so we do not show the Width in the grid or allow the user to edit it.
ProcedureGroupNote: 6
TreatmentPlanModule: 7
OrthoChart: 8
AppointmentBubble: 9-This is only used in the bubble shown in the appointment module. The column labels are hard-coded there, so we don't show either a field width or a description when editing these display fields.
AccountPatientInformation: 10- Account module patient information. Entries with this category represent rows, not columns and so we do not show the Width in the grid or allow the user to edit it.
StatementMainGrid: 11
FamilyRecallGrid: 12
AppointmentEdit: 13
PlannedAppointmentEdit: 14
OutstandingInsReport: 15
CEMTSearchPatients: 16
ArManagerSentGrid: 17 - A/R Manager Sent Grid
ArManagerUnsentGrid: 18 - A/R Manager Unsent Grid
ArManagerExcludedGrid: 19 - A/R Manager Excluded Grid
LimitedCustomStatement: 20 - Statement Limited Custom SuperFamily
SuperFamilyGridCols: 21 - SuperFamily Grid
AccountModuleServiceDateView: 22
ERA: 23 - Electronic Remittance Advice (ERA).
6 ChartViewNum bigint(20) FK to chartview.ChartViewNum. 0 if attached to a category.
7 PickList text Newline delimited string which contains the selectable options in combo box dropdowns. Specifically for the Ortho chart.
8 DescriptionOverride varchar(255) Only used in Ortho and SuperFamilyGridCols (PatField). Ortho chart display fields utilize the InternalName field for Signature and Provider indicators, this field is here to override description. Some users want to use different fields but use the same description for multiple tabs. Example: The display field of WeightWeekly shows as "Weight" and in another tab the field for WeightMonthly can also show as "Weight".

displayreport
One row per standard report.
Order Name Type Summary
0 DisplayReportNum bigint(20) Primary key.
1 InternalName varchar(255) .
2 ItemOrder int(11) Within each Category, 0-based.
3 Description varchar(255) .
4 Category tinyint(4) Enum:DisplayReportCategory 0 - ProdInc; 1 - Daily, 2 - Monthly, 3 - Lists, 4 - PublicHealth, 5 - ArizonaPrimaryCare.
ProdInc: 0 - Production and Income reports
Daily: 1 - Daily reports
Monthly: 2 - Monthly reports
Lists: 3 - List reports
PublicHealth: 4 - Public Health reports
ArizonaPrimaryCare: 5 - Arizona Primary care reports
5 IsHidden tinyint(4) .
6 IsVisibleInSubMenu tinyint(4) When true and IsHidden is false, will show this report in a pop out sub menu.

dispsupply
A dental supply or office supply item that has been dispensed.
Order Name Type Summary
0 DispSupplyNum bigint(20) Primary key.
1 SupplyNum bigint(20) FK to supply.SupplyNum
2 ProvNum bigint(20) FK to provider.ProvNum
3 DateDispensed date
4 DispQuantity float Quantity given out.
5 Note text Notes on the dispensed supply.

document
Represents a single document in the imaging module.
Order Name Type Summary
0 DocNum bigint(20) Primary key.
1 Description varchar(255) Description of the document.
2 DateCreated datetime Date and time. Can be edited by user, but not forward dated without that permission.
3 DocCategory bigint(20) FK to definition.DefNum. Categories for documents. 0 for ChartLetters.
4 PatNum bigint(20) FK to patient.PatNum. The document will be located in the patient folder of this patient.
5 FileName varchar(255) The name of the file. Does not include any directory info.
6 ImgType tinyint Enum:ImageType Document, Radiograph, Photo, File, Attachment.
Document: 0- Includes scanned documents and screenshots.
Radiograph: 1
Photo: 2
File: 3- For instance a Word document or a spreadsheet. Not an image.
Attachment: 4- Used for Claim Attachments. Preserves original resolution.
7 IsFlipped tinyint True if flipped horizontally. A vertical flip would be stored as a horizontal flip plus a 180 rotation.
8 DegreesRotated float Any positive or negative, including decimals.
9 ToothNumbers varchar(255) An optional list of tooth numbers. In Db, rigorously formatted as American numbers, and separated by commas. For display, uses hyphens for sequences. Very likely supports international tooth numbers, but not tested for that.
10 Note mediumtext MediumText, so max length=16M for API upload base64.
11 SigIsTopaz tinyint True if the signature is in Topaz format rather than OD format.
12 Signature text The encrypted and bound signature in base64 format. The signature is bound to the byte sequence of the original image. Signature for ChartLetter is also bound to bytes of Word doc, but it might be a slightly different algorithm than non-ChartLetters.
13 CropX int(11) Crop rectangle X. May be negative. First, image is rotated as needed around center. Then, clipped to this crop rectangle. X-Y is center of the crop rectangle relative to center of the image, and where positive is to the upper right of the center of the image.
14 CropY int(11) Crop rectangle Y. May be negative. First, image is rotated as needed around center. Then, clipped to this crop rectangle. X-Y is center of the crop rectangle relative to center of the image, and where positive is to the upper right of the center of the image.
15 CropW int(11) Crop rectangle Width in original image pixel scale. May be zero if no cropping. May be greater than original image width.
16 CropH int(11) Crop rectangle Height in original image pixel scale. May be zero if no cropping. May be greater than original image height.
17 WindowingMin int(11) The lower value of the "windowing" (contrast/brightness) for radiographs. Default is 0. Max is 255.
18 WindowingMax int(11) The upper value of the "windowing" (contrast/brightness) for radiographs. Default is 0(no windowing). Max is 255. For 12 and 16 bit images, we still use a max of 255 in the db, but we convert back and forth to the equivalent position for that range. For 12 bit max of 4095, multiply by 16. For 16 bit, we are using the 12 most significant bits, so we multiply by 256.
19 MountItemNum bigint(20) FK to mountitem.MountItemNum. If set, then this image will only show on a mount, not in the main tree. If set to 0, then no mount item is associated with this document.
20 DateTStamp timestamp Date/time last altered.
21 RawBase64 mediumtext The raw file data encoded as base64. Only used if there is no AtoZ folder.
22 Thumbnail text Thumbnail encoded as base64. Only present if not using AtoZ folder. 100x100 pixels, jpg, takes around 5.5k.
23 ExternalGUID varchar(255) The primary key associated to a document hosted on an external source.
24 ExternalSource varchar(255) Enum:ExternalSourceType None, Dropbox, XVWeb. The source for the corresponding ExternalGUID.
None: This is a document that is not stored in an external source. All documents stored by Open Dental will be this type.
Dropbox: This document can be found in a corresponding Dropbox account.
XVWeb: This document is saved from a download from XVWeb program link.
25 ProvNum bigint(20) FK to provider.ProvNum. Optional. Used for radiographs and ChartLetters.
26 IsCropOld tinyint Set to true as part of conversion to 21.4. Set back to false once the crop is converted to the new scheme. It would take too long to do this conversion in the normal script because it involves loading each image to obtain width and height. So this is a lazy conversion.
27 OcrResponseData text Stores a JSON serialized OcrInsScanResponse object. The type of this object is defined by the OcrCaptureType.
28 ImageCaptureType tinyint(4) Enum:EnumOcrCaptureType 0=Miscellaneous, 1=PrimaryInsFront, 2=PrimaryInsBack, 3=SecondaryInsFront, 4=SecondaryInsBack. Only used when patient scans their insurance card from eClipboard.
Miscellaneous: 0- Catch-All type for imageCaptures without unique behavior
PrimaryInsFront: 1
PrimaryInsBack: 2
SecondaryInsFront: 3
SecondaryInsBack: 4
29 PrintHeading tinyint(4) Set true by default for radiographs and tooth charts. When set to true, it will print additional heading text including patient name, DOB, and today's date.
30 ChartLetterStatus tinyint(4) If not 0, this document is a Chart Letter. It will only show in the Chart Module and not in the Imaging Module. The document will be a Word document based on a template. The intent is for it to be used for very complex chart notes. It could then be sent to the referring dentist, for example. DocCategory will be 0 for these which naturally hides them in Imaging module. Like a procnote, a chart letter cannot actually be edited or deleted. All edits are preserved for audit trail and a copy is made for each edit.
31 UserNum bigint(20) FK to userod.UserNum. Only used when DocChartLetterStatus > 0. Tracks which user made the change.
32 ChartLetterHash varchar(255) Only used for ChartLetter. Every time a Word document is saved, we create a new document row with this hash tied to the byte sequence of that Word document. This proves that it was unaltered. The hash is 16 bytes, but we want a human-readable version. So we convert each byte to a two char hex string. So this field will always be 32 characters without any spaces or punc.

documentmisc
For storing docs/images in database. This table is for the various miscellaneous documents that are not in the normal patient subfolders.
Order Name Type Summary
0 DocMiscNum bigint(20) Primary key.
1 DateCreated date Date created.
2 FileName varchar(255) The name the file would have if it was not in the database. Does not include any directory info. DocumentMisc rows that store the contents of the UpdateFiles folder will set this column to an "item order". Due to severe limitations with sending large amounts of data all in one query we are going to store the UpdateFiles over several rows. The FileName column will store the order of which the UpdateFiles need to go back into when we try to reconstruct it.
3 DocMiscType tinyint(4) Enum:DocumentMiscType Corresponds to the same subfolder within AtoZ folder. eg. UpdateFiles
UpdateFiles: 0- There will just be zero or one row of this type. It will contain a zipped archive.
UpdateFilesSegment: 1- Entries with this doc type hold segments of the UpdateFiles RawBase64 zip contents that will be pieced back together later. Storing the entire Update Files contents into one row was exceeding MySQL max_allowed_packet limitations so this new type is required. Each row of this type will contain ~1MB of RawBase64 data.
ShareScreenExeSegment: 2- Entires of this doc type are segments of OpenDentalShareScreen.exe from our website. File names are formatted like version{guid}segment# (ex 12.11.2022.501{45e744a7-f6dd-4e55-9f9f-11d1f746eefe}13). An OpenDentalShareScreen.exe is complete when a record is present without a segment# (ex 12.11.2022.501{45e744a7-f6dd-4e55-9f9f-11d1f746eefe}).
4 RawBase64 longtext The raw file data encoded as base64.

drugmanufacturer
Manufacturer of a vaccine.
Order Name Type Summary
0 DrugManufacturerNum bigint(20) Primary key.
1 ManufacturerName varchar(255) .
2 ManufacturerCode varchar(20) An abbreviation of the manufacturer name.

drugunit
And other kinds of units. We will only prefill this list with units needed for the tests. Users would have to manually add any other units.
Order Name Type Summary
0 DrugUnitNum bigint(20) Primary key.
1 UnitIdentifier varchar(20) Example ml, capitalization not critical. Usually entered as lowercase except for L.
2 UnitText varchar(255) Example milliliter.

dunning
A message that will show on certain patient statements when printing bills. Criteria must be met in order for the dunning message to show.
Order Name Type Summary
0 DunningNum bigint(20) Primary key.
1 DunMessage text The actual dunning message that will go on the patient bill.
2 BillingType bigint(20) FK to definition.DefNum.
3 AgeAccount tinyint Program forces only 0,30,60,or 90.
4 InsIsPending tinyint Enum:YN Set Y to only show if insurance is pending.
Unknown: 0
Yes: 1
No: 2
5 MessageBold text A message that will be copied to the NoteBold field of the Statement.
6 EmailSubject varchar(255) An override for the default email subject.
7 EmailBody mediumtext An override for the default email body. Limit in db: 16M char.
8 DaysInAdvance int(11) The number of days before an account reaches AgeAccount to include this dunning message on statements. Example: If DaysInAdvance=3 and AgeAccount=90, an account that is 87 days old when bills are generated will include this message.
9 ClinicNum bigint(20) FK to clinic.ClinicNum.
10 IsSuperFamily tinyint(4) Boolean. Is true when the message is specifically created for super families.
11 EmailType tinyint(4) Enum:EmailType Determines email format for the dunning message.
Regular: 0 - This is a regular email that may contain our special wiki markup. Not converted to html.
Html: 1 - Html. Basic html email which uses the master template supplied by OD. Template includes header, styles, and the opening body tag. The user only needs to provide the body itself, which can inclcude tags that get automatically replaced.
RawHtml: 2 - More advanced html that does not include the master template. User must provide everything.

ebill
Keeps track of account details of e-statements per clinic.
Order Name Type Summary
0 EbillNum bigint(20) Primary key.
1 ClinicNum bigint(20) FK to clinic.ClinicNum. This can be 0 to indicate default/HQ.
2 ClientAcctNumber varchar(255) The account number for the e-statement client.
3 ElectUserName varchar(255) The user name for this particular account.
4 ElectPassword varchar(255) The password for this particular account.
5 PracticeAddress tinyint(4) Enum:EbillAddress
PracticePhysical: 0
PracticeBilling: 1
PracticePayTo: 2
ClinicPhysical: 3
ClinicBilling: 4
ClinicPayTo: 5
6 RemitAddress tinyint(4) Enum:EbillAddress
PracticePhysical: 0
PracticeBilling: 1
PracticePayTo: 2
ClinicPhysical: 3
ClinicBilling: 4
ClinicPayTo: 5

eclipboardimagecapture
Linker table between patients and the images they have submitted to the office via eClipboard. Lets office know when a patient last submitted a certain image. Is used in conjuction with EClipboardImageCaptureDef table to allow offices to set frequencies for how often patients should submit certain images, similar to sheets.
Order Name Type Summary
0 EClipboardImageCaptureNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 DefNum bigint(20) FK to definition.DefNum. Should match a DefNum that that is in the in 'EClipboard Images' defcat. Will be zero when IsSelfPortrait.
3 IsSelfPortrait tinyint(4) Using DefNum to identify the self portrait is unreliable as the image category that is used to store self portraits may change. Instead, set this field to true for any image capture that is a self portrait. Only for self-portraits tied to the pref 'EClipboardAllowSelfPortraitOnCheckIn', not 'eClipboard Images' defcat.
4 DateTimeUpserted datetime Records the date and time the patient took the image. If patient has submitted this eclipboard image before, then we simply update the DateUpserted field and DocNum field. We do not insert an entirely new record.
5 DocNum bigint(20) FK to document.DocNum. If a document is deleted, need to also delete any record from this table with the same DocNum.
6 OcrCaptureType tinyint(4) Enum:EnumOcrCaptureType 0=Miscellaneous, 1=PrimaryInsFront, 2=PrimaryInsBack, 3=SecondaryInsFront, 4=SecondaryInsBack
Miscellaneous: 0- Catch-All type for imageCaptures without unique behavior
PrimaryInsFront: 1
PrimaryInsBack: 2
SecondaryInsFront: 3
SecondaryInsBack: 4

eclipboardimagecapturedef
Used to set rules for how often a patient should submit an image when checking in for their appointment via eClipboard. Example: insurance card or patient portrait. This is the grid on the right in eClipboard Images window.
Order Name Type Summary
0 EClipboardImageCaptureDefNum bigint(20) Primary key.
1 DefNum bigint(20) FK to definition.DefNum. Should match a DefNum that is in the in 'EClipboard Images' defcat. Will be zero when IsSelfPortrait.
2 IsSelfPortrait tinyint(4) True if the rule pertains to the patient self portrait. False if the rule is for an 'Eclipboard images' defcat definition.
3 FrequencyDays int(11) Deprecated.
4 ClinicNum bigint(20) FK to clinic.ClinicNum. Clinic the rule pertains to.
5 OcrCaptureType tinyint(4) Enum:EnumOcrCaptureType 0=Miscellaneous, 1=PrimaryInsFront, 2=PrimaryInsBack, 3=SecondaryInsFront, 4=SecondaryInsBack
Miscellaneous: 0- Catch-All type for imageCaptures without unique behavior
PrimaryInsFront: 1
PrimaryInsBack: 2
SecondaryInsFront: 3
SecondaryInsBack: 4
6 Frequency tinyint(4) Enum:EnumEClipFreq 0=Once, 1=EachTime, 2=TimeSpan. The frequency that an image capture will be submitted by patients. ResubmitInterval can only be set if Frequency is TimeSpan.
Once: 0 - Each patient will submit this form or image capture exactly one time.
EachTime: 1 - Each patient will submit this form or image capture at every visit.
TimeSpan: 2 - Each patient will submit this form or image capture based on a specified time span measured in Years and Months.
7 ResubmitInterval bigint(20) If Frequency is EnumEClipFreq.TimeSpan, this will indicate the acceptable amount of time (measured in Years and Months) that can pass since the last time the patient has submitted this image capture.

eclipboardsheetdef
Holds settings for eClipboard. Each row is attached to one SheetDef or EFormDef. This table might typically only have 3 to 4 rows in it. There could be more for different clinics. This information helps the software decide whether or not to display a sheet or eForm for a specific patient based on certain criteria. Examples include MinAge, MaxAge, Frequency, and ResubmitInterval. Forms will also end up on the eClipboard if their sheet.ShowInTerminal is non-zero or eForm.Status=ReadyForPatientFill.
Order Name Type Summary
0 EClipboardSheetDefNum bigint(20) Primary key.
1 SheetDefNum bigint(20) FK to sheetdef.SheetDefNum. Can be zero if this row is for an eForm.
2 ClinicNum bigint(20) FK to clinic.ClinicNum. 0 if no clinic or if default clinic.
3 ResubmitInterval bigint(20) If Frequency is EnumEClipFreq.TimeSpan, this will indicate the acceptable amount of time (measured in Years, Months, and Days) that can pass since the last time the patient has filled this form out. Once this has elapsed, if the EClipboardCreateMissingFormsOnCheckIn pref is turned on, this form will automatically be added to the patient forms to fill out when the patient is checked in.
4 ItemOrder int(11) The order in which the patient will be asked to fill out this form.
5 PrefillStatus tinyint(4) Determines how forms will be shown in eClipboard, blank or prefill. eForms are prefilled regardless. This flag just indicates whether to also attempt to fill non-db fields by using info from previous eForms.
6 MinAge int(11) Indicates the minimum age of the patient to be given the form to fill out. If their age is below the minimum limit, they will not be given the form to fill out. A value of -1 means ignore any age requirements.
7 MaxAge int(11) Indicates the maximum age of the patient to be given the form to fill out. If their age is over or equal to this maximum limit, they will not be given the form to fill out. A value of -1 means ignore any age requirements.
8 IgnoreSheetDefNums text Comma delimited list of sheetdef nums to ignore. This can only be set if the preFillStatus is set to Once. These sheetDefs are ignored until this sheet is filled out. For example, an office may have a sheet for new patients that is only filled out once. IgnoreSheetDefNums can be set to include the normal patient forms which will be ignored at first. Once the new patient has filled out this sheet, these other sheetDefs will no longer be ignored when the patient checks in again. Nothing like this for eForms yet.
9 PrefillStatusOverride bigint(20) For both Sheets and eForms. 0 by default. When saving a linked Def, the UI gives the user an option to update this field with the new RevID. It explains that this will cause all patients to have to fill out this form again, even though it's marked as Frequency Once. If this value is higher than the RevID of the last form the patient filled out, then the Def must have been updated in this manner and the patient will need to fill out the form again. Otherwise, it will be excluded.
10 EFormDefNum bigint(20) FK to eformdef.EFormDefNum. Can be zero if this row is for a sheet.
11 Frequency tinyint(4) Enum:EnumEClipFreq 0=Once, 1=EachTime, 2=TimeSpan. The frequency that a form will be submitted by patients. ResubmitInterval can only be set if Frequency is TimeSpan.
Once: 0 - Each patient will submit this form or image capture exactly one time.
EachTime: 1 - Each patient will submit this form or image capture at every visit.
TimeSpan: 2 - Each patient will submit this form or image capture based on a specified time span measured in Years and Months.
12 SheetDefNumsConsidered varchar(255) Comma-delimited list of sheetDefNums that will also be considered with this eForm when doing frequency calculations. This allows easy transition from sheets to eForms. The reason we allow multiple is because sheets were likely to have one form for new patients and a different form for existing patients. The code must be resilient enough to handle bad SheetNums here.

eduresource
EHR education resource. Only one of the 3 FK fields will be used at a time (DiseaseDefNum, MedicationNum, or LabResultID). The other two will be blank. Displays a clickable URL if the patient meets certain criteria.
Order Name Type Summary
0 EduResourceNum bigint(20) Primary key.
1 DiseaseDefNum bigint(20) FK to diseasedef.DiseaseDefNum. This now also handles ICD9s and Snomeds via the entry in DiseaseDef.
2 MedicationNum bigint(20) FK to medication.MedicationNum.
3 LabResultID varchar(255) FK to labresult.TestID.
4 LabResultName varchar(255) Used for display in the grid.
5 LabResultCompare varchar(255) String, example <43. Must start with < or > followed by int. Only used if FK LabResultID is used.
6 ResourceUrl varchar(255) .
7 SmokingSnoMed varchar(255) FK to ehrmeasureevent.CodeValueResult when ehrmeasureevent.EventType=EhrMeasureEventType.TobaccoUseAssessed (8).

eform
EForms is a way for patients to fill out forms. This is similar to sheets, but optimized for dynamic layout instead of fixed layout. The office sets up templates, EFormDefs, which get copied to EForms. Each EForm is linked to one patient.
Order Name Type Summary
0 EFormNum bigint(20) Primary key.
1 FormType tinyint(4) Enum:EnumEFormType 0=PatientForm, 1=MedicalHistory, 2=Consent. This doesn't actually do anything, and all fields are available for all types, but that might eventually change if more types are added.
PatientForm: 0 - Includes patient information and insurance information.
MedicalHistory: 1 -
Consent: 2 - .
2 PatNum bigint(20) FKey to patient.PatNum.
3 DateTimeShown datetime The date and time that show in the UI.
4 Description varchar(255) The title of the EForm. Copied from EFormDef.Description.
5 DateTEdited datetime The date and time when the EForm was lasted edited. Not editable by the user in the UI. Doesn't seem to actually be used for anything.
6 MaxWidth int(11) Required. Can be any value between 50 and 1000. On wide screens, this limits the width of the form. This is needed on pretty much anything other than a phone. Makes it look consistent across devices and prevents useless white space. Default 450.
7 EFormDefNum bigint(20) FKey to eformdef.EFormDefNum. Don't use this as a FK to an EFormDef normally because the original def is not guaranteed to be intact. Since it was just a template, it can easily have changed since the eForm was copied from the template. Think of it as a lightweight minimal reference just used for a few edge cases. This is only used alongside the eClipboardSheetDef table to determine if the patient has filled out that form yet. It's also used with the RevID to prefill fields that don't use a DbLink by pulling from a previous form. I think this also requires using the ReportableName for those fields.
8 Status tinyint(4) Enum:EnumEFormStatus 0-None, 1-ShowInEClipboard, 2-Filled, 3-Imported. In the None status, the office might be filling in the tooth number on a consent form. ShowInEClipboard status makes it show in eClipboard. Sheets use ShowInTerminal for this purpose. Once the patient has filled it, the status is changed to Filled. Sheets uses IsWebForm for this purpose. If a Filled eForm gets imported, then the status is changed to Imported.
None: 0 - If a form is added manually in OD proper and then filled out by the patient in OD proper, it will remain this status.
ShowInEClipboard: 1 - Forms with this status will show in eClipboard. Unlike sheets, there is no way to set order.
Filled: 2 - This status gets set from eClipboard after filling.
9 RevID int(11) Revision ID. Copied from EFormDef. See notes over there.
10 ShowLabelsBold tinyint(4) If true, then this form will show labels at 95% and slightly bold. This looks good, but some users might not want it for certain forms, so it's an option. This applies to text, date, radiobuttons, and sigBox. It does not apply to types label, checkbox, or medicationList.
11 SpaceBelowEachField int(11) The amount of space below each field. Overrides the global default and can be overridden by field.SpaceBelow. -1 indicates to use default. That way, 0 means 0 space.
12 SpaceToRightEachField int(11) The amount of space to the right of each field. Overrides the global default and can be overridden by field.SpaceToRight. -1 indicates to use default. That way, 0 means 0 space.
13 SaveImageCategory bigint(20) FK to definition.DefNum. This gets set when an EForm is created from an EFormDef. 0 for none or else it's set to an image category. User can change it. It only saves if user saves manually.
14 DateTimeSubmitted datetime The date and time the form was submitted. Automatically updated when submitted by the patient via eClipboard. Can be manually updated in the Fill eForm window when the form is completed in Open Dental proper. MinValue if the form has not been submitted.

eformdef
EForms are a way for patients to fill out forms. This is similar to sheets, but optimized for dynamic layout instead of fixed layout. The office sets up templates, EFormDefs, which get copied to EForms. Since this is a template EForm, it does not link to a patient. It can be freely changed without affecting any EForms. We also supply internal EFormDefs, which are hard coded as XML rather than being in any office database.
Order Name Type Summary
0 EFormDefNum bigint(20) Primary key.
1 FormType tinyint(4) Enum:EnumEFormType 0=PatientForm, 1=MedicalHistory, 2=Consent. This doesn't actually do anything, and all fields are available for all types, but that might eventually change if more types are added.
PatientForm: 0 - Includes patient information and insurance information.
MedicalHistory: 1 -
Consent: 2 - .
2 Description varchar(255) The title of the EFormDef. Set by the user.
3 DateTCreated datetime The date and time when the EFormDef was created. Not editable by the user in the UI.
4 IsInternalHidden tinyint(4) Deprecated.
5 MaxWidth int(11) Required. Can be any value between 50 and 1000. On wide screens, this limits the width of the form. This is needed on pretty much anything other than a phone. Makes it look consistent across devices and prevents useless white space. Default 450.
6 RevID int(11) Revision ID. Gets updated any time an eForm field is added or deleted from an eFormDef. This includes any time a translation is changed. See eClipboardSheetDef.PrefillStatusOverride for an explanation of how a new RevID can trigger patients needing to fill out a new form. This is also used to pull info from a previous form onto a new form. This can only be done when RevID of both forms is the same, and it's only for non-db fields. 0-based.
7 ShowLabelsBold tinyint(4) If true, then this form will show labels at 95% and slightly bold. This looks good, but some users might not want it for certain forms, so it's an option. This applies to text, date, radiobuttons, and sigBox. It does not apply to types label, checkbox, or medicationList.
8 SpaceBelowEachField int(11) The amount of space below each field. Overrides the global default and can be overridden by field.SpaceBelow. -1 indicates to use default. That way, 0 means 0 space.
9 SpaceToRightEachField int(11) The amount of space to the right of each field. Overrides the global default and can be overridden by field.SpaceToRight. -1 indicates to use default. That way, 0 means 0 space.
10 SaveImageCategory bigint(20) FK to definition.DefNum. There is a global setting to save forms to the image category which has ItemVal set to "U". We completely ignore that and it will only work for sheets. If this is 0, it will not save to images. Copied to EForm child.

eformfield
Individual fields for EForm. Each field generally includes a label and a value. Links to a EForm by FKey to eform.EFormNum. NOTE: If any new fields get added to this class and EFormFieldDef, make sure to add them to the methods EFormFields.FromDef and EFormFields.ToDef
Order Name Type Summary
0 EFormFieldNum bigint(20) Primary key.
1 EFormNum bigint(20) FKey to eform.EFormNum
2 PatNum bigint(20) FKey to patient.PatNum to let us quickly grab all for a patient, and then loop later.
3 FieldType tinyint(4) Enum:EFormFieldType 0-TextField, 1-Label, 2-DateField, etc.
4 DbLink varchar(255) If this field is importable, then this links to a db field. The list of available fields for each type is in EFormFieldsAvailable. Users can pick from that list which is the same list as in Sheets. In addition to those hardcoded values, this field can also contain custom PatFields. It's string-based instead of enum, just like Sheets, because it's too complex to use an enum, even for our reduced number of items. None is always represented in UI as "None" and in db as empty string. All DbLinks are available on all form types to give users more flexibility. Checkboxes can have DBLinks that look like "allergy:...", "med:...", or "problem:..."
5 ValueLabel text Used differently for different types: TextField, DateField, CheckBox: The label next to or above the textbox, or checkbox.RadioButtons: This label next to or above the group of radiobuttons. Labels on each radiobutton are in PickListVis.Label: This label is the only thing that shows. A label is always a WPF FlowDocument, which is an XML format. This allows extensive rich text formatting, like bold, color, paragraph formatting, etc. This format can be used directly in OD proper, but it will need to be converted for some other programming languages using external tools. BUT, prior to that, it must be run through a method that adjusts all the font sizes. FlowDocuments only support absolute font sizes instead of relative font sizes. We use 11.5 as the base font size and all other fonts are considered to be relative to this base. So if a font size of 13.8 is present in the FlowDocument, that does not mean to use 13.8; it instead means to use 120%. If your chosen base font size on a mobile device is 16, then the conversion method needs to convert the 13.8 to 19.2 prior to using the FlowDocument.PageBreak: Not used. ""SigBox: Optional label above sig box.MedicationList: This holds an EFormMedListLayout object, serialized as json, including the Title, column headers, column widths, etc.PatientList: This holds an EFormPatListLayout object, serialized as json, including Label.InsPick: This holds the label above the 3 radiobuttons.
6 ValueString text The data as entered by patient or pulled from the db. We do not need this in EFormFieldDef because that has no patient or db data. Used differently for different types: TextField: value in textBox. For allergiesOther, medsOther, and problemsOther, this is a comma-delimited list. Spaces by commas are ok. Like this: "Aspirin, Iodine, Latex"Label: Not used because no patient input.DateField: date in culture format, like 4/25/2024.Checkbox: "X" or blank "".RadioButton: String value chosen by patient. Pulled from PickListDb, or possibly from PickListVis. When importing, empty signifies that patient did not enter any choice, so do not import.ComboBox (not yet added): String value chosen by patient.SigBox: First char is 0 for our sigbox and 1 for Topaz. The remainder is the signature string. See OpenDentBusiness\UI\SignatureBoxWrapper.cs for details. Same format as used for all signatures in OD. Does not get imported.MedicationList: This holds a list of EFormMed objects, serialized as json.PatientList: This holds a PatNum representing the selected patient, if applicable. Example: "143". Can be blank.InsPick: If user picked None, this is empty. If user picked New, the value of this is "New". If user picked Existing, then this is either "InsSubNum:####" or "InsPendingNum:####". A live call to the db using one of those primary keys can derive all the other needed fields for read-only display.
7 ItemOrder int(11) 0 based.
8 PickListVis text Pipe-delimited list of strings, used for radioButtons, InsPick, future comboBoxes, etc. This is the list of items that are visible to the patient. Setup enforces same number of items in PickListDb for 1:1 match. This list allows customization of what the patient sees vs what's in the db. Example: Vis=Hispanic, Db=2135-2. Example: Vis=Do Not Call, Db=DoNotCall. For radiobuttons, the number of items in the lists determines the number of radiobuttons to show to the patient. These editable lists also allow excluding some db options from being visible to patient. Example: Ins Relationship has 9 options, but only 4 of them are really used in dentistry. Just leave the other 5 off and force them to pick one of the 4. But it is also not required for them to pick one. Example: For Marital Status, you might only show Married and Child, excluding Divorced and Single from the pick list. The unselected state then represents no change, so an existing patient could leave both radio buttons unchecked and their status would remain Divorced or Single. However, we currently lack a feature to let them uncheck a radiobutton that is already checked. This is a rare edge case that nearly nobody will care about. You can also have a row with no db value. For example, a visible value of Separated might have no corresponding db value entered. In that case, an import would not cause any change to the existing db value. These lists also allow two radioButtons to represent one db item. Example: Gender Other in db can be expanded to show patient both Nonbinary and Other. When patient picks either of these, it goes into the db as Other. The lists also allow any or all items to be empty with no label. Example: Y/N radiobuttons for a series of allergies. Y/N label at top, but none of the radiobuttons need labels. When translation is added later, it will translate this list, not the PickListDb. PickListVis will, by default, simply be exactly the same as PickListDb. In this state, what the patient sees is the same as what's in the db. Must have at least two items for now.
9 PickListDb text Pipe delimited list of strings, used for radioButtons, future comboBoxes, etc. Not used by InsPick. This is the list of items as they would be stored in the database. See PickListVis above for examples of how to use. The value chosen from this list is what will be stored in the ValueString field. Never show this value to the patient.
10 IsHorizStacking tinyint(4) Typically false. Set to true to cause this field to get stacked horizontally compared to its previous sibling. Example might be to set State and Zip fields to true. This request will be ignored if screen is too small, like on a phone. The following types are not allowed to stack: SigBox, PageBreak, MedicationList.
11 IsTextWrap tinyint(4) Only applies when this is a TextField. Default is false, which creates a single row textbox that scrolls horizontally if text is too long. Set to true to cause text to wrap instead. This will cause the box to grow to fit the text.
12 Width int(11) This stores either pixel width or percentage width, depending on IsWidthPercentage. In either case, if this is blank/0, then width will be 100% of what's available. The discussion here is for fixed widths. See IsWidthPercentage for discussion of percentage widths. If fields are stacked horizontally, then they will wrap when they hit screen width. So horizontally stacked fields may end up vertically stacked on a small screen. But if a single field is still set to be wider than the current screen, it will shrink to fit the screen. This width uses WPF DIPs which are 1/96". Android phones define DIPs differently; they use 1/160" per DIP. But if you are using a language like Flutter, they are handling that conversion for you in the background. Regardless, we will be ignoring DIPs and scaling based solely on font size. The reason for this is to make fonts and boxes all look proportionally the same on both OD proper and in eClipboard. So assuming you use 14 flutter logical pixels for 100% font vs 11.5 in WPF, the conversion would look like this: Width/11.5*14. Notice that we are only converting based on font size. This makes our converted width a near perfect fit for the same text as the original. Width is only available on the field types that are h-stackable.
13 FontScale int(11) Applies to both the label on the field and the field itself. Never 0. Does not apply to Label types, though, since those are only handled by editing the rich text. Always has a valid value between 50 and 300. Default is 100, indicating normal size. WPF defines a DIP as 1/96". Open Dental uses 11.5 DIPs for nearly all fonts on desktop version. Old Microsoft font sizes were based on 1/72", so 11.5 converts to old 8.6. Android defines a DIP as 1/160". Typical recommended font size on Android seems to be about 16, which translates to 9.6 MS DIPs or 7.2 old Windows font. In other words, recommended phone fonts are physically slightly smaller than desktop fonts. EForms uses font sizes based on 100% being a standard normal size. 100% equates to 11.5 on desktop, probably about 16 on Android phones, and whatever our engineers come up with for tablets. By doing it this way, we do not have to explain anything complicated to users, and they also have very good control over font sizes.
14 IsRequired tinyint(4) False by default. If this is set to true, the patient will be required to fill out the field. If conditional logic causes a required field to not show, it will not enforce the requirement. The only checkboxes that allow this field are AllergiesNone and ProblemsNone. For those fields, this makes sure that either an allergy/prob was checked or None was checked.
15 ConditionalParent varchar(255) This string is the label of the field that acts as the parent for conditional logic. Empty string by default indicates no parent. Truncated to the first 255 characters.
16 ConditionalValue text
17 LabelAlign tinyint(4) Enum:EnumEFormLabelAlign 0-TopLeft, 1-LeftLeft, 2-Right. Only used in RadioButtons for now.
TopLeft: 0-Default. Above the radiobuttons, aligned left.
LeftLeft: 1-Left of the remainder of the field, and left aligned within that space.
Right: 2-Right of the remainder of the field, and left aligned within that space.
18 SpaceBelow int(11) The amount of space below each field. Overrides the form and global defaults. -1 indicates to use default. That way, 0 means 0 space. If multiple fields are stacked horizontally, then only the right-most field can have this field set.
19 ReportableName varchar(255) Allows reporting on fields that don't have DbLink.
20 IsLocked tinyint(4) If a field is locked, it stops a patient from editing the text when presented to them. Example is a consent form. Only available for TextField and CheckBox. This flag inherits from EFormFieldDef and there's no UI to change it once it's in EFormField. In FrmEFormFillEdit, this field has no effect because offices still need to be able to edit. So the field only has an effect when filling out by a patient on the web or in eClipboard. Patients can still use FrmEFormFillEdit, and in that case, it's assumed that office staff is watching to make sure they don't change the text.
21 Border tinyint(4) Enum:EnumEFormBorder 0-none, 1-3D. Shaded borders are optional on each field. They are on by default when most fields are added. But they don't make sense in some cases, like labels and stacks of Y/N radio buttons for allergies. When a border is present, any single row textbox inside it gets shown as a single underline instead of a rectangle. If the textbox has text wrapping turned on, it will always be a rectangle.
None: 0-No border
ThreeD: 1-3D border with gradient shadows and rounded corners
22 IsWidthPercentage tinyint(4) False=DIPs / pixels at 96 dpi, True=Percentage. There is no mechanisms for "fill remainder" or "auto size to contents". There is no allowed mixing of fixed and percentage on the same row. Wrap won't happen until all columns have hit their MinWidth. If someone specifies percentages that add up to more than 100, that's ok. We will proportionally adapt. So in addition to expected percentages like 30-30-40, the user would get the same behavior by using 150-150-200. Let's use the example of 150-150-200 and assume MinWidths were 110-100-100. If available width was 400, then the widths would be 120-120-160. If available width was 330, then the widths would be 110-94-126, or (minWidth)-3/7-4/7. Below 310, they would start wrapping. If percentages add up to less than 100, then they might stop short of 100%. For example, 25-25-25 would come up short. They would continue to occupy 75% of available space until the space got so small that they started to hit their MinWidths. Let's assume MinWidths in that example were 50-100-100. If available width was 600, then the widths would be 150-150-150 (still 75%). If available width was 300, then the widths would be 75-100-100 (only 92%). Below 250, they would start wrapping.
23 MinWidth int(11) Only used with IsWidthPercentage. If left blank/0, then no minimum width. A number might be present here but will be ignored if IsWidthPercentage is false.
24 WidthLabel int(11) If the label is to the left of the field, this is the width of that label. Only used for RadioButtons right now because that's the only type that allows labels to the left. In RadioButtons, this is helpful to allow a stack of radioButtons to line up. Default is 0 to indicate automatic.
25 SpaceToRight int(11) The amount of space to the right of each field. Overrides the form and global defaults. -1 indicates to use default. That way, 0 means 0 space. Not used for SigBox or MedicationList which use form level instead.
26 AutoImport tinyint(4) The moment the patient completes the form, this field will import to the database. The field should also be required if they want to prevent clearing it out. For example, even a field like last name needs to be able to change if patient got married or divorced, if office misspelled it, if child's last name is different, etc. Patient knows best. Also works great for address. This is important for multiple forms in a family to prevent duplicate entry of address, etc. Implemented for the following DbLinks: "addressSameEntireFamily", "Address", "Address2", "allergy:", "allergiesNone", "allergiesOther", "Birthdate", "City", "Email", "FName", "Gender", "HmPhone", "ICEName", "ICEPhone", "ins1PlanFromList", "ins2PlanFromList", "LName", "MiddleI", "Position", "PreferConfirmMethod", "PreferContactMethod", "PreferRecallMethod", "Preferred", "problem:", "problemsNone", "problemsOther", "referredFrom", "SSN", "State", "StudentStatus", "WirelessPhone", "wirelessPhoneSameEntireFamily", "WkPhone", "Zip".
27 PrefillFromGuar tinyint(4) If db value is empty for the patient, then prefill from guarantor. Used for addresses to avoid double entry for children. Implemented for the following DbLinks: "Address", "Address2", "City", "State", "Zip", "WirelessPhone".
28 ValueLabelEnglish text This is not needed for translation, but for conditional logic to identify this field in spite of language translations.
29 PickListVisEnglish text Pipe-delimited list of English strings, used for radioButtons, InsPick, etc. When the eForm is first created or defined in English, this will match PickListVis. After translation, PickListVis contains translated strings, while PickListVisEnglish remains in English for conditional logic comparisons (child field ConditionalValue vs. parent field selected option) and conditional value pick lists.
30 DateTimeSig datetime DateTime that an eForm was signed.

eformfielddef
Individual fields for the EForm. Each field generally includes a label and a value. Links to a EFormDef by FKey to eformdef.EFormDefNum. NOTE: If any new fields get added to this class and EFormField, make sure to add them to the methods EFormFields.FromDef and EFormFields.ToDef
Order Name Type Summary
0 EFormFieldDefNum bigint(20) Primary key.
1 EFormDefNum bigint(20) FKey to eformdef.EFormDefNum
2 FieldType tinyint(4) Enum:EnumEFormFieldType 0-TextField, 1-Label, 2-CheckBox, etc.
TextField: 0-A textbox that the user can type into. Frequently tied to a database field. Can frequently be prefilled from database if desired. In Sheets, this was two different field types: InputField and OutputField.
Label: 1-This can be used for a label, heading, title, paragraph, etc. These also support the exact same replacement fields as in sheets StaticText. See the extensive comments on the ValueLabel field.
DateField: 2-Some sort of textbox that's optimized for date input.
CheckBox: 3-Simple checkbox that can be tied to a db field.
RadioButtons: 4-Not a single radiobutton, but a group of them.
SigBox: 5-A signature box, directly on the screen with stylus/mouse. Just the drawing, no encryption to tie it to the data yet.
PageBreak: 6-.
MedicationList: 7-A Medication List is a complex field. It consists of a list of medications with an optional second column for strength and frequency. Each medication has a Delete button to its right. There is also an Add button and a None checkbox at the bottom. The None checkbox only shows when the list is empty and allows satisfying a 'required' flag. There is no way to indicate 'no changes', but the office is free to add a separate No Changes checkbox below this list which doesn't actually do anything but which can serve as a visual indicator.
PatientList: 8-This is a complex field that includes a popup window. On the form, it shows as a read-only textbox with a button beside it that says 'Pick'. The popup window has a list of patients that are pulled from the live office db in real time. In that window, there's also an Add button which actually adds a new patient to the office database. For now, there's no mechanism to edit existing patients in that list. There's also a second popup window to enter the name and BD of a new patient. The only use so far is to pick insurance plan subscriber, but more uses are planned such as guarantor, guardian, adding children to family, etc.
InsPick: 9-Shows as 3 radio buttons: None, New, and Existing. Selecting Existing makes a popup window show to allow selecting an existing insurance in the family.
3 DbLink varchar(255) If this field is importable, then this links to a db field. The list of available fields for each type is in EFormFieldsAvailable. Users can pick from that lis which is the same list as in Sheets. In addition to those hardcoded values, this field can also contain custom PatFields. It's string-based instead of enum, just like Sheets, because it's too complex to use an enum, even for our reduced number of items. None is always represented in UI as "None" and in db as empty string. All DbLinks are available on all form types to give users more flexibility. Checkboxes can have DBLinks that look like "allergy:...", "med:...", or "problem:..."
4 ValueLabel text Used differently for different types: TextField, DateField, CheckBox: The label next to or above the textbox, or checkbox.RadioButtons: The label above the group of radiobuttons. Labels on each radiobutton are in PickListVis.Label: This label is the only thing that shows. A label is always a WPF FlowDocument, which is an XML format. This allows extensive rich text formatting, like bold, color, paragraph formatting, etc. This format can be used directly in OD proper, but it will need to be converted for some other programming languages using external tools. BUT, prior to that, it must be run through a method that adjusts all the font sizes. FlowDocuments only support absolute font sizes instead of relative font sizes. We use 11.5 as the base font size and all other fonts are considered to be relative to this base. So if a font size of 13.8 is present in the FlowDocument, that does not mean to use 13.8; it instead means to use 120%. If your chosen base font size on a mobile device is 16, then the conversion method needs to convert the 13.8 to 19.2 prior to using the FlowDocument.PageBreak: Not used.SigBox: Optional label above sig box.MedicationList: This holds an EFormMedListLayout object, serialized as json, including the Title, column headers, column widths, etc.PatientList: This holds an EFormPatListLayout object, serialized as json, including Label.InsPick: This holds the label above the 3 radiobuttons.
5 ItemOrder int(11) 0 based.
6 PickListVis text Pipe-delimited list of strings, used for radioButtons, InsPick, future comboBoxes, etc. This is the list of items that are visible to the patient. Setup enforces same number of items in PickListDb for 1:1 match. This list allows customization of what the patient sees vs what's in the db. Example: Vis=Hispanic, Db=2135-2. Example: Vis=Do Not Call, Db=DoNotCall. For radiobuttons, the number of items in the lists determines the number of radiobuttons to show to the patient. These editable lists also allow excluding some db options from being visible to patient. Example: Ins Relationship has 9 options, but only 4 of them are really used in dentistry. Just leave the other 5 off and force them to pick one of the 4. But it is also not required for them to pick one. Example: For Marital Status, you might only show Married and Child, excluding Divorced and Single from the pick list. The unselected state then represents no change, so an existing patient could leave both radio buttons unchecked and their status would remain Divorced or Single. However, we currently lack a feature to let them uncheck a radiobutton that is already checked. This is a rare edge case that nearly nobody will care about. You can also have a row with no db value. For example, a visible value of Separated might have no corresponding db value entered. In that case, an import would not cause any change to the existing db value. These lists also allow two radioButtons to represent one db item. Example: Gender Other in db can be expanded to show patient both Nonbinary and Other. When patient picks either of these, it goes into the db as Other. The lists also allow any or all items to be empty with no label. Example: Y/N radiobuttons for a series of allergies. Y/N label at top, but none of the radiobuttons need labels. When translation is added later, it will translate this list, not the PickListDb. PickListVis will, by default, simply be exactly the same as PickListDb. In this state, what the patient sees is the same as what's in the db. Must have at least two items for now.
7 PickListDb text Pipe delimited list of strings, used for radioButtons, future comboBoxes, etc. Not used by InsPick. This is the list of items as they would be stored in the database. See PickListVis above for examples of how to use. The value chosen from this list is what will be stored in the ValueString field. Never show this value to the patient.
8 IsHorizStacking tinyint(4) Typically false. Set to true to cause this field to get stacked horizontally compared to its previous sibling. Example might be to set State and Zip fields to true. This request will be ignored if screen is too small, like on a phone. We don't allow this option for RadioButtons because they already stack horizontally, and that would be confusing. The following types are not allowed to stack: SigBox, PageBreak, MedicationList.
9 IsTextWrap tinyint(4) Only applies when this is a TextField. Default is false, which creates a single row textbox that scrolls horizontally if text is too long. Set to true to cause text to wrap instead. This will cause the box to grow to fit the text.
10 Width int(11) This stores either pixel width or percentage width, depending on IsWidthPercentage. In either case, if this is blank/0, then width will be 100% of what's available. The discussion here is for fixed widths. See IsWidthPercentage for discussion of percentage widths. If fields are stacked horizontally, then they will wrap when they hit screen width. So horizontally stacked fields may end up vertically stacked on a small screen. But if a single field is still set to be wider than the current screen, it will shrink to fit the screen. This width uses WPF DIPs which are 1/96". Android phones define DIPs differently; they use 1/160" per DIP. But if you are using a language like Flutter, they are handling that conversion for you in the background. Regardless, we will be ignoring DIPs and scaling based solely on font size. The reason for this is to make fonts and boxes all look proportionally the same on both OD proper and in eClipboard. So assuming you use 14 flutter logical pixels for 100% font vs 11.5 in WPF, the conversion would look like this: Width/11.5*14. Notice that we are only converting based on font size. This makes our converted width a near perfect fit for the same text as the original. Width is only available on the field types that are h-stackable.
11 FontScale int(11) Applies to both the label on the field and the field itself. Never 0. Does not apply to Label types, though, since those are only handled by editing the rich text. Always has a valid value between 50 and 300. Default is 100, indicating normal size. WPF defines a DIP as 1/96". Open Dental uses 11.5 DIPs for nearly all fonts on desktop version. Old Microsoft font sizes were based on 1/72", so 11.5 converts to old 8.6. Android defines a DIP as 1/160". Typical recommended font size on Android seems to be about 16, which translates to 9.6 MS DIPs or 7.2 old Windows font. In other words, recommended phone fonts are physically slightly smaller than desktop fonts. EForms uses font sizes based on 100% being a standard normal size. 100% equates to 11.5 on desktop, probably about 16 on Android phones, and whatever our engineers come up with for tablets. By doing it this way, we do not have to explain anything complicated to users, and they also have very good control over font sizes.
12 IsRequired tinyint(4) False by default. If this is set to true, the patient will be required to fill out the field. If conditional logic causes a required field to not show, it will not enforce the requirement. The only checkboxes that allow this field are AllergiesNone and ProblemsNone. For those fields, this makes sure that either an allergy/prob was checked or None was checked.
13 ConditionalParent varchar(255) This string is the label of the field that acts as the parent for conditional logic. Empty string by default indicates no parent. Truncated to the first 255 characters.
14 ConditionalValue text
15 LabelAlign tinyint(4) Enum:EnumEFormLabelAlign 0-TopLeft, 1-LeftLeft, 2-Right. Only used in RadioButtons for now.
TopLeft: 0-Default. Above the radiobuttons, aligned left.
LeftLeft: 1-Left of the remainder of the field, and left aligned within that space.
Right: 2-Right of the remainder of the field, and left aligned within that space.
16 SpaceBelow int(11) The amount of space below each field. Overrides the form and global default. -1 indicates to use default. That way, 0 means 0 space. If multiple fields are stacked horizontally, then only the right-most field can have this field set.
17 ReportableName varchar(255) Allows reporting on fields that don't have DbLink.
18 IsLocked tinyint(4) If a field is locked, it stops a patient from editing the text when presented to them. Example is a consent form. Only available for TextField and CheckBox. This flag is set here in the EFormFieldDef and then EFormField inherits it with no UI to change it later. See additional notes in EFormField.
19 Border tinyint(4) Enum:EnumEFormBorder 0-none, 1-3D. Shaded borders are optional on each field. They are on by default when most fields are added. But they don't make sense in some cases, like labels and stacks of Y/N radio buttons for allergies. When a border is present, any single row textbox inside it gets shown as a single underline instead of a rectangle. If the textbox has text wrapping turned on, it will always be a rectangle.
None: 0-No border
ThreeD: 1-3D border with gradient shadows and rounded corners
20 IsWidthPercentage tinyint(4) False=DIPs / pixels at 96 dpi, True=Percentage. There is no mechanisms for "fill remainder" or "auto size to contents". There is no allowed mixing of fixed and percentage on the same row. Wrap won't happen until all columns have hit their MinWidth. If someone specifies percentages that add up to more than 100, that's ok. We will proportionally adapt. So in addition to expected percentages like 30-30-40, the user would get the same behavior by using 150-150-200. Let's use the example of 150-150-200 and assume MinWidths were 110-100-100. If available width was 400, then the widths would be 120-120-160. If available width was 330, then the widths would be 110-94-126, or (minWidth)-3/7-4/7. Below 310, they would start wrapping. If percentages add up to less than 100, then they might stop short of 100%. For example, 25-25-25 would come up short. They would continue to occupy 75% of available space until the space got so small that they started to hit their MinWidths. Let's assume MinWidths in that example were 50-100-100. If available width was 600, then the widths would be 150-150-150 (still 75%). If available width was 300, then the widths would be 75-100-100 (only 92%). Below 250, they would start wrapping.
21 MinWidth int(11) Only used with IsWidthPercentage. If left blank/0, then no minimum width. A number might be present here but will be ignored if IsWidthPercentage is false.
22 WidthLabel int(11) If the label is to the left of the field, this is the width of that label. Only used for RadioButtons right now because that's the only type that allows labels to the left. In RadioButtons, this is helpful to allow a stack of radioButtons to line up. Default is 0 to indicate automatic.
23 SpaceToRight int(11) The amount of space to the right of each field. Overrides the form and global defaults. -1 indicates to use default. That way, 0 means 0 space. Not used for SigBox or MedicationList which use form level instead.
24 AutoImport tinyint(4) The moment the patient completes the form, this field will import to the database. The field should also be required if they want to prevent clearing it out. For example, even a field like last name needs to be able to change if patient got married or divorced, if office misspelled it, if child's last name is different, etc. Patient knows best. Also works great for address. This is important for multiple forms in a family to prevent duplicate entry of address, etc. Implemented for the following DbLinks: "addressSameEntireFamily", "Address", "Address2", "allergy:", "allergiesNone", "allergiesOther", "Birthdate", "City", "Email", "FName", "Gender", "HmPhone", "ICEName", "ICEPhone", "ins1PlanFromList", "ins2PlanFromList", "LName", "MiddleI", "Position", "PreferConfirmMethod", "PreferContactMethod", "PreferRecallMethod", "Preferred", "problem:", "problemsNone", "problemsOther", "referredFrom", "SSN", "State", "StudentStatus", "WirelessPhone", "wirelessPhoneSameEntireFamily", "WkPhone", "Zip".
25 PrefillFromGuar tinyint(4) If db value is empty for the patient, then prefill from guarantor. Used for addresses to avoid double entry for children. Implemented for the following DbLinks: "Address", "Address2", "City", "State", "Zip", "WirelessPhone".

eformimportrule
This table is present, but it does absolutely nothing because we never finished implementing it. In the future: Each row is a rule that controls how form import logic works. It currently also applies to sheets. Clearly, if there's no row for a specific field, then a global rule handles it. Since there are 4 different situations, we might need 4 global rules just to start. But since users might forget to add them, if any of the 4 is missing, then that situation behaves the old way: action is Review.
Order Name Type Summary
0 EFormImportRuleNum bigint(20) Primary key.
1 FieldName varchar(255) If empty, this is a global rule. if the field name matches a DbLink value, then this applies to the Db field. Otherwise, it must be a Non-db field. It will first try to match a reportable name and then a label.
2 Situation tinyint(4) Enum:EnumEFormImportSituation
New: 0-Original blank and entered new value
Changed: 1-
Deleted: 2-
Invalid: 3-Setup UI explains the fields that this can apply to.
3 Action tinyint(4) Enum:EnumEFormImportAction
Overwrite: 0-
Review: 1-
Ignore: 2-
Fix: 3-Setup UI explains the fixes that can be made.

ehramendment
Used in EHR only. Stores an entry indicating whether the office has accepted or denied the amendment. Amendments can be verbal or written requests to add information to the patient's record. The provider can either scan / import the document or create a detailed description that indicates what was verbally requested or where the document can be found.
Order Name Type Summary
0 EhrAmendmentNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum
2 IsAccepted tinyint(4) Enum:YN Y=accepted, N=denied, U=requested.
Unknown: 0
Yes: 1
No: 2
3 Description text Description or user-defined location of the amendment.
4 Source tinyint(4) Enum:AmendmentSource Patient, Provider, Organization, Other. Required.
Patient: 0
Provider: 1
Organization: 2
Other: 3
5 SourceName text User-defined name of the amendment source. For example, a patient name or organization name.
6 FileName varchar(255) The file is stored in the A-Z folder in 'EhrAmendments' folder. This field stores the name of the file. The files are named automatically based on Date/time along with EhrAmendmentNum for uniqueness. This meets the requirement of "appending" to the patient's record.
7 RawBase64 longtext The raw file data encoded as base64. Only used if there is no AtoZ folder. This meets the requirement of "appending" to the patient's record.
8 DateTRequest datetime Date and time of the amendment request.
9 DateTAcceptDeny datetime Date and time of the amendment acceptance or denial. If there is a date here, then the IsAccepted will be set.
10 DateTAppend datetime Date and time of the file being appended to the amendment or a link provided.

ehraptobs
An EHR appointment observation. Needed for syndromic surveillance messaging. Each syndromic message requires at least one observation.
Order Name Type Summary
0 EhrAptObsNum bigint(20) Primary key.
1 AptNum bigint(20) FK to appointment.AptNum. There can be an unlimited number of observations per appointment.
2 IdentifyingCode tinyint(4) Enum:EhrAptObsIdentifier - Used in HL7 OBX-3 for syndromic surveillance.
BodyTemp: 0 - Body temperature:Temp:Enctrfrst:Patient:Qn: Loinc code 11289-6.
DateIllnessOrInjury: 1 - Illness or injury onset date and time:TmStp:Pt:Patient:Qn: Loinc code 11368-8.
PatientAge: 2 - Age Time Patient Reported Loinc code 21612-7.
PrelimDiag: 3 - Diagnosis.preliminary:Imp:Pt:Patient:Nom: Loinc code 44833-2.
TriageNote: 4 - Triage note:Find:Pt:Emergency department:Doc: Loinc code 54094-8.
OxygenSaturation: 5 - Oxygen saturation:MFr:Pt:BldA:Qn:Pulse oximetry Loinc code 59408-5.
CheifComplaint: 6 - Chief complaint:Find:Pt:Patient:Nom:Reported Loinc code 8661-1.
TreatFacilityID: 7 - Treating Facility Identifier PHINQUESTION code SS001.
TreatFacilityLocation: 8 - Treating Facility Location PHINQUESTION code SS002.
VisitType: 9 - Facility / Visit Type PHINQUESTION code SS003.
3 ValType tinyint(4) Enum:EhrAptObsType . Used in HL7 OBX-2 for syndromic surveillance. Identifies the data type for the observation value in ValReported.
Address: 0 - This should only be used with EhrAptObsIdentifier.TreatFacilityLocation.
Coded: 1
DateAndTime: 2
Numeric: 3
Text: 4
4 ValReported varchar(255) The value of the observation. The value format must match the ValType. This field could be text, a datetime, a code, etc.. Used in HL7 OBX-5 for syndromic surveillance.
5 UcumCode varchar(255) Used in HL7 OBX-6 for syndromic surveillance when ValType is Numeric (otherwise left blank).
6 ValCodeSystem varchar(255) When ValType is Coded, then this contains the code system corresponding to the code in ValReported. When ValType is not Coded, then this field should be blank. Allowed values are LOINC,SNOMEDCT,ICD9,ICD10.

ehrcareplan
Order Name Type Summary
0 EhrCarePlanNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 SnomedEducation varchar(255) Snomed code describing the type of educational instruction provided. Limited to terms descending from the Snomed 409073007 (Education Hierarchy).
3 Instructions varchar(255) Instructions provided to the patient.
4 DatePlanned date This field does not help much with care plan instructions, but will be more helpful for other types of care plans if we expand in the future (for example, planned procedures). We also saw examples where this date was included in the human readable part of a CCD, but not in the machine readable part.

ehrlab
For EHR module, lab request that contains all required fields for HL7 Lab Reporting Interface (LRI).
Order Name Type Summary
0 EhrLabNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum. PID-3.1
2 OrderControlCode varchar(255) Always RE unless importing from outside sources.
3 PlacerOrderNum varchar(255) Placer order number assigned to this lab order, usually assigned by the dental office. Not the same as EhrLabNum, but similar. OBR.2.1 and ORC.2.1.
4 PlacerOrderNamespace varchar(255) Usually empty, only used if PlacerOrderNum+PlacerUniversalID cannot uniquely identify the lab order. OBR.2.2 and ORC.2.2.
5 PlacerOrderUniversalID varchar(255) Usually OID root that uniquely identifies the context that makes PlacerOrderNum globally unique. May be GUID if importing from other sources. OBR.2.3 and ORC.2.3.
6 PlacerOrderUniversalIDType varchar(255) Always "ISO", unless importing from other sources. OBR.2.4 and ORC.2.4
7 FillerOrderNum varchar(255) Filler order number assigned to this lab order, usually assigned by the laboratory. Not the same as EhrLabNum, but similar. OBR.3.1 and ORC.3.1.
8 FillerOrderNamespace varchar(255) Usually empty, only used if FillerOrderNum+FillerUniversalID cannot uniquely identify the lab order. OBR.3.2 and ORC.3.2.
9 FillerOrderUniversalID varchar(255) Usually OID root that uniquely identifies the context that makes FillerOrderNum globally unique. May be GUID if importing from other sources. OBR.3.2 and ORC.3.3.
10 FillerOrderUniversalIDType varchar(255) Always "ISO", unless importing from other sources. OBR.3.4 and ORC.3.4
11 PlacerGroupNum varchar(255) [0..1] May be empty. Placer group number assigned to this lab order, usually assigned by the dental office. ORC.4.1.
12 PlacerGroupNamespace varchar(255) [0..1] Usually empty, only used if PlacerGroupNum+PlacerUniversalID cannot uniquely identify the Group Num. ORC.4.2.
13 PlacerGroupUniversalID varchar(255) [0..1] Usually OID root that uniquely identifies the context that makes PlacerGroupNum globally unique. May be GUID if importing from other sources. ORC.4.3.
14 PlacerGroupUniversalIDType varchar(255) [0..1] Always "ISO", unless importing from other sources. ORC.4.4
15 OrderingProviderID varchar(255) May be provnum or NPI num or any other num, when combined with OrderingProviderIdAssigningAuthority should uniquely identify the provider. ORC.12.1
16 OrderingProviderLName varchar(255) ORC.12.2
17 OrderingProviderFName varchar(255) ORC.12.3
18 OrderingProviderMiddleNames varchar(255) Middle names or initials therof. ORC.12.4
19 OrderingProviderSuffix varchar(255) Example: JR or III. ORC.12.5
20 OrderingProviderPrefix varchar(255) Example: DR, Not MD, MD would be stored in an optional field that was not implemented called OrderingProviderDegree. ORC.12.6
21 OrderingProviderAssigningAuthorityNamespaceID varchar(255) Usually empty, "The value of [this field] reflects a local code that represents the combination of [the next two fields]." ORC.12.9.1
22 OrderingProviderAssigningAuthorityUniversalID varchar(255) ISO compliant OID that represents the organization that assigned the unique provider ID. ORC.12.9.2
23 OrderingProviderAssigningAuthorityIDType varchar(255) Always "ISO", unless importing from outside source. ORC.12.9.3
24 OrderingProviderNameTypeCode varchar(255) Describes the type of name used. ORC.12.10
25 OrderingProviderIdentifierTypeCode varchar(255) Must be value from HL70203 code set, see note at bottom of EhrLab.cs for usage. ORC.12.13
26 SetIdOBR bigint(20) Enumerates the OBR segments within a single message starting with 1. OBR.1
27 UsiID varchar(255) OBR.4.1
28 UsiText varchar(255) Description of UsiId. OBR.4.2
29 UsiCodeSystemName varchar(255) CodeSystem that UsiId came from. OBR.4.3
30 UsiIDAlt varchar(255) OBR.4.4
31 UsiTextAlt varchar(255) Description of UsiIdAlt. OBR.4.5
32 UsiCodeSystemNameAlt varchar(255) CodeSystem that UsiId came from. OBR.4.6
33 UsiTextOriginal varchar(255) Optional text that describes the original text used to encode the values above. OBR.4.9
34 ObservationDateTimeStart varchar(255) Stored as string in the format YYYY[MM[DD[HH[MM[SS]]]]] where bracketed values are optional. When time is not known will be valued "0000". OBR.7.1
35 ObservationDateTimeEnd varchar(255) May be empty. Stored as string in the format YYYY[MM[DD[HH[MM[SS]]]]] where bracketed values are optional. OBR.8.1
36 SpecimenActionCode varchar(255) OBR.11
37 ResultDateTime varchar(255) Date Time that the result was stored or last updated. Stored in the format YYYYMMDDHHmmss. Required to be accurate to the second. OBR.22.1
38 ResultStatus varchar(255) OBR.25
39 ParentObservationID varchar(255) OBR.26.1.1
40 ParentObservationText varchar(255) Description of ParentObservationId. OBR.26.1.2
41 ParentObservationCodeSystemName varchar(255) CodeSystem that ParentObservationId came from. OBR.26.1.3
42 ParentObservationIDAlt varchar(255) OBR.26.1.4
43 ParentObservationTextAlt varchar(255) Description of ParentObservationIdAlt. OBR.26.1.5
44 ParentObservationCodeSystemNameAlt varchar(255) CodeSystem that ParentObservationIdAlt came from. OBR.26.1.6
45 ParentObservationTextOriginal varchar(255) Optional text that describes the original text used to encode the values above. OBR.26.1.9
46 ParentObservationSubID varchar(255) OBR.26.2
47 ParentPlacerOrderNum varchar(255) Placer order number assigned to this lab order, usually assigned by the dental office. Not the same as EhrLabNum, but similar. OBR.29.1.1.
48 ParentPlacerOrderNamespace varchar(255) Usually empty, only used if PlacerOrderNum+PlacerUniversalID cannot uniquely identify the lab order. OBR.29.1.2
49 ParentPlacerOrderUniversalID varchar(255) Usually OID root that uniquely identifies the context that makes PlacerOrderNum globally unique. May be GUID if importing from other sources. OBR.29.1.3
50 ParentPlacerOrderUniversalIDType varchar(255) Always "ISO", unless importing from other sources. OBR.29.1.4
51 ParentFillerOrderNum varchar(255) Filler order number assigned to this lab order, usually assigned by the laboratory. Not the same as EhrLabNum, but similar. OBR.29.2.1
52 ParentFillerOrderNamespace varchar(255) Usually empty, only used if FillerOrderNum+FillerUniversalID cannot uniquely identify the lab order. OBR.29.2.2
53 ParentFillerOrderUniversalID varchar(255) Usually OID root that uniquely identifies the context that makes FillerOrderNum globally unique. May be GUID if importing from other sources. OBR.29.2.3
54 ParentFillerOrderUniversalIDType varchar(255) Always "ISO", unless importing from other sources. OBR.29.2.4
55 ListEhrLabResultsHandlingF tinyint(4) "Film with patient." Technically a coded value from HL70507. Stored as a bool instead of 7 seperate columns. OBR.49.* is used to set both ListEhrLabResultsHandlingF and ListEhrLabResultsHandlingN. OBR.49.*
56 ListEhrLabResultsHandlingN tinyint(4) "Notify provider when ready." Technically a coded value from HL70507. Stored as a bool instead of 7 seperate columns. OBR.49.* is used to set both ListEhrLabResultsHandlingF and ListEhrLabResultsHandlingN. OBR.49.*
57 TQ1SetId bigint(20) Enumerates the TQ1 segments within a single message starting with 1. TQ1.1
58 TQ1DateTimeStart varchar(255) Stored as string in the format YYYY[MM[DD[HH[MM[SS]]]]] where bracketed values are optional. TQ1.7
59 TQ1DateTimeEnd varchar(255) Stored as string in the format YYYY[MM[DD[HH[MM[SS]]]]] where bracketed values are optional. TQ1.8
60 IsCpoe tinyint(4) This gets set when a provider is logged in with a valid EHR key and then creates a lab.
61 OriginalPIDSegment text The PID Segment from the HL7 message used to generate or update the lab order.

ehrlabclinicalinfo
For EHR module, lab request that contains all required fields for HL7 Lab Reporting Interface (LRI). OBR.13.*
Order Name Type Summary
0 EhrLabClinicalInfoNum bigint(20) Primary key.
1 EhrLabNum bigint(20) FK to ehrlab.EhrLabNum.
2 ClinicalInfoID varchar(255) OBR.13.*.1
3 ClinicalInfoText varchar(255) Description of ClinicalInfoId. OBR.13.*.2
4 ClinicalInfoCodeSystemName varchar(255) CodeSystem that ClinicalInfoId came from. OBR.13.*.3
5 ClinicalInfoIDAlt varchar(255) OBR.13.*.4
6 ClinicalInfoTextAlt varchar(255) Description of ClinicalInfoIdAlt. OBR.13.*.5
7 ClinicalInfoCodeSystemNameAlt varchar(255) CodeSystem that ClinicalInfoId came from. OBR.13.*.6
8 ClinicalInfoTextOriginal varchar(255) Optional text that describes the original text used to encode the values above. OBR.13.*.7

ehrlabimage
Used to link images to an EHR lab.
Order Name Type Summary
0 EhrLabImageNum bigint(20) Primary key.
1 EhrLabNum bigint(20) FK to ehrlab.EhrLabNum.
2 DocNum bigint(20) FK to document.DocNum. Will be -1 to indicate that lab is expecting image results.

ehrlabnote
For EHR module, May either be a note attached to an EhrLab or an EhrLabResult. NTE.*
Order Name Type Summary
0 EhrLabNoteNum bigint(20) Primary key.
1 EhrLabNum bigint(20) FK to ehrlab.EhrLabNum. Should never be zero.
2 EhrLabResultNum bigint(20) FK to ehrlabresult.EhrLabResult. May be 0 if this is a Lab Note, will be valued if this is an Ehr Lab Result Note.
3 Comments text Carret delimited list of comments. Comments must be formatted text and cannot contain the following 6 characters |^&~\# NTE.*.*

ehrlabresult
For EHR module, lab result that contains all required fields for HL7 Lab Reporting Interface (LRI). OBX
Order Name Type Summary
0 EhrLabResultNum bigint(20) Primary key.
1 EhrLabNum bigint(20) FK to ehrlab.EhrLabNum.
2 SetIdOBX bigint(20) Enumerates the OBX segments within a single message starting with 1. OBX.1
3 ValueType varchar(255) This field identifies the data type used for ObservationValue (OBX-5). OBX.2
4 ObservationIdentifierID varchar(255) "LOINC shall be used as the standard coding system for this field if an appropriate LOINC code exists. Appropriate status is defined in the LOINC Manual Section 11.2 Classification of LOINC Term Status. If a local coding system is in use, a local code should also be sent to help with identification of coding issues. When no valid LOINC exists the local code may be the only code sent. When populating this field with values, this guide does not give preference to the triplet in which the standard (LOINC) code should appear." OBX.3.1
5 ObservationIdentifierText varchar(255) Description of ObservationIdentifierId. OBX.3.2
6 ObservationIdentifierCodeSystemName varchar(255) CodeSystem that ObservationIdentifierId came from. Should be "LN". OBX.3.3
7 ObservationIdentifierIDAlt varchar(255) Probably a LoincCode or empty. OBX.3.4
8 ObservationIdentifierTextAlt varchar(255) Description of ObservationIdentifierIdAlt. OBX.3.5
9 ObservationIdentifierCodeSystemNameAlt varchar(255) CodeSystem that ObservationIdentifierId came from. Should be "LN" or empty. OBX.3.6
10 ObservationIdentifierTextOriginal varchar(255) Optional text that describes the original text used to encode the values above. OBX.3.7
11 ObservationIdentifierSub varchar(255) OBX.4
12 ObservationValueCodedElementID varchar(255) OBX.5.1
13 ObservationValueCodedElementText varchar(255) Description of ObservationValueCodedElementId. OBX.5.2
14 ObservationValueCodedElementCodeSystemName varchar(255) CodeSystem that ObservationValueCodedElementId came from. OBX.5.3
15 ObservationValueCodedElementIDAlt varchar(255) OBX.5.4
16 ObservationValueCodedElementTextAlt varchar(255) Description of ObservationValueCodedElementIdAlt. OBX.5.5
17 ObservationValueCodedElementCodeSystemNameAlt varchar(255) CodeSystem that ObservationValueCodedElementId came from. OBX.5.6
18 ObservationValueCodedElementTextOriginal varchar(255) CWE only. Optional text that describes the original text used to encode the values above. OBX.5.7
19 ObservationValueDateTime varchar(255) Stored as string in the formatYYYY[MM[DD]] for DT and YYYYMMDDHHMMSS for TS. Note: this is the lab result value, not the DT the test was performed. OBX.5.1
20 ObservationValueTime time Note: this is the lab result value, not the time the test was performed. OBX.5.1
21 ObservationValueComparator varchar(255) OBX.5.1
22 ObservationValueNumber1 double OBX.5.2
23 ObservationValueSeparatorOrSuffix varchar(255) OBX.5.3
24 ObservationValueNumber2 double OBX.5.4
25 ObservationValueNumeric double OBX.5.1
26 ObservationValueText varchar(255) OBX.5.1
27 UnitsID varchar(255) "UCUM (Unified Code for Units of Measure) will be evaluated during the pilot for potential subsequent inclusion. As part of the pilot test, for dimensionless units the UCUM representation could be {string}, e.g., for titer the pilot might use {titer} to test feasibility. When sending units of measure as text, they must be placed in the correct component of OBX-6 (CWE_CRE.9)." OBX.6.1
28 UnitsText varchar(255) Description of UnitsId. OBX.6.2
29 UnitsCodeSystemName varchar(255) CodeSystem that UnitsId came from. Should be "UCUM". OBX.6.3
30 UnitsIDAlt varchar(255) OBX.6.4
31 UnitsTextAlt varchar(255) Description of UnitsIdAlt. OBX.6.5
32 UnitsCodeSystemNameAlt varchar(255) CodeSystem that UnitsId came from. OBX.6.6
33 UnitsTextOriginal varchar(255) Optional text that describes the original text used to encode the values above. OBX.6.7
34 referenceRange varchar(255) "Guidance: It is not appropriate to send the reference range for a result in an associated NTE segment. It would be appropriate to send additional information clarifying the reference range in an NTE associated with this OBX-" OBX.7
35 AbnormalFlags varchar(255) Comma Delimited list of Abnormal Flags using HL70078 enum values. OBX.8.*
36 ObservationResultStatus varchar(255) Coded status of result. OBX.11
37 ObservationDateTime varchar(255) Stored as string in the format YYYYMMDD[HH[MM[SS]]]. "For specimen based test, if it is valued it must be the same as SPM-17. If SPM-17 is present and relates to the same observation, then OBX-14 must be within the DR range." OBX.14.1
38 AnalysisDateTime varchar(255) Stored as string in the format YYYYMMDD[HH[MM[SS]]]. "Be as precise as appropriate and available." OBX.19.1
39 PerformingOrganizationName varchar(255) OBX.23.1
40 PerformingOrganizationNameAssigningAuthorityNamespaceId varchar(255) OBX.23.6.1
41 PerformingOrganizationNameAssigningAuthorityUniversalId varchar(255) The Assigning Authority component is used to identify the system, application, organization, etc. that assigned the ID in component 10. OBX.23.6.2
42 PerformingOrganizationNameAssigningAuthorityUniversalIdType varchar(255) Should always be "ISO", unless importing. OBX.23.6.3
43 PerformingOrganizationIdentifierTypeCode varchar(255) OBX.23.7
44 PerformingOrganizationIdentifier varchar(255) OBX.23.10
45 PerformingOrganizationAddressStreet varchar(255) OBX.24.1.1
46 PerformingOrganizationAddressOtherDesignation varchar(255) OBX.24.2
47 PerformingOrganizationAddressCity varchar(255) OBX.24.3
48 PerformingOrganizationAddressStateOrProvince varchar(255) USPS Alpha State Codes. OBX.24.4
49 PerformingOrganizationAddressZipOrPostalCode varchar(255) OBX.24.5
50 PerformingOrganizationAddressCountryCode varchar(255) Should be the three letter Alpha Code derived from ISO 3166 alpha-3 code set. http://www.nationsonline.org/oneworld/country_code_list.htm OBX.24.6
51 PerformingOrganizationAddressAddressType varchar(255) OBX.24.7
52 PerformingOrganizationAddressCountyOrParishCode varchar(255) Should be based on FIPS 6-4. We are just importing the string as is. OBX.24.8
53 MedicalDirectorID varchar(255) May be provnum or NPI num or any other num, when combined with MedicalDirectorIdAssigningAuthority should uniquely identify the provider. OBX.25.1
54 MedicalDirectorLName varchar(255) OBX.25.2
55 MedicalDirectorFName varchar(255) OBX.25.3
56 MedicalDirectorMiddleNames varchar(255) Middle names or initials therof. OBX.25.4
57 MedicalDirectorSuffix varchar(255) Example: JR or III. OBX.25.5
58 MedicalDirectorPrefix varchar(255) Example: DR, Not MD, MD would be stored in an optional field that was not implemented called MedicalDirectorDegree. OBX.25.6
59 MedicalDirectorAssigningAuthorityNamespaceID varchar(255) Usually empty, "The value of [this field] reflects a local code that represents the combination of [the next two fields]." OBX.25.9.1
60 MedicalDirectorAssigningAuthorityUniversalID varchar(255) ISO compliant OID that represents the organization that assigned the unique provider ID. OBX.25.9.2
61 MedicalDirectorAssigningAuthorityIDType varchar(255) Always "ISO", unless importing from outside source. OBX.25.9.3
62 MedicalDirectorNameTypeCode varchar(255) Describes the type of name used. OBX.25.10
63 MedicalDirectorIdentifierTypeCode varchar(255) Must be value from HL70203 code set, see note at bottom of EhrLab.cs for usage. OBX.25.13

ehrlabresultscopyto
For EHR module, copy results to... that contains all required fields for HL7 Lab Reporting Interface (LRI).
Order Name Type Summary
0 EhrLabResultsCopyToNum bigint(20) Primary key.
1 EhrLabNum bigint(20) FK to ehrlab.EhrLabNum.
2 CopyToID varchar(255) May be provnum or NPI num or any other num, when combined with CopyToIdAssigningAuthority should uniquely identify the provider. OBR.28.1
3 CopyToLName varchar(255) OBR.28.2
4 CopyToFName varchar(255) OBR.28.3
5 CopyToMiddleNames varchar(255) Middle names or initials therof. OBR.28.4
6 CopyToSuffix varchar(255) Example: JR or III. OBR.28.5
7 CopyToPrefix varchar(255) Example: DR, Not MD, MD would be stored in an optional field that was not implemented called CopyToDegree. OBR.28.6
8 CopyToAssigningAuthorityNamespaceID varchar(255) Usually empty, "The value of [this field] reflects a local code that represents the combination of [the next two fields]." OBR.28.9.1
9 CopyToAssigningAuthorityUniversalID varchar(255) ISO compliant OID that represents the organization that assigned the unique provider ID. OBR.28.9.2
10 CopyToAssigningAuthorityIDType varchar(255) Always "ISO", unless importing from outside source. OBR.28.9.3
11 CopyToNameTypeCode varchar(255) Describes the type of name used. OBR.28.10
12 CopyToIdentifierTypeCode varchar(255) Must be value from HL70203 code set, see note at bottom of EhrLab.cs for usage. OBR.28.13

ehrlabspecimen
For EHR module, the specimen upon which the lab orders were/are to be performed on. NTE.*
Order Name Type Summary
0 EhrLabSpecimenNum bigint(20) Primary key.
1 EhrLabNum bigint(20) FK to ehrlab.EhrLabNum. May be 0.
2 SetIdSPM bigint(20) Enumerates the SPM segments within a single message starting with 1. SPM.1
3 SpecimenTypeID varchar(255) SPM.2
4 SpecimenTypeText varchar(255) Description of SpecimenTypeId. SPM.3
5 SpecimenTypeCodeSystemName varchar(255) CodeSystem that SpecimenTypeId came from. SPM.4
6 SpecimenTypeIDAlt varchar(255) SPM.5
7 SpecimenTypeTextAlt varchar(255) Description of SpecimenTypeIdAlt. SPM.6
8 SpecimenTypeCodeSystemNameAlt varchar(255) CodeSystem that SpecimenTypeId came from. SPM.7
9 SpecimenTypeTextOriginal varchar(255) Optional text that describes the original text used to encode the values above. SPM.8
10 CollectionDateTimeStart varchar(255) Stored as string in the format YYYYMMDD[HH[MM[SS]]] where bracketed values are optional. When time is not known will be valued "0000". SPM.17.1.1
11 CollectionDateTimeEnd varchar(255) May be empty. Stored as string in the format YYYYMMDD[HH[MM[SS]]] where bracketed values are optional. SPM.17.2.1

ehrlabspecimencondition
For EHR module, the specimen upon which the lab orders were/are to be performed on. SPM.24
Order Name Type Summary
0 EhrLabSpecimenConditionNum bigint(20) Primary key.
1 EhrLabSpecimenNum bigint(20) FK to ehrlabspecimen.EhrLabSpecimenNum.
2 SpecimenConditionID varchar(255) SPM.24.1
3 SpecimenConditionText varchar(255) Description of SpecimenConditionId. SPM.24.2
4 SpecimenConditionCodeSystemName varchar(255) CodeSystem that SpecimenConditionId came from. SPM.24.3
5 SpecimenConditionIDAlt varchar(255) SPM.24.4
6 SpecimenConditionTextAlt varchar(255) Description of SpecimenConditionIdAlt. SPM.24.5
7 SpecimenConditionCodeSystemNameAlt varchar(255) CodeSystem that SpecimenConditionId came from. SPM.24.6
8 SpecimenConditionTextOriginal varchar(255) Optional text that describes the original text used to encode the values above. SPM.24.7

ehrlabspecimenrejectreason
For EHR module, the specimen upon which the lab orders were/are to be performed on. (May Repeat) SPM.21
Order Name Type Summary
0 EhrLabSpecimenRejectReasonNum bigint(20) Primary key.
1 EhrLabSpecimenNum bigint(20) FK to ehrlab.EhrLabNum. May be 0.
2 SpecimenRejectReasonID varchar(255) SPM.21.1
3 SpecimenRejectReasonText varchar(255) Description of SpecimenRejectReasonId. SPM.21.2
4 SpecimenRejectReasonCodeSystemName varchar(255) CodeSystem that SpecimenRejectReasonId came from. SPM.21.3
5 SpecimenRejectReasonIDAlt varchar(255) SPM.21.4
6 SpecimenRejectReasonTextAlt varchar(255) Description of SpecimenRejectReasonIdAlt. SPM.21.5
7 SpecimenRejectReasonCodeSystemNameAlt varchar(255) CodeSystem that SpecimenRejectReasonId came from. SPM.21.6
8 SpecimenRejectReasonTextOriginal varchar(255) Optional text that describes the original text used to encode the values above. SPM.21.7

ehrmeasure
For EHR module, automate measure calculation.
Order Name Type Summary
0 EhrMeasureNum bigint(20) Primary key.
1 MeasureType tinyint(4) Enum:EhrMeasureType
ProblemList: 0
MedicationList: 1
AllergyList: 2
Demographics: 3
Education: 4
TimelyAccess: 5
ProvOrderEntry: 6
CPOE_MedOrdersOnly: 7
CPOE_PreviouslyOrdered: 8
Rx: 9
VitalSigns: 10
VitalSignsBMIOnly: 11
VitalSignsBPOnly: 12
Smoking: 13
Lab: 14
ElectronicCopy: 15
ClinicalSummaries: 16
Reminders: 17
MedReconcile: 18
SummaryOfCare: 19- Summary of care record for transition or referral.
CPOE_LabOrdersOnly: 20
CPOE_RadiologyOrdersOnly: 21
ElectronicCopyAccess: 22
SummaryOfCareElectronic: 23
SecureMessaging: 24
FamilyHistory: 25
ElectronicNote: 26
LabImages: 27
VitalSigns2014: 28
DrugDrugInteractChecking: 29
DrugFormularyChecking: 30
ProtectElectHealthInfo: 31
ImmunizationRegistries: 32
SyndromicSurveillance: 33
PatientList: 34
ClinicalInterventionRules: 35
2 Numerator smallint(6) 0-100, -1 indicates not entered yet.
3 Denominator smallint(6) 0-100, -1 indicates not entered yet.

ehrmeasureevent
Stores events for EHR that are needed for reporting purposes.
Order Name Type Summary
0 EhrMeasureEventNum bigint(20) Primary key.
1 DateTEvent datetime Date and time of measure event.
2 EventType tinyint(4) Enum:EhrMeasureEventType .
EducationProvided: 0
OnlineAccessProvided: 1
ElectronicCopyRequested: 2
ElectronicCopyProvidedToPt: 3
ClinicalSummaryProvidedToPt: 4, For one office visit.
ReminderSent: 5
MedicationReconcile: 6
SummaryOfCareProvidedToDr: 7 - When Summary of Care is provided in one of the following ways: Printed, exported, or sent to the patient portal (for referrals To doctors). For this type, FKey is refattach.RefAttachNum.
TobaccoUseAssessed: 8
TobaccoCessation: 9
CurrentMedsDocumented: 10
CPOE_MedOrdered: 11. For this type, FKey is medicalorder.MedicalOrderNum.
CPOE_LabOrdered: 12. For this type, FKey is medicalorder.MedicalOrderNum and ehrlab.EhrLabNum.
CPOE_RadOrdered: 13. For this type, FKey is medicalorder.MedicalOrderNum and ehrlab.EhrLabNum.
SummaryOfCareProvidedToDrElectronic: 14 - When a Summary of Care is provided to a doctor electronically in one of the following ways: Exported (we assume they send another way), or a Direct message is sent with Summary of Care attached. For this type, FKey is refattach.RefAttachNum.
SecureMessageFromPat: 15
DrugDrugInteractChecking: 16
DrugFormularyChecking: 17
ProtectElectHealthInfo: 18
ImmunizationRegistries: 19
SyndromicSurveillance: 20
PatientList: 21
ClinicalInterventionRules: 22
3 PatNum bigint(20) FK to patient.PatNum
4 MoreInfo varchar(255) Used to provide extra information about a measure event. Not typically used.
5 CodeValueEvent varchar(30) The code for this event. Example: TobaccoUseAssessed can be one of three LOINC codes: 11366-2 History of tobacco use Narrative, 68535-4 Have you used tobacco in the last 30 days, and 68536-2 Have you used smokeless tobacco product in the last 30 days.
6 CodeSystemEvent varchar(30) The code system name for the event code. Examples: LOINC, SNOMEDCT.
7 CodeValueResult varchar(30) The code for this event result. Example: A TobaccoUseAssessed event type could result in a finding of SNOMED code 8517006 - Ex-smoker (finding). There are 54 allowed tobacco user/non-user codes, and the user is allowed to select from any SNOMED code if they wish, for a TobaccoUseAssessed event.
8 CodeSystemResult varchar(30) The code system for this event result. Example: SNOMEDCT,
9 FKey bigint(20) Used to properly count denominators for specific measure types. FK to refattach.RefAttachNum AND EventType IN(7,14), FK to medicalorder.MedicalOrderNum AND EventType IN(11,12,13), FK to ehrlab.EhrLabNum AND EventType=12, FK to ehrlab.EhrLabNum AND EventType=13.
10 TobaccoCessationDesire tinyint How eager a tobacco user is to quit using tobacco. Scale of 1-10.
11 DateStartTobacco date The date the patient started using tobacco.

ehrnotperformed
For EHR module, these are all the items 'not performed' on patients. Each row will link to the ehrcode table to retrieve relevant data. To join this table to the ehrcode table you must join on CodeValue and CodeSystem. Some items will have associated reasons attached to specify why it was not performed. Those reasons will also be defined in the ehrcode table, so it may be necessary to join with that table again for the data relevant to the reason.
Order Name Type Summary
0 EhrNotPerformedNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 ProvNum bigint(20) FK to provider.ProvNum.
3 CodeValue varchar(30) This will be a FK to a specific code system table identified by the CodeSystem column. The code for this item from one of the code systems supported. Examples: 90656 or 442333005.
4 CodeSystem varchar(30) FK to codesystem.CodeSystemName. The code system name for this code. Possible values are: CPT, CVX, LOINC, SNOMEDCT.
5 CodeValueReason varchar(30) FK to ehrcode.CodeValue. This code may not exist in the ehrcode table, it may have been chosen from a bigger list of available codes. In that case, this will be a FK to a specific code system table identified by the CodeSystem column. The code for the reason the item was not performed from one of the code systems supported. Examples: 182856006 or 419808006.
6 CodeSystemReason varchar(30) FK to codesystem.CodeSystemName. The code system name for this code. Possible value is: SNOMEDCT.
7 Note text Relevant notes for this not performed item. Just in case users want it, does not get reported in EHR quality measure reporting.
8 DateEntry date The date and time this item was created. Can be edited to the date and time the item actually occurred.

ehrpatient
Patient information needed for EHR. 1:1 relation to patient table. They are stored here because we want to try to keep the size of the patient table a bit smaller. Some non-EHR columns have also been added, which isn't a big deal.
Order Name Type Summary
0 PatNum bigint(20) FK to patient.PatNum. Also the primary key for this table. Always one to one relationship with patient table. A new patient might not have an entry here until needed.
1 MotherMaidenFname varchar(255) Mother's maiden first name. Exported in HL7 PID-6 for immunization messages.
2 MotherMaidenLname varchar(255) Mother's maiden last name. Exported in HL7 PID-6 for immunization messages.
3 VacShareOk tinyint(4) Enum:YN Indicates whether or not the patient wants to share their vaccination information with other EHRs. Used in immunization export.
Unknown: 0
Yes: 1
No: 2
4 MedicaidState varchar(50) The abbreviation for the state for the patient's MedicaidID. Displayed in patient information window, used to validate the length of the MedicaidID.
5 SexualOrientation varchar(255) The patient's sexual orientation. Stored as a SNOMED code or HL7 null flavor.
6 GenderIdentity varchar(255) The patient's gender identity. Stored as a SNOMED code or HL7 null flavor.
7 SexualOrientationNote varchar(255) Will be blank unless SexualOrientation is OTH, additional orientation.
8 GenderIdentityNote varchar(255) Will be blank unless GenderIdentity is OTH, additional gender identity.
9 DischargeDate datetime Used in hospitals. Used to track patients discharge date.

ehrprovkey
Used to store and track Ehr Provider Keys. There can be multiple EhrProvKeys per provider.
Order Name Type Summary
0 EhrProvKeyNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum. Only used by HQ for generating keys for customers. Will always be 0 for non-HQ users.
2 LName varchar(255) The provider LName.
3 FName varchar(255) The provider FName.
4 ProvKey varchar(255) The key assigned to the provider
5 FullTimeEquiv float Usually 1. Can be less, like .5 or .25 to indicate possible discount is justified.
6 Notes text Any notes that the tech wishes to include regarding this situation.
7 YearValue int(11) Required when generating a new provider key. It is used to determine annual EHR eligibility. Format will always be YY.

ehrquarterlykey
Also used by OD customer support to store and track Ehr Quarterly Keys for customers.
Order Name Type Summary
0 EhrQuarterlyKeyNum bigint(20) Primary key.
1 YearValue int(11) Example 11
2 QuarterValue int(11) Example 2
3 PracticeName varchar(255) The customer must have this exact practice name entered in practice setup.
4 KeyValue varchar(255) The calculated key value, tied to year, quarter, and practice name.
5 PatNum bigint(20) FK to patient.PatNum. Always zero for customer databases. When used by OD customer support, this is the customer num.
6 Notes text Any notes that the tech wishes to include regarding this situation.

ehrsummaryccd
Can also be a CCR. Received CCDs/CCRs are stored both here and in emailattach. Sent CCDs are not saved here, but are only stored in emailattach. To display a saved Ccd, it is combined with an internal stylesheet.
Order Name Type Summary
0 EhrSummaryCcdNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 DateSummary date Date that this Ccd was received.
3 ContentSummary longtext The xml content of the received text file.
4 EmailAttachNum bigint(20) FK to emailattach.EmailAttachNum. The Direct email attachment where the CCD xml message came from. Needed to sync PatNum with the email PatNum if the PatNum is changed on the email.

ehrtrigger
CDS Triggers when referenced in UI. Used for CDS automation. May later be expanded to replace "automation."
Order Name Type Summary
0 EhrTriggerNum bigint(20) Primary key.
1 Description varchar(255) Short description to describe the trigger.
2 ProblemSnomedList text
3 ProblemIcd9List text
4 ProblemIcd10List text
5 ProblemDefNumList text
6 MedicationNumList text
7 RxCuiList text
8 CvxList text
9 AllergyDefNumList text
10 DemographicsList text Age, Gender. Can be multiple age entries but only one gender entry as coma delimited values. Example: " age,>18 age,<=55 gender,male"
11 LabLoincList text List of loinc codes padded with spaces.
12 VitalLoincList text Examples: Height,>=72 Weight<,100 BMI= (BP currently not implemented.)
13 Instructions text The reccomended course of action for this intervention.
14 Bibliography text Bibliographic information, not a URL.
15 Cardinality tinyint(4) Enum:MatchCardinality Requires One, OneOfEachCategory, TwoOrMore, or All for trigger to match.
One: 0 - If any one of the conditions are met from any of the categories.
OneOfEachCategory: 1 - Must have one match from each of the categories with set values. Categories are :Medication, Allergy, Problem, Vitals, Age, Gender, and Lab Results.
TwoOrMore: 2 - Must match any two conditions, may be from same category.
All: 3 - Must match every code defined in the EhrTrigger.

electid
Corresponds to the electid table in the database. Helps with entering elecronic/payor id's as well as keeping track of the specific carrier requirements. Only used by the X12 format.
Order Name Type Summary
0 ElectIDNum bigint(20) Primary key.
1 PayorID varchar(255) aka Electronic ID. A simple string. This is not necessarily unique between different CarrierNames. Also, different clearinghouses use different systems of PayorIDs.
2 CarrierName varchar(255) Used when doing a search.
3 IsMedicaid tinyint True if medicaid. Then, the billing and treating providers will have their Medicaid ID's attached.
4 ProviderTypes varchar(255) Integers separated by commas. Each long represents a ProviderSupplementalID type that is required by this insurance. Usually only used for BCBS or other carriers that require supplemental provider id's. Even if we don't put the supplemental types in here, the user can still add them. This just helps by doing an additional check for known required types.
5 Comments text Any comments. Usually includes enrollment requirements and descriptions of how to use the provider id's supplied by the carrier because they might call them by different names.
6 CommBridge tinyint(4) Enum:EclaimsCommBridge Where this Electronic ID came from. Will be 0 if created by the user. Currently, only ClaimConnect and EDS are supported.
None: 0-No comm bridge will be activated. The claim files will be created to the specified path, but they will not be uploaded.
WebMD: 1
BCBSGA: 2
Renaissance: 3
ClaimConnect: 4
RECS: 5
Inmediata: 6
AOS: 7
PostnTrack: 8
ITRANS: 9 Canadian clearinghouse.
Tesia: 10
MercuryDE: 11
ClaimX: 12
DentiCal: 13
EmdeonMedical: 14
Claimstream: 15 Canadian clearinghouse.
NHS: 16 UK clearinghouse.
EDS: 17
Ramq: 18
EdsMedical: 19
Lantek: 20
ITRANS2: 21 Canadian clearinghouse. Similar to ITRANS except supports certificate and carrier list web fetching.
VyneDental: 22
7 Attributes varchar(255) Comma delimited list of which PayerAttributes of a CommBridge are supported by this Electronic ID. Example: "0,2,8". Enum values for either EnumClaimConnectPayerAttributes or EnumEDSPayerAttributes.

emailaddress
Stores all the connection info for one email address. Linked to clinic by clinic.EmailAddressNum. Sends email based on patient's clinic.
Order Name Type Summary
0 EmailAddressNum bigint(20) Primary key.
1 SMTPserver varchar(255) For example smtp.gmail.com
2 EmailUsername varchar(255) .
3 EmailPassword varchar(255) Password associated with this email address. Encrypted when stored in the database and decrypted before using.
4 ServerPort int(11) Usually 587, sometimes 25 or 465.
5 UseSSL tinyint(4) .
6 SenderAddress varchar(255) The email address of the sender as it should appear to the recipient.
7 Pop3ServerIncoming varchar(255) For example pop.gmail.com
8 ServerPortIncoming int(11) Usually 110, sometimes 995.
9 UserNum bigint(20) FK to userod.UserNum. Associates a user with this email address. A user may only have one email address associated with them. Can be 0 if no user is associated with this email address.
10 AccessToken varchar(2000) Needed for OAuth.
11 RefreshToken text Needed for OAuth.
12 DownloadInbox tinyint(4) When true, this will allow the user to download emails to their inbox.
13 QueryString varchar(1000) Allows gmail users to specify search parameters
14 AuthenticationType tinyint(4) Enum:OAuthType None=0,Google=1,Microsoft=2. Indicates which OAuth type to use for the email address.
None: 0 - Aka Using Password. Not using OAuth
Google: 1 - Using OAuth for Google
Microsoft: 2 - Using OAuth for Microsoft

emailattach
Keeps track of one file attached to an email. Multiple files can be attached to an email using this method.
Order Name Type Summary
0 EmailAttachNum bigint(20) Primary key.
1 EmailMessageNum bigint(20) FK to emailmessage.EmailMessageNum. 0 if EmailTemplateNum is set, otherwise must have a value.
2 DisplayedFileName varchar(255) The name of the file that shows on the email. For example: tooth2.jpg.
3 ActualFileName varchar(255) The actual file is stored in the A-Z folder in EmailAttachments. This field stores the sub directories and name of the file. The files are named automatically based on Date/time along with a random number. This ensures that they will be sequential as well as unique.
4 EmailTemplateNum bigint(20) FK to emailtemplate.EmailTemplateNum. 0 if EmailMessageNum is set, otherwise must have a value.

emailautograph
A manually created autograph that can be inserted at the bottom of an outgoing email.
Order Name Type Summary
0 EmailAutographNum bigint(20) Primary key.
1 Description text Description of the autograph. This is what the user sees when picking an autograph.
2 EmailAddress varchar(255) Email address(es) that this autograph is associated with. An autograph can be associated with multiple addresses.
3 AutographText text The actual text of the autograph.

emailhostingtemplate
Order Name Type Summary
0 EmailHostingTemplateNum bigint(20) Primary key.
1 TemplateName varchar(255) Name of the template.
2 Subject text Default subject line.
3 BodyPlainText mediumtext Body of the email
4 BodyHTML mediumtext Body of the email. When email is regular html this will only contain the body text. Will contain full html when email type is RawHtml
5 TemplateId bigint(20) The email hosting template's identifier
6 ClinicNum bigint(20) FK to clinic.ClinicNum
7 EmailTemplateType varchar(255) Enum:EmailType The type of email template this is (Regular HTML or Full HTML)
Regular: 0 - This is a regular email that may contain our special wiki markup. Not converted to html.
Html: 1 - Html. Basic html email which uses the master template supplied by OD. Template includes header, styles, and the opening body tag. The user only needs to provide the body itself, which can inclcude tags that get automatically replaced.
RawHtml: 2 - More advanced html that does not include the master template. User must provide everything.
8 TemplateType varchar(255) Enum:PromotionType the type of mass email this template is for
Manual: 0 - Signifies Manually Sent Promotions like from Mass Emails
Birthday: 1 - Signifies Birthday Greetings
Treatment: 2 - Promotional Treatment
Special: 3 - Special Promotions

emailmessage
Stores both sent and received emails, as well as saved emails which are still in composition.
Order Name Type Summary
0 EmailMessageNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum. The patient whom is sending this message. May be sent by a guarantor on behalf of a dependent.
2 ToAddress text Either a single email address or a comma-delimited list of addresses. For web mail messages, this will not be an email address. Instead, it will be the name of the corresponding patient or provider.
3 FromAddress text Valid email address. For web mail messages, this will not be an email address. Instead, it will be the name of the corresponding patient or provider.
4 Subject text Subject line.
5 BodyText longtext Body of the email. Both this and HtmlText are required if this is an HTML email.
6 MsgDateTime datetime Date and time the message was sent. Automated at the UI level.
7 SentOrReceived tinyint Enum:EmailSentOrReceived Neither, Received, Read, WebMailReceived, WebMailRecdRead, WebMailSent, WebMailSentRead, SentDirect, ReceivedEncrypted, ReceivedDirect, ReadDirect, AckDirectProcessed, AckDirectNotSent
Neither: 0 Unsent
Sent: 1 For regular email only.
Received: 2 For regular email only. Shows in Inbox. Once it's attached to a patient it will also show in Chart module.
Read: 3 For received regular email only. Has been read. Shows in Inbox. Once it's attached to a patient it will also show in Chart module.
WebMailReceived: 4 WebMail received from patient portal. Shows in OD Inbox and in pt Chart module. Also shows in PP as a sent and unread WebMail msg.
WebMailRecdRead: 5 WebMail received from patient portal that has been marked read. Shows in the OD Inbox and in pt Chart module. Also shows in PP as a sent and read WebMail.
WebMailSent: 6 Webmail sent from provider to patient. Shows in Chart module and also shows in PP as a received and unread WebMail msg.
WebMailSentRead: 7 Webmail sent from provider to patient and read by patient. Shows in Chart module and also shows in PP as a received and read WebMail msg.
SentDirect: 8 Sent and encrypted using Direct. Required for counting messages in EHR modules g.1 and g.2, Automated Measure Calculation.
ReceivedEncrypted: 9 Received email matches application/pkcs7-mime mime type, but could not be decrypted. Shows in Inbox. The user can decrypt from FormEmailMessageEdit. If the user has the correct private key, then the status will change to Read.
ReceivedDirect: 10 Received email matches application/pkcs7-mime mime type and has been decrypted. Shows in Inbox. Once it's attached to a patient it will also show in Chart module. When viewing inside of FormEmailMessageEdit, the XML body of the message shows as xhtml instead of raw. Still need to work on supporting collapsing and expanding, as required for meaningful use in 2014.
ReadDirect: 11 For received direct messages. Has been read. Shows in Inbox. Once it's attached to a patient it will also show in Chart module. When viewing inside of FormEmailMessageEdit, the XML body of the message shows as xhtml.
AckDirectProcessed: 12 Message Delivery Notification (MDN) processed. Always outgoing. Indicates to sender that a Direct message was received and decrypted, but not necessarily displayed for the user. Does not show in patient Chart. Attached to the same patient as the incoming email which caused the MDN to be sent.
AckDirectNotSent: 13 Message Delivery Notification (MDN) created and saved to db, but not sent yet. Does not show in patient Chart. Attached to the same patient as the incoming email which caused the MDN to be created. This status is used to try resending MDNs if they fail to send. The MDN is saved to the db so the unset MDNs can be found easily, and also because MDNs are hard to rebuild again later.
SecureEmailSent: 14 Email sent via EmailHostingAPI.
SecureEmailReceivedUnread: 15 Email received via EmailHostingAPI. Has not been read.
SecureEmailReceivedRead: 16 Email sent via EmailHostingAPI. has been read.
SendFailed: 17 Email failed to send.
8 RecipientAddress varchar(255) Copied from the EmailAddress.EmailUsername field when a message is received into the inbox. Similar to the ToAddress, except the ToAddress could contain multiple recipient addresses or group email address instead. The recipient address helps match the an email to a particular EmailAddress.
9 RawEmailIn longtext For incomming email only. The raw email contents for encrypted email or email which we had trouble parsing. For unencrypted (clear text) email, this will be similar to the raw email except the attachments will be dissolved to prevent db bloating. Can be used for debugging if there are any issues parsing the content. This will bloat the database a little bit, but we need it for now to ensure our inbox is working in real world scenarios. Might be blank for a few emails downloaded immediately after the email inbox feature was created.
10 ProvNumWebMail bigint(20) FK to provider.ProvNum. The provider to whom this message was sent or from whom this message was sent. Only used when EmailSentOrReceived is WebMailReceived, WebMailRecdRead, WebMailSent, or WebMailSentRead. Will be 0 if not a web mail message.
11 PatNumSubj bigint(20) FK to patient.PatNum. Represents the patient to whom this email message is addressed, or from whom it is being sent on behalf of. If guarantor is sending on behalf of self then this field will match PatNum field.
12 CcAddress text Single address or comma-delimited list of addresses. User may enter multiple email addresses for visible carbon copies.
13 BccAddress text Single email address or comma-delimited list of addresses. User may enter multiple email addresses for blind carbon copies.
14 HideIn tinyint(4) Enum:HideInFlags None=0,EmailInbox=1,ApptEdit=2,ContrChartProgNotes=4,ContrAccountGridProg. Indicates which places in the program that should not show this email message, bitwise. 0 means don't hide anywhere.
None: 0 - None
EmailInbox: 1 - Hide email from EmailInbox grids
ApptEdit: 2 - Hide email from Appointment Edit grid
ChartProgNotes: 4 - Hide email from ContrChart ProgNotes grid
AccountProgNotes: 8 - No Longer Used - Was used to hide email from ContrAcount ProgNotes grid
AccountCommLog: 16 - Hide email from ContrAcount CommLog grid
15 AptNum bigint(20) FK to appointment.AptNum. Used to a attach an email to an appointment for eReminders and eConfirmations.
16 UserNum bigint(20) FK to userod.UserNum. Optional. 0 if unknown (ex recieved emails).
17 HtmlType tinyint(4) Enum:EmailType
Regular: 0 - This is a regular email that may contain our special wiki markup. Not converted to html.
Html: 1 - Html. Basic html email which uses the master template supplied by OD. Template includes header, styles, and the opening body tag. The user only needs to provide the body itself, which can inclcude tags that get automatically replaced.
RawHtml: 2 - More advanced html that does not include the master template. User must provide everything.
18 SecDateTEntry datetime Timestamp automatically generated and user not allowed to change. The actual date of entry.
19 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
20 MsgType varchar(255) Enum:EmailMessageSource Stored in db as string. This is used to identify where in the program this message originated from. This is used for sent email messages.
Undefined: Should not be used.
Legacy: This is used for all existing messages prior to v21.1.6.0.
Confirmation: Confirmation messages.
Cryo: Oregon Cryonics.
EConfirmation: Auto eConfirmation messages.
EHR: EHR messages.
EReminder: Auto eReminder messages.
Forward: Forward messages.
Hosting: Generated by Open Dental email hosting.
JobManager: Jobmanager messages.
Manual: Manual messages by office.
PatPortalInvite: Auto Patient portal invites.
PatPortalReset: Auto Patient portal pass code reset.
PaymentReceipt: Payment receipt.
Promotion: Auto Promotion messages.
Recall: Recall messages.
Reply: Reply messages.
Sheet: Sheet messages.
Statement: Statement messages.
ThankYou: Auto Thankyou messages.
TreatmentPlan: Treatment plan messages.
Verification: Auto verification messages.
WebMail: Webmail messages.
WebSchedASAP: Auto websched ASAP messages.
WebSchedRecall: Auto websched recall messages.
GeneralMessage: Appointment General Message.
NewPatThankYou: New patient web form thank you message.
MsgToPay: Payment Portal Msg-To-Pay message
EClipboardWeb: EClipboard Web URL message
21 FailReason text Reason the message failed to send. Blank if sent successful.

emailmessageuid
Used to track which email messages have been downloaded into the inbox for a particular recipient address. Not linked to the email message itself because no link is needed. If we decide to add a foreign key to a EmailMessage later, we should consider what do to when an email message is deleted (set the foreign key to 0 perhaps).
Order Name Type Summary
0 EmailMessageUidNum bigint(20) Primary key.
1 MsgId text The unique id for the associated EmailMessage.
2 RecipientAddress varchar(255) Copied from the EmailAddress.EmailUsername field when a message is received into the inbox. Similar to the ToAddress of the EmailMessage, except the ToAddress could contain multiple recipient addresses or group email address instead. The recipient address helps match the EmailMessageUid to a particular EmailAddress.

emailsecure
Tracks every secure email sent and received from or to a patient.
Order Name Type Summary
0 EmailSecureNum bigint(20) Primary key.
1 ClinicNum bigint(20) FK to clinic.ClinicNum.
2 PatNum bigint(20) FK to patient.PatNum.
3 EmailMessageNum bigint(20) FK to emailmessage.EmailMessageNum. 0 indicates email has not been successfully downloaded from API yet.
4 EmailChainFK bigint(20) FK to emailchain.EmailChainNum, as hosted by API. Table does not exist at dental office.
5 EmailFK bigint(20) FK to email.EmailNum, as hosted by API. Table does not exist at dental office.
6 DateTEntry datetime DateTime the entry was inserted
7 SecDateTEdit timestamp DateTime the entry was edited.

emailsecureattach
Tracks every attachment linked to a secure email.
Order Name Type Summary
0 EmailSecureAttachNum bigint(20) Primary key.
1 ClinicNum bigint(20) FK to clinic.ClinicNum.
2 EmailAttachNum bigint(20) FK to emailattach.EmailAttachNum. 0 indicates attachment has not been successfully downloaded from API yet.
3 EmailSecureNum bigint(20) FK to emailsecure.EmailSecureNum.
4 AttachmentGuid varchar(50) Attachment identifier, as hosted by API. Table does not exist at dental office.
5 DisplayedFileName varchar(255) The displayed name of the file/object.
6 Extension varchar(255) The extension of the object (i.e. png).
7 DateTEntry datetime DateTime the entry was inserted.
8 SecDateTEdit timestamp DateTime the entry was edited.

emailtemplate
A template email which can be used as the basis for a new email.
Order Name Type Summary
0 EmailTemplateNum bigint(20) Primary key.
1 Subject text Default subject line.
2 BodyText text Body of the email
3 Description text Different than Subject. The description of the email template. This is what the user sees in the list.
4 TemplateType tinyint(4) Enum:EmailType
Regular: 0 - This is a regular email that may contain our special wiki markup. Not converted to html.
Html: 1 - Html. Basic html email which uses the master template supplied by OD. Template includes header, styles, and the opening body tag. The user only needs to provide the body itself, which can inclcude tags that get automatically replaced.
RawHtml: 2 - More advanced html that does not include the master template. User must provide everything.

employee
An employee at the dental office.
Order Name Type Summary
0 EmployeeNum bigint(20) Primary key.
1 LName varchar(255) Employee's last name.
2 FName varchar(255) First name.
3 MiddleI varchar(255) Middle initial or name.
4 IsHidden tinyint If hidden, the employee will not show on the list.
5 ClockStatus varchar(255) This is just text used to quickly display the clockstatus. eg Working,Break,Lunch,Home, etc.
6 PhoneExt int(11) The phone extension for the employee. e.g. 101,102,etc. This field is only visible for user editing if the pref DockPhonePanelShow is true (1).
7 PayrollID varchar(255) Used to store the payroll identification number used to generate payroll reports. ADP uses six digit number between 000051 and 999999.
8 WirelessPhone varchar(255)
9 EmailWork varchar(255)
10 EmailPersonal varchar(255)
11 IsFurloughed tinyint(4)
12 IsWorkingHome tinyint(4)
13 ReportsTo bigint(20) FK to employee.EmployeeNum
14 Title bigint(20) FK to definition.DefNum. This category is DefCat.EmployeeTitles (DefCat=56) for their Job title.

employer
Most insurance plans are organized by employer. This table keeps track of the list of employers. The address fields were added at one point, but I don't know why they don't show in the program in order to edit. Nobody has noticed their absence even though it's been a few years, so for now we are just using the EmpName and not the address.
Order Name Type Summary
0 EmployerNum bigint(20) Primary key.
1 EmpName varchar(255) Name of the employer.
2 Address varchar(255) .
3 Address2 varchar(255) Second line of address.
4 City varchar(255) .
5 State varchar(255) 2 char in the US.
6 Zip varchar(255) .
7 Phone varchar(255) Includes any punctuation.

encounter
Mostly used for EHR. This rigorously records encounters using rich automation, so that reporting can be easy and meaningful. Encounters can also be tracked separately using billable procedures. In contrast, encounters in this table are not billable. There can be multiple encounters at one appointment because there can be different types.
Order Name Type Summary
0 EncounterNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 ProvNum bigint(20) FK to provider.ProvNum.
3 CodeValue varchar(30) FK to ehrcode.CodeValue. This code may not exist in the ehrcode table, it may have been chosen from a bigger list of available codes. In that case, this will be a FK to a specific code system table identified by the CodeSystem column. The code for this item from one of the code systems supported. Examples: 185349003 or 406547006.
4 CodeSystem varchar(30) FK to codesystem.CodeSystemName. This will determine which specific code system table the CodeValue is a FK to. We only allow the following CodeSystems in this table: CDT, CPT, HCPCS, and SNOMEDCT.
5 Note text
6 DateEncounter date Date the encounter occurred

entrylog
Stores entries made for AppointmentCreate. Acts as an additional securitylog entry.
Order Name Type Summary
0 EntryLogNum bigint(20) Primary key.
1 UserNum bigint(20) FK to userod.UserNum
2 FKeyType tinyint(4) Enum:EntryLogFKeyType
Appointment: 0. For this type, FKey is securitylog.FKey.
3 FKey bigint(20) FK to securitylog.FKey (FKeyType is always 0).
4 LogSource tinyint(4) Enum:LogSources
None: 0 - Open Dental and unknown entities.
WebSched: 1 - GWT Web Sched application Recall version.
InsPlanImport834: 2 - X12 834 Insurance Plan Import from the Manage Module.
HL7: 3 - HL7 is an automated process which the user may not be aware of.
DBM: 4 - Database maintenance. This process creates patients which are known to be missing, but the user may not be aware that the fix involves patient recreation.
FHIR: 5 - FHIR is an automated process which the user may not be aware of.
PatientPortal: 6 - Patient Portal application.
WebSchedNewPatAppt: 7 - GWT Web Sched application New Patient Appointment version
AutoConfirmations: 8 - Automated eConfirmation and eReminders
Diagnostic: 9 - Open Dental messages created for debugging and diagnostic purposes. For example, to diagnose an unhandled exception or unexpected behavior that is otherwise too hard to diagnose.
MobileWeb: 10 - Mobile Web application.
CanadaEobAutoImport: 11 - When retrieving reports in the background of FormOpenDental
WebSchedASAP: 12 - Web Sched application for moving ASAP appointments.
OpenDentalService: 13 - OpenDentalService.
BroadcastMonitor: 14 - Broadcast Monitor.
AutoLogOff: 15 - Automatic log off from main form. Used to track when auto log off needs to kill the program to force close open forms which are blocked or slow to respond.
ODMobile: 16 - ODMobile App.
TextMessaging: 17 - Open Dental text messaging.
CareCredit: 18 - CareCredit.
WebSchedExistingPatient: 19 - GWT Web Sched application Existing Patient Appointmention version
eRx: 20 - eRx
SignupPortal: 21 - SignupPortal
EmployerImport834: 22 - X12 834 Employer Import from the Manage Module.
API: 23 - The non-FHIR API.
ClaimReceiveAutomatic: 24 - Indicates that a claim was automatically received.
PaymentPortal: 25 - Indicates that a payment was made from the Payment Portal.
Era835Import: 26 - X12 835 ERA automatic import.
ODTouch: 27 - ODTouch mobile application.
eClipboard: 28 - eClipboard mobile application.
5 EntryDateTime datetime The date and time of the entry. Its value is set when inserting and can never change. Even if a user changes the date on their computer, this remains accurate because it uses server time.

eobattach
One file attached to an eob (claimpayment). Multiple files can be attached to an eob using this method. Order shown will be based on date/time scanned.
Order Name Type Summary
0 EobAttachNum bigint(20) Primary key.
1 ClaimPaymentNum bigint(20) FK to claimpayment.ClaimPaymentNum. Will be zero if this eobattach is for a preauthorization.
2 DateTCreated datetime Date/time created.
3 FileName varchar(255) The file is stored in the A-Z folder in 'EOBs' folder. This field stores the name of the file. The files are named automatically based on Date/time along with EobAttachNum for uniqueness.
4 RawBase64 text The raw file data encoded as base64. Only used if there is no AtoZ folder.
5 ClaimNumPreAuth bigint(20) FK to claim.ClaimNum of a preauthorization. Will be zero if this eobattach is for a claimpayment.

equipment
Used for property tax tracking.
Order Name Type Summary
0 EquipmentNum bigint(20) Primary key.
1 Description text Short description, need not be very unique.
2 SerialNumber varchar(255) Must be unique among all pieces of equipment. Auto-generated 3 char alpha numeric gives 1.5M unique serial numbers. Zero never part of autogenerated serial number.
3 ModelYear varchar(2) Limit 2 char.
4 DatePurchased date Date when this corporation obtained the equipment. Always has a valid value.
5 DateSold date Normally 01-01-0001 if equipment still in possession. Once sold, a date will be present.
6 PurchaseCost double .
7 MarketValue double .
8 Location text Freeform text.
9 DateEntry date Security uses this date to lock older entries from accidental deletion. Date, no time.
10 ProvNumCheckedOut bigint(20) FK to provider.ProvNum. Only filled in if equipment has been checked out, otherwise 0.
11 DateCheckedOut date Only used when equipment has been checked out.
12 DateExpectedBack date Only used when equipment has been checked out. Defaults to same day as check out.
13 DispenseNote text Any notes regarding the equipment checked out.
14 Status text Status of the equipment.

erouting
A set of actions to take in sequence for each interaction with a specific patient. Individual actions are in eRoutingAction. Templates are in eRoutingDef. Only used in eClipboard for now.
Order Name Type Summary
0 ERoutingNum bigint(20) Primary Key.
1 Description varchar(255) Copied from eRoutingDef.
2 PatNum bigint(20) FK to patient.PatNum. The patient this eRouting is for.
3 ClinicNum bigint(20) FK to clinic.ClinicNum. The clinic this patient eRouting is in. Set to 0 if in headquarters or clinics are disabled.
4 SecDateTEntry datetime The DateTime this eRouting was created. eRoutings are created when they are started. Not able to edited by the user.
5 IsComplete tinyint(4) eRouting is considered complete if this is true. Used on backend to get incomplete eRouting without checking eRoutingActions

eroutingaction
A single action attached to a eRouting. Only used in eClipboard for now.
Order Name Type Summary
0 ERoutingActionNum bigint(20) Primary Key
1 ERoutingNum bigint(20) FK to erouting.ERoutingNum
2 ItemOrder int(11) Copied from eRoutingActionDef.ItemOrder.
3 ERoutingActionType tinyint(4) Enum:EnumERoutingActionType
None: 0-Shouldn't be present in db. Used in UI when user has not yet picked an action type.
PerioChart: 1-Perio Chart
TreatmentPlan: 2-Treatment Plan
PaymentPlan: 3-Payment Plan
ChartProcedures: 4-Chart Procedures
Imaging: 5-Imaging
CompleteAppointment: 6-Complete Appointment
TakePayment: 7-Take Payment
ScheduleFollowup: 8-Schedule Follow up
eRx: 9-ERX
ExamSheet: 10-Exam Sheet
ConsentForm: 11-Consent Form
Medical: 12-Medical
ChecklistItem: 13-Checklist Item
4 UserNum bigint(20) FK to userod.UserNum. This is the user that completed the action. If not complete, this will be 0.
5 IsComplete tinyint(4) True if marked complete, otherwise set to false.
6 DateTimeComplete datetime The date and time this action was set complete by the user.
7 ForeignKeyType tinyint(4) Enum:EnumERoutingFKType Indicates the type of object that ForeignKey references. None=0, Sheet=1
8 ForeignKey bigint(20) Sheet for Consent forms. FK to sheet.SheetNum AND ForeignKeyType=1.
9 LabelOverride varchar(255) Override for the title of the eRouting Action. This will be shown in the eClipboard UI instead of EnumERoutingActionType description if it is present.

eroutingactiondef
A single action attached to an ERoutingDef. Changing these does not alter any patient records. Only used in ODTouch for now.
Order Name Type Summary
0 ERoutingActionDefNum bigint(20) PK
1 ERoutingDefNum bigint(20) FK to erouting.eRoutingDefNum. Defines what eRouting this action is tied to
2 ERoutingActionType tinyint(4) Enum:EnumeRoutingActionType
3 ItemOrder int(11) Determines the order the items show in the eRoutingactiondef and what order they are to be completed in.
4 SecDateTEntry datetime The date this action definition was created. Not able to edited by the user.
5 DateTLastModified datetime The date time this action was last changed. Not able to be edited by the user.
6 ForeignKeyType tinyint(4) Enum:EnumERoutingDefFKType Indicates the type of object that ForeignKey references. None=0, SheetDef=1
7 ForeignKey bigint(20) SheetDef for Consent forms. FK to sheetdef.SheetDefNum AND ForeignKeyType=1.
8 LabelOverride varchar(255) Override for the title of the eRouting Action. This will be shown in the eClipboard UI instead of EnumERoutingActionType description if it is present.

eroutingdef
A set of actions to take in sequence for each interaction with a patient. Individual actions are in eRoutingActionDef. Changing these does not alter any patient records. Only used in eClipboard for now.
Order Name Type Summary
0 ERoutingDefNum bigint(20) Primary key.
1 ClinicNum bigint(20) FK to clinic.ClinicNum. Represents the clinic that the eRouting is tied to, if any. Can be 0.
2 Description varchar(255) The name of the eRouting.
3 UserNumCreated bigint(20) FK to userod.UserNum. The user that created this eRouting. Cannot be edited by user.
4 UserNumModified bigint(20) FK to userod.UserNum. The user that last edited this eRouting. Cannot be edited by user.
5 SecDateTEntered datetime Date Time this eRouting was created. Cannot be edited by user.
6 DateLastModified datetime Date time this eRouting was last edited. Cannot be edited by user.

eroutingdeflink
There can be multiple eRoutingDefLinks for each eRoutingDef. For example, one eRoutingDef could have 4 appointment types as well as a billing type, for a total of 5 eRoutingDefLinks. If an appointment has a matching AppointmentType and BillingType, then that eRouting is used.
Order Name Type Summary
0 ERoutingDefLinkNum bigint(20) PK
1 ERoutingDefNum bigint(20) FK to eroutingdef.eRoutingDefNum.
2 Fkey bigint(20) FK to appointmenttype.AppointmentTypeNum AND ERoutingType=1, FK to definition.DefNum AND ERoutingType=2.
3 ERoutingType tinyint(4) Enum:EnumeRoutingType

erxlog
Order Name Type Summary
0 ErxLogNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 MsgText mediumtext Holds up to 16MB.
3 DateTStamp timestamp Automatically updated by MySQL every time a row is added or changed.
4 ProvNum bigint(20) FK to provider.ProvNum. The provider that the prescription request was sent by or on behalf of.
5 UserNum bigint(20) FK to userod.UserNum. The user that created the erx.

eservicelog
Stores an ongoing record of EServices activity. User not allowed to edit.
Order Name Type Summary
0 EServiceLogNum bigint(20) Primary key.
1 LogDateTime datetime The date and time of the entry. It's value is set when inserting and can never change. Even if a user changes the date on their computer, this remains accurate because it uses server time.
2 PatNum bigint(20) FK to patient.PatNum. Can be 0 if not applicable.
3 EServiceType tinyint(4) Enum:eServiceType Indicates which eService feature this log entry is associated with, such as Web Sched, Patient Portal, or eClipboard.
Unknown: 0. In the case of an action, this means Unknown.
WSRecall: 1. This means the action done was a Web Sched Recall.
WSNewPat: 2. This means the action done was for a New Patient.
WSExistingPat: 3. This means the action done was for an Existing Patient.
WSAsap: 4. This means the action done was for a Web Sched ASAP.
PatientPortal: 5. This means the action done was for a Patient Portal.
EClipboard: 6. This means the action done was for a Mobile Checkin.
ApptConfirmations: 7. This means the action done was for a Appointment Confirmations.
WebForms: 8. This means the action done was for a WebForm.
WSGeneral: 9. This means the action done was for unspecified WebSched.
Arrivals: 10. This means the action done was for Arrivals.
IntegratedTexting: 11. This means the action done was for Integrated Texting.
ODTouch: 12. This means the action done was for the mobile app ODTouch.
PaymentPortal: 13. This means the action done was for the Payment Portal.
BetterDiag: 14. This means the action done was for the Better Diagnostics AI bridge.
MassEmail: 15. This means the action was done for Mass Email.
Pearl: 16. This means the action was done for the Pearl AI bridge. Pearl is technically not an eService, but is logged using this table.
AddressValidation: 17. Deprecated. We only used this for a short time at HQ. It has been replaced by a serviceshqlog.WebLog entry. This means the action was done for Address Validation API usage.
4 EServiceAction smallint(6) Enum:eServiceAction Describes the specific action or event that occurred within the eService, such as scheduling an appointment, submitting a form, or logging in.
Undefined: 0 - Should not be in the database.
WSHomeView: 1 - Patient arrives at home view.
WSServiceSelect: 2 - Patient chooses between new/existing/recall appointment on home view.
WSIdentify: 3 - Patient identifies themselves.
WSScheduler: 4 - Patient arrives at the scheduler page.
WSMonthSwitch: 5 - Patient switches months in the timeslot picker.
WSTimeSlotChoose: 6 - Patient selects an open timeslot.
WSConfirmationPopup: 7 - Patient recieves the confirmation popup.
WSDateTimeYes: 8 - Patient accepted the datetime.
WSDateTimeNo: 9 - Patient declines the datetime.
WSTwoFactorSent: 10 - Patient was sent a 2FA code.
WSTwoFactorPassed: 11 - Patient successfully passed 2FA.
WSAppointmentScheduleFromClient: 12 - Patient schedules appointment.
WSAppointmentScheduledFromServer: 13 - Appointment scheduled.
CONFConfirmedAppt: 14 - Appointment confirmation.
WSMovedAppt: 15 - Appointment has been moved.
PPLoggedIn: 16 - Patient logged into patient portal.
PPMadePayment: 17 - Deprecated. Do not use.
ECAddedForm: 18 - Form created.
ECCompletedForm: 19 - Form was filled out.
ECLoggedIn: 20 - eClipboard Checked In.
WFCompletedForm: 21 - Web Forms Form Completed.
WSRecallNotFound: 22 - Web Sched Recall Not Found.
WSRecallAlreadyScheduled: 23 - Web Sched Already Scheduled.
ArrivalReceived: 24 - Arrivals, patient arrived.
IntegratedTextingOptOut: 25 - Integrated Texting, Patient Opted Out.
PPStatementPortalArrived: 26 - Patient Portal, Patient Arrived At Statement Portal.
PPStatementPortalLoggedIn: 27 - Patient Portal, Patient Logged In At Statement Portal.
PPStatementPortalDownloadStatement: 28 - Patient Portal, Patient Downloaded Statement.
PPPaymentFormOpened: 29 - Patient Portal, Patient Opened Payment Form.
PPPaymentFormOpenedFromLogin: 30 - Patient Portal, Patient Opened Payment Form From Login.
PPOpenedHostedPaymentForm: 31 - Patient Portal, Patient Opened Hosted Payment Form.
PPPayWithExistingFromClient: 32 - Patient Portal, Patient Paid With Existing Card.
PPPaymentCreatedByXWeb: 33 - Patient Portal, Patient Submitted Payment With XWeb.
PPPaymentCreatedByPayconnect: 34 - Patient Portal, Patient Submitted Payment With PayConnect.
PPDuplicatePaymentAlert: 35 - Patient Portal, Patient Notified of Possible Duplicate Payment.
PPDuplicatePaymentAllowed: 36 - Patient Portal, Patient Allowed Submission of Duplicate Payment.
PPDuplicatePaymentDenied: 37 - Patient Portal, Patient Rejected Submission of Duplicate Payment.
ECCheckInBYOD: 38 - eClipboard - Check In for patients bringing their own device
ECCheckInStarted: 39 - eClipboard - Check In process started
ECCheckInArrived: 40 - eClipboard - Check In Arrived
ECCheckInSubmitted: 41 - eClipboard - Check In Submitted
ECCheckInErrorApptNotFound: 42 - eClipboard - Check In Error: Appt Not Found
ECCheckInErrorPatNumNotLinkedToAppt: 43 - eClipboard - Check In Error: PatNum Not Linked To Appt
ECCheckInErrorDeviceSetupForOtherClinic: 44 - eClipboard - Error: Device Setup for Other Clinic
ECCheckInErrorDeviceNotAllowedForCheckin: 45 - eClipboard - Check In Error: Device Not Allowed for Checkin
ECCheckInErrorOfficeDeviceUsedAsBYOD: 46 - eClipboard - Check In Error: Office Device used as BYOD
ECCheckInErrorNoApptFoundBYOD: 47 - eClipboard - Check In Error: No Appointment Found BYOD
ECCheckInErrorNoApptFound: 48 - eClipboard - Check In Error: No Appt Found
ECCheckInErrorMultiplePatsFound: 49 - eClipboard - Check In Error: Multiple Pats Found
ECCheckInErrorSignatureError: 50 - eClipboard - Check In Error: Signature Error
ECCheckInErrorDeprecatedMethod: 51 - eClipboard - Check In Error: Deprecated Method
ECCheckInConfirmedApptWithProvYes: 52 - eClipboard - Check In Confirmed Appt With Prov - Yes
ECCheckInConfirmedApptWithProvNo: 53 - eClipboard - Check In Confirmed Appt With Prov - No
ECCheckInListSubmittedWithPicture: 54 - eClipboard - Check In Took selfie before submitting
ECCheckInListSubmittedWithOutPicture: 55 - eClipboard - Check In List Did not take selfie before submitting
ECCheckInListErrorSubmittedWithoutAllItems: 56 - eClipboard - Check In List Error, submitted without all items
ECCheckInListXamSubmitError: 57 - eClipboard - Check In List Submit Xamarin Error
ECCheckInListSumbitSuccess: 58 - eClipboard - Check In Submit Success
ECCheckInListSumbitSuccessBYOD: 59 - eClipboard - Check In Submit Success BYOD
ECCheckInListSelectedItem: 60 - eClipboard - Check In List Selected Item
ECCheckInListSheetNextTapped: 61 - eClipboard - Check In List Sheet Next Tapped
ECCheckInListSheetPrevTapped: 62 - eClipboard - Check In List Sheet Prev Tapped
ECCheckInListSheetOfficeSignedTreatPlan: 63 - eClipboard - Check In List Sheet Office signed Treatment Plan
ECCheckInListSheetPatientSignedTreatPlan: 64 - eClipboard - Check In List Sheet Patient signed treatment plan
ECCheckInListSheetPatientSignedPaymentPlan: 65 - eClipboard - Check In List Sheet Patient signed Payment Plan
ECPatientDirectedToMakePayment: 66 - eClipboard - Check In List Sheet Patient signed Payment Plan
ECBYODValidationReached: 67 - eClipboard - BYOD 6 Digit validation page reached
ECBYODValidationFailed: 68 - eClipboard - BYOD 6 Digit validation failed
ECBYODValidationSuccess: 69 - eClipboard - BYOD 6 Digit validation success
EC2FactorAuthShown: 70 - eClipboard - 2 Factor Auth Screen Shown
EC2FactorAuthClosed: 71 - eClipboard - 2 Factor Auth Close Clicked
EC2FactorAuthEmailSelected: 72 - eClipboard - 2 Factor Auth Email Selected
EC2FactorAuthTextSelected: 73 - eClipboard - 2 Factor Auth Text Selected
EC2FactorAuthCodeSubmitted: 74 - eClipboard - 2 Factor Auth Code Submitted
EC2FactorAuthCodeSuccess: 75 - eClipboard - 2 Factor Auth Code Success
EC2FactorAuthCodeFail: 76 - eClipboard - 2 Factor Auth Code Fail
DoNotLog: 77 - Used in Xam Exceptions. If this is sent back, error will not be logged. Default eServiceAction for XamException.
ECOpenPaymentPage: 78 - eClipboard - patient opens payment page. Note should indicate where it is opened from
ECAddCreditCardTapped: 79 - eClipboard - User tapped "Add Card"
ECCreditCardManageDoneTapped: 80 - eClipboard - User tapped 'Done' on credit card manage page
ECCreditCardRemoved: 81 - eClipboard - User removed a credit card
ECCreditCardPaymentWithNewCard: 82 - eClipboard - User made payment with new credit card
ECCreditCardPaymentWIthExistingCard: 83 - eClipboard - User made payment with existing credit card
ECCreditCardPaymentCancelled: 84 - eClipboard - User tapped cancel when making a payment
ECCreditCardErrorDeleteCardNotFound: 85 - eClipboard - Error: Delete card not found
ECCreditCardErrorDeleteCardPatNumDoesNotMatch: 86 - eClipboard - Error: Delete credit card patnum does not match current patnum
ECCreditCardErrorDeleteCardInvalidAlias: 87 - eClipboard - Error: Delete credit card invalid alias
ECCreditCardErrorDeleteCardPatientNotFound: 88 - eClipboard - Error: Delete credit card patient not found
ECCreditCardErrorMakingPaymentWithAlias: 89 - eClipboard - Error: error making payment
ECCreditCardErrorMakingPaymentPatientNotFound: 90 - eClipboard - Error: Making Payment, patient not found
ECCreditCardErrorMakingPaymentInvalidAmount: 91 - eClipboard - Error: Making Payment, invalid amount
ECQRScanAttempt: 92 - EClipboard - QR scan window activated
ECQRScanCancel: 93 - EClipboard - QR scan window cancelled
ECQRScanOk: 94 - EClipboard - QR scan window success
ECSubmitSheetFailed: 95 - EClipboard - Error: Failed to submit sheet or eForm
WFDownloadedForm: 96 - Web Forms Form Downloaded.
WFDiscardedForm: 97 - Web Forms Form Discarded.
WFSkippedForm: 98 - Web Forms Form Skipped.
WFDeletedForm: 99 - Web Forms Form Deleted.
WFError: 100 - Web Forms Error.
WFCancelled: 101 - Web Forms Cancelled Import.
PayPortalArrived: 102 - Payment Portal - Unverified user arrived at the payment portal
PayPortalArrivedWithSessionToken: 103 - Payment Portal - Verified user arrived at the payment portal
PayPortalArrivedWithPayGuid: 104 - Payment Portal - User arrived at the payment portal via message-to-pay
SelectedPatient: 105 - Web App - User provided patient information within the patient selection view
PayPortalSwitchedToCorrectClinic: 106 - Payment Portal - Switched to selected patient's clinic
PayPortalRequestedCodeViaEmail: 107 - Payment Portal - User requested an email authentication code
PayPortalRequestedCodeViaSms: 108 - Payment Portal - User requested a text authentication code
PayPortalAuthenticatedViaEmail: 109 - Payment Portal - User verified identity with an email authentication code
PayPortalAuthenticatedViaSms: 110 - Payment Portal - User verified identity with an SMS authentication code
PayPortalUseAmountDue: 111 - Payment Portal - User opted to pay amount due
PayPortalEnteredPayAmount: 112 - Payment Portal - User entered a custom amount to pay
PayPortalSelectedPaymentMethod: 113 - Payment Portal - User selected an existing payment method
PayPortalHostedFormLoaded: 114 - Payment Portal - The make payment window was loaded
PayPortalPaymentSucceeded: 115 - Payment Portal - The payment was processed successfully
PayPortalClickedPrint: 116 - Payment Portal - The user printed their receipt
WebAppError: 117 - Web App - The user received an error
BetterDiagPass: 118 - Better Diagnostics AI - The BD API passed back 200 (OK).
BetterDiagFail: 119 - Better Diagnostics AI - The BD API passed back non 200 (not OK).
BetterDiagException: 120 - Better Diagnostics AI - The BD API thew an exception.
ECCheckinErrorEFormToImaging: 121 eClipboard - Error: Submitted EForm Failed to Save to Imaging Module.
MassEmailUpload: 122 - Mass Email - Email Addresses Uploaded
MassEmailUploadError: 123 - Mass Email - Email Addresses Uploaded
MassEmailReceipt: 124 - Mass Email Receipt
OcrInsuranceCardScannerError: 125 - eClipboard - OCR insurance card scanner error
PearlSentImage: 126 - Pearl - Image uploaded to Pearl API. Only logged once a day per clinic.
AppLoaded: 127 - Web Sched - The application loaded without issue
VerificationMethodSelected: 128 - Web Sched - User selected a two-factor authentication method
InsuranceInfoPresented: 129 - Web Sched - User arrived at the insurance information view
ApptReasonSelected: 130 - Web Sched - User selected an appointment reason
ApptConfirmPresented: 131 - Web Sched - User prompted to confirm appointment details
ApptConfirmAttempted: 132 - Web Sched - User confirmed their appointment details
ScheduleAnotherAppt: 133 - Web Sched - User chose to schedule another appointment
ODTouchDeviceEnabled: 134 - ODTouch - A device was updated.
ODTouchDeviceDisabled: 135 - ODTouch - A device was updated.
MobileDeviceAdded: 136 - Device Manager - A mobile device was added.
MobileDeviceDeleted: 137 - Device Manager - A mobile device was deleted.
AddressValidation: 138 - Deprecated. We only used this for a short time at HQ. It has been replaced by a serviceshqlog.WebLog entry. Address Validation - Sent address validation request to API.
5 KeyType smallint(6) Enum:FKeyType
Undefined: 0 Undefined.
ApptNum: 1 Appointment Number. For this type, FKey is appointment.AptNum.
PayNum: 2 Payment Number. For this type, FKey is payment.PayNum.
SheetNum: 3 Sheet Number. For this type, FKey is sheet.SheetNum.
UtmNum: 4 Utm Number.
WebFormSheetID: 5 Web Form Sheet Number.
SmsMtSentNum: 6 SmsMtSent Number
SmsMtTerminatedNum: 7 SmsMtTerminated Number
EFormNum: 8 EForm Number.
6 LogGuid varchar(36) Guid for logging actions with no associated PatNum.
7 ClinicNum bigint(20) Clinic Number.
8 FKey bigint(20) FK to appointment.AptNum AND KeyType=1, FK to payment.PayNum AND KeyType=2, FK to sheet.SheetNum AND KeyType=3.
9 DateTimeUploaded datetime The time this log was uploaded.
10 Note varchar(255) Additional information for the log. This is intentionally limited to 255 characters to prevent bloat. Add any new uses of this field to the list below. Provide the eServiceAction types and what the Note field represents for those types. PPPaymentCreatedByXWeb: The amount of the payment. PPPaymentCreatedByPayconnect: The amount of the payment. PPOpenedHostedPaymentForm: The name of the merchant service that the hosted payment form belongs to.

eserviceshortguid
For example, links a statement to a specific MsgToPay. ShortGuids are usually generated at ODHQ.
Order Name Type Summary
0 EServiceShortGuidNum bigint(20) Primary key.
1 EServiceCode varchar(255) Enum:eServiceCode EService that this short GUID applies to.
Undefined: 0 - Default. Use this when it does not otherwise matter and you just have to provide an eServiceCode..
ListenerService: 1 - Runs 1 instance per customer on a given client PC.
IntegratedTexting: 2 - Runs 1 instance total on HQ server.
HQProxyService: 3 - Runs 1 instance total on HQ server.
MobileWeb: 4 - EService WebApp.
PatientPortal: 5 - EService WebApp.
WebSched: 6 - EService WebApp. The "Recall" version of Web Sched.
WebForms: 7 - EService WebApp.
ResellerPortal: 8 - EService WebApp.
FeaturePortal: 9 - EService WebApp.
ConfirmationRequest: 10 - EService WebApp.
OAuth: 11 - EService WebApp.
FHIR: 12 - RESTful API from HL7.
WebSchedNewPatAppt: 13 - EService WebApp. The "New Patient Appointment" version of Web Sched.
HQManager: 14 - HQ only WebApp. Allows HQ to remotely modify web services.
Bundle: 15 - Entitles this practice/clinic to all eServices. Supercedes any other repeat charges for this practice/clinic.
IntegratedTextingUsage: 16 - IntegratedTexting is the actual enum value for texting access. This value is for the usage portion. Not used in billing, mainly used to keep technicians from manually adding the "TextUse" procedure code as a repeating charge.
ResellerSoftwareOnly: 17 - Resellers need to be able to give this service (not technically an eService) to their customers via sign up portal.
SignupPortal: 18 - Denotes the SignupPortal web app. Only currently used to get a new URL path separate from FeaturePortal.
SoftwareUpdate: 19 - Used by WebServiceCustomerUpdate to ask WebServiceHQ if this RegKey is eligible for OD proper version updates.
WebSchedASAP: 20 - EService Web App. The "ASAP" version of Web Sched.
BugSubmission: 21 - Request made to store information about unhandled exceptions
PatientPortalMakePayment: 22 -
PatientPortalViewStatement: 23 -
WebHostSynch: 24 -
Headmaster: 25 - Monitoring app used by OD HQ.
EClipboard: 26 - EClipboard mobile application.
ODHelp: 27 - Displays Help information.
PaySimple: 28- Originally for paysimple ACH payments
CustomerVersion: 29 - Used for storing customers OD software versions.
ConfirmationOwn: 30 - eServiceCode that corresponds to ProcCode 045 in customers db at HQ. Not used for eService validation. Use ConfirmationRequest insted.
IntegratedTextingOwn: 31 - eServiceCode that corresponds to ProcCode 046 in customers db at HQ. Not used for eService validation. Use IntegratedTexting insted.
SoftwareOnly: 32 - eServiceCode that corresponds to ProcCode 030 in customers db at HQ. Not used for eService validation.
SupplementalBackup: 33
EmailMassUsage: 34 - Will have a $0 RepeatCharge. Procedure will be generated each month as a function of number of masss email messages sent. Each email message has an incremental cost.
EmailSecureUsage: 35 - Will have a $0 RepeatCharge. Procedure will be generated each month as a function of number of secure email messages sent. Each email message has an incremental cost.
EmailSecureAccess: 36 - Has a RepeatCharge. Clinics sign up for access to use secure email. Each email sent will be charged an additional fee, see EmailSecureUsage.
ApptThankYou: 37 - eService for Automated Appointment Thank-Yous and calendar events.
OregonCryo: 38.
EserviceLog: 39 - eServices logging service.
LicenseAgreementSig: 40 - Used for storing customers license agreement acceptance signature.
WebFormManager: 41 - A Windows service running at HQ that is monitored by Headmaster.
ODTouch: 42 - Eclipboard Clinical Mobile application. Not included in the bundle.
PaymentPortalUI: 43 - Payment Portal UI.
PaymentPortalApi: 44 - Payment Portal Api.
EServiceApi: 45 - EService Api.
AuthApi: 46 - Auth Api.
ODTSurplus: 47 - ODTouch Mobile application surcharge for additional devices that exceed the ODTouchDeviceLimitDefault pref.
OCR: 48 - OCR Scans
UrlRedirect: 49 - Used by ShortGuidLookup to redirect from an OD-generated Short URL to a long URL provided by customer.
DeveloperPortalApi: 50 - Developer Portal API
DeveloperPortalUI: 51 - Developer Portal UI
EmailHqService: 52 - Email Transmission HQ Service
BetterDiagnostics: 53 - Better Diagnostics AI. Not included in the bundle.
EmailMassAccess: 54 - eService for Mass email signup. Not included in the bundle.
WebSchedExistingPatientUI: 55 - Web Sched Existing Patient UI
WebSchedExistingPatientApi: 56 - Web Sched Existing Patient Api
Chat: 57 - xChatService api
TranscriptionAI: 58 - AI transcription eService used for issuing and validating short-live authorization tokens for transcription socket connections.
2 ShortGuid varchar(255) A unique alphanumeric string that identifies something.
3 ShortURL varchar(255) URL generated by HQ.
4 FKey bigint(20) Usually identifies the object that is linked to ShortGUID. FK to appointment.AptNum AND FKeyType=1, FK to patient.PatNum AND FKeyType=2.
5 FKeyType varchar(255) Describes the type of object referenced by the FKey.
6 DateTimeExpiration datetime Timestamp at which this short GUID will expire..
7 DateTEntry datetime The exact server time when this EServiceShortGuid was entered into db. Handled automatically.

eservicesignal
Communication item from workstation to OD HQ. Stores the statuses of the eConnector and other eServices.
Order Name Type Summary
0 EServiceSignalNum bigint(20) Primary key.
1 ServiceCode int(11) Enum eServiceCode. Service which this signal applies to.
2 ReasonCategory int(11) The enum is at HQ as OpenDentalWebCore.BroadcasterThreadDefs. Can be zero if no grouping is necessary per a given service.
3 ReasonCode int(11) The enum is at HQ as OpenDentalWebCore.BroadcasterErrorCodes. This code is used to determine what actions to take and how to process this message. It is a function of ReasonCategory. It will most likely be defined by an enum that lives on HQ-only closed source.
4 Severity tinyint(4) Enum:eServiceSignalSeverity
None: Service is not in use and is not supposed to be in use.
NotEnabled: 0-Service is not in use and is not supposed to be in use.
Info: 1-Used to convey information. Does not change the "working" status of the service. Will always be inserted with IsProcess=true.
Working: 2-Service is operational and working as designed. Typcially used for heartbeat and initialization.
Warning: 3-Recoverable error has has occurred and no user intervention is required. Typically requires user acknowledgement only.
Error: 4-Recoverable error has has occurred and user intervention is probably required in addition to user acknowledgement only.
Critical: 5-Unrecoverable error and the service has shut itself off. Immediate user intervention is required.
5 Description text Human readable description of what this signal means, or a message for the user.
6 SigDateTime datetime Time signal was sent.
7 Tag text Used to store serialized data that can be used for processing this signal.
8 IsProcessed tinyint(4) After a message has been processed or acknowledged this is set true. Not currently used for heartbeat or service status signals.

etrans
One electronic transaction. Typically, one claim or response. Or one benefit request or response. Is constantly being expanded to include more types of transactions with clearinghouses. Also stores printing of paper claims. Sometimes stores a copy of what was sent.
Order Name Type Summary
0 EtransNum bigint(20) Primary key.
1 DateTimeTrans datetime The date and time of the transaction.
2 ClearingHouseNum bigint(20) FK to clearinghouse.ClearinghouseNum . Can be 0 if no clearinghouse was involved.
3 Etype tinyint Enum:EtransType
ClaimSent: 0 X12-837.
ClaimPrinted: 1 claim physically printed.
Claim_CA: 2 Canada. Type 01
Claim_Ren: 3 Renaissance
ClaimAck_CA: 4 Canada. Type 11
ClaimEOB_CA: 5 Canada. Type 21
Eligibility_CA: 6 Canada. Type 08
EligResponse_CA: 7 Canada. Type 18. V02 type 10.
ClaimReversal_CA: 8 Canada. Type 02
Predeterm_CA: 9 Canada. Type 03
RequestOutstand_CA: 10 Canada. Type 04
RequestSumm_CA: 11 Canada. Type 05
RequestPay_CA: 12 Canada. Type 06
ClaimCOB_CA: 13 Canada. Type 07
ReverseResponse_CA: 14 Canada. Type 12
PredetermAck_CA: 15 Canada. Type 13
PredetermEOB_CA: 16 Canada. Type 23
OutstandingAck_CA: 17 Canada. Type 14
EmailResponse_CA: 18 Canada. Type 24
PaymentResponse_CA: 19 Canada. Type 16
SummaryResponse_CA: 20 Canada. Type 15
Acknowledge_997: 21 Ack from clearinghouse. X12-997.
StatusNotify_277: 22 X12-277. Unsolicited claim status notification.
TextReport: 23 Text report from clearinghouse in human readable format.
BenefitInquiry270: 24 X12-270.
BenefitResponse271: 25 X12-271
AckError: 26 When an electronic transmission is sent, and an error comes back instead of a message. This stores information about the error. The etrans with this type is attached it to the original etrans as an ack.
ERA_835: 27 X12-835. Electronic Remittance Advice (ERA). Also known an an electronic EOB.
Acknowledge_999: 28 Ack from clearinghouse. X12-999.
Ack_Interchange: 29 Simple and generic ack from clearinghouse which is used to replace 997s, 999s, or 277s.
Claim_Ramq: 30 Carrier RAMQ located in Quebec Canada.
ItransNcpl: 31 Canadian iTrans 2.0 users can download carrier information.
HTML: 32 HTML response from clearinghouse. Usually in addition to a 271 used to import benefits.
DXCAttachments: 33 DXC Attachments. We make etrans entries for all communication with DXC's API.
Attachment_CA: 34 Canada. Type 09.
AttachmentAck_CA: 35 Canada. Type 19.
Claim_XConnect: 36 DentalXChange XConnect Claim.
ClaimAck_XConnect: 37 DentalXChange XConnect Claim Ack.
4 ClaimNum bigint(20) FK to claim.ClaimNum if a claim. Otherwise 0. Warning. Original claim might have been deleted. But if Canadian claim was successfully sent, then deletion will be blocked.
5 OfficeSequenceNumber int(11) For Canada. Unique for every transaction sent. Uncapped, but is modded by 1,000,000 when sent in a transaction as required by the standard.
6 CarrierTransCounter int(11) For Canada. Separate counter for each carrier. Uncapped, but is modded by 100,000 when sent in a transaction as required by the standard.
7 CarrierTransCounter2 int(11) For Canada. Separate counter for each carrier. Uncapped, but is modded by 100,000 when sent in a transaction as required by the standard. If this claim includes secondary, then this is the counter for the secondary carrier.
8 CarrierNum bigint(20) FK to carrier.CarrierNum. Can be 0.
9 CarrierNum2 bigint(20) FK to carrier.CarrierNum. Can be 0. Only used if secondary insurance info is provided on a claim. Necessary for Canada.
10 PatNum bigint(20) FK to patient.PatNum This is useful in case the original claim has been deleted. Now, we can still tell who the patient was.
11 BatchNumber int(11) Maxes out at 999, then loops back to 1. This is not a good key, but is a restriction of (canadian?). So dates must also be used to isolate the correct BatchNumber key. Specific to one clearinghouse. Only used with e-claims. Claim will have BatchNumber, and 997 will have matching BatchNumber. (In X12 lingo, it's a functional group number)
12 AckCode varchar(255) A=Accepted, R=Rejected, blank if not able to parse, Recd=Received (835s only). More options will be added later. The incoming 997 or 999 sets this flag automatically. To find the 997 or 999, look for a matching BatchNumber with a similar date, since both the claims and the 997 or 999 will both have the same batch number. The 997 or 999 does not have this flag set on itself.
13 TransSetNum int(11) For sent e-claims, within each batch (functional group), each carrier gets it's own transaction set. Since 997s and 999s acknowledge transaction sets rather than batches, we need to keep track of which transaction set each claim is part of as well as which batch it's part of. This field can't be set as part of 997 or 999, because one 997 or 999 refers to multiple trans sets.
14 Note text Typical uses include indicating that the report was printed, the claim was resent, reason for rejection, etc. For a 270, this contains the automatically generated short summary of the response. The response could include the reason for failure, or it could be a short summary of the 271.
15 EtransMessageTextNum bigint(20) FK to etransmessagetext.EtransMessageTextNum. Can be 0 if there is no message text. Multiple Etrans objects can refer to the same message text, very common in a batch.
16 AckEtransNum bigint(20) FK to etrans.EtransNum. Only has a non-zero value if there exists an ack etrans, like a 997, 999, 277ack, 271, 835, or ackError. There can be only one ack for any given etrans, but one ack can apply to multiple etran's that were sent as one batch. 999 FK can be replaced by 277ack FK, and then by 835 FK. This column does triple duty. The AckEtransNum can be used to chain together related etrans entries. For example, if this is a 270 request, then AckEtransNum points to the 271 response. If this is a 271, then AckEtransNum points to the HTML (if any) for the response.
17 PlanNum bigint(20) FK to insplan.PlanNum. Used if EtransType.BenefitInquiry270 and BenefitResponse271 and Eligibility_CA.
18 InsSubNum bigint(20) FK to inssub.InsSubNum. Used if EtransType.BenefitInquiry270 and BenefitResponse271 and Eligibility_CA.
19 TranSetId835 varchar(255) X12 ST02 Transaction Set Identifier for an 835. Specifies the unique transaction id within the 835 that this etrans record corresponds to. This column will always be set for 835s imported in version 14.3 or greater. For 835s imported in version 14.2, this column will alway be blank. If blank, and there is more than one transaction id within the 835, then FormEtrans835PickEob will show and allow the user to select the desired EOB from a list. The X12 guide states that there is only one transaction (EOB) allowed per 835, but ClaimConnect returns multiple transactions (EOBs) within a single 835 and other clearinghouses probably do as well. When an 835 is imported, it is examined to determine the number of transactions within it. One etrans entry is created for each EOB within the 835. We may have a similar issue with multiple transactions within 277s as well, but we have not seen any evidence yet. Our current 277 implementation expects a single transaction, just as the X12 standard specifies.
20 CarrierNameRaw varchar(60) Only used if the CarrierNum is 0. If CarrierNum is not 0, the name associated to CarrierNum will override CarrierNameRaw in the FormClaimsSend history grid. Added for 835s so that customer databases are not cluttered with dummy carriers and so there is no extra processing time when FormClaimsSend is loading. Size is 60 bytes to match 835 carrier name length.
21 PatientNameRaw varchar(133) Only used if the PatNum is 0. If PatNum is not 0, the name associated to PatNum will override PatientNameRaw in the FormClaimsSend history grid. Added for 835s so that there is no extra processing time when FormClaimsSend is loading, and so text representing the patient count can be used instead of an actual patient name. Size is 133 bytes to match X12 specs for last name (60), first name (35), middle name (25), suffix (10), and spaces in between (3).
22 UserNum bigint(20) FK to userod.UserNum

etrans835
Corresponds to an etrans record containing a raw 835 X12 message attached in etransmessagetext table. This is denoted by etrans.Etype=ERA_835
Order Name Type Summary
0 Etrans835Num bigint(20) Primary key.
1 EtransNum bigint(20) FK to etrans.EtransNum .
2 PayerName varchar(60) Up to 60 characters. Corresponds to X835.PayerName, a read-only field.
3 TransRefNum varchar(50) Up to 50 characters. Corresponds to X835.TransRefNum, a read-only field.
4 InsPaid double Corresponds to X835.InsPaid, a read-only field.
5 ControlId varchar(9) Up to 9 characters. Corresponds to X835.ControlId, a read-only field.
6 PaymentMethodCode varchar(3) Up to 3 characters. Corresponds to X835._paymentMethodCode, a read-only field.
7 PatientName varchar(100) Up to 100 characters (not based on actual patient name field sizes). Corresponds to Hx835_Claim.PatientName.ToString() if one patient, or says "(#)" if multiple patients to show count.
8 Status tinyint(4) Enum:X835Status . Calculated status. Only changes when ERA changes.
None: 1 - Just a place holder if there is an issue. Should never show in UI.
Unprocessed: 2 - There are no received claims attached to the ERA. There can be one or more detached claims on the ERA.
Partial: 3 - Some claims for this ERA have had financial information entered, no finalaized claim payment.
NotFinalized: 4 - Ignores manually detached. All claims for this ERA have had financial information entered, no finalaized claim payment.
FinalizedSomeDetached: 5 - Some claims have been manually detached but all other claims have had financial information entered and finalaized claim payment created.
FinalizedAllDetached: 6 - All claims have been manually detached.
Finalized: 7 - All claims for this ERA have had financial information entered and a finalaized claim payment was created.
9 AutoProcessed tinyint(4) Enum:X835AutoProcessed . The initial disposition of ERA's that have passed through our auto/semi-auto processing system.
None: 0
SemiAutoIncomplete: 1
SemiAutoComplete: 2
FullAutoIncomplete: 3
FullAutoComplete: 4
10 IsApproved tinyint(4) True if a user has acknowledged the auto processed ERA.

etrans835attach
Links a specific claim within an ERA 835 to an actual claim in the claims table.
Order Name Type Summary
0 Etrans835AttachNum bigint(20) Primary key.
1 EtransNum bigint(20) FK to etrans.EtransNum.
2 ClaimNum bigint(20) FK to claim.ClaimNum. Can be 0, which indicates that the ERA claim does not have a match in OD. Multiple Etrans835Attach can have the same ClaimNum if the insurance company made supplemental payments on the same claim.
3 ClpSegmentIndex int(11) Segment index for the CLP/Claim segment within the X12 document containing the 835. This index is unique, even if there are multiple 835 transactions within the X12 document.
4 DateTimeEntry datetime DateTime that the row was inserted.

etransmessagetext
Each row is big. The entire X12 message text is stored here, since it can be the same for multiple etrans objects, and since the messages can be so big.
Order Name Type Summary
0 EtransMessageTextNum bigint(20) Primary key.
1 MessageText mediumtext The entire message text, including carriage returns.

evaluation
An evaluation is for one student and is copied from an EvaluationDef. There are multiple evaluations per course, which add up to the final course grade. An evaluation is for a single day and can optionally have multiple criteria on it. Evaluations get created on the day they are filled out, not ahead of time. The user would typically set up at least one evaluationDef that didn't have any criteria on it for simple situations. There is no weight yet for different evaluations, so the automatically calculated course grades will treat all evaluations with equal weight.
Order Name Type Summary
0 EvaluationNum bigint(20) Primary key.
1 InstructNum bigint(20) FK to provider.ProvNum.
2 StudentNum bigint(20) FK to provider.ProvNum.
3 SchoolCourseNum bigint(20) FK to schoolcourse.SchoolCourseNum. For example to PEDO 732.
4 EvalTitle varchar(255) Copied from evaluation def. Not editable.
5 DateEval date Date of the evaluation.
6 GradingScaleNum bigint(20)
7 OverallGradeShowing varchar(255) OverallGradeNumber is calculated as described below. Once the nearest number on the scale is found, the corresponding gradescaleitem.GradeShowing is used here.
8 OverallGradeNumber float Always recalculated as each individual criterion is changed, so no risk of getting out of synch. Only considers criteria on the evaluation that use the same grading scale as the evaluation itself. It's an average of all those criteria. When averaging, the result will almost never exactly equal one of the numbers in the scale, so the nearest one must be found and used here. For example, if the average is 3.6 on a 4 point scale, this will show 4. Percentages will be rounded to the nearest whole number. This is the value that will be returned in reports and also used in calculations of the student's grade for the term.
9 Notes text Any note that the instructor wishes to place at the bottom of this evaluation.
10 GradeOverride float -1 by default. The override grade number entered manually by the instructor. If populated, the OverallGradeShowing is derived from this override value instead.

evaluationcriterion
One row on an evaluation. For example, a single evaluation would be created for one patient appointment. The criteria might include things like professionalism, patient comfort, anesthesia, prep, matrix, restoration, margins, contact, contours, polish, etc. Each criterion can be assigned a grade and the evaluation gets an overall grade. For simple situations the criteria can be left blank. There is no window to edit an individual criterion. That's done in FrmEvaluationEdit in the grid.
Order Name Type Summary
0 EvaluationCriterionNum bigint(20) Primary key.
1 EvaluationNum bigint(20) FK to evaluation.EvaluationNum
2 CriterionDescript varchar(255) Description that is displayed for the criterion.
3 IsCategoryName tinyint(4) This row will show in bold and will not have a grade attached to it.
4 GradingScaleNum bigint(20)
5 GradeShowing varchar(255) Copied from gradingscaleitem.GradeShowing. Required. For example A, B, C, D, F, or 1-10, pass, fail, 89, etc. Except for percentages, must come from pick list.
6 GradeNumber float Copied from gradingscaleitem.GradeNumber. Required. For example A=4, A-=3.8, pass=1, percentages stored as 89, etc. Except for percentages, must come from pick list.
7 Notes text A note about why this student received this particular grade on this criterion.
8 ItemOrder int(11) Copied from item order of def. Defines the order that all the criteria show on the evaluation. User not allowed to change here, only in the def.
9 MaxPointsPoss float For ScaleType=Points, sets the maximum value of points for this criterion.

evaluationcriteriondef
One row on an EvaluationDef. The criteria might include things like professionalism, patient comfort, anesthesia, prep, matrix, restoration, margins, contact, contours, polish, etc. For simple situations the criteria can be left blank.
Order Name Type Summary
0 EvaluationCriterionDefNum bigint(20) Primary key.
1 EvaluationDefNum bigint(20) FK to evaluationdef.EvaluationDefNum.
2 CriterionDescript varchar(255) Description that is displayed for the criterion.
3 IsCategoryName tinyint(4) This row will show in bold and will not have a grade attached to it.
4 GradingScaleNum bigint(20)
5 ItemOrder int(11) Defines the order that all the criteria show on the evaluation. Copied to ItemOrder of actual criterion.
6 MaxPointsPoss float For ScaleType=Points, sets the maximum value of points for this criterion.

evaluationdef
An evaluation def is the entire form that the instructor sets up ahead of time. Actual evaluations for students are copied from these 'templates', so an evaluation def can be altered or deleted without damaging any student record. Evaluation defs are usually not specific to instructors, but if different instructors want different evaluation forms, they can use the description column to differentiate. For example, the description can include the instructor's name or even the year. But most commonly, the same evaluation will be used from year to year. There should be a duplicate function to make a copy an entire evaluation def and then allow user to alter the SchoolCourseNum.
Order Name Type Summary
0 EvaluationDefNum bigint(20) Primary key.
1 SchoolCourseNum bigint(20) FK to schoolcourse.SchoolCourseNum. Will be 0 when the evaluation def is for a course def.
2 EvalTitle varchar(255) Description of this evaluation form.
3 GradingScaleNum bigint(20)
4 SchoolCourseDefNum bigint(20) FK to schoolcoursedef.SchoolCourseNum. Will be 0 when the evaluation def is for a course.

famaging
This table stores intermediate family aged balances just prior to updating the patient table. Once the aging calculations are finished and the patient table is updated, this table is truncated. At the start of the aging calculations this table is checked and if there are existing rows, we will notify the user and force them to decide whether an aging calculation has already begun or an error happened that prevented the calculations from finishing and the rows are left over and can be deleted.
Order Name Type Summary
0 PatNum bigint(20) FK to patient.PatNum. Also the primary key for this table. Always the PatNum for the Guarantor of a family. A guarantor may not exist in this table if the family does not have a balance. i.e. If a PatNum is not in this table, the aged balance columns on the patient table are set to 0, so either the patient is not the guarantor or the family has a zero balance.
1 Bal_0_30 double Aged balance from 0 to 30 days old. Aging numbers are for entire family. Only stored with guarantor.
2 Bal_31_60 double Aged balance from 31 to 60 days old. Aging numbers are for entire family. Only stored with guarantor.
3 Bal_61_90 double Aged balance from 61 to 90 days old. Aging numbers are for entire family. Only stored with guarantor.
4 BalOver90 double Aged balance over 90 days old. Aging numbers are for entire family. Only stored with guarantor.
5 InsEst double Insurance Estimate for entire family. Only stored with guarantor.
6 BalTotal double Total balance for entire family before insurance estimate. Not the same as the sum of the 4 aging balances because this can be negative. Only stored with guarantor.
7 PayPlanDue double Amount "due now" for all payment plans such that someone in this family is the payment plan guarantor. This is the total of all payment plan charges past due (taking into account the PayPlansBillInAdvanceDays setting) subtract the amount already paid for the payment plans. Only stored with family guarantor.

familyhealth
For EHR, this lets us record medical problems for family members. These family members will usually not be in our database, and they are just recorded by relationship.
Order Name Type Summary
0 FamilyHealthNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 Relationship tinyint(4) Enum:FamilyRelationship
Parent: 0
Sibling: 1
Offspring: 2
3 DiseaseDefNum bigint(20) FK to diseasedef.DiseaseDefNum, which will have a SnoMed associated with it.
4 PersonName varchar(255) Name of the family member.

fee
There is one entry in this table for each fee for a single procedurecode. So if there are 5 different fees stored for one procedurecode, then there will be five entries here.
Order Name Type Summary
0 FeeNum bigint(20) Primary key.
1 Amount double The amount usually charged. If an amount is unknown, then the entire Fee entry is deleted from the database. The absence of a fee is shown in the user interface as a blank entry. For clinic and/or provider fees, amount can be set to -1 which indicates that their fee should be blank and not use the default fee.
2 OldCode varchar(15) Do not use.
3 FeeSched bigint(20) FK to feesched.FeeSchedNum.
4 UseDefaultFee tinyint Not used.
5 UseDefaultCov tinyint Not used.
6 CodeNum bigint(20) FK to procedurecode.CodeNum.
7 ClinicNum bigint(20) FK to clinic.ClinicNum. Must be 0 if feesched.IsGlobal=true.
8 ProvNum bigint(20) FK to provider.ProvNum. Must be 0 if feesched.IsGlobal=true.
9 SecUserNumEntry bigint(20) FK to userod.UserNum. Gets set automatically to the user logged in when the row is inserted at SecDateEntry date and time.
10 SecDateEntry date Timestamp automatically generated and user not allowed to change. The actual date of entry.
11 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
12 DateEffective date The date when the Fee is valid. Most users will have their fees with empty dates (0001-01-01) meaning their fees are always valid. This lets user enter a fee schedule ahead of an effective date. When we show fees to the user in areas where there is no date filter, we use today as the dateEffective. We don't show future fees in those areas.

feesched
Fee schedule names used to be in the definition table, but now they have their own table. We are about to have many many more fee schedules as we start automating allowed fees.
Order Name Type Summary
0 FeeSchedNum bigint(20) Primary key.
1 Description varchar(255) The name of the fee schedule.
2 FeeSchedType int(11) Enum:FeeScheduleType
Normal: 0
CoPay: 1
OutNetwork: 2, Formerly named "Allowed"
FixedBenefit: 3
ManualBlueBook: 4
3 ItemOrder int(11) Unlike with the old definition table, this ItemOrder is not as critical in the caching of data. The item order is only for fee schedules of the same type.
4 IsHidden tinyint(1) True if the fee schedule is hidden. Can't delete fee schedules or change their type once created.
5 IsGlobal tinyint(4) True if the fee schedule is used globally and linked to the HQ. Localization of the fees is not allowed. ClinicNum and ProvNum must both be zero for all fees.
6 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
7 SecDateEntry date Timestamp automatically generated and user not allowed to change. The actual date of entry.
8 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.

feeschedgroup
Can be used when using clinics, and a single fee schedule has fees that are region specific and need to be different for different clinics. A FeeSchedGroup stores a list of clinics that one fee schedule applies to, overriding the normal fee sched. This is designed so that you can have a few "groups" per fee sched instead of dozens or hundreds of clinics. Fees are still created on a per-clinic basis, and we attempt to manage them when we do things like change fees or edit groups.
Order Name Type Summary
0 FeeSchedGroupNum bigint(20) Primary key.
1 Description varchar(255)
2 FeeSchedNum bigint(20) FK to feesched.FeeSchedNum.
3 ClinicNums varchar(255) Comma delimited list of Clinic.ClinicNums.

feeschednote
A note that is attached to a fee schedule, and can additionally be associated with a clinic too.
Order Name Type Summary
0 FeeSchedNoteNum bigint(20) Primary key.
1 FeeSchedNum bigint(20) FK to feesched.FeeSchedNum.
2 ClinicNums text A comma delimited list of clinic nums that the fee schedule note is for. Can include 0. For most offices this will be empty string because they do not use clinics.
3 Note text A note for a particular fee schedule. No character lim.
4 DateEntry date The date of this note. User is allowed to change this date.
5 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
6 SecDateEntry date Timestamp automatically generated and user not allowed to change. The actual date of entry.
7 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.

fhircontactpoint
Details of a Technology mediated contact point (phone, fax, email, etc.). https://www.hl7.org/fhir/datatypes.html#contactpoint .
Order Name Type Summary
0 FHIRContactPointNum bigint(20) Primary key.
1 FHIRSubscriptionNum bigint(20) FK to fhirsubscription.FHIRSubscriptionNum.
2 ContactSystem tinyint(4) Enum:ContactPointSystem
Phone: The value is a telephone number used for voice calls. Use of full international numbers starting with + is recommended to enable automatic dialing support but not required.
Fax: The value is a fax machine. Use of full international numbers starting with + is recommended to enable automatic dialing support but not required.
Email: The value is an email address.
Pager: The value is a pager number. These may be local pager numbers that are only usable on a particular pager system.
Other: A contact that is not a phone, fax, or email address. The format of the value SHOULD be a URL. This is intended for various personal contacts including blogs, Twitter, Facebook, etc. Do not use for email addresses. If this is not a URL, then it will require human interpretation.
3 ContactValue varchar(255) The actual contact point details.
4 ContactUse tinyint(4) Enum:ContactPointUse
Home: A communication contact point at a home; attempted contacts for business purposes might intrude privacy and chances are one will contact family or other household members instead of the person one wishes to call. Typically used with urgent cases, or if no other contacts are available.
Work: An office contact point. First choice for business related contacts during business hours.
Temp: A temporary contact point. The period can provide more detailed information.
Old: This contact point is no longer in use (or was never correct, but retained for records).
Mobile: A telecommunication device that moves and stays with its owner. May have characteristics of all other use codes, suitable for urgent matters, not the first choice for routine business.
5 ItemOrder int(11) Specify preferred order of use (1 = highest)
6 DateStart date Time when the contact point started to be in use.
7 DateEnd date Timewhen the contact point stopped being used.

fhirsubscription
A subscription by a client that requests an alert whenever a change is made to a FHIR resource.
Order Name Type Summary
0 FHIRSubscriptionNum bigint(20) Primary key.
1 Criteria varchar(255) Rule for server push criteria.
2 Reason varchar(255) Description of why this subscription was created.
3 SubStatus tinyint(4) Enum:SubscriptionStatus
Requested: The client has requested the subscription, and the server has not yet set it up.
Active: The subscription is active.
Error: The server has an error executing the notification.
Off: Too many errors have occurred or the subscription has expired.
4 ErrorNote text Latest error note.
5 ChannelType tinyint(4) Enum:SubscriptionChannelType
Rest_Hook: The channel is executed by making a post to the URI. If a payload is included, the URL is interpreted as the service base, and an update (PUT) is made.
Websocket: The channel is executed by sending a packet across a web socket connection maintained by the client. The URL identifies the websocket, and the client binds to this URL.
Email: The channel is executed by sending an email to the email addressed in the URI (which must be a mailto:).
Sms: The channel is executed by sending an SMS message to the phone number identified in the URL (tel:).
Message: The channel is executed by sending a message (e.g. a Bundle with a MessageHeader resource etc.) to the application identified in the URI.
6 ChannelEndpoint varchar(255) Where the channel points to.
7 ChannelPayLoad varchar(255) Mimetype to send, or blank for no payload.
8 ChannelHeader varchar(255) Usage depends on the channel type.
9 DateEnd datetime When to automatically delete the subscription.
10 APIKeyHash varchar(255) A hash of the API key that was used in the request to create this subscription.

fielddeflink
A better name would be FieldHide. This specifies places where PatFields or ApptFields should be hidden. PatFieldDefs already have an IsHidden field, so this is redundant there. But it's powerful for letting PatFields show in some places but not other places.
Order Name Type Summary
0 FieldDefLinkNum bigint(20) Primary key
1 FieldDefNum bigint(20) FK to apptfielddef.ApptFieldDefNum AND FieldDefType=0, FK to patfielddef.PatFieldDefNum AND FieldDefType=1.
2 FieldDefType tinyint(4) Enum:FieldDefTypes Defines what FieldDefNum represents.
Appointment: 0. For this type, FKey is apptfielddef.ApptFieldDefNum.
Patient: 1. For this type, FKey is patfielddef.PatFieldDefNum.
3 FieldLocation tinyint(4) Enum:FieldLocations Defines where this particular field def needs to be hidden.
Account: 0
AppointmentEdit: 1
Chart: 2
Family: 3
OrthoChart: 4
GroupNote: 5

formpat
This is an old table that isn't really used anymore. We used to have a "questionnaire" that could be filled out by a patient, and this is it. Each patient can have multiple questionnaires.
Order Name Type Summary
0 FormPatNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 FormDateTime datetime The date and time that this questionnaire was filled out.

glidewellacct
One to one match with a Glidewell lab billing account. Multiple providers can share one account.
Order Name Type Summary
0 GlidewellAcctNum bigint(20) Primary Key
1 AccountNumber varchar(255) This is the account number that Glidewell uses to track each billing account. Example: 10-2913770.
2 ApiKey varchar(255) The api key from Glidewell, encrypted. (need example)
3 DateTimeExpires datetime DateTime of the last successful login to a scanner software for authentication.

glidewellmsg
One row represents a lab case sent to Glidewell. User can attach one Glidewell labcase to an OD labcase. We insert the row when we send to GW the first time. After that, when the user checks status, we just update the existing with new values for RawJsonResponse and OrderStatus. We don't keep a history of glidewell messages.
Order Name Type Summary
0 GlidewellMsgNum bigint(20) Primary key.
1 LabCaseNum bigint(20) FK to labcase.LabCaseNum.
2 OrderStatus tinyint(4) Enum:EnumGlidewellOrderStatus type, specifies the most recent status of the order in Glidewell's system. E.g. "Initialized" or "In Lab"
Initialized: The lab case has been registered and is awaiting scan submission.
Received: Lab case has been received by Glidewell and is waiting to be processed.
InProgress: The lab is actively processing the lab case.
OnHold: The lab case is temporarily paused and awaiting more information to continue.
Shipped: The lab case's LabCaseProducts have been shipped, the carrier and tracking info is available.
Cancelled: The lab case has been cancelled and won't be processed further.
CreditPending: The lab case has been returned to the lab and is waiting for payment credit to be processed.
Credited: A credit has been issued for the returned lab case.
3 VendorRxId varchar(255) Unique vendor order ID that is passed to us from the Glidewell Register Response. This will be the identifier for the fake iTero scanner used in testing the Glidewell integration. In the real worflow, GW will send this VendorRxId directly to the office's iTero scanner for the user to pick from to match this msg with the iTero file. In the real workflow this field will not be used here.
4 PatNum bigint(20) FK to patient.PatNum
5 GlidewellAcctNum bigint(20) FK to glidewellacct.GlidewellAcctNum. We never look back to provider.GlidewellAcctNum. That was only for default.
6 RawJsonResponse text Json formatted string that represents the most recent response body that we received from Glidewell. Contains the following fields: - VendorOrderId - nullable, Vendor (iTero) ID of the order. - VendorName - "iTero" or "Medit" - VendorPracticeId - nullable, iTero's unique identifier for the practice. - VendorDoctorId - nullable, iTero's unique identifier for the provider. - DoctorId - FK to the provider.ProvNum. - patientId - FK to patient.PatNum. - PatientFirstName - PatientLastName - PatientDateOfBirth - Patientgender - ToothRange - Products - the products that will be shipped with the order. - Shade - tooth shade for the restoration - OutboundTrackingNumber - nullable, null when shipment has not occurred yet. - OutboundCarrier - nullable, null when shipment has not occurred yet, e.g. UPS, FedEx - Notes
7 RawJsonRequest text Json formatted string that represents the request that we send to Glidewell. Contains the following fields: - CreateVendorOrder - required - true by default. - VendorName - required -"iTero" (Glidewell has indicated that other scanners may be integrated in the future i.e. "medit") - OrderId - required - FK to labcase.LabCaseNum - DoctorId - FK to provider.ProvNum - LicenseNumber - Doctor's license number containing letters and numbers - PatientFirstName - required - PatientLastName - required - PatientId - FK to patient.PatNum - PatientGender - PatientDateOfBirth - Notes
8 SentITero tinyint(4) Tracks whether this was sent to Glidewell with the expectation of a scan being submitted from an iTero scanner.
9 SentMedit tinyint(4) Tracks whether this was sent to Glidewell with the expectation of a scan being submitted from a Medit scanner.

gradingscale
Used in Evaluations. Describes a scale to be used in grading. Freeform scales are not allowed. Percentage scales are handled a little differently than the other scales.
Order Name Type Summary
0 GradingScaleNum bigint(20) Primary key.
1 Description varchar(255) For example, A-F or Pass/Fail.
2 ScaleType tinyint(4) Enum:EnumScaleType Used to determine method of assigning grades. PickList will be the only type that has GradingScaleItems.
PickList: 0- User-Defined list of possible grades. Grade is calculated as an average.
Percentage: 1- Percentage Scale 0-100. Grade is calculated as an average.
Weighted: 2- Allows point values for grades. Grade is calculated as a sum of all points out of points possible.

gradingscaleitem
Only used when GradingScale.ScaleType=PickList, not Percentage or Points. The specific grades allowed on a scale. Contains both the GradeShowing and the equivalent number. There are no FKs to these items. The values are all copied from here into student records as they are used.
Order Name Type Summary
0 GradingScaleItemNum bigint(20) Primary key.
1 GradingScaleNum bigint(20) FK to gradingscale.GradingScaleNum
2 GradeShowing varchar(255) For example A, B, C, D, F. Optional. If not specified, it shows the number.
3 GradeNumber float For example A=4, A-=3.8, pass=1, etc. Required. Enforced to be equal to or less than GradingScale.MaxPointsPoss.
4 Description varchar(255) Optional additional info about what this particular grade means. Just used as guidance and does not get copied to the individual student record.

grouppermission
Every user group has certain permissions. This defines a permission for a group. The absense of permission would cause that row to be deleted from this table.
Order Name Type Summary
0 GroupPermNum bigint(20) Primary key.
1 NewerDate date Only granted permission if newer than this date. Can be Minimum (01-01-0001) to always grant permission.
2 NewerDays int(11) Can be 0 to always grant permission. Otherwise, only granted permission if item is newer than the given number of days. 1 would mean only if entered today.
3 UserGroupNum bigint(20) FK to usergroup.UserGroupNum. The user group for which this permission is granted. If not authorized, then this groupPermission will have been deleted.
4 PermType smallint(6) Enum:EnumPermType Some permissions will treat a zero FKey differently. Some denote it as having access to everything for that PermType. I.e. Reports.
None: 0
AppointmentsModule: 1-No log entry.
FamilyModule: 2-A Security Log entry is made each time that the Family module button is clicked, as well as each time that the selected patient is changed while within the Family module. If the preference AuditTrailVisitModuleShow is set to false then no entries are created.
AccountModule: 3-Same behavior as FamilyModule.
TPModule: 4-Same behavior as FamilyModule.
ChartModule: 5-Same behavior as FamilyModule.
ImagingModule: 6-Same behavior as FamilyModule.
ManageModule: 7-No log entry.
Setup: 8. Currently covers a wide variety of setup functions.
RxCreate: 9
ProcComplEdit: 10 - DEPRECATED - Uses date restrictions. Covers editing/deleting of Completed, EO, and EC procs. Deleting procs of other statuses are covered by ProcDelete.
ChooseDatabase: 11
Schedules: 12
BlockoutEdit: 13 - There are two kinds of blockouts: those flagged as NS(no sched) or DC(disable cut/copy/paste) and those with no flag. This permission handles the edit of blockouts with no flag. Logs an audit trail entry when a blockout is edited. See BlockoutsFlagged permission for the other blockouts flagged as NS or DC. And see the other two blockout permissions for things other than edit.
ClaimSentEdit: 14. Uses date restrictions.
PaymentCreate: 15. Uses date restrictions.
PaymentEdit: 16. Uses date restrictions.
AdjustmentCreate: 17
AdjustmentEdit: 18. Uses date restrictions.
UserQuery: 19
StartupSingleUserOld: 20. Not used anymore.
StartupMultiUserOld: 21 Not used anymore.
Reports: 22
ProcComplCreate: 23. Includes setting procedures complete.
SecurityAdmin: 24. At least one user must have this permission.
AppointmentCreate: 25.
AppointmentMove: 26
AppointmentEdit: 27. AppointmentDelete permission required in order to delete appointments.
Backup: 28
TimecardsEditAll: 29
DepositSlips: 30
AccountingEdit: 31. Uses date restrictions.
AccountingCreate: 32. Uses date restrictions.
Accounting: 33
AnesthesiaIntakeMeds: 34
AnesthesiaControlMeds: 35
InsPayCreate: 36
InsPayEdit: 37. Uses date restrictions. Edit Batch Insurance Payment.
TreatPlanEdit: 38. Uses date restrictions.
ReportProdInc: 39. DEPRECATED
TimecardDeleteEntry: 40. Uses date restrictions.
EquipmentDelete: 41. Uses date restrictions. All other equipment functions are covered by .Setup.
SheetEdit: 42. Uses date restrictions. Also used in audit trail to log web form importing.
CommlogEdit: 43. Uses date restrictions.
ImageDelete: 44. Uses date restrictions. Allows deletion of images. SignedImageEdit permission is also needed to delete signed images.
PerioEdit: 45. Uses date restrictions.
ProcEditShowFee: 46. Shows the fee textbox in the proc edit window.
AdjustmentEditZero: 47
EhrEmergencyAccess: 48
ProcDelete: 49. Uses date restrictions. This only applies to non-completed procs. Deletion of completed procs is covered by ProcCompleteStatusEdit.
EhrKeyAdd: 50 - Only used at OD HQ. No user interface.
ProviderEdit: 51- Allows user to edit all providers. This is not fine-grained enough for extremely large organizations such as dental schools, so other permissions are being added as well.
EcwAppointmentRevise: 52
ProcedureNoteFull: 53
ReferralAdd: 54
InsPlanChangeSubsc: 55
RefAttachAdd: 56
RefAttachDelete: 57
CarrierCreate: 58
GraphicalReports: 59
AutoNoteQuickNoteEdit: 60
EquipmentSetup: 61
Billing: 62
ProblemDefEdit: 63
ProcFeeEdit: 64- There is no user interface in the security window for this permission. It is only used for tracking.
InsPlanChangeCarrierName: 65- There is no user interface in the security window for this permission. It is only used for tracking. Only tracks changes to carriername, not any other carrier info.
TaskNoteEdit: 66- (Was named TaskEdit prior to version 14.2.39) When editing an existing task: delete the task, edit original description, or double click on note rows. Even if you don't have the permission, you can still edit your own task description (but not the notes) as long as it's in your inbox and as long as nobody but you has added any notes.
WikiListSetup: 67- Add or delete lists and list columns..
Copy: 68- There is no user interface in the security window for this permission. It is only used for tracking. Tracks copying of patient information. Required by EHR.
Printing: 69- There is no user interface in the security window for this permission. It is only used for tracking. Tracks printing of patient information. Required by EHR.
MedicalInfoViewed: 70- There is no user interface in the security window for this permission. It is only used for tracking. Tracks viewing of patient medical information.
PatProblemListEdit: 71- Tracks creation and editing of patient problems.
PatMedicationListEdit: 72- Tracks creation and edting of patient medications.
PatAllergyListEdit: 73- Tracks creation and editing of patient allergies.
PatFamilyHealthEdit: 74- There is no user interface in the security window for this permission. It is only used for tracking. Tracks creation and editing of patient family health history.
PatientPortal: 75- There is no user interface in the security window for this permission. It is only used for tracking. Patient Portal access of patient information. Required by EHR.
RxEdit: 76
SchoolAdminStudentEdit: 77- Assign this permission to a staff person who will administer setting up and editing Dental School Students in the system.
SchoolAdminInstructorEdit: 78- Assign this permission to a staff person who will administer setting up and editing Dental School Instructors in the system.
OrthoChartEditFull: 79- Uses date restrictions. Has a unique audit trail so that users can track specific ortho chart edits.
PatientFieldEdit: 80- There is no user interface in the security window for this permission. It is only used for tracking. Mainly used for ortho clinics.
SchoolAdminAcesss: 81- Assign this permission to a staff member who needs full access to instructor and student records. Grants the ability to view anything they can view and perform any action on their behalf.
TreatPlanDiscountEdit: 82- There is no user interface in the security window for this permission. It is only used for tracking.
UserLogOnOff: 83- There is no user interface in the security window for this permission. It is only used for tracking.
TaskEdit: 84- Allows user to edit other users' tasks.
EmailSend: 85- Allows user to send unsecured email
WebMailSend: 86- Allows user to send webmail
UserQueryAdmin: 87- Allows user to run, edit, and write non-released queries.
InsPlanChangeAssign: 88- Security permission for assignment of benefits.
ImageEdit: 89- Uses date restrictions. Allows user to flip, rotate, resize, and crop image. Also allows editing of details on the "Item Info" window. SignedImageEdit permission is also needed to edit signed images.
EhrMeasureEventEdit: 90- Allows editing of all measure events. Also used to track changes made to events.
EServicesSetup: 91- Allows users to edit settings in the eServices Setup window. Also causes the Listener Service monitor thread to start upon logging in.
FeeSchedEdit: 92- Allows users to edit Fee Schedules throughout the program. Logs editing of fee schedule properties.
ProviderFeeEdit: 93- Allows user to edit and delete provider specific fees overrides.
PatientMerge: 94- Allows user to merge patients.
ClaimHistoryEdit: 95- Only used in Claim History Status Edit
AppointmentCompleteEdit: 96- Allows user to edit a completed appointment. AppointmentCompleteDelete permission required in order to delete completed appointments.
WebMailDelete: 97- Audit trail for deleting webmail messages. There is no user interface in the security window for this permission.
RequiredFields: 98- Audit trail for saving a patient with required fields missing. There is no user interface in the security window for this permission.
ReferralMerge: 99- Allows user to merge referrals.
ProcEdit: 100- There is no user interface in the security window for this permission. It is only used for tracking. Currently only used for tracking automatically changing the IsCpoe flag on procedures. Can be enhanced to do more in the future. There is only one place where we could have automatically changed IsCpoe without a corresponding log of a different permission. That place is in the OnClosing of the Procedure Edit window. We update this flag even when the user Cancels out of it.
ProviderMerge: 101- Allows user to use the provider merge tool.
MedicationMerge: 102- Allows user to use the medication merge tool.
AccountProcsQuickAdd: 103- Allow users to use the Quick Add tool in the Account module.
ClaimSend: 104- Allow users to send claims.
TaskListCreate: 105- Allow users to create new task lists.
PatientCreate: 106 - Audit when a new patient is added.
GraphicalReportSetup: 107- Allows changing the settings for graphical repots.
PatientEdit: 108 - Audit when a patient is edited and restrict editing patients.
InsPlanCreate: 109 - Audit when an insurance plan is created. Currently only used in X12 834 insurance plan import.
InsPlanEdit: 110 - Audit when an insurance plan is edited. Currently only used in X12 834 insurance plan import.
InsPlanCreateSub: 111 - InsSub Created. Currently only used in X12 834 insurance plan import and in API.
InsPlanEditSub: 112 - Audit when an insurance subscriber is edited. Currently only used in X12 834 insurance plan import.
InsPlanAddPat: 113 - Audit when a patient is added to an insurance plan. Currently only used in X12 834 insurance plan import.
InsPlanDropPat: 114 - Audit when a patient is dropped from an insurance plan. Currently only used in X12 834 insurance plan import.
InsPlanVerifyList: 115 - Allows users to be assigned Insurance Verifications.
SplitCreatePastLockDate: 116 - Allows users to bypass the global lock date to add paysplits.
ProcComplEditLimited: 117 - DEPRECATED - Uses date restrictions. Covers editing some fields of completed procs.
ClaimDelete: 118 - Uses date restrictions based on the SecDateEntry field as the claim date. Covers deleting a claim of any status (Sent, Waiting to Send, Received, etc).
InsWriteOffEdit: 119 - Covers editing the Write-off and Write-off Override fields for claimprocs. Prevents the user from creating a claimproc to prevent subversion of an existing write-off. Prevents the user from deleting a claimproc as well, since otherwise deleting one outside the date range and creating a new one would subvert the date/days restriction. Uses date/days restriction based on the attached proc.DateEntryC; unless it's a total payment, then uses claimproc.SecDateEntry.Applies to all plan types (i.e. PPO, Category%, Capitation, etc).
ApptConfirmStatusEdit: 120 - Allows users to change appointment confirmation status.
GraphicsRemoteEdit: 121 - Audit trail for when users change graphical settings for another workstation in FormGraphics.cs.
AuditTrail: 122 - Audit Trail (Separated from SecurityAdmin permission)
TreatPlanPresenterEdit: 123 - Allows the user to change the presenter on a treatment plan.
ProviderAlphabetize: 124 - Allows users to use the Alphabetize Provider button from FormProviderSetup to permanently re-order providers.
ClaimProcReceivedEdit: 125 - Allows editing of claimprocs that are marked as received status.
StatementPatNumMismatch: 126 - Used to diagnose an error in statement creation. Audit Trail Permission Only
MobileWeb: 127 - User has access to ODTouch.
PatPlanCreate: 128 - For logging purposes only. Used when PatPlans are created and not otherwise logged.
PatPriProvEdit: 129 - Allows the user to change a patient's primary provider, with audit trail logging.
ReferralEdit: 130
PatientBillingEdit: 131 - Allows users to change a patient's billing type.
ReportProdIncAllProviders: 132 - Allows viewing annual prod inc of all providers instead of just a single provider.
ReportDaily: 133 - Allows running daily reports. DEPRECATED.
ReportDailyAllProviders: 134 - Allows viewing daily prod inc of all providers instead of just a single provider
PatientApptRestrict: 135 - Allows user to change the appointment schedule flag.
SheetDelete: 136 - Allows deleting sheets when they're associated to patients.
UpdateCustomTracking: 137 - Allows updating custom tracking on claims.
GraphicsEdit: 138 - Allows people to set graphics option for the workstation and other computers.
InsPlanOrthoEdit: 139 - Allows user to change the fields within the Ortho tab of the Ins Plan Edit window.
ClaimProcClaimAttachedProvEdit: 140 - Allows user to change the provider on claimproc when claimproc is attached to a claim.
InsPlanMerge: 141 - Audit when insurance plans are merged.
InsCarrierCombine: 142 - Allows user to combine carriers.
PopupEdit: 143 - Allows user to edit popups. A user without this permission will still be able to edit their own popups.
InsPlanPickListExisting: 144 - Allows user to select new insplan from list prior to dropping current insplan associated with a patplan.
OrthoChartEditUser: 145 - Allows user to edit their own signed ortho charts even if they don't have full permission.
ProcedureNoteUser: 146 - Allows user to edit procedure notes that they created themselves if they don't have full permission.
GroupNoteEditSigned: 147 - Allows user to edit group notes signed by other users. If a user does not have this permission, they can still edit group notes that they themselves have signed.
WikiAdmin: 148 - Allows user to lock and unlock wiki pages. Also allows the user to edit locked wiki pages.
PayPlanEdit: 149 - Allows user to create, edit, close, and delete payment plans.
ClaimEdit: 150 - Used for logging when a claim is created, cancelled, or saved.
CommandQuery: 151- Allows user to run command queries. Command queries are any non-SELECT queries for any non-temporary table.
ReplicationSetup: 152 - Gives user access to the replication setup window.
PreAuthSentEdit: 153 - Allows user to edit and delete sent and received pre-auths. Uses date restriction.
LogFeeEdit: 154 - Edit fees (for logging only). Security log entry for this points to feeNum instead of CodeNum.
LogSubscriberEdit: 155 - Log ClaimProcEdit
RecallEdit: 156 - Logs changes to recalls, recalltypes, and recaltriggers.
ProcCodeEdit: 157 - Allows users with this permission the ability to edit procedure codes. Users with the Setup permission have this by default. Logs changes made to individual proc codes (excluding fee changes) including when run from proc code tools.
AddNewUser: 158 - Allows users with this permission the ability to add new users. Security admins have this by default.
ClaimView: 159 - Allows users with this permission the ability to view claims.
RepeatChargeTool: 160 - Allows users to run the Repeat Charge Tool.
DiscountPlanAddDrop: 161 - Logs when a discount plan is added or dropped from a patient.
TreatPlanSign: 162 - Allows users with this permission the ability to sign treatment plans.
ProcExistingEdit: 163 - Allows users with this permission to edit an existing EO or EC procedure.
UnrestrictedSearch: 164 - Allows users to search for patients in all clinics even when they are restricted to clinics. Also allows user to reassign patient clinic.
ArchivedPatientEdit: 165 - Allows users to edit patient information for archived patients. This really only stops editing inside Patient Edit window. Also see ArchivedPatientSelect. Blocking user from patient selection prevents changes to all the other tables.
CommlogPersistent: 166 - HQ only. Must access from dropdown menu next to commlog button. Only for new commlog. Originally, this was written to allow commlogs to reuse a single persistent non-modal window. In about 2023, we accidentally introduced a bug that made it not reuse the original window. So now, it's multiple non-modal windows. We like the change, so we're keeping it.
VerifyPhoneOwnership: 167 - Logs when a phone number has had its ownership verified. For OD HQ only.
SalesTaxAdjEdit: 168 - HQ only. Allows users to make changes to Sales Tax type adjustments.
InsuranceVerification: 169 - Allows user to set last verified dates for insurance benefits. Also allows access to FormInsVerificationList.
CreditCardMove: 170 - Logs when a credit card is moved from one patient to another. Makes a log for both patients. Audit Trail Permission Only.
AgingRan: 171 - Logs when aging is being ran and from where.
HeadmasterSetup: 172 - HQ only. Allows user to add, edit, and delete Headmaster services and devices.
DashboardWidget: 173 - Allows user to view a specific Dashboard Widget.
NewClaimsProcNotBilled: 174 - Prevent users from creating bulk claims from the Procs Not Billed Report if past the lock date.
PatientPortalLogin: 175 - Logging into patient portal. Used for audit trail only.
FAQEdit: 176 - Allows user to create and edit FAQ objects shown by the help button(?).
FeatureRequestEdit: 177 - HQ only. Alows user to edit feature request.
TaskReminderPopup: 178- Logs when a reminder task is popped up. Used for audit trail only.
SupplementalBackup: 179 - Logs when changes are made to supplemental backup settings inside the FormBackup window.
WebSchedRecallManualSend: 180 - Logs when a user sends a Web Sched Recall through the Recall List. Used for audit trail only
PatientSSNView: 181 - Allows the user to unmask patient SSN for temporary viewing. Logs any unmasks in the audit trail
PatientDOBView: 182 - Allows the user to unmask patient DOB for temporary viewing. Logs any unmasks in the audit trail
FamAgingTruncate: 183 - Logs when the family aging table has been truncated. For audit trails only.
DiscountPlanMerge: 184 - Logs when discount plans are merged. For audit trails only.
ProcCompleteStatusEdit: 185 - Uses date restrictions. Allows user to change status of a completed procedure, or delete compeleted procedure
ProcCompleteAddAdj: 186 - Allows user to add an adjustment to a procedure (date locked)
ProcCompleteEditMisc: 187 - Misc Edit that includes "Do Not Bill Ins" and "Hide Graphics" (date locked)
ProcCompleteNote: 188 - Edit the note of a completed procedure
ProcCompleteEdit: 189 - Edit main information of a procedure that is not already covered by the other permissions. Is not all inclusive.
ProtectedLeaveAdjustmentEdit: 190 - User can create, edit, and delete time card adjustments for protected leave on their time card of the current pay period. Users that also have the Edit All Time Cards permission, have this permission for all time cards.
TimeAdjustEdit: 191 - Logs when a time card adjustment is created, edited, or deleted.
QueryMonitor: 192 - Permission for users to monitor queries
CommlogCreate: 193 - Permission for users to create commlogs.
WebFormAccess: 194 - Permission for users to modify and discard webforms
CloseOtherSessions: 195 - Close other sessions of Open Dental Cloud
RepeatChargeCreate: 196 - Permission for Repeating Charge creation.
RepeatChargeUpdate: 197 - Permission for Repeating Charge update.
RepeatChargeDelete: 198 - Permission for Repeating Charge deletion.
Zoom: 199 - User can open the zoom window and edit zoom level. Used to block remote application users who all share the same computer.
FormAdded: 200 - Permission for forms added to eclipboard mobile check in.
ImageExport: 201. Uses date restrictions.
ImageCreate: 202. Permission to Scan, Import, and Create Images.
CertificationEmployee: 203 - Permission to update Employee Certifications.
CertificationSetup: 204 - Permission to set up Certifications.
EmployerCreate: 205 - Permission to create Employers.
AllowLoginFromAnyLocation: 206 - Permission to allow users to login to ODCloud from any IP Address.
LogDoseSpotMedicationNoteEdit: 207 - Logging only. Creates an entry if a medicationpat.PatNote needs to be truncated before sending to DoseSpot.
PayPlanChargeDateEdit: 208 - Allows user to edit a payment plan charge date that has an APR.
DiscountPlanAdd: 209 - Logs when discount plans are added. For audit trails only.
DiscountPlanEdit: 210 - Logs when discount plans are edited. For audit trails only.
AllowFeeEditWhileReceivingClaim: 211 - Permission to allow users without FeeSchedEdit permission to update fee schedule while receiving claims.
ManageHighSecurityProgProperties: 212 - Permission for managing high security program properties.
CreditCardEdit: 213 - Logs when a patient's credit card is edited.
MedicationDefEdit: 214 - Allows user to edit medication definitions.
AllergyDefEdit: 215 - Allows user to edit allergy definitions.
Advertising: 216 - Allows user to setup and use Advertising features like Postcards.
TextMessageView: 217 - Allows user to view text messages.
TextMessageSend: 218 - Allows uer to send text messages.
RxMerge: 219 - Allows user to merge prescriptions.
DefEdit: 220 - Allows user to add or update Definitions.
UpdateInstall: 221 - Allows user to install Open Dental updates.
AdjustmentTypeDeny: 222 - Denies users access to specific adjustment types. Special type of permission where having this permission actually denies users access. If a usergroup has an entry for this permission, then they do not have access to the adjustment type with the defnum that is stored in grouppermission.FKey. Pattern approved by Jordan.
StatementCSV: 223 - Allows user to export statements as CSV files.
CarrierEdit: 224 - Allows users to edit carriers.
ApiSubscription: 225 - Logs when API subscriptions are added or deleted. For audit trails only.
SecurityGlobal: 226 - Logs changes to global lock date. For audit trails only.
TaskDelete: 228 - Allows user to delete tasks.
SetupWizard: 229 - Allows user to use setup wizard.
ShowFeatures: 230 - Allows user to use show features.
PrinterSetup: 231 - Allows user to setup printer.
ProviderAdd: 232 - Allows user to add provider.
ClinicEdit: 233 - Allows user to edit clinic.
ApiAccountEdit: 234 - Allows the editing of customer accounts for the ODApi via the BCM.
RegistrationKeyCreate: 235 - Logs when registration keys are created. For audit trails only.
RegistrationKeyEdit: 236 - Logs when registration keys are edited. For audit trails only.
AppointmentDelete: 237 - Allows user to delete appointments.
AppointmentCompleteDelete: 238 - Allows user to delete completed appointments.
AppointmentTypeEdit: 239 - Logs when Appointment Types are edited. For audit trails only.
TextingAccountEdit: 240 - Only used at OD HQ. Allows users to make high level changes in regards to texting.
WebChatEdit: 241 - Logs when web chat sessions are edited. For audit trails only.
SupplierEdit: 242 - Allows users to access FormSuppliers
SupplyPurchases: 243 - Logs when any supply purchases are created, placed, or deleted.
PreferenceEditBroadcastMonitor: 244 - Only used at OD HQ. Ability to edit table rows via Broadcast Monitor.
AppointmentResize: 245 - Allows users to resize appointments.
CreditCardTerminal: 246 - Logs when a user pays with a credit card. For Audit Trails only.
ViewAppointmentAuditTrail: 247 - Only for viewing the audit trail in FormEditAppointment
PayPlanChargeEdit: 248 - Logs when a user edits a payment plan charge.
ArchivedPatientSelect: 249 - Also see ArchivedPatientEdit. Blocking user from patient selection prevents changes to all the other tables besides the patient table. It's more rigorous.
CloudCustomerEdit: 250 - Only used at OD HQ. Ability to edit Cloud tab info via Broadcast Monitor.
ChanSpy: 251 - Only used at OD HQ. Ability to listen to live calls.
ClaimProcFieldsBilledToInsEdit: 252 - Ability to edit Fee Billed to Insurance or Code Sent to Insurance in FormClaimProc, whether new or existing.
AllergyMerge: 253 - Allow users to merge allergies.
AIChatAdmin: 254 - Only used at OD HQ. Currently does nothing. Reserved for future ByteBot features.
BadgeIdEdit: 255 - Allow users to edit BadgeIds in the userod table.
ChildDaycareEdit: 256 - Internal Child Daycare only. Allow users to make changes to the daycare. Only used at HQ.
PerioEditCopy: 257 - Allow users to copy perio charts in the Perio Chart window.
LicenseAccept: 258 - For audit trail only. Logs when a license is accepted by a user.
EFormEdit: 259 - Uses date restrictions but no global lock date. Also used in audit trail to log importing.
EFormDelete: 260 - Allows deleting eForms when they're attached to patients. No date restrictions.
MobileNotification: 261 - Used for logging only. Can be used to log whenever mobile notifications are inserted into the database.
ChartViewsEdit: 262 - Allows users to move chart views up and down, and add new chart views
SuperFamilyDisband: 263 - Allows disbanding of Super Families.
ImageSignatureCreate: 264 - Allows creation of note and signature for images without a signature.
SignedImageEdit: 265 - Allows editing and deletion of note and signature for images with a signature. Allows users with the ImageEdit permission to edit signed images. Allows users with the ImageDelete permission to delete signed images.
BlockoutsFlagged: 266 - There are two kinds of blockouts: those flagged as NS(no sched) or DC(disable cut/copy/paste) and those with no flag. This permission handles all the flagged blockouts, including add, edit, copy/paste, and delete. Logs an audit trail entry when a flagged blockout is added, edited, deleted, cut, copied, pasted, or cleared. See Blockouts permission for the other unflagged blockouts.
PayPlanUnlock: 267 - Payment plans have a 'Locked' checkbox. This permission allows the user to uncheck that box which will unlock the payment plan. Users without this permission will not be able to unlock a payment plan.
SendAlertsFromHQ: 268 - Allows sending notifications from HQ to customers. Only used at HQ.
TextAllEmployees: 269 - Only used at OD HQ. Ability to send mass texts to all current employees.
ProcTPEditFee: 270 - Allows editing the fee of a treatment planned procedure.
EFormImport: 271 - Only used to make log entries.
BlockoutAdd: 272 - This permission handles adding, pasting, and copying blockouts with no flag.
BlockoutDelete: 273 - This permission handles deleting, cutting, and clearing blockouts with no flag.
PhoneExtension: 274 - Only used at HQ to make audit trail entries when a change is made to a row in the Phone table.
PatientSelected: 275 - Audit when a patient has been selected.
LogScraperHQ: 276 - Only used at OD HQ. Used for making changes to which services will have their logger folders scraped.
AdvancedTextingAccountEdit: 277 - Only used at OD HQ. Allows users to make more advanced changes in regards to texting accounts (e.g. manually editing JSON). This is a more rigorous permission than TextingAccountEdit.
5 FKey bigint(20) Generic foreign key to any other table. Typically used in combination with PermType to give permission to specific things. FK to displayreport.DisplayReportNum AND PermType=22, FK to sheetdef.SheetDefNum AND PermType=173, FK to definition.DefNum AND PermType=222.

guardian
Links patient to patient in a many to many database relationship. The two PatNums need not be in the same family, but will usually be. The two PatNums could be in different families if the relationship was entered, then one of the patients in the relationship is moved to another family. This table can also be used for other relationship types besides guardians. The table name is guardian because we only supported guardian relationships in the past, and we did not want to risk breaking queries by changing the table or column names. User can specify any relationship as a guardian or not a guardian. For example, a retired person might specify their brother or child as their guardian, or the user may want to record the brother of a patient as a non-guardian.
Order Name Type Summary
0 GuardianNum bigint(20) Primary key.
1 PatNumChild bigint(20) FK to patient.PatNum. If Relationship is "Mother", then this PatNum is the child of the mother.
2 PatNumGuardian bigint(20) FK to patient.PatNum. If Relationship is "Mother", then this is the PatNum of the mother.
3 Relationship tinyint(4) Enum:GuardianRelationship .
None: 0 - Never stored in db guardian table, but can be stored in eFormField for import purposes.
Mother: 1 - Added due to feature request. Needed for EHR.
Stepfather: 2 - Added due to feature request.
Stepmother: 3 - Added due to feature request.
Grandfather: 4 - Added due to feature request.
Grandmother: 5 - Added due to feature request.
Father: 6 - Added due to feature request. Needed for EHR.
Brother: 7 - Added for EHR.
CareGiver: 8 - Added for EHR.
FosterChild: 9 - Added for EHR.
Guardian: 10 - Added for EHR. Also meets request #154.
Grandparent: 11 - Added for EHR.
Other: 12 - Added for EHR. Also meets request #154.
Parent: 13 - Added for EHR. Also meets request #154.
Stepchild: 14 - Added for EHR.
Self: 15 - Added for EHR.
Sibling: 16 - Added for EHR.
Sister: 17 - Added for EHR. Also meets request #154.
Spouse: 18 - Added for EHR.
Child: 19 - Added for EHR.
LifePartner: 20 - Added for EHR.
Friend: 21 - Added for EHR.
Grandchild: 22 - Added for EHR.
Sitter: 23 - Added due to feature request. Maps to caregiver in EHR.
4 IsGuardian tinyint(4) True if this specifies a guardian relationship, or false if any other relationship. When this flag is true, the relationship will show in the "Guardians" appointment view field and in the family module "Guardians" display field for the patient. This also grants PHI access in the patient portal to the specific patient designated via PatNumChild.

hcpcs
A code system used in EHR. Healhtcare Common Procedure Coding System. Another system used to describe procedure codes.
Order Name Type Summary
0 HcpcsNum bigint(20) Primary key..
1 HcpcsCode varchar(255) Examples: AQ, J1040
2 DescriptionShort varchar(255) Short description. This is the HCPCS supplied abbreviated description.

hieclinic
Health Information Exchange clinic settings. This table stores settings for generating automatic CCDs.
Order Name Type Summary
0 HieClinicNum bigint(20) Primary key.
1 ClinicNum bigint(20) FK to clinic.ClincNum.
2 SupportedCarrierFlags tinyint(4) Enum:HieCarrierFlags AllPatient=0,Medicaid=1. Indicates the supported carrier, bitwise.
AllCarriers: No carrier set. All carriers are supported.
3 PathExportCCD varchar(255) The path to export CCD. This field will not be blank when enabled.
4 TimeOfDayExportCCD bigint(20) The time to export CCD.
5 IsEnabled tinyint(4)

hiequeue
Health Information Exchange queue. This table stores pending patients that need to be considered for an auto-generated CCD.
Order Name Type Summary
0 HieQueueNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.

histappointment
A historical copy of an appointment. These are generated as a result of an appointment being edited. When creating for insertion it needs a passed-in Appointment object.
Order Name Type Summary
0 HistApptNum bigint(20) Primary key.
1 HistUserNum bigint(20) FK to userod.UserNum Identifies the user that changed this appointment from previous state, not the person who originally wrote it.
2 HistDateTStamp datetime The date and time that this appointment was edited and added to the Hist table.
3 HistApptAction tinyint(4) Enum:HistAppointmentAction .
Created: 0
Changed: 1
Missed: 2
Cancelled: 3
Deleted: 4
4 ApptSource tinyint(4) Enum:EServiceTypes .
None: Not an eService user. All valid users should be this type otherwise permission checking will act differently.
EConnector:
Broadcaster:
BroadcastMonitor:
ServiceMainHQ:
OpenDentalService: Used by the OpenDentalService. Not a eService but we need the "phantom" user to behave like eService users.
OpenDentalAPIService: Used by the Open Dental API Service.
SecureEmailService: Used by the SecureEmailService.
ODXam: Used by WebServiceMainHQ. Used as a fall back value when users are using an older version of a mobile app.
EClipboard: Used by WebServiceMainHQ.
OpenDentalLogScraper: Used by the HQ Log Scraper service.
OpenDental32Bit: Used by HQ to log errors for Open Dental 32-bit
5 AptNum bigint(20) FK to appointment.AptNum.
6 PatNum bigint(20) FK to patient.PatNum. The patient that the appointment is for.
7 AptStatus tinyint(4) Copied from Appointment.
8 Pattern varchar(255) Copied from Appointment.
9 Confirmed bigint(20) FK to definition.DefNum. This field can also be used to show patient arrived, in chair, etc. The Category column in the definition table is DefCat.ApptConfirmed.
10 TimeLocked tinyint(4) Copied from Appointment.
11 Op bigint(20) FK to operatory.OperatoryNum.
12 Note text Copied from Appointment.
13 ProvNum bigint(20) FK to provider.ProvNum.
14 ProvHyg bigint(20) FK to provider.ProvNum. Optional. Only used if a hygienist is assigned to this appt.
15 AptDateTime datetime Copied from Appointment.
16 NextAptNum bigint(20) FK to appointment.AptNum. A better description of this field would be PlannedAptNum. Only used to show that this apt is derived from specified planned apt. Otherwise, 0.
17 UnschedStatus bigint(20) FK to definition.DefNum. The definition.Category in the definition table is DefCat.RecallUnschedStatus. Only used if this is an Unsched or Planned appt.
18 IsNewPatient tinyint(4) Copied from Appointment.
19 ProcDescript text Copied from Appointment.
20 Assistant bigint(20) FK to employee.EmployeeNum. You can assign an assistant to the appointment.
21 ClinicNum bigint(20) FK to clinic.ClinicNum. 0 if no clinic.
22 IsHygiene tinyint(4) Copied from Appointment.
23 DateTStamp timestamp Not copied from Appointment. Automatically updated by MySQL every time a row is added or changed.
24 DateTimeArrived datetime Copied from Appointment.
25 DateTimeSeated datetime Copied from Appointment.
26 DateTimeDismissed datetime Copied from Appointment.
27 InsPlan1 bigint(20) FK to insplan.PlanNum for the primary insurance plan at the time the appointment is set complete. May be 0. We can't tell later which subscriber is involved; only the plan.
28 InsPlan2 bigint(20) FK to insplan.PlanNum for the secondary insurance plan at the time the appointment is set complete. May be 0. We can't tell later which subscriber is involved; only the plan.
29 DateTimeAskedToArrive datetime Copied from Appointment.
30 ProcsColored text Copied from Appointment.
31 ColorOverride int(11) Copied from Appointment.
32 AppointmentTypeNum bigint(20) FK to appointmenttype.AppointmentTypeNum. Make sure to update ColorOverride to the corresponding color associated to this appointment type when changing the appointment type.
33 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
34 SecDateTEntry datetime Copied from Appointment.
35 Priority tinyint(4) Copied from Appointment.
36 ProvBarText varchar(60) Copied from Appointment.
37 PatternSecondary varchar(255) Copied from Appointment.
38 SecurityHash varchar(255) Copied from Appointment.
39 ItemOrderPlanned int(11) Copied from Appointment.
40 IsMirrored tinyint(4) Copied from Appointment.

hl7def
.
Order Name Type Summary
0 HL7DefNum bigint(20) Primary key.
1 Description varchar(255)
2 ModeTx tinyint(4) Enum:ModeTxHL7 File, TcpIp.
File: 0
TcpIp: 1
Sftp: 2. Used for MedLab HL7 transmission, currently only LabCorp.
3 IncomingFolder varchar(255) Used for File mode and for SFTP mode. For file mode, this is the folder for inbound HL7 messages. For SFTP mode, this is the relative path from the SFTP root directory to the directory where the result messages can be found. The root or home directory '.' can be included in the path but is not necessary. Examples: /./results or /results or results.
4 OutgoingFolder varchar(255) Only used for File mode
5 IncomingPort varchar(255) Only used for tcpip mode. Example: 1461
6 OutgoingIpPort varchar(255) Only used for tcpip mode. Example: 192.168.0.23:1462
7 FieldSeparator varchar(5) Only relevant for outgoing. Incoming field separators are defined in MSH. Default |.
8 ComponentSeparator varchar(5) Only relevant for outgoing. Incoming field separators are defined in MSH. Default ^.
9 SubcomponentSeparator varchar(5) Only relevant for outgoing. Incoming field separators are defined in MSH. Default &.
10 RepetitionSeparator varchar(5) Only relevant for outgoing. Incoming field separators are defined in MSH. Default ~.
11 EscapeCharacter varchar(5) Only relevant for outgoing. Incoming field separators are defined in MSH. Default \.
12 IsInternal tinyint(4) If this is set, then there will be no child tables. Internal types are fully defined within the C# code rather than in the database.
13 InternalType varchar(255) Enum:HL7InternalType Stored in db as string, but used in OD as enum HL7InternalType. Example: eCWTight. This will always have a value because we always start with a copy of some internal type.
eCWFull: Message structure is identical to eCWTight, minor changes in the program like showing patient demographics and the account module.Like eCWTight, eCW dictates the patients' PatNums in PID.2, so we try to locate the patient with that PatNum.If not found we do not attempt to use PID.4 ChartNumber or name, we assume new patient and insert.
eCWStandalone: Only Incoming ADT messages are processed, OD is responsible for adding patients so we assign PatNum.The incoming messages patient ID in PID.2 is stored as ChartNumber and PID.4 is not processed.The Account and Chart modules are visible and the users can change and add patients in OD. No outgoing messages.
eCWTight: Patient demographics are hidden as well as account and appt modules.We let eCW dictate the PatNum values in PID.2 and trust that they are unique and longs (no string characters).Unlike Standalone, if the pat isn't found by PID.2 PatNum we don't try to locate the pat by PID.4 ChartNumber or name, we assume it's a new pat.
Centricity: Account and Appointment modules are visible and users can change and add patients.Only outgoing DFT message defined, no incoming messages are processed.
HL7v2_6: Our default behavior for processing and sending HL7 messages.Send and receive ADT and SIU messages, receive DFT messages.The v2.6 documentation claims both PID.2 and PID.4 are only retained for backward compatibility and PID.3 is now required and used for a list of patient IDs.We will still put ChartNumber in PID.2 (used to be referred to as 'external ID' by HL7 doc) for outgoing msgs and look for our PatNum in PID.2 for incoming msgs.We will now also check PID.3 for a repitition that contains our PatNum as part of the CX data type.Account and Appointments module are visible and users can change and add patients.
MedLabv2_3: This is currently used for LabCorp and is based on HL7 version 2.3 specifications. This interface has been built to the LabCorp standards and may not match the HL7 version 2.3 specs exactly.
14 InternalTypeVersion varchar(50) Example: 12.2.14. This will be empty if IsInternal. This records the version at which they made their copy. We might have made significant improvements since their copy.
15 IsEnabled tinyint(4) .
16 Note text
17 HL7Server varchar(255) The machine name of the computer where the OpenDentHL7 service for this def is running.
18 HL7ServiceName varchar(255) The name of the HL7 service for this def. Must begin with OpenDent...
19 ShowDemographics tinyint(4) Enum:HL7ShowDemographics Hide,Show,Change,ChangeAndAdd
Hide: Cannot see or change.
Show: Can see, but not change.
Change: Can change, but not add patients. Might get overwritten by next incoming message.
ChangeAndAdd: Can change and add patients. Might get overwritten by next incoming message.
20 ShowAppts tinyint(4) Show Appointments module.
21 ShowAccount tinyint(4) Show Account module
22 IsQuadAsToothNum tinyint(4) Send the quadrant in the tooth number component instead of the surface component of the FT1.26 field of the outgoing DFT messages. Only for eCW.
23 LabResultImageCat bigint(20) FK to definition.DefNum. Image category used by MedLab HL7 interfaces when storing PDFs received via inbound HL7 messages.
24 SftpUsername varchar(255) The username for logging into the Sftp server.
25 SftpPassword varchar(255) The password used with the SftpUsername to log into the Sftp server. This won't be displayed to the user but will be stored as encrypted text in the db.
26 SftpInSocket varchar(255) The socket used to connect to the Sftp server for retrieving inbound HL7 messages. Currently only used by MedLabv2_3 interfaces. This will be the address:port of the Sftp server to connect to for retrieving lab results. Example: server.address.com:20020.
27 HasLongDCodes tinyint(4) For eCW HL7 interfaces only. False by default. When false, D codes sent in outbound DFT messages will be limited to 5 characters. Any additional characters will be stripped off when generating the HL7 message. When true, D codes will not be truncated.
28 IsProcApptEnforced tinyint(4) If true a message box will warn users if they try to send procedures from the chart module that are not attached to an appointment.

hl7deffield
Multiple fields per segment.
Order Name Type Summary
0 HL7DefFieldNum bigint(20) Primary key.
1 HL7DefSegmentNum bigint(20) FK to hl7defsegment.HL7DefSegmentNum
2 OrdinalPos int(11) Position within the segment.
3 TableId varchar(255) HL7 table Id, if applicable. Example: 0234. Example: 1234/2345. DataType will be ID.
4 DataType varchar(255) The DataTypeHL7 enum will be unlinked from the db by storing as string in db. As it's loaded into OD, it will become an enum.
5 FieldName varchar(255) User will get to pick from a list of fields that we will maintain. Example: guar.nameLFM, prov.provIdName, or pat.addressCityStateZip. See below for the full list. This will be blank if this is a fixed text field.
6 FixedText text User will need to insert fixed text for some fields. Either FixedText or FieldName will have a value, not both.

hl7defmessage
There is no field for MessageStructureHL7 (ADT_A01), because that will be inferred. Defined in HL7 specs, section 2.16.3.
Order Name Type Summary
0 HL7DefMessageNum bigint(20) Primary key.
1 HL7DefNum bigint(20) FK to hl7def.HL7DefNum
2 MessageType varchar(255) Enum:MessageTypeHL7 Stored in db as string, but used in OD as enum MessageTypeHL7. Example: ADT
NotDefined: Use this for unsupported message types
ACK: Message Acknowledgment
ADT: Demographics - A01,A04,A08,A28,A31
DFT: Detailed Financial Transaction - P03
ORU: Unsolicited Observation Message - R01
PPR: Patient Problem - PC1,PC2,PC3
SIU: Schedule Information Unsolicited - Event types S12 through S26. Currently only S12, S14, S15, and S17 events are supported. Inbound for eCW, outbound for other interfaces.
SRM: Schedule Request Message - Event types S01 through S11. Currently only S03 and S04 events are supported. Not used for eCW, inbound for other interfaces.
SRR: Schedule Request Response - Event types S01 through S11. Currently only S03 and S04 events are supported. Not used for eCW, inbound for other interfaces.
VXU: Unsolicited Vaccination Record Update - V04
3 EventType varchar(255) Enum:EventTypeHL7 Stored in db as string, but used in OD as enum EventTypeHL7. Example: A04, which is only used with ADT/ACK.
NotDefined: Use this for unsupported event types
A04: Only used with ADT/ACK. A04 - Register a PatientFor eCW, the A04 and A08 are inbound messages and are processed the same. We attempt to locate the patient, if not found we insert one.For other interfaces, the same method of locating a patient and if not found inserting one will be used for inbound ADT^A04 and ADT^A08 messages.Outbound messages will have an A04 event type if a new patient is added
A08: Only used with ADT/ACK. A08 - Update Patient InfoA04 and A08 inbound are processed the same, but we will send the A08 event type if updating a patient in an outbound ADT.
P03: Only used with DFT/ACK.
PC1: Only used with PPR/ACK (Patient Problem messages). Not used for eCW.These are inbound messages for adding/updating patient problems.PC1 is the Add event. Add and Update events will be handled the same for now.
PC2: Only used with PPR/ACK (Patient Problem messages). Not used for eCW.PC2 is the Update event. Add and Update events will be handled the same for now.
S03: Only used with SRM/SRR/ACK. S03 - Request Appointment Modification. Not used for eCW.These will be inbound and are used for updating a limited amount of information for an existing appointment.S03 messages are used to update appointments.
S04: Only used with SRM/SRR/ACK. S04 - Request Appointment Cancellation. Not used for eCW.S04 messages are used to set an appointment.AptStatus to ApptStatus.Broken.
S12: Only used with SIU/ACK. S12 - New ApptFor eCW, these are inbound, OD is considered an auxiliary application, and S12 and S14 messages are processed the same.For interfaces that require outbound SIU messages, OD is considered the filler application since OD has control over the operatories and schedules.As the filler application, events S12-S26 are the message events and they all have the same structure defined by HL7.Different actions in OD will cause a different outbound event type to be inserted, but the defined segments and fields will otherwise be the same.
S13: Only used with SIU/ACK. S13 - Appt Rescheduling
S14: Only used with SIU/ACK. S14 - Appt Modification
S15: Only used with SIU/ACK. S15 - Appt Cancellation
S17: Only used with SIU/ACK. S17 - Appt Deletion
4 InOrOut tinyint(4) Enum:InOutHL7 Incoming, Outgoing
Incoming: 0
Outgoing: 1
5 ItemOrder int(11) The only purpose of this column is to let you change the order in the HL7 Def windows. It's just for convenience.
6 Note text text
7 MessageStructure varchar(255) Enum:MessageStructureHL7 Stored in db as string, but used in OD as enum MessageStructure. Example: ADT_A01, which is the structure used for event types A01, A04, A08, and A13.
NotDefined: Use this for unsupported message structures
ADT_A01: Used for ADT/ACK event types A01, A04, A08, and A13. We currently only support A04 and A08 event types, both will use this structure.
DFT_P03: Used for DFT/ACK event type P03. All outbound DFT's are this structure.
ORU_R01: Used for ORU/ACK event type R01. All inbound ORU - Unsolicited transmission of an observation message will use this structure.This is used for all inbound LabCorp messages.
PPR_PC1: Used for PPR/ACK event types PC1, PC2, and PC3. We currently only support PC1 (add problem) and PC2 (update problem), both use this structure.
SIU_S12: Used for SIU/ACK event types S12 through S24 and S26. We currently only support S12 through S17.Inbound SIU's are all treated the same, regardless of the event type.We send different event types in outbound SIU's depending on the action that causes the message.All SIU's, inbound or outbound, use this message structure.
SRM_S01: Used for SRM/ACK event types S01 through S11. We currently only support S03 (update appt request) and S04 (cancel appt request).SRM's are inbound and when the action of updating or cancelling the appt is completed, an SRR is sent.SRM's and SRR's still require ACK's. i.e. SRM received, ACK sent, action completed leads to SRR sent, ACK received.SRM's and SRR's will all use this message structure.
SRR_S01: Used for SRR/ACK event types S01 through S11. We currently only support S03 and S04 (see SRM_S01).SRR's are outbound and sent when an SRM is processed correctly.

hl7defsegment
multiple segments per message
Order Name Type Summary
0 HL7DefSegmentNum bigint(20) Primary key.
1 HL7DefMessageNum bigint(20) FK to hl7defmessage.HL7DefMessageNum
2 ItemOrder int(11) Since we don't enforce or automate, it can be 1-based or 0-based. For outgoing, this affects the message structure. For incoming, this is just for convenience and organization in the HL7 Def windows.
3 CanRepeat tinyint(4) For example, a DFT can have multiple FT1 segments. This turns out to be a completely useless field, since we already know which ones can repeat.
4 IsOptional tinyint(4) If this is false, and an incoming message is missing this segment, then it gets logged as an error/failure. If this is true, then it will gracefully skip a missing incoming segment. Not used for outgoing.
5 SegmentName varchar(255) Stored in db as string, but used in OD as enum SegmentNameHL7. Example: PID.
6 Note text .

hl7msg
HL7 messages sent and received.
Order Name Type Summary
0 HL7MsgNum bigint(20) Primary key.
1 HL7Status int(11) Enum:HL7MessageStatus Out/In are relative to Open Dental. This is in contrast to the names of the old ecw folders, which were relative to the other program. OutPending, OutSent, InReceived, InProcessed.
OutPending: 0
OutSent: 1
OutFailed: 2-Tried to send, but there was a problem. Will keep trying.
InProcessed: 3
InFailed: 4
2 MsgText mediumtext The actual HL7 message in its entirity.
3 AptNum bigint(20) FK to appointment.AptNum. Many of the messages contain "Visit ID" which is equivalent to our AptNum.
4 DateTStamp timestamp Used to determine which messages are old so that they can be cleaned up.
5 PatNum bigint(20) FK to patient.PatNum.
6 Note text

hl7procattach
Keeps track of whether procedures have been sent in an HL7 message.
Order Name Type Summary
0 HL7ProcAttachNum bigint(20) Primary key.
1 HL7MsgNum bigint(20) FK to hl7msg.HL7MsgNum.
2 ProcNum bigint(20) FK to procedurelog.ProcNum.

icd10
Other tables generally use the ICD10Code string as their foreign key. It is implied that these are all ICD10CMs, although that may not be the case in the future.
Order Name Type Summary
0 Icd10Num bigint(20) Primary key. Also identical to "Order Number" column in ICD10 documentation.
1 Icd10Code varchar(255) ICD-10-CM or ICD-10-PCS code. Dots are included. Not allowed to edit this column once saved in the database.
2 Description varchar(255) Short Description provided by ICD10 documentation.
3 IsCode varchar(255) 0 if the code is a “header” – not valid for submission on a UB04. 1 if the code is valid for submission on a UB04.

icd9
Other tables generally use the ICD9Code string as their foreign key. Currently synched to mobile server in a very inefficient manner. It is implied that these are all ICD9CMs, although that may not be the case in the future.
Order Name Type Summary
0 ICD9Num bigint(20) Primary key.
1 ICD9Code varchar(255) Not allowed to edit this column once saved in the database.
2 Description varchar(255) Description.
3 DateTStamp timestamp The last date and time this row was altered. Not user editable.

imagedraw
Image text, lines. drawings, and scales. Attached to either a document or a mount. Drawings are in pixel coordinates of original image prior to any cropping or rotating. For a mount, coordinates are relative to the entire mount. Drawings do not get changed when cropping or rotating are changed. The result is that drawings always stay on the image in exactly the original location, and they move with the image.
Order Name Type Summary
0 ImageDrawNum bigint(20) Primary key.
1 DocNum bigint(20) FK to document.DocNum
2 MountNum bigint(20) FK to mount.MountNum
3 ColorDraw int(11) For text, this is the foreground color. For lines, this is the color, and ColorBack is not used. For polygons, this is the fill color. No transparency component.
4 ColorBack int(11) Background color for text. Can be Transparent (0,255,255,255)=16777215.
5 DrawingSegment text Point data for a drawing segment. The format would look similar to this: 45.2,68.1;48,70;49,72;0,0;55,88;etc. It's simply a sequence of points, separated by semicolons. Only positive floats are used, rounded to one decimal place. 0,0 is the upper left of the image or mount. Cropping is ignored. If the pen is picked up, it becomes a new segment, so a new row in the database. Or, if this is DrawType.ScaleValue, then this field stores scale, decimal places, and units, separated by spaces. Example: "123.4 0 mm". The first two are required; units is optional.
6 DrawText varchar(255) The location of the text in pixels is incorporated into this string. Example: 25,123;This shows. Carriage returns etc are not supported. ColorDraw and FontSize are also used. Unlike tooth initial, this does not support floats.
7 FontSize float This could vary significantly based on the size of the image. It's always relative to orginal image or mount pixels. Always 0 for Pearl.
8 DrawType tinyint(4) Enum:ImageDrawType
Text: 0 - Location and string, combined
Line: 1 - A series of straight lines, stored the same as a pen drawing.
Pen: 2 - One continuous segment of a drawing.
ScaleValue: 3 - Stores a float, decimals, and units in the drawing segement. Only one of this type is allowed per image or mount.
Polygon: 4 - A series of connected points forming the outline of a closed polygon. Stored same as pen drawing. Polygons only have a fill color, not any outline color.
9 ImageAnnotVendor tinyint(4) Enum:EnumImageAnnotVendor 0: Open Dental drawings and text, 1:Pearl AI annotations.
OpenDental: 0 - Open Dental drawings and text.
Pearl: 1 - Pearl AI annotations.
BetterDiagnostics: 2 - Better Diagnostics AI annotations.
BetterDiagnosticsPatientView: 3 - Better Diagnostics AI annotations for Patient View.
10 Details text Extra space for any text. Currently only used for Pearl annotation categories, relationship properties, and relationship values, which are all stored as a single chunk of user readable text drawn straight to screen when hovering.
11 PearlLayer tinyint(4) Enum:Pearl.EnumCategoryOD This is how we hide and show layers for Pearl objects in the Imaging module.
None: 0 - None.
Crown: 1 - Crown.
PeriapicalRadiolucency: 2 - Periapical Radiolucency.
Filling: 3 - Filling.
Anatomy: 4 - Anatomy.
CariesProgressed: 5 - Caries -Progressed.
NotableMargin: 6 - Notable Margin.
Implant: 7 - Implant.
RootCanal: 8 - Root Canal.
Bridge: 9 - Bridge.
Calculus: 10 - Calculus.
Measurements: 11 - Measurements.
Bone: 12 - Bone (Tooth Part).
Cementum: 13 - Cementum (Tooth Part).
Dentin: 14 - Dentin (Tooth Part).
Enamel: 15 - Enamel (Tooth Part).
Pulp: 16 - Pulp (Tooth Part).
Restoration: 17 - Restoration (Tooth Part).
InferiorAlveolarNerve: 18 - Inferior Alveolar Nerve (Tooth Part). Not included in legend.
Sinus: 19 - Sinus (Tooth Part). Not included in legend.
NasalCavity: 20 - NasalCavity (Tooth Part). Not included in legend.
CariesIncipient: 21 - Caries -Incipient.
12 BetterDiagLayer tinyint(4) Enum:EnumCategoryBetterDiag This is how we hide and show layers for BetterDiagnostics objects in the Imaging module.
None: 0 - None.
Dentin: 1 - Dentin.
Enamel: 2 - Enamel.
Pulp: 3 - Pulp.
Restoration: 4 - Restoration.
Crown: 5 - Crown.
Cavity: 6 - Cavity.
BoneLoss: 7 - Bone Loss.
PeriapicalRadiolucency: 8 - Periapical Radiolucency.
BoneLevel: 9 - Bone Level.
Iac: 10 - Iac. Inferior alveolar canal.
NasalFloor: 11 - Nasal floor.
NormalTmj: 12 - Normal Tmj.
Sinus: 13 - Sinus.
RootStumps: 14 - Root stumps.
MissingTooth: 15 - Missing tooth.
Calculus: 16 - Calculus.
Disclaimer: 17 - FDA Disclaimer.
MarginalDiscrepancy: 18 - Marginal discrepancies.

imagingdevice
Xray sensor, camera, etc. Depending on the hardware, this can either be one physical device or a set of similar devices.
Order Name Type Summary
0 ImagingDeviceNum bigint(20) Primary key.
1 Description varchar(255) Any description of the device.
2 ComputerName varchar(255) Name of the computer where this device is available. Optional. If blank, then this device will be available to all computers.
3 DeviceType tinyint(4) Enum:EnumImgDeviceType TwainRadiograph, XDR(not functional), or TwainMulti.
TwainRadiograph: 0
XDR: 1
TwainMulti: 2
4 TwainName varchar(255) The name of the twain device as in Windows.
5 ItemOrder int(11)
6 ShowTwainUI tinyint(4)

insbluebook
One row for each historical procedure primary/secondary claim combination. Records insurance plan and insurance payment data of each procedure that has been paid on primary or secondary insurance claim made to out of network plans. This data is used to estimate allowed fees and make more accurate insurance estimates. It will be processed and summarized as entries in InsBlueBookAllowedFee.
Order Name Type Summary
0 InsBlueBookNum bigint(20) Primary key.
1 ProcCodeNum bigint(20) FK to procedurecode.CodeNum. The code of the procedure.
2 CarrierNum bigint(20) FK to carrier.CarrierNum. The carrier that the insurance plan belongs to.
3 PlanNum bigint(20) FK to insplan.PlanNum. The insurance plan for which the claim was made.
4 GroupNum varchar(25) The insplan.GroupNum. May be blank.
5 InsPayAmt double The sum of InsPayAmt per claim for received and supplemental claimprocs of the procedure that are associated to the insurance plan. Not used for future estimate calculations.
6 AllowedOverride double The AllowedOverride of the received claimproc on the claim. This is the number that is actually used to provide the estimate for future payments.
7 DateTEntry datetime The date and time of entry. Not editable by user.
8 ProcNum bigint(20) FK to procedurelog.ProcNum.
9 ProcDate date The date of service, derived from claimproc.ProcDate of the received claimproc on the claim.
10 ClaimType varchar(10) The claim.ClaimType. Currently only gathering data for primary and secondary claims, so this will be "P"(Primary) or "S"(Secondary).
11 ClaimNum bigint(20) FK to claim.ClaimNum.
12 DateTStamp timestamp Date the insbluebook was last updated.

insbluebooklog
Only viewed from within a single claimproc to see where the estimate came from. There are not a lot of foreign keys. Instead, it's supposed to be mostly just human readable text. Logs all changes made to claimproc estimates that are made by the Blue Book feature.
Order Name Type Summary
0 InsBlueBookLogNum bigint(20) Primary key.
1 ClaimProcNum bigint(20) FK to claimproc.ClaimProcNum. The claimproc for which the estimate was changed.
2 AllowedFee double The new claimproc.InsEstTotal that was calculated from a group of AllowedOverrides by the Blue Book feature.
3 DateTEntry datetime The date and time of entry. Not editable by user.
4 Description text Explanation of how the Blue Book feature obtained the new insurance estimate.

insbluebookrule
The insbluebookrule table represents an ordered hierarchy of rules that the program will attempt to apply when determining insurance estimates for out of network plans. If the highest priority rule does not produce an estimate, the program attempts to apply the second rule, and so on, until an estimate is obtained. Always same number of rows (6), just allowed to customize order and details.
Order Name Type Summary
0 InsBlueBookRuleNum bigint(20) Primary key.
1 ItemOrder smallint(6) 0 based. This rule's priority in the hierarchy of all insbluebookrules. 0 is highest priority.
2 RuleType tinyint(4) Enum:InsBlueBookRuleType Types 0 to 3 are for rules that determine estimates by looking at the payment history of an insurance plan, insurance plan group, carrier, or carrier group. Type 4 utilizes fee schedules that are attached to out of network plans that are manually maintained by the user. Type 5 bases estimates off of the provider fee.
InsurancePlan: 0 - Insurance Plan
GroupNumber: 1 - Group Number
InsuranceCarrier: 2 - Insurance Carrier
InsuranceCarrierGroup: 3 - Insurance Carrier Group
ManualBlueBookSchedule: 4 - Manual Blue Book Schedule. You can set a manual BB fee sched on an InsPlan. So to calculate the allowed fee, it does not need to look at any entries in InsBlueBook table.
ProviderFee: 5 - Provider Fee. Since this uses the provider fee, it also does not need to look at any entries in InsBlueBook table.
3 LimitValue int(11) The number of years, months, weeks, or days of insurance payment history that will be considered when generating a Blue Book estimate. Will be 0 if the RuleType is 4-ManualBlueBookSchedule or 5-ProviderFee as limits do not apply to these rule types.
4 LimitType tinyint(4) Enum:InsBlueBookRuleLimitType Determines the unit of time that InsBlueBookRule.LimitValue represents. Will be 0-None if the RuleType is 4-ManualBlueBookSchedule or 5-ProviderFee as limits do not apply to these rule types.
None: 0 - None
Years: 1 - Years
Months: 2 - Months
Weeks: 3 - Weeks
Days: 4 - Days

inseditlog
Log for any time a change is made to an insurance plan, Carrier, Benefit, or Employer.
Order Name Type Summary
0 InsEditLogNum bigint(20) Primary key.
1 FKey bigint(20) FK to insplan.PlanNum AND LogType=0, FK to carrier.CarrierNum AND LogType=1, FK to benefit.BenefitNum AND LogType=2, FK to employer.EmployerNum AND LogType=3.
2 LogType tinyint(4) Enum:InsEditLogType 0 - InsPlan, 1 - Carrier, 2 - Benefit, 3 - Employer.
InsPlan: 0. For this type, FKey is insplan.PlanNum.
Carrier: 1. For this type, FKey is carrier.CarrierNum.
Benefit: 2. For this type, FKey is benefit.BenefitNum and benefit.PlanNum.
Employer: 3. For this type, FKey is employer.EmployerNum.
3 FieldName varchar(255) The name of the column that was altered.
4 OldValue varchar(255) The old value of this field.
5 NewValue varchar(255) The new value of this field.
6 UserNum bigint(20) FK to userod.UserNum. The user that made this change.
7 DateTStamp timestamp Time that the row was inserted into the DB.
8 ParentKey bigint(20) FK to benefit.PlanNum AND LogType=2.
9 Description varchar(255) The string describing this entry. Displays different information depending on the LogType: 0 - InsPlan: GroupNum and GroupName 1 - Carrier: CarrierNum and CarrierName 2 - Benefit: CovCat Description 3 - Employer: Employer Name
10 OldValueBig text Used instead of OldValue for value that is larger than 256. Stores up to 65k characters. Example: insplan.PlanNote has some entries here and some in OldValue, depending on size.
11 NewValueBig text See OldValueBig. Same strategy.

inseditpatlog
Log for any time a change is made to a patplan, Subscriber, or ins adjust (claimproc).
Order Name Type Summary
0 InsEditPatLogNum bigint(20) Primary key.
1 FKey bigint(20) Foreign key to the field flagged with the PriKey attributed for the corresponding table type which is specified by LogType. Note, some logs do not use table type objects that are directly related to the LogType. FK to patplan.PatPlanNum AND LogType=0, FK to inssub.InsSubNum AND LogType=1, FK to claimproc.ClaimProcNum AND LogType=2.
2 LogType tinyint(4) Enum:InsEditPatLogType 0 - PatPlan, 1 - Subscriber, 2 - Adjustment.
PatPlan: 0. For this type, FKey is patplan.PatPlanNum.
Subscriber: 1. For this type, FKey is inssub.InsSubNum.
Adjustment: 2 - Adjustments to insurance benefits. For this type, FKey is claimproc.ClaimProcNum and claimproc.InsSubNum.
3 FieldName varchar(255) The name of the column that was altered.
4 OldValue varchar(255) The old value of this field.
5 NewValue varchar(255) The new value of this field.
6 UserNum bigint(20) FK to userod.UserNum. The user that made this change.
7 DateTStamp timestamp Time that the row was inserted into the DB.
8 ParentKey bigint(20) FK to claimproc.InsSubNum AND LogType=2.
9 Description varchar(255) The string describing this entry. Displays different information depending on the LogType: 1 - Subscriber: Subscriber's Name, 2 - Adjustment: Insurance Benefit
10 OldValueBig text Used instead of OldValue for value that is larger than 256. Stores up to 65k characters. Example: inssub.SubscNote has some entries here and some in OldValue, depending on size..
11 NewValueBig text See OldValueBig. Same strategy.

insfilingcode
An optional field on insplan and claims. This lets user customize so that they can track insurance types. Only used for e-claims. Typically two characters. Examples: CI for Commercial Insurance, VA for Veterans, WC for Worker's Comp, MB for Medicare part B, etc.
Order Name Type Summary
0 InsFilingCodeNum bigint(20) Primary key.
1 Descript varchar(255) Description of the insurance filing code.
2 EclaimCode varchar(100) Code for electronic claim.
3 ItemOrder int(11) Display order for this filing code within the UI. 0-indexed.
4 GroupType bigint(20) FK to definition.DefNum. Reporting Group.
5 ExcludeOtherCoverageOnPriClaims tinyint(4) If set to true, and the patient's secondary insurance plan uses this insfilingcode, the secondary insurance plan will not be populated on primary e-claims or paper claims.

insfilingcodesubtype
Stores the list of insurance filing code subtypes.
Order Name Type Summary
0 InsFilingCodeSubtypeNum bigint(20) Primary key.
1 InsFilingCodeNum bigint(20) FK to insfilingcode.insfilingcodenum
2 Descript varchar(255) The description of the insurance filing code subtype.

inspending
This table is an easy way to import insurance into Open Dental. It avoids all the complexity of InsPlans, Carriers, InsSubs, and PatPlans. The API and eClipboard eForms both take advantage of this table. The office then has control over when and how they convert this InsPending to an actual insurance plan. Details are entered separately for each family member so it can look like there's some duplication in a family. But the UI to convert to a real ins plan handles that smoothly. Ins Pending shows to the left of normal insurance in the Family module. InsPending does not mix with InsSub or PatPlan. There can be multiple InsPendings per patient if needed.
Order Name Type Summary
0 InsPendingNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum The patient who has this insurance. Analogous to patplan.PatNum. Always required.
2 PatNumSubscriber bigint(20) FK to patient.PatNum The patient who is the subscriber. Always required.
3 Ordinal tinyint Number like 1, 2, 3, etc. Represents primary ins, secondary ins, tertiary ins, etc. But this is really just an indicator of which ordinal the patient "wants" the insurance to go into. It always shows to the left of the true plans in the Family module. These aren't actually intermingled with ins plans. A number here does not indicate that the InsPending is actually in the desired position. Since it's not very important, it can also be 0.
4 Relationship tinyint(4) Enum:Relat Required to be Self if this is the subscriber (PatNum==PatNumSubscriber).
Self: 0
Spouse: 1
Child: 2
Employee: 3
HandicapDep: 4
SignifOther: 5
InjuredPlaintiff: 6
LifePartner: 7
Dependent: 8
5 GroupNum varchar(255) Optional.
6 GroupName varchar(255) Optional.
7 Employer varchar(255) Optional.
8 SubscriberID varchar(255) Number assigned by insurance company. No dashes. Not allowed to be blank.
9 Phone varchar(255) Includes any punctuation.
10 CarrierName varchar(255)

insplan
Subscribers can share insplans by using the InsSub table. The patplan table determines coverage for individual patients. InsPlans can also exist without any subscriber.
Order Name Type Summary
0 PlanNum bigint(20) Primary key.
1 GroupName varchar(50) Optional
2 GroupNum varchar(50) Optional. In Canada, this is called the Plan Number.
3 PlanNote text Note for this plan. Same for all subscribers.
4 FeeSched bigint(20) FK to feesched.FeeSchedNum.
5 PlanType char(1) ""=percentage(the default),"p"=ppo_percentage,"f"=flatCopay,"c"=capitation.
6 ClaimFormNum bigint(20) FK to claimform.ClaimFormNum. eg. "1" for ADA2002. For ADA2006, it varies by office. Can be overridden by provider.ClaimFormNum. If 0, then pref.DefaultClaimForm is used.
7 UseAltCode tinyint 0=no,1=yes. could later be extended if more alternates required
8 ClaimsUseUCR tinyint Fee billed on claim should be the standard provider fee for the patient's provider.
9 CopayFeeSched bigint(20) FK to feesched.FeeSchedNum. Not usually used. This fee schedule holds only co-pays(patient portions). Only used for Capitation, fixed copay plans, and PPO Fixed Benefit plans.
10 EmployerNum bigint(20) FK to employer.EmployerNum.
11 CarrierNum bigint(20) FK to carrier.CarrierNum.
12 AllowedFeeSched bigint(20) FK to feesched.FeeSchedNum. Not usually used. This fee schedule holds amounts allowed by carriers. Always represents a feesched of type OutOfNetwork.
13 TrojanID varchar(100) .
14 DivisionNo varchar(255) Only used in Canada. It's a suffix to the plan number (group number).
15 IsMedical tinyint True if this is medical insurance rather than dental insurance. When creating a claim, this, along with pref.
16 FilingCode bigint(20) FK to insfilingcode.InsFilingCodeNum. Used for e-claims. Also used for some complex reports in public health. The e-claim usage might become obsolete when PlanID implemented by HIPAA. Can be 0 to indicate none. Then 'CI' will go out on claims.
17 DentaideCardSequence tinyint Canadian e-claim field. D11 and E07. Zero indicates empty. Mandatory value for Dentaide. Not used for all others. 2 digit. DEPRECATED - See CDAnet Message Formats+Standards 4.2_2021.
18 ShowBaseUnits tinyint(1) If checked, the units Qty will show the base units assigned to a procedure on the claim form.
19 CodeSubstNone tinyint(1) Set to true to not allow procedure code downgrade substitution on this insurance plan.
20 IsHidden tinyint(4) Set to true to hide it from the pick list and from the main list.
21 MonthRenew tinyint(4) The month, 1 through 12 when the insurance plan renews. It will renew on the first of the month. To indicate calendar year, set renew month to 0.
22 FilingCodeSubtype bigint(20) FK to insfilingcodesubtype.InsFilingCodeSubtypeNum
23 CanadianPlanFlag varchar(5) Canadian C12. Single char, usually blank. If non-blank, then it's one of three kinds of Provincial Medical Plans. A=Newfoundland MCP Plan. V=Veteran's Affairs Plan. N=NIHB. N and V are not yet in use, so they will result in blank being sent instead. See Elig5.
24 CanadianDiagnosticCode varchar(255) Canadian C39. Required when CanadianPlanFlag is 'A'.
25 CanadianInstitutionCode varchar(255) Canadian C40. Required when CanadianPlanFlag is 'A'.
26 RxBIN varchar(255) BIN location number. Only used with EHR.
27 CobRule tinyint(4) Enum:EnumCobRule 0=Basic, 1=Standard, 2=CarveOut.
Basic: 0=Basic
Standard: 1=Standard
CarveOut: 2=CarveOut
SecondaryMedicaid: 3=SecondaryMedicaid. The secondary insurance will reduce what it pays by what primary pays (like Basic). Then anything that would be the patient portion is a writeoff for the secondary insurance. Sometimes Medicaid is required to be the primary, so only use this if you are sure you are allowed to.
28 SopCode varchar(255) FK to sop.SopCode. Examples: 121, 3115, etc. Acts as default for all patients using this insurance. When code is changed for an insplan, it should change automatically for patients having that primary insurance.
29 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
30 SecDateEntry date Timestamp automatically generated and user not allowed to change. The actual date of entry.
31 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
32 HideFromVerifyList tinyint(4) Is false if this plan needs to be verified.
33 OrthoType tinyint(4) Enum:OrthoClaimType 0=InitialClaimOnly, 1=InitialPlusVisit, 2=InitialPlusPeriodic. If this is an ortho claim, dictates what type of Ortho claim it is.
InitialClaimOnly: Payment schedule to be determined after EOB is received.
InitialPlusVisit: D8080 submitted on initial banding with D8030 or D8670 submitted per visit.
InitialPlusPeriodic: D8080 submitted on initial banding and OrthoAutoProc (usually D8670.auto) submitted at a set frequency regardless of visits. Actual visits should use D8670 and be marked 'DoNotBillIns.'
34 OrthoAutoProcFreq tinyint(4) Enum:OrthoAutoProcFrequency The frequency that the automatic procedures and claims are created for insplans with an InitialPlusPeriodic OrthoType
Monthly:
Quarterly: Every three months.
SemiAnnual: Every six months.
Annual:
35 OrthoAutoProcCodeNumOverride bigint(20) FK to procedurecode.CodeNum. If 0, this insplan uses the OrthoAutoProc preference. Otherwise, this overrides that value.
36 OrthoAutoFeeBilled double The amount that the ortho auto procedure will bill to insurance by default. Overridden by patplan.OrthoAutoFeeBilledOverride.
37 OrthoAutoClaimDaysWait int(11) Usually 0 or 30. Number of days that should pass after the initial banding that an automatic Ortho claim/procedure are generated.
38 BillingType bigint(20) FK to definition.DefNum.
39 HasPpoSubstWriteoffs tinyint(4) True by default. When a plan allows downgrading procedures and this field is false, the writeoff will be $0 and the difference between the proc fee and the insurance estimate will be the patient portion.
40 ExclusionFeeRule tinyint(4) Enum:ExclusionRule Controls how write-offs are handled for excluded (not covered) procedures on an in-network plan. Defaults to PracticeDefault. 0=Practice Default (use the global InsPlanUseUcrFeeForExclusions preference), 1=Do Nothing (apply the normal contracted fee and write-off logic), 2=Use Standard Provider Fee (apply the full standard provider fee with no write-offs)
PracticeDefault: 0=Practice Default
DoNothing: 1=Do Nothing
UseUcrFee: 2=Use Standard Provider Fee
41 ManualFeeSchedNum bigint(20) FK to feesched.FeeSchedNum that has a FeeSchedType of 4-ManualBlueBook. Optional, can be 0.
42 IsBlueBookEnabled tinyint(4) determines if the plan is going to have BlueBook Enabled or not
43 InsPlansZeroWriteOffsOnAnnualMaxOverride tinyint(4) Enum:YN Plan-level override for how write-offs are handled when the patient has met their annual maximum. 0=Default (use the global InsPlansZeroWriteOffsOnAnnualMax preference), 1=Yes (apply the full standard provider fee with no write-offs), 2=No (apply the normal contracted fee and write-off logic)
Unknown: 0
Yes: 1
No: 2
44 InsPlansZeroWriteOffsOnFreqOrAgingOverride tinyint(4) Enum:YN Plan-level override for how write-offs are handled when a procedure is not covered due to an age or frequency limitation. 0=Default (use the global InsPlansZeroWriteOffsOnFreqOrAging preference), 1=Yes (apply the full standard provider fee with no write-offs), 2=No (apply the normal contracted fee and write-off logic)
Unknown: 0
Yes: 1
No: 2
45 PerVisitPatAmount double The per visit patient copay amount. 0 by default. When an appt is scheduled or set complete, a new proc gets created with code specified in pref.PerVisitPatAmountProcCode.
46 PerVisitInsAmount double The per visit amount to bill insurance. 0 by default. When an appt is scheduled or set complete, a new proc gets created with code specified in pref.PerVisitInsAmountProcCode.

insplanpreference
Used to create overrides at the insurance plan level.
Order Name Type Summary
0 InsPlanPrefNum bigint(20) Primary key.
1 PlanNum bigint(20) FK to insplan.PlanNum.
2 FKey bigint(20) FK to procedurecode.CodeNum AND FKeyType=0.
3 FKeyType tinyint(4) Enum:InsPlanPrefFKeyType ProcCodeNoBillIns
ProcCodeNoBillIns: 0 - Overrides the procedurecode.NoBillIns field at the insurance plan level. ValueString stores NoBillInsOverride enum value. For this type, FKey is procedurecode.CodeNum.
4 ValueString text Used to hold the override. NoBillIns stores 0, 1.

inssub
Multiple subscribers can have the same insurance plan. But the patplan table is still what determines coverage for individual patients.
Order Name Type Summary
0 InsSubNum bigint(20) Primary key.
1 PlanNum bigint(20) FK to insplan.PlanNum.
2 Subscriber bigint(20) FK to patient.PatNum.
3 DateEffective date Date plan became effective. Is 0001-01-01 if not set.
4 DateTerm date Date plan was terminated. Is 0001-01-01 if not set.
5 ReleaseInfo tinyint(4) Release of information signature is on file.
6 AssignBen tinyint(4) Assignment of benefits signature is on file. For Canada, this handles Payee Code, F01. Option to pay other third party is not included.
7 SubscriberID varchar(255) Number assigned by insurance company. No dashes. Not allowed to be blank.
8 BenefitNotes text User doesn't usually put these in. Only used when automatically requesting benefits, such as with Trojan. All the benefits get stored here in text form for later reference. Not at plan level because might be specific to subscriber. If blank, we try to display a benefitNote for another subscriber to the plan.
9 SubscNote text Use to store any other info that affects coverage.
10 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
11 SecDateEntry date Timestamp automatically generated and user not allowed to change. The actual date of entry.
12 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
13 SecurityHash varchar(255) Holds the salted hash of the following inssub fields: PlanNum, Subscriber, SubscriberID, and DateTerm.

installmentplan
Simpler than a payment plan. Does not affect running account balances. Allows override of finance charges. Affects the "pay now" on statements. Only one installmentplan is allowed for a family, attached to guarantor only. This is loosely enforced.
Order Name Type Summary
0 InstallmentPlanNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 DateAgreement date Date payment plan agreement was made.
3 DateFirstPayment date Date of first payment.
4 MonthlyPayment double Amount of monthly payment.
5 APR float Annual Percentage Rate. e.g. 12.
6 Note varchar(255) Note

insverify
A row for the most recent time an insplan benefit or patplan enrollment was verified. Also see insverifyhist, which keeps a historical record. When a new plan is created, a row gets created here with no date. There is never more than one row per plan because old ones get moved over to InsVerifyHist.
Order Name Type Summary
0 InsVerifyNum bigint(20) Primary key.
1 DateLastVerified date The date of the last successful verification. This date will be DateTime.MinVal upon insert and will not change until the user has verified insurance benefits or pat plan eligibility in FormInsVerificationList, or until the user has entered and saved a date in Eligibility Last Verified or Benefits Last Verified textboxes in FormInsPlan.
2 UserNum bigint(20) FK to userod.UserNum. Typically 0. There is an optional feature that lets an office "assign" users to a verification so that they can split the load of verifying between different users.
3 VerifyType tinyint(4) Enum:VerifyTypes either InsuranceBenefits or PatientEnrollment
None: 0. This means FKey should be 0.
InsuranceBenefit: 1. This means FKey will link to insplan.PlanNum
PatientEnrollment: 2. This means FKey will link to patplan.PatPlanNum
4 FKey bigint(20) FK to insplan.PlanNum AND VerifyType=1, FK to patplan.PatPlanNum AND VerifyType=2.
5 DefNum bigint(20) FK to definition.DefNum. Links to the category InsVerifyStatus
6 Note text Note for this insurance verification.
7 DateLastAssigned datetime Optional feature that's part of "assigning" users to verification. Default is DateTime.MinVal. The DateTime of when a userod.UserNum was last assigned/unassigned a patient's insverify in FormInsVerificationList, the last time the status was changed on the insverify, when a patient's patplan has been dropped, or whenever an error occurs when trying to batch verify patient benefits.
8 DateTimeEntry datetime DateTime the row was added.
9 HoursAvailableForVerification double Number of hours that were available from the time the insurance needed verified to the date of the appointment. Includes minutes if applicable.
10 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed.
11 SecurityHash varchar(255) Holds the salted hash of the following insverify fields: UserNum, DefNum, DateLastAssigned.

insverifyhist
A historical copy of an insurance verification record.
Order Name Type Summary
0 InsVerifyHistNum bigint(20) Primary key.
1 InsVerifyNum bigint(20) FK to insverify.InsVerifyNum.
2 DateLastVerified date Copied from InsVerify.
3 UserNum bigint(20) FK to userod.UserNum. Typically 0. There is an optional feature that lets an office "assign" users to a verification so that they can split the load of verifying between different users.
4 VerifyType tinyint(4) Copied from InsVerify.
5 FKey bigint(20) FK to insplan.PlanNum AND VerifyType=1, FK to patplan.PatPlanNum AND VerifyType=2.
6 DefNum bigint(20) FK to definition.DefNum. Links to the category InsVerifyStatus.
7 Note text Copied from InsVerify.
8 DateLastAssigned datetime Copied from InsVerify.
9 DateTimeEntry datetime Copied from InsVerify.
10 HoursAvailableForVerification double Copied from InsVerify.
11 VerifyUserNum bigint(20) FK to userod.UserNum. User that was logged on when row was inserted.
12 SecDateTEdit timestamp Not copied from Task. Automatically updated by MySQL every time a row is added or changed.
13 SecurityHash varchar(255) Copied from InsVerify. When an InsVerifyHist is created, the 3 hashed fields remain unchanged, so this hash remains valid.

intervention
An intervention ordered or performed. Examples: smoking cessation and weightloss counseling. Links to a definition in the ehrcode table using the CodeValue and CodeSystem.
Order Name Type Summary
0 InterventionNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 ProvNum bigint(20) FK to provider.ProvNum.
3 CodeValue varchar(30) FK to ehrcode.CodeValue. This code may not exist in the ehrcode table, it may have been chosen from a bigger list of available codes. In that case, this will be a FK to a specific code system table identified by the CodeSystem column. The code for this item from one of the code systems supported. Examples: V65.3 or 418995006.
4 CodeSystem varchar(30) FK to codesystem.CodeSystemName. The code system name for this code. Possible values are: CPT, HCPCS, ICD9CM, ICD10CM, and SNOMEDCT.
5 Note text User-entered details about the intervention for this patient.
6 DateEntry date The date of the intervention.
7 CodeSet tinyint(4) Enum:InterventionCodeSet AboveNormalWeight, BelowNormalWeight, TobaccoCessation, Nutrition, PhysicalActivity, Dialysis.
AboveNormalWeight: 0 - Above Normal Weight Follow-up/Referrals where weight assessment may occur
BelowNormalWeight: 1 - Below Normal Weight Follow-up/Referrals where weight assessment may occur
Nutrition: 2 - Counseling for Nutrition
PhysicalActivity: 3 - Counseling for Physical Activity
TobaccoCessation: 4 - Tobacco Use Cessation Counseling
Dialysis: 5 - Dialysis Education/Other Services Related to Dialysis
None: 6 - None
8 IsPatDeclined tinyint(4) Indicates whether the intervention was offered/recommended to the patient and the patient declined the treatment/referral.

journalentry
Used in accounting to represent a single credit or debit entry. There will always be at least 2 journal enties attached to every transaction. All transactions balance to 0.
Order Name Type Summary
0 JournalEntryNum bigint(20) Primary key.
1 TransactionNum bigint(20) FK to transaction.TransactionNum
2 AccountNum bigint(20) FK to account.AccountNum
3 DateDisplayed date Always the same for all journal entries within one transaction.
4 DebitAmt double Negative numbers never allowed.
5 CreditAmt double Negative numbers never allowed.
6 Memo text Was previously used as multi purpose for Payee and Notes also.
7 Splits text A human-readable description of the splits. Used only for display purposes. Can be very large
8 CheckNumber varchar(255) Any user-defined string. Usually a check number, but can also be D for deposit, Adj, etc.
9 ReconcileNum bigint(20) FK to reconcile.ReconcileNum. 0 if not attached to a reconcile. Not allowed to alter amounts if attached.
10 SecUserNumEntry bigint(20) FK to userod.UserNum. The user who created this journal entry.
11 SecDateTEntry datetime The date and time that this journal entry was created.
12 SecUserNumEdit bigint(20) FK to userod.UserNum. The user who last edited this journal entry.
13 SecDateTEdit timestamp The last time this journal entry was edited.
14 Payee varchar(255) Was previously mixed in with Memo. Limit 255 char.
15 Notes text Was previously mixed in with Memo. Limit 65k.
16 NeedsReview tinyint(4) Indicates whether a transaction needs further review or not. The only thing this does is make the row show red in the transaction history. If someone really wants to find all of these, they would use a custom query.

labcase
A lab case.
Order Name Type Summary
0 LabCaseNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 LaboratoryNum bigint(20) FK to laboratory.LaboratoryNum. The lab that the case gets sent to. Required.
3 AptNum bigint(20) FK to appointment.AptNum. This is how a lab case is attached to a scheduled appointment. Multiple labcases can be attached to any appointment. Labcase can exist without being attached to any appointments at all, making this zero.
4 PlannedAptNum bigint(20) FK to appointment.AptNum. This is how a lab case is attached to a planned appointment in addition to the scheduled appointment.
5 DateTimeDue datetime The due date that is put on the labslip. NOT when you really need the labcase back, which is usually a day or two later and is the date of the appointment this case is attached to.
6 DateTimeCreated datetime When this lab case was created. User can edit.
7 DateTimeSent datetime Time that it actually went out to the lab.
8 DateTimeRecd datetime Date/time received back from the lab. If this is filled, then the case is considered received.
9 DateTimeChecked datetime Date/time that quality was checked. It is now completely ready for the patient.
10 ProvNum bigint(20) FK to provider.ProvNum.
11 Instructions text The text instructions for this labcase.
12 LabFee double This is used for tracking and informational purposes only. The fee is not used in any calculation.
13 DateTStamp timestamp Automatically updated whenever a row is added or changed. Not user editable.
14 InvoiceNum varchar(255) Optional invoice number

labcaseproduct
Order Name Type Summary
0 LabCaseProductNum bigint(20) Primary Key
1 LabCaseNum bigint(20) FK to labcase.LabCaseNum
2 PatNum bigint(20) FK to patient.PatNum
3 GlidewellProduct tinyint(4) Enum:EnumGlidewellProductName, From a list supplied by Glidewell. Ex. Crown,Flipper,NightGuards,etc.
4 Material varchar(255) The type of material that should be used to make a product for a lab case. Ex. "BruxZir"
5 Shade varchar(255) The shade of the material used to make a lab case product. Ex. "A1"
6 ToothRange varchar(255) The tooth range that this product affects. Retrieved from procedure.ToothRange, formatted for display.
7 Notes text Notes about the product being sent to the lab.

laboratory
A dental laboratory. Will be attached to lab cases.
Order Name Type Summary
0 LaboratoryNum bigint(20) Primary key.
1 Description varchar(255) Description of lab.
2 Phone varchar(255) Freeform text includes punctuation.
3 Notes text Any notes. No practical limit to amount of text.
4 Slip bigint(20) FK to sheetdef.SheetDefNum. Lab slips can be set for individual laboratories. If zero, then the default internal lab slip will be used instead of a custom lab slip.
5 Address varchar(255) .
6 City varchar(255) .
7 State varchar(255) .
8 Zip varchar(255) .
9 Email varchar(255) .
10 WirelessPhone varchar(255) .
11 IsHidden tinyint(4) .

labpanel
One lab panel comes back from the lab with multiple lab results. Multiple panels can come back in one HL7 message. This table loosely corresponds to the OBR segment.
Order Name Type Summary
0 LabPanelNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum
2 RawMessage text The entire raw HL7 message. Can contain other labpanels in addition to this one.
3 LabNameAddress varchar(255) Both name and address in a single field. OBR-20.
4 DateTStamp timestamp To be used for synch with web server.
5 SpecimenCondition varchar(255) OBR-13. Usually blank. Example: hemolyzed.
6 SpecimenSource varchar(255) OBR-15. Usually blank. Example: LNA&Arterial Catheter&HL70070.
7 ServiceId varchar(255) OBR-4-0, Service performed, id portion, LOINC. For example, 24331-1.
8 ServiceName varchar(255) OBR-4-1, Service performed description. Example, Lipid Panel.
9 MedicalOrderNum bigint(20) FK to medicalorder.MedicalOrderNum. Used to attach in imported lab panel to a lab order. Multiple panels may be attached to an order.

labresult
Medical labs, not dental labs. Multiple labresults are attached to a labpanel. Loosely corresponds to the OBX segment in HL7.
Order Name Type Summary
0 LabResultNum bigint(20) Primary key.
1 LabPanelNum bigint(20) FK to labpanel.LabPanelNum.
2 DateTimeTest datetime OBX-14.
3 TestName varchar(255) OBX-3-1, text portion.
4 DateTStamp timestamp To be used for synch with web server.
5 TestID varchar(255) OBX-3-0, id portion, LOINC. For example, 10676-5.
6 ObsValue varchar(255) OBX-5. Value always stored as a string because the type might vary in the future.
7 ObsUnits varchar(255) OBX-6 For example, mL. Was FK to drugunit.DrugUnitNum, but that would make reliable import problematic, so now it's just text.
8 ObsRange varchar(255) OBX-7 For example, <200 or >=40.
9 AbnormalFlag tinyint(4) Enum:LabAbnormalFlag 0-None, 1-Below, 2-Normal, 3-Above.
None: 0-No value.
Below: 1-Below normal.
Normal: 2-Normal.
Above: 3-Above high normal.

labturnaround
The amount of time it takes for a lab case to be processed at the lab. Used to compute due dates.
Order Name Type Summary
0 LabTurnaroundNum bigint(20) Primary key.
1 LaboratoryNum bigint(20) FK to laboratory.LaboratoryNum. The lab that this item is attached to.
2 Description varchar(255) The description of the service that the lab is performing.
3 DaysPublished smallint(6) The number of days that the lab publishes as the turnaround time for the service.
4 DaysActual smallint(6) The actual number of days. Might be longer than DaysPublished due to travel time. This is what the actual calculations will be done on.

language
This is a list of phrases that need to be translated. The primary key is a combination of the ClassType and the English phrase. This table is currently filled dynmically at run time, but the plan is to fill it using a tool that parses the code.
Order Name Type Summary
0 LanguageNum bigint(20) Primary key.
1 EnglishComments text No longer used.
2 ClassType text A string representing the class where the translation is used.
3 English text The English version of the phrase, case sensitive.
4 IsObsolete tinyint As this gets more sophisticated, we will use this field to mark some phrases obsolete instead of just deleting them outright. That way, translators will still have access to them. For now, this is not used at all.

languageforeign
Will usually only contain translations for a single foreign language, although more are allowed. The primary key is a combination of the ClassType and the English phrase and the culture.
Order Name Type Summary
0 LanguageForeignNum bigint(20) Primary key.
1 ClassType text A string representing the class where the translation is used.
2 English text The English version of the phrase. Case sensitive.
3 Culture varchar(255) The specific culture name. Almost always in 5 digit format like this: en-US.
4 Translation text The foreign translation. Remember we use Unicode-8, so this translation can be in any language, including Russian, Hebrew, and Chinese.
5 Comments text Comments for other translators for the foreign language.

languagepat
Practice-defined translations for text shown to patients. Unlike Language and LanguageForeign, which translate Open Dental's interface to a practice's preferred language, LanguagePat allows practices to customize translations of messages and information displayed to patients in their preferred language. Used right now for about 30 prefs for things like email messages. Also used for EForms. So either PrefName will be empty or EFormFieldDefNum will be 0. Sheets are translated differently, by making a copy of each SheetFieldDef used for each language.
Order Name Type Summary
0 LanguagePatNum bigint(20) Primary key.
1 PrefName varchar(255) FK to preference.PrefName. There are about 30 of these in use. This allows us to translate the value stored for templates like email, postcard, text, etc. Will be empty string if this is an eForm translation.>
2 Language varchar(255) Three-letter language name or custom language name. The custom language name is the full string name and is not necessarily supported by Microsoft. This will typically be matched to the patient's preferred language to select the appropriate translation. Three-letter language name examples: eng (English), spa (Spanish), fra (French).Custom language name examples: Tahitian, American Sign Language, Morse Code. The LanguagesUsedByPatients preference stores the three-letter names that the practice chooses to support.
3 Translation text The translated text. Max 65,000 characters. Might store complex email templates.
4 EFormFieldDefNum bigint(20) FK to eformfielddef.EFormFieldDefNum. This is how eForms get translated. Once a def is converted to an eForm, this is not needed. The eForm fields have all the translated text. Will be 0 if this is a pref translation.

letter
These are templates that are used to send simple letters to patients.
Order Name Type Summary
0 LetterNum bigint(20) Primary key.
1 Description varchar(255) Description of the Letter.
2 BodyText text Text of the letter

lettermerge
Describes the templates for letter merges to Word.
Order Name Type Summary
0 LetterMergeNum bigint(20) Primary key.
1 Description varchar(255) Description of this letter.
2 TemplateName varchar(255) The filename of the Word template. eg MyTemplate.doc.
3 DataFileName varchar(255) The name of the data file. eg MyTemplate.txt.
4 Category bigint(20) FK to definition.DefNum.
5 ImageFolder bigint(20) FK to definition.DefNum. This determines the default Image Category that will be selected when printing or previewing the letter. Can be 0 which means 'None' will be selected.

lettermergefield
When doing a lettermerge, a data file is created with certain fields. This is a list of those fields for each lettermerge.
Order Name Type Summary
0 FieldNum bigint(20) Primary key.
1 LetterMergeNum bigint(20) FK to lettermerge.LetterMergeNum.
2 FieldName varchar(255) One of the preset available field names.

limitedbetafeature
Limited Beta features are specific parts of the OpenDental suite of services that are locked behind a registration process while the feature undergoes improvement or further testing. This registration process is done through HQ working with a customer to determine if they will be a good candidate to use and test this feature before it's full release. If they are a good candidate, a row is inserted into their database that will allow them access to the feature. LimitedBetaFeatures get inserted during the nightly synch with our eServiceSignups. This is done in our call to WebServiceMainHQProxy.GetEServiceSetupFull. The nightly synch is the only place these rows get altered.
Order Name Type Summary
0 LimitedBetaFeatureNum bigint(20) Primary key.
1 LimitedBetaFeatureTypeNum bigint(20) Stores the integer value of the LimitedBetaFeatureEnum. This is done to prevent out of bounds exceptions due to versioning.
2 ClinicNum bigint(20) FK to clinic.ClinicNum. ClinicNum that is signed up for the feature. Clinic independant features only have one row with a clinicNum of -1.
3 IsSignedUp tinyint(4) An office is considered signed up if they have a valid version to be using this feature on, the feature is on limited beta, and they've signed up with HQ.

loginattempt
Keeps track of failed login attempts.
Order Name Type Summary
0 LoginAttemptNum bigint(20) Primary key.
1 UserName varchar(255) The username that was attempted. May not be a username that exists.
2 LoginType tinyint(4) Enum:UserWebFKeyType The part of the program where an attempt was made. If we want to use this for other parts of the program that are do not use the userweb table, we can change this enum to a different one.
Undefined: This is a default value that should never be saved into the table.
PatientPortal: FK to patient.PatNum
3 DateTFail datetime When the failed attempt was attempted.

loinc
Logical Observation Identifiers Names and Codes (LOINC) used to identify both lab panels and lab results. Widths specified are from LOINC documentation and may not represent length of fields in the Open Dental Database.
Order Name Type Summary
0 LoincNum bigint(20) Primary key. Internal use only.
1 LoincCode varchar(255) #EULA REQUIRED# Also called LOINC_NUM in the official LOINCDB. Width-10. LOINC244 column 1.
2 Component varchar(255) #EULA REQUIRED# First Major axis:component or analyte. Width-255. LOINC244 column 2.
3 PropertyObserved varchar(255) #EULA REQUIRED# Second major axis:property observed (e.g., mass vs. substance). Width-30. LOINC244 column 3.
4 TimeAspct varchar(255) #EULA REQUIRED# Third major axis:timing of the measurement (e.g., point in time vs 24 hours). Width-15. LOINC244 column 4.
5 SystemMeasured varchar(255) #EULA REQUIRED# Fourth major axis:type of specimen or system (e.g., serum vs urine). Width-100 LOINC244. column 5.
6 ScaleType varchar(255) #EULA REQUIRED# Fifth major axis:scale of measurement (e.g., qualitative vs. quantitative). Width-30. LOINC244 column 6.
7 MethodType varchar(255) #EULA REQUIRED# Sixth major axis:method of measurement. Width-50. LOINC244 column 7.
8 StatusOfCode varchar(255) #EULA REQUIRED# Width-10. LOINC244 column 13.ACTIVE = Concept is active. Use at will.TRIAL = Concept is experimental in nature. Use with caution as the concept and associated attributes may change. DISCOURAGED = Concept is not recommended for current use. New mappings to this concept are discouraged; although existing may mappings may continue to be valid in context. Wherever possible, the superseding concept is indicated in the MAP_TO field in the MAP_TO table (see Table 28b) and should be used instead. DEPRECATED = Concept is deprecated. Concept should not be used, but it is retained in LOINC for historical purposes. Wherever possible, the superseding concept is indicated in the MAP_TO field (see Table 28b) and should be used both for new mappings and updating existing implementations..
9 NameShort varchar(255) #EULA REQUIRED# Introduced in version 2.07, this field is a concatenation of the fully specified LOINC name. The field width may change in a future release. Width 40. LOINC244 column 29.
10 ClassType varchar(255) 1=Laboratory class; 2=Clinical class; 3=Claims attachments; 4=Surveys. LOINC244 column 16.
11 UnitsRequired tinyint(4) Y/N field that indicates that units are required when this LOINC is included as an OBX segment in a HIPAA attachment. LOINC244 column 26.
12 OrderObs varchar(255) Defines term as order only, observation only, or both. A fourth category, Subset, is used for terms that are subsets of a panel but do not represent a package that is known to be orderable we have defined them only to make it easier to maintain panels or other sets within the LOINC construct. LOINC244 column 30.
13 HL7FieldSubfieldID varchar(255) A value in this field means that the content should be delivered in the named field/subfield of the HL7 message. When NULL, the data for this data element should be sent in an OBX segment with this LOINC code stored in OBX-3 and with the value in the OBX-5. Width 50. LOINC244 column 32.
14 ExternalCopyrightNotice text External copyright holders copyright notice for this LOINC code. LOINC244 column 33.
15 NameLongCommon varchar(255) This field contains the LOINC term in a more readable format than the fully specified name. The long common names have been created via a table driven algorithmic process. Most abbreviations and acronyms that are used in the LOINC database have been fully spelled out in English. Width 255. LOINC244 column 35.
16 UnitsUCUM varchar(255) The Unified Code for Units of Measure (UCUM) is a code system intended to include all units of measures being contemporarily used in international science, engineering, and business. (www.unitsofmeasure.org ) This field contains example units of measures for this term expressed as UCUM units. Width 255. LOINC244 column 1.
17 RankCommonTests int(11) Ranking of approximately 2000 common tests performed by laboratories in USA. LOINC244 column 45.
18 RankCommonOrders int(11) Ranking of approximately 300 common orders performed by laboratories in USA. LOINC244 column 46.

medicalorder
Ehr. Lab and radiology orders. Medication orders are simply fields in medicationPat.
Order Name Type Summary
0 MedicalOrderNum bigint(20) Primary key.
1 MedOrderType tinyint(4) Enum:MedicalOrderType Laboratory=0,Radiology=1.
Laboratory: 0- Laboratory
Radiology: 1- Radiology
2 PatNum bigint(20) FK to patient.PatNum
3 DateTimeOrder datetime Date and time of order.
4 Description varchar(255) User will be required to type entire order out from scratch.
5 IsDiscontinued tinyint(4) EHR requires Active/Discontinued status. 0=Active, 1=Discontinued.
6 ProvNum bigint(20) FK to provider.ProvNum.

medication
A list of medications, not attached to any particular patient. Not allowed to delete if in use by a patient. Not allowed to edit name once created due to possibility of damage to patient record.
Order Name Type Summary
0 MedicationNum bigint(20) Primary key.
1 MedName varchar(255) Name of the medication. User can change this. If an RxCui is present, the RxNorm string can be pulled from the in-memory table for UI display in addition to the MedName.
2 GenericNum bigint(20) FK to medication.MedicationNum. Cannot be zero. If this is a generic drug, then the GenericNum will be the same as the MedicationNum. Otherwise, if this is a brand drug, then the GenericNum will be a non-zero value corresponding to another medicaiton.
3 Notes text Examples: interactions, drug class, contraindications, etc. Not typically for dosage. Mg, times per days, etc. typically entered into MedicationPat.PatNote.
4 DateTStamp timestamp The last date and time this row was altered. Not user editable.
5 RxCui bigint(20) RxNorm Code identifier. We should have used a string type. Used by EHR in CQM. But the queries should use medicationpat.RxCui, NOT this RxCui, because all medicationpats (meds and orders) coming back from Ensora will not have a FK to this medication table. When this RxCui is modified by the user, then medicationpat.RxCui is automatically updated where medicationpat.MedicationNum matches this medication.
6 IsHidden tinyint(4) .

medicationpat
Links medications to patients. For ehr, some of these can be considered 'medication orders', but only if they contain a PatNote (instructions), a ProvNum, and a DateStart.
Order Name Type Summary
0 MedicationPatNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 MedicationNum bigint(20) FK to medication.MedicationNum. If 0, implies that the medication order came from eRx via the Ensora eRx feature which allows users to create and send prescriptions which can contain user-created Active medications. These are copied to a patient's medication list (via a medicationpat entry). 0 could also mean this was imported from an eForm and the medication didn't exist in the Medication table. This was originally added to allow MU2 measures (for EHR2) to be set by either creating a medication from the medical window or by creating a manual prescription.
3 PatNote text Medication notes specific to this patient. Example: 10 mg tablets, two tabs 3 times per day
4 DateTStamp timestamp The last date and time this row was altered. Not user editable.
5 DateStart date Date that the medication was started. Can be minval if unknown.
6 DateStop date Date that the medication was stopped. Can be minval if unknown. If minval, then the medication is not "discontinued". If prior to today, then the medication is "discontinued". If today or a future date, then not discontinued yet.
7 ProvNum bigint(20) FK to provider.ProvNum. Can be 0. Gets set to the patient's primary provider when adding a new med. If adding the med from EHR, gets set to the ProvNum of the logged-in user.
8 MedDescript varchar(255) Used for eRx and eForm import. In these cases, MedicationNum=0.
9 RxCui bigint(20) For Ensora medical orders, corresponds to the RxCui of the prescription (Ensora only returns a value sometimes). Otherwise, this field is synched with the medication.RxCui field based on medication.MedicationNum. We should have used a string type. The only purpose of this field is so that when CCDs are created, we have structured data to put in the XML, not just plain text. Allergies exported in CCD do not look at this table, but only at the medication table. Medications require MedicationPat.RxCui or Medication.RxCui to be exported on CCD.
10 ErxGuid varchar(255) Uniquely identifies the prescription corresponding to the medical order. Allows us to update existing eRx medical orders when refreshing prescriptions in the Chart (similar to how prescriptions are updated). Also used in 2-way medication synching with eRx.
11 IsCpoe tinyint(4) If eRx is used to prescribe a medication, a medication order is imported automatically into Open Dental. If a provider is logged in, then this is CPOE (Computerized Provider Order Entry), and this will be true. Or, if a provider is logged in and Rx entered through OD, it's also CPOE. If a staff person is logged in, and enters an Rx through Ensora or OD, then this is non-CPOE, so false.

medlab
The EHRLab table is structured to tightly with the HL7 standard and should have names that more reflect how the user will consume the data and for that reason for actual implementation we are using these medlab tables. Medical lab observation order. This table is currently only used for LabCorp, but may be utilized by other third party lab services in the future. These are the fields required for the LabCorp result report, used to link the order to the result(s), specimen(s), place(s) of service, or for linking parent and child results. This table contains data from the PID, ORC, OBR, and applicable NTE segments
Order Name Type Summary
0 MedLabNum bigint(20) Primary key.
1 SendingApp varchar(255) MSH-2 - Sending Application. Used to identify the LabCorp Lab System sending the results. Possible values for LabCorp (as of their v10.7 specs): '1100' - LabCorp Lab System, 'DIANON' - DIANON Systems, 'ADL' - Acupath Diagnostic Laboratories, 'EGL' - Esoterix Genetic Laboratories. For backward compatibility only: 'CMBP', 'LITHOLINK', 'USLABS'
2 SendingFacility varchar(255) MSH-3 - Sending Facility. Identifies the LabCorp laboratory responsible for the client. It could be a LabCorp assigned 'Responsible Lab Code' representing the responsible laboratory or it could be a CLIA number.
3 PatNum bigint(20) FK to patient.PatNum. PID.2 - External Patient ID. LabCorp report field "Client Alt. Pat ID".
4 ProvNum bigint(20) FK to provider.ProvNum. Can be 0. Attempt to match ordering prov external IDs to internal provnum.
5 PatIDLab varchar(255) PID.3 - Lab Assigned Patient Id. LabCorp report field "Specimen Number". LabCorp assigned, alpha numeric specimen number.
6 PatIDAlt varchar(255) PID.4 - Alternate Patient ID. LabCorp report field "Patient ID". Alternate patient ID.
7 PatAge varchar(255) PID.7.2/7.3/7.4 - Patient Age Years/Months/Days. LabCorp report field "Age (Y/M/D)". YYY/MM/DD format. Three chars for years, 2 each for months and days. Some tests require age for calculation of result. This will be the age at the time of the test, so we will use the values in the message instead of re-calculating..
8 PatAccountNum varchar(255) PID.18.1 - Account Number. LabCorp report field "Account Number". LabCorp Client ID, 8 digit account number.
9 PatFasting tinyint(4) PID.18.7 - Fasting. LabCorp report field "Fasting". Y, N, or blank. A blank component will be stored as 0 - Unknown, the result report fasting field will be blank.
10 SpecimenID varchar(255) ORC.2.1 and OBR.2.1 - Unique Foreign Accession or Specimen ID. LabCorp report field "Client Accession (ACC)". ID sent on the specimen container.
11 SpecimenIDFiller varchar(255) ORC.3.1 and OBR.3.1 - Internal (to LabCorp for example)/Filler Accession or Specimen ID. LabCorp assigned specimen number, reused on a yearly basis.
12 ObsTestID varchar(255) OBR.4.1 - Observation Battery Identifier. Reflex result will have this value in OBR.29 to link the reflex to the parent.
13 ObsTestDescript varchar(255) OBR.4.2 - Observation Battery Text. LabCorp report field "Tests Ordered".
14 ObsTestLoinc varchar(255) OBR.4.4 - Alternate Battery Identifier (LOINC). This is the LOINC code for the test performed. When displaying the results, LabCorp requires OBR.4.2, the text name of the test to be displayed, not the LOINC code. But we will store it so we can link to the LOINC code table for reporting purposes.
15 ObsTestLoincText varchar(255) OBR.4.5 - Alternate Observation Battery Text (LOINC Description). The LOINC code description for the test performed. We will display OBR.4.2 per LabCorp requirements, but we will store this description for reporting purposes.
16 DateTimeCollected datetime OBR.7 - Observation/Specimen Collection Date/Time. LabCorp report field "Date & Time Collected". yyyyMMddHHmm format in the message, no seconds. May be blank.
17 TotalVolume varchar(255) OBR.9 - Collection/Urine Volume (Quantity/Field Value). LabCorp report field "Total Volume". The LabCorp document says this field is "Numeric Characters", but the HL7 documentation data type as CQ, which is a number with units in the form of Quantity^Units. The Units component has subcomponents: ID&Text&Name of Coding System&Alt ID&Alt Text& Name of Alt Coding System&Coding System Version ID&Alt Coding System Version ID&Original Text. We will make this a string column and store the Quantity with the Units ID subcomponent if present. The default unit of measurement is ML, so if the field is a number only we will add ML.
18 ActionCode varchar(255) Enum:ResultAction OBR.11 - Action Code. Blank for normal result, "G" for reflex result.
None: 0 - None. Standard results will be blank.
A: 1 - Add On. Limited usage and not applicable for all add on tests.
G: 2 - Reflex. Lab generated result for test not on the original order.
19 ClinicalInfo varchar(255) OBR.13.1 - Relevant Clinical Information. LabCorp report field "Additional Information". The report field will be filled with this value from the first OBR record in the message. The message limits this field to 64 characters, the rest is truncated.
20 DateTimeEntered datetime OBR.14 - Date/Time of Specimen Receipt in Lab. LabCorp report field "Date Entered". yyyyMMddHHmm format in the message, no seconds. Date and time the order was entered in the Lab System.
21 OrderingProvNPI varchar(255) ORC.12.1 and OBR.16.1 - Ordering Provider ID Number. LabCorp report field "NPI". ORC.12.* and OBR.16.* are repeatable, the eighth component identifies the source of the ID in the first component. Component 8 possible values: "U"-UPIN, "P"-Provider Number (Medicaid or Commercial Ins Provider ID), "N"-NPI (Required for third party billing), "L"-Local (Physician ID).
22 OrderingProvLocalID varchar(255) ORC.12.1 and OBR.16.1 - Ordering Provider ID Number. LabCorp report field "Physician ID". ORC.12.* and OBR.16.* are repeatable, the eighth component identifies the source of the ID in the first component. Component 8 possible values: "U"-UPIN, "P"-Provider Number (Medicaid or Commercial Ins Provider ID), "N"-NPI (Required for third party billing), "L"-Local (Physician ID).
23 OrderingProvLName varchar(255) ORC.12.2 and OBR.16.2 - Ordering Provider Last Name. LabCorp report field "Physician Name". Last, First.
24 OrderingProvFName varchar(255) ORC.12.3 and OBR.16.3 - Ordering Provider First Initial. LabCorp report field "Physician Name". Last, First.
25 SpecimenIDAlt varchar(255) OBR.18 - Alternate Unique Foreign Accession / Specimen ID. LabCorp report field "Control Number".
26 DateTimeReported datetime OBR.22 - Date/Time Observations Reported. LabCorp report field "Date & Time Reported". yyyyMMddHHmm format in the message, no secs. Date and time the results were released from the Lab System.
27 ResultStatus varchar(255) Enum:ResultStatus OBR.25 - Order Result Status. LabCorp possible values: "F" - Final, "P" - Preliminary, "X" - Cancelled, "C" - Corrected.
C: 0 - Corrected Result.
F: 1 - Final. Result complete and verified.
I: 2 - Incomplete. For Discrete Microbiology Testing.
P: 3 - Preliminary. Final not yet obtained.
X: 4 - Canceled. Procedure cannot be done. Result canceled due to Non-Performance.
28 ParentObsID varchar(255) OBR.26.1 - Link to Parent Result or Organism Link to Susceptibility. A reflex test will have the parent's OBX.3.1 value here for linking.
29 ParentObsTestID varchar(255) OBR.29 - Link to Parent Order. A reflex test will have the value from OBR.4.1 of the original order in this field for linking.
30 NotePat text NTE.3 - Comment Text, PID Level. The NTE segment is repeatable and the Comment Text component is limited to 78 characters. Multiple NTE segments can be used for longer comments. All NTE segments at the PID level will be concatenated and stored in this one field.
31 NoteLab text NTE.3 - Comment Text, OBR level. The NTE segment is repeatable and the Comment Text component is limited to 78 characters. Multiple NTE segments can be used for longer comments. All NTE segments at the OBR level will be concatenated and stored in this one field.
32 FileName varchar(255) Not unique. More than one MedLab object can point to the same FileName, so deleting the MedLab object does not necessarily mean the file can also be deleted. This is the filename of the original archived message that was processed to create this medlab object as well as associated medlabresult, medlabspecimen, and medlabfacility obects. The files will be stored in the OpenDentImages folder in a sub-folder called MedLabHL7. If a message is processed correctly it will be moved into the sub-folder MedLabHL7/Processed. Any message that remains in the MedLabHL7 folder and aren't moved into the Processed folder failed at some point during processing. If the option to store images directly in the database is chosen, this will be an empty field and there will not be the option to display the original HL7 message. This is a relative file path from the ImageStore.GetPreferredAtoZpath(), Example: "MedLabHL7/FileName.txt" OR "MedLabHL7/Processed/FileName.txt" Use: string pathToFile=ODFileUtils.CombinePaths(ImageStore.GetPreferredAtoZpath(),FileName)
33 OriginalPIDSegment text The PID Segment from the HL7 message used to generate this MedLab object.

medlabfacattach
Links a MedLab or a MedLabResult to a place of service. Either the MedLabNum OR the MedLabResultNum column will be populated, never both, so this will link the facility to EITHER a MedLab OR a MedLabResult object. Every MedLab and MedLabResult will have 1 to many laboratories attached.
Order Name Type Summary
0 MedLabFacAttachNum bigint(20) Primary key.
1 MedLabNum bigint(20) FK to medlab.MedLabNum.
2 MedLabResultNum bigint(20) FK to medlabresult.MedLabResultNum.
3 MedLabFacilityNum bigint(20) FK to medlabfacility.MedLabFacilityNum.

medlabfacility
Medical lab facility that performed the test procedure(s). Contains data from the ZPS segment. Each MedLab object can have one to many places of service, each in a repetition of the ZPS segment. Each repetition will be its own row in this table.
Order Name Type Summary
0 MedLabFacilityNum bigint(20) Primary key.
1 FacilityName varchar(255) ZPS.3 - Facility Name. Medical lab location name that performed the testing.
2 Address varchar(255) ZPS.4.1 - Facility Address.
3 City varchar(255) ZPS.4.3 - Facility City.
4 State varchar(255) ZPS.4.4 - Facility State or Province. Upper case state abbreviation.
5 Zip varchar(255) ZPS.4.5 - Facility Zip or Postal Code.
6 Phone varchar(255) ZPS.5 - Facility Phone Number.
7 DirectorTitle varchar(255) ZPS.7.1 - Facility Director Title.
8 DirectorLName varchar(255) ZPS.7.2 - Facility Director Last Name.
9 DirectorFName varchar(255) ZPS.7.3 - Facility Director First Name.

medlabresult
Medical lab result. The EHRLabResult table is structured too tightly with the HL7 standard and should have names that more reflect how the user will consume the data and for that reason for actual implementation we are using these medlab tables. This table is currently only used for LabCorp, but may be utilized by other third party lab services in the future. These fields are required for the LabCorp result report, used to link the result to an order, or for linking a parent and child result. Contains data from the OBX, ZEF, and applicable NTE segments.
Order Name Type Summary
0 MedLabResultNum bigint(20) Primary key.
1 MedLabNum bigint(20) FK to medlab.medLabNum. Each MedLab object can have one or more results pointing to it.
2 ObsID varchar(255) OBX.3.1 - Observation Identifier. Reflex results will have the ObsID of the parent in OBR.26 for linking.
3 ObsText varchar(255) OBX.3.2 - Observation Text. LabCorp report field "TESTS". LabCorp test name.
4 ObsLoinc varchar(255) OBX.3.4 - Alternate Identifier (LOINC). This is the LOINC code for the observation. When displaying the results, LabCorp requires OBX.3.2, the text name of the test to be displayed, not the LOINC code. But we will store it so we can link to the LOINC code table for reporting purposes.
5 ObsLoincText varchar(255) OBX.3.5 - Alternate Observation Text (LOINC Description). The LOINC code description for the observation. We will display OBX.3.2 per LabCorp requirements, but we will store this description for reporting purposes.
6 ObsIDSub varchar(255) OBX.4 - Observation Sub ID. Used to aid in the identification of results with the same Observation ID (OBX.3) within a given OBR. This value is used to tie the results to the same organism. The value in OBX.5.3 tells whether this OBX is the organism, observation, or antibiotic and then the value in OBX.4 links them together as to whether this is for organism #1, organism #2, etc.
7 ObsValue text OBX.5.1 - Observation Value. LabCorp report field "RESULT". Can be null if coded entries, prelims, canceled, or >21 chars and being returned as an attached NTE. "TNP" will be reported for Test Not Performed. For value >21 chars in length: OBX.2 will be 'TX' for text, OBX.5 will be NULL (empty field), and the value will be in attached NTEs. Examples: Value less than 21 chars: OBX|1|ST|001180^Potassium, Serum^L||K+ is >6.5 mEq/L.||3.5-5.5|A||N|F|19830527||200605040929|01| Value >21 chars: OBX|6|TX|001180^Potassium, Serum^L||||3.5-5.5|||N|C|19830527||200511071406|01| NTE|1|L|Red cells observed in serum. Glucose may be falsely decreased. NTE|2|L|Potassium may be falsely increased.
8 ObsSubType varchar(255) Enum:DataSubtype OBX.5.3 - Data Subtype. Used to identify the coding system. Required if Discrete Microbiology testing is ordered to identify Microbiology Result Type. Example of use: If OBX.5.3 is ORM, then the observation sub ID in OBX.4 is used to associate the result with a specific organism. OBX.4 might contain 1, 2, or 3 meaning the result is for organism #1, organism #2, or organism #3.
Unknown: This idicates that we are unable to parse the value from the HL7 message into a data subtype.
ANT: Antibody (for Discrete Microbiology only)
ORM: Organism identifier (for Discrete Microbiology only)
ORP: Presumptive organism identifier (for Discrete Microbiology only)
OBS: Observation (for Discrete Microbiology only)
MOD: Modifier (for Discrete Microbiology only)
L: Local Identifier (default when no Microbiology Result Text)
PDF: Embedded PDF result type or separate PDF file
TIF: Embedded TIF result type or a separate TIF file
9 ObsUnits varchar(255) OBX.6.1 - Identifier. LabCorp report field "UNITS". Units of measure, if too large it will be in the NTE segment.
10 ReferenceRange varchar(255) OBX.7 - Reference Ranges. LabCorp report field "REFERENCE INTERVAL". Only if applicable.
11 AbnormalFlag varchar(255) Enum:AbnormalFlag OBX.8 - Abnormal Flags. LabCorp report field "FLAG". Blank or null is normal. When this is displayed on the LabCorp report it must be the human readable display name, so for example _gt (>) is displayed as "Panic High" and _lt (<) is "Panic Low".
None: 0 - None. Blank or null value indicates normal result, so no abnormal flag.
_gt: 1 - Panic High. Actual value is ">" but symbol cannot be used as an enum value.
_lt: 2 - Panic Low. Actual value is "<" but symbol cannot be used as an enum value.
A: 3 - Abnormal. Applies to non-numeric results.
AA: 4 - Critical Abnormal. Applies to non-numeric results.
H: 5 - Above High Normal.
HH: 6 - Alert High.
I: 7 - Intermediate. For Discrete Microbiology susceptibilities only.
L: 8 - Below Low Normal.
LL: 9 - Alert Low.
NEG: 10 - Negative for Drug Interpretation Codes and Discrete Microbiology.
POS: 11 - Positive for Drug Interpretation Codes and Discrete Microbiology.
R: 12 - Resistant. For Discrete Microbiology susceptibilities only.
S: 13 - Susceptible. For Discrete Microbiology susceptibilities only.
12 ResultStatus varchar(255) Enum:ResultStatus OBX.11 - Observation Result Status.
C: 0 - Corrected Result.
F: 1 - Final. Result complete and verified.
I: 2 - Incomplete. For Discrete Microbiology Testing.
P: 3 - Preliminary. Final not yet obtained.
X: 4 - Canceled. Procedure cannot be done. Result canceled due to Non-Performance.
13 DateTimeObs datetime OBX.14 - Date/Time of Observation. yyyyMMddHHmm format in the message, no seconds. Date and time tech entered result into the Lab System.
14 FacilityID varchar(255) OBX.15 - Producer ID (Producer’s Reference). LabCorp report field "LAB". ID of LabCorp Facility responsible for performing the testing. The Lab Name is supplied in the ZPS segment.
15 DocNum bigint(20) FK to document.DocNum. ZEF.2 - Embedded File. Each result may have one or more ZEF segments for embedded files. The base-64 text version of the PDF is sent in ZEF.2. If the file size exceeds 50k, then multiple segments will be sent with 50k blocks of the text. When processing, we will concatenate all ZEF.2 fields, create the PDF document, store the file in the patient's image folder, and create an entry in the document table. Then update this field with the pointer to the document table entry.
16 Note text NTE.3 at the OBX level. The NTE segment is repeatable and the Comment Text component is limited to 78 characters. Multiple NTE segments can be used for longer comments. All NTE segments at the OBX level will be concatenated and stored in this one field.

medlabspecimen
The EHRLabSpecimen table is structured to tightly with the HL7 standard and should have names that more reflect how the user will consume the data and for that reason for actual implementation we are using these medlab tables. Medical lab specimen. Contains data from the SPM segment. Each MedLab object can have 0 to many specimen segments. Each segment will be its own row in this table.
Order Name Type Summary
0 MedLabSpecimenNum bigint(20) Primary key.
1 MedLabNum bigint(20) FK to medlab.MedLabNum. Each MedLab object can have 0 to many specimens pointing to it.
2 SpecimenID varchar(255) SPM.2 - Specimen ID. Unique identifier for the specimen as referenced by the Placer application, the Filler application, or both. The value sent in this field should be the identification value sent on the specimen container.
3 SpecimenDescript varchar(255) SPM.14 - Specimen Description. Additional information about the specimen.
4 DateTimeCollected datetime SPM.17 - Specimen Collection Date/Time. yyyyMMddHHmm format in the message, no seconds. The date and time when the specimen was acquired from the source. This is a DR - Date/Time Range data type, so it may have more than one component if a specimen was collected over a period of time. The first component is the start date/time so we will make sure to only store SPM.17.1 in this field.

mobileappdevice
Stores information on mobile app devices. These are devices that utilize the Xamarin mobile application.
Order Name Type Summary
0 MobileAppDeviceNum bigint(20) Primary key.
1 ClinicNum bigint(20) FK to clinic.ClinicNum.
2 DeviceName varchar(255) The name of the device.
3 UniqueID varchar(255) The unique identifier of the device. Platform specific.
4 IsEclipboardEnabled tinyint(4) Indicates whether the device is allowed to operate the checkin app. For BYOD sessions will always be true because BYOD is authenticated by a unique URL link in a text message.
5 EclipboardLastAttempt datetime The date and time of the last attempted login for Eclipboard.
6 EclipboardLastLogin datetime The date and time of the last successful login for Eclipboard.
7 PatNum bigint(20) FK to patient.PatNum. Indicates which patient is currently using the device. 0 indicates the device is not in use. -1 indicates that the device is in use but we do not yet know which patient is using the device.
8 LastCheckInActivity datetime The date and time when we last updated the PatNum field for this device (indication the current use-state of the device).
9 IsBYODDevice tinyint(4) Indicates whether a device is a BYOD device, defaults to false.
10 DevicePage tinyint(4) Current page of the device.
11 UserNum bigint(20) FK to userod.UserNum. Indicates which user is currently logged into the device. 0 indicates this device is not logged into.
12 IsODTouchEnabled tinyint(4) Indicates whether this device is being used for ODTouch or not.
13 ODTouchLastLogin datetime The date and time of the last successful login for ODTouch.
14 ODTouchLastAttempt datetime The date and time of the last attempted login for ODTouch.

mobilebrandingprofile
Deprecated. Use Branding instead. Branding Profile for eClipboard customization. One (or none) to One relationship with clinics. Allows customers to customize the look of their eClipboard with a Clinic name and Logo.
Order Name Type Summary
0 MobileBrandingProfileNum bigint(20) Primary key.
1 ClinicNum bigint(20) FK to clinic.ClinicNum.
2 OfficeDescription varchar(255) The Clinic Name that will be shown on eClipboard CheckIn
3 LogoFilePath varchar(255) eConnector will fetch this file. Same path for every computer, so maybe use a network shared file. Shows as 90x90 pixels.
4 DateTStamp timestamp The time that this object was last modified or inserted. Automatically updated by MySQL every time a row is added or changed. Used to determine if eClipboard needs to fetch an updated mobile branding profile.

mobiledatabyte
Table used to send various types of objects as bytes to ODXam applications. Example is a PDF for TxPlan or PaymentPlan. Row gets added here, sent to mobile device, and then consumed. Old rows are ignored.
Order Name Type Summary
0 MobileDataByteNum bigint(20) Primary key.
1 RawBase64Data mediumtext The bytes in Base64.
2 RawBase64Code mediumtext The unlock code in Base64. Blank if no unlock code required to retrieve.
3 RawBase64Tag mediumtext Misc data in Base64
4 PatNum bigint(20) FK to patient.PatNum. Can start out as 0.
5 ActionType tinyint(4) Enum:eActionType Stores the intended action associated to this rows data.
None: 0 - Placeholder
TreatmentPlan: 1 - Row is associated to a TP pdf to be viewed in eClipboard.
MakePayment: 2 - Instructs eClipboard to present patient with payment window.
PaymentPlan: 3 -
PerioExam: 4 - Associated with a list of perio exams.
ExamSheet: 5 - Used by eClilpboard to fill out exam sheets.
Checkin: 6 - Used by eClilpboard to checkin using QR code.
6 DateTimeEntry datetime The DateTime this row was entered.
7 DateTimeExpires datetime The DateTime that this row should be removed.

mobilenotification
Mobile App devices periodically poll this table and retrieve any records that are relevant to the device itself, the user using the device, or the clinic the device belongs to. The mobile apps will then perform an action based on the mobile notification type.
Order Name Type Summary
0 MobileNotificationNum bigint(20) Primary key.
1 NotificationType tinyint(4) Enum:MobileNotificationType The type of notification. Example: TP. This will determine what actions the mobile app will perform upon retrieving this notification.
None: Default.
CI_CheckinPatient: Check-in a patient on a given device. For this type, the tag will have 3 items: the first name, last name, and birthdate of the patient in that order. The birthdate will be in DateTime.Ticks.
CI_AddSheet: Tells the device that is currently filling out sheets to add a sheet to the list. For this type, the list of primary keys will have two items: the patnum and the SheetNum in that order.
CI_RemoveSheet: Tells the device that is currently fillout out sheets to remove a sheet from the list. For this type, the list of primary keys will have two items: the patnum and the SheetNum in that order.
CI_GoToCheckin: This mobile notification tells the device to stop whatever it is doing and go to a fresh checkin page. This may be a blank self-checkin or may be waiting for a mobile notification. This allows users from OD to "clear" the device of a stale patient. No primary keys or tags needed.
CI_NewEClipboardPrefs: This mobile notification occurs when the preferences for this device's clinic changes. The tags for this mobile notification will be the EClipboardAllowSelfCheckIn(bool), EClipboardMessageComplete(string), EClipboardAllowSelfPortraitOnCheckIn(bool), and EClipboardPresentAvailableFormsOnCheckIn(bool) in that order.
IsAllowedChanged: This mobile notification occurs when the MobileAppDevice.IsAllowed changed for this device. The tag for this mobile notification will be IsAllowed (bool). If true then device which is currently awaiting in 'Not Allowed' state will try another login, should work this time. If false then force signout. Used for eClipboard and ODTouch.
ODM_LogoutODUser: This mobile notification occurs when a permission has changed for a given OD user and they are no longer allowed to use OD Mobile. The ListPrimaryKeys may contain the UserNum of the user who is no longer allowed. This session will then be logged out of versioned OD Mobile. If ListPrimaryKeys IsNullOrEmpty() then assume all users for the given ClinicNum should be logged out. No UserNum filter necessary in this case.
CI_TreatmentPlan: This mobile notification occurs when a OD proper user sends a patients treatment plan to a specific device to show the user. ListPrimaryKeys => [MobileDataByteNum, PatNum, TreatPlanNum]. ListTags Keys => The treatPlan.Heading, hasPracticeSig(Obsolete; based on if TP sheet has SigBoxPractice) .
CI_RemoveTreatmentPlan: This mobile notification occurs when a TreatmentPlan is deleted in OD and we want to tell a specific device so that they can remove it when viewing TreatmentPlans. ListPrimaryKeys => [TreatPlan.PatNum,TreatPlan.TreatPlanNum]
CI_SendPayment: This mobile notification occurs when a payment needs to be made on an eClip device. This either adds the Make Payment action item to the checkin checklist or it will open the QR code to scan from OD. ListPrimaryKeys => [TreatPlan.PatNum]
CI_RefreshPayment: This mobile notification occurs when a patient is currently on the device, when a payment is made, when a new card is added (XWeb only), and when a new statement is created in OD. ListPrimaryKeys => [PatNum]
CI_PaymentPlan: This mobile notification occurs when an OD proper user sends a payment plan to a specific device. ListPrimaryKeys => [MobileDataByte.MobileDataByteNum,PayPlan.PatNum,PayPlan.PayPlanNum] ListTags => [PayPlan.PayPlanDate]
CI_RemovePaymentPlan: This mobile notification occurs when a payment plan is removed from the associated eClip device or when a payment plan is removed from OD proper. This will remove a payment plan from user view on eClip. ListPrimaryKeys => [PayPlan.PatNum,PayPlan.PayPlanNum]
ODT_ExamSheetsAll:
ODT_ExamSheet:
ODT_PrintError:
ODM_NewTextMessage: Occurs when a new text message is received. This is a workaround due to android push notifications no longer being supported for xamarin.
CI_AddEForm: Tells the device that is currently filling out forms to add an eForm to the list. For this type, the list of primary keys will have two items: the PatNum and the EFormNum in that order.
CI_RemoveEForm: Tells the device that is currently filling out forms to remove an eForm from the list. For this type, the list of primary keys will have two items: the PatNum and the EFormNum in that order.
2 DeviceId varchar(255) The device id for the mobile notification. Example is random string of 10-12 characters. Only the device with this DeviceId will retrieve this record.
3 PrimaryKeys text A comma-delimited list of primary keys associated with the mobile notification. See MobileNotificationType for what is included with each type. Can include MobileDataByteNums, TreatPlanNum, SheetNums, and others.
4 Tags text A comma-delimited list of tags for this mobile notification. Can be anything. Different for each MobileNotificationType. See MobileNotificationType for what is included with each type.
5 DateTimeEntry datetime DateTime notification was entered into Db. Should not be edited.
6 DateTimeExpires datetime DateTime notification expires and becomes invalid.
7 AppTarget tinyint(4) Enum:EnumAppTarget Stores the mobile app that this notification is targeting. Prohibits a device running one app from consuming mobile notifications intended for a different app.
eClipboard: 0
ODMobile: 1
ODTouch: 2

mount
A mount shows in the images module just like other images in the tree. But it is just a container for images within it rather than an actual image itself. A mount layout cannot be edited once created for a patient (simply because we didn't add that functionality), but the individual images on it can be edited.
Order Name Type Summary
0 MountNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum
2 DocCategory bigint(20) FK to definition.DefNum. Categories for documents.
3 DateCreated datetime The date/time at which the mount itself was created. Usually, all the images on the mount are the same date, but not always.
4 Description varchar(255) Used to provide a document description in the image module tree-view.
5 Note text To allow the user to enter specific information regarding the exam and tooth numbers, as well as points of interest in the xray images.
6 Width int(11) The width of the mount, in pixels.
7 Height int(11) The height of the mount, in pixels.
8 ColorBack int(11) Color of the mount background. Typically white for photos and black for radiographs. Transparency not allowed.
9 ProvNum bigint(20) FK to provider.ProvNum. Optional. Used for radiographs.
10 ColorFore int(11) Color of drawings and text. Typically black for photos and white for radiographs.
11 ColorTextBack int(11) Color of drawing text background. Typically white for photos and black for radiographs. Transparent is allowed.
12 FlipOnAcquire tinyint(4) If true, each image will be flipped as it's acquired. Because ScanX images are backwards.
13 AdjModeAfterSeries tinyint(4) If true, then it will switch to Adj mode instead of the usual Pan mode.

mountdef
Template for each new mount. But there is no linking of the mount back to this mountDef. These can be freely deleted, renamed, moved, etc. without affecting any patient info.
Order Name Type Summary
0 MountDefNum bigint(20) Primary key.
1 Description varchar(255) .
2 ItemOrder int(11) The order that the mount defs will show in various lists.
3 Width int(11) The width of the mount, in pixels.
4 Height int(11) Height of the mount, in pixels.
5 ColorBack int(11) Color of the mount background. Typically white for photos and black for radiographs.
6 ColorFore int(11) Color of drawings and text. Typically black for photos and white for radiographs.
7 ColorTextBack int(11) Color of drawing text background. Typically white for photos and black for radiographs. Transparent is allowed.
8 ScaleValue varchar(255) Scale, decimal places, and units, separated by spaces. Example: "123.4 0 mm". The first two are required; units is optional. When a mount is created, and if this isn't blank, then this is converted into an ImageDraw of type ScaleValue.
9 DefaultCat bigint(20) FK to definition.DefNum. If set, a new mount will go into this category, regardless of which category is currently selected.
10 FlipOnAcquire tinyint(4) If true, each image will be flipped as it's acquired. Because ScanX images are backwards.
11 AdjModeAfterSeries tinyint(4) If true, then it will switch to Adj mode instead of the usual Pan mode.

mountitem
These are always attached to a mount. Like a mount, they cannot be edited. Documents are attached to each MountItem using Document.MountItemNum field. Image will always be cropped to make it look smaller or bigger if it doesn't exactly match the mount item rectangle ratio.
Order Name Type Summary
0 MountItemNum bigint(20) Primary key.
1 MountNum bigint(20) FK to mount.MountNum.
2 Xpos int(11) The x position, in pixels, of the item on the mount.
3 Ypos int(11) The y position, in pixels, of the item on the mount.
4 ItemOrder int(11) The ordinal position of the item on the mount. 1-indexed because users see it. Any item with an ItemOrder of 0 is text, which cannot accept an image or be clicked on. Any item with an ItemOrder of -1 is unmounted and will show in the umounted area instead of on the mount.
5 Width int(11) The width, in pixels, of the mount item rectangle.
6 Height int(11) The height, in pixels, of the mount item rectangle.
7 RotateOnAcquire int(11) 0,90,180,or 270.
8 ToothNumbers varchar(255) An optional list of tooth numbers. In Db, rigorously formatted as American numbers, and separated by commas. For display, uses hyphens for sequences. Very likely supports international tooth numbers, but not tested for that. These tooth numbers are initially copied here from the MountItemDef. They are then copied to the document (image) that gets put in this mount item. So mountitem.ToothNumbers is not actually used to indicate the final tooth numbers. use document.ToothNumbers instead.
9 TextShowing text Instead of an image, a mount item can show text. In this case, ItemOrder=0. Text color and background will be the mount default.
10 FontSize float This could vary significantly based on the size of the mount. It's always relative to mount pixels.

mountitemdef
These are always attached to mountdefs. Can be deleted without any problems.
Order Name Type Summary
0 MountItemDefNum bigint(20) Primary key.
1 MountDefNum bigint(20) FK to mountdef.MountDefNum.
2 Xpos int(11) The x position, in pixels, of the item on the mount.
3 Ypos int(11) The y position, in pixels, of the item on the mount.
4 Width int(11) Width, in pixels, of the item rectangle on the mount. Any cropping, rotating, etc, will all be defined in the original image itself.
5 Height int(11) Height, in pixels, of the item rectangle on the mount. Any cropping, rotating, etc, will all be defined in the original image itself.
6 ItemOrder int(11) The ordinal position of the item on the mount. 1-indexed because users see it. 0 if TestShowing has a value.
7 RotateOnAcquire int(11) 0,90,180,or 270.
8 ToothNumbers varchar(255) An optional list of tooth numbers. In Db, rigorously formatted as American numbers, and separated by commas. For display, uses hyphens for sequences. Very likely supports international tooth numbers, but not tested for that.
9 TextShowing text Instead of an image, a mount item can show text. In this case, ItemOrder=0. Text color and background will be the mount default.
10 FontSize float This could vary significantly based on the size of the mount. It's always relative to mount pixels.

msgtopaysent
AutoComm object for MsgToPay messages that have been queued or sent by the eConnector. The HQ version of this object is MsgToPayActive where a record is kept for ShortGuid/redirect purposes. Inherits IAutoCommApptGuid since they will all be attached to appointments.
Order Name Type Summary
0 MsgToPaySentNum bigint(20) PK.
1 PatNum bigint(20) FK to patient.PatNum for the corresponding patient.
2 ClinicNum bigint(20) FK to patient.ClinicNum for the corresponding patient.
3 SendStatus tinyint(4) Indicates status of message.
4 Source tinyint(4) Source of this object. Can be Manual (implemented) or EConnectorAutoComm (not yet implemented).
5 MessageType tinyint(4)
6 MessageFk bigint(20) FK to smstomobile.SmsToMobileNum AND MessageType=1, FK to emailmessage.EmailMessageNum AND MessageType=2.
7 Subject text Subject of the message.
8 Message text Content of the message.
9 EmailType tinyint(4) Only used for manually sent emails.
10 DateTimeEntry datetime Generated by OD. Timestamp when row is created.
11 DateTimeSent datetime DateTime the message was sent.
12 ResponseDescript text Generated by OD in some cases and HQ in others. Any human readable error message generated by either HQ or EConnector. Used for debugging.
13 ApptReminderRuleNum bigint(20) FK to apptreminderrule.ApptReminderRuleNum. Allows us to look up the rules to determine how to send this apptcomm out.
14 ShortGUID varchar(255) Generated by HQ. Identifies this AutoCommGuid in future transactions between HQ and OD.
15 DateTimeSendFailed datetime
16 ApptNum bigint(20) FK to appointment.AptNum
17 ApptDateTime datetime
18 TSPrior bigint(20)
19 StatementNum bigint(20) FK to statement.StatementNum

oidexternal
Order Name Type Summary
0 OIDExternalNum bigint(20) Primary key.
1 IDType varchar(255) Enum:IdentifierType Internal data type to be associated with.
Root: Will most likely be the root of all other OIDs. Represents the organization.
LabOrder: FK to ehrlab.EhrLabNum. root+".1"
Patient: FK to patient.PatNum. root+".2"
Provider: FK to provider.ProvNum. root+".3"
CqmItem: This will be the root for all CQM reported items, like encounters, procedures, problems, etc. root+".4" The extension will be abbreviated name concatenated with the primary key of the object. Examples: pat5231 or medpat197432 or proc231782 or notperf38291. This is only used for generating QRDA documents and requires that the encounter, procedure, etc. is uniquely identified in the reports. The root+".4" makes it unique to this office, the abbreviated name plus primary key makes it unique within the office.
Problem: FK to disease.DiseaseNum. root+".5"
Appointment: FK to appointment.AptNum. root+".6"
InsPlan: FK to insplan.PlanNum. root+".7"
Procedure: FK to procedurelog.ProcNum. root+".8"
2 IDInternal bigint(20) FK to patient.PatNum AND IDType=2, FK to provider.ProvNum AND IDType=3, FK to disease.DiseaseNum AND IDType=5, FK to appointment.AptNum AND IDType=6, FK to procedurelog.ProcNum AND IDType=8.
3 IDExternal varchar(255) The OID extension, when combined with rootExternal it uniquely identifies an object.
4 rootExternal varchar(255) The OID root, when combined with IDExternal it uniquely identifies an object.

oidinternal
Order Name Type Summary
0 OIDInternalNum bigint(20) Primary key.
1 IDType varchar(255) Enum:IdentifierType Internal data type to be associated with OIDRoot
Root: Will most likely be the root of all other OIDs. Represents the organization.
LabOrder: FK to ehrlab.EhrLabNum. root+".1"
Patient: FK to patient.PatNum. root+".2"
Provider: FK to provider.ProvNum. root+".3"
CqmItem: This will be the root for all CQM reported items, like encounters, procedures, problems, etc. root+".4" The extension will be abbreviated name concatenated with the primary key of the object. Examples: pat5231 or medpat197432 or proc231782 or notperf38291. This is only used for generating QRDA documents and requires that the encounter, procedure, etc. is uniquely identified in the reports. The root+".4" makes it unique to this office, the abbreviated name plus primary key makes it unique within the office.
Problem: FK to disease.DiseaseNum. root+".5"
Appointment: FK to appointment.AptNum. root+".6"
InsPlan: FK to insplan.PlanNum. root+".7"
Procedure: FK to procedurelog.ProcNum. root+".8"
2 IDRoot varchar(255) This is the root OID for this data type, when combined with extension, uniquely identifies a single object.

operatory
Each row is a single operatory or column in the appts module.
Order Name Type Summary
0 OperatoryNum bigint(20) Primary key
1 OpName varchar(255) The full name to show in the column.
2 Abbrev varchar(255) 5 char or less. Not used much.
3 ItemOrder smallint The order that this op column will show. Changing views only hides some ops; it does not change their order. Zero based.
4 IsHidden tinyint Used instead of deleting to hide an op that is no longer used.
5 ProvDentist bigint(20) FK to provider.ProvNum. The dentist assigned to this op. If more than one dentist might be assigned to an op, then create a second op and use one for each dentist. If 0, then no dentist is assigned.
6 ProvHygienist bigint(20) FK to provider.ProvNum. The hygienist assigned to this op. If 0, then no hygienist is assigned.
7 IsHygiene tinyint Set true if this is a hygiene operatory. The hygienist will then be considered the main provider for this op.
8 ClinicNum bigint(20) FK to clinic.ClinicNum. 0 if no clinic.
9 DateTStamp timestamp Not user editable. The last time this row was edited.
10 SetProspective tinyint(4) If true patients put into this operatory will have status set to prospective.
11 IsWebSched tinyint(4) Operatories with IsWebSched set to true will be the ONLY operatories considered when searching for available time slots.
12 IsNewPatAppt tinyint(4) Deprecated as of 18.1. Entries within the deflink table indicate if this operatory is in fact available for WebSched New Pat Appt. Old summary: Operatories with IsNewPatAppt set to true will be the ONLY operatories considered when searching for available time slots. This is in regards to the New Patient Appointment portion of the Web Sched web application.
13 OperatoryType bigint(20) FK to definition.DefNum. The type of the Operatory. This value is not normally used, but rather to just mark which type the Operatory is.

orionproc
Order Name Type Summary
0 OrionProcNum bigint(20)
1 ProcNum bigint(20)
2 DPC tinyint(4)
3 DateScheduleBy date
4 DateStopClock date
5 Status2 int(11)
6 IsOnCall tinyint(4)
7 IsEffectiveComm tinyint(4)
8 IsRepair tinyint(4)
9 DPCpost tinyint(4)

orthocase
Holds financial and timing information for a single ortho case. For procs linked to Orthocases, estimates are calculated based off of orthocase info, not insurance info. The orthocase numbers are automatically placed into InsPayEst and InsEstTotalOverride in Procedures.ComputeEstimates(), taking control from insurance. Procedure fees are calculated based on orthocase info, not fee schedules. All overrides (fees and insurance) are performed when the procedure is set complete.
Order Name Type Summary
0 OrthoCaseNum bigint(20) Primary key
1 PatNum bigint(20) FK to patient.PatNum. The patient on this ortho case.
2 ProvNum bigint(20) FK to provider.ProvNum.
3 ClinicNum bigint(20) FK to clinic.ClinicNum.
4 Fee double Total amount of procedure fees. Is editable by user.
5 FeeInsPrimary double The amount that primary insurance will cover for the entire ortho case.
6 FeePat double Calculated from Fee - FeeIns.
7 BandingDate date Date of Banding.
8 DebondDate date Date of Debond.
9 DebondDateExpected date Date of expected Debond.
10 IsTransfer tinyint(4) Used to denote that the banding date is used as the transfer date instead.
11 OrthoType bigint(20) FK to definition.DefNum
12 SecDateTEntry datetime DateTime ortho case was added. Not editable by user.
13 SecUserNumEntry bigint(20) FK to userod.usernum. The usernum that added the OrthoCase.
14 SecDateTEdit timestamp Timestamp of the last modification to the ortho case. Not editable by user.
15 IsActive tinyint(4) Determines whether or not this is an active ortho case
16 FeeInsSecondary double The amount that secondary insurance will cover for the entire ortho case. Will be set to zero if patient doesn't have secondary insurance

orthochart
For the orthochart feature, each row in this table is one cell in that grid. An empty cell often corresponds to a missing db table row.
Order Name Type Summary
0 OrthoChartNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 DateService date Deprecated, use orthochartrow table instead. Date of service.
3 FieldName varchar(255) Keyed to displayfield.Description.
4 FieldValue text Stores the text that the user entered or picked.
5 UserNum bigint(20) Deprecated, use orthochartrow table instead. FK to userod.UserNum. The user that created or last edited an ortho chart field.
6 ProvNum bigint(20) Deprecated, use orthochartrow table instead. FK to provider.ProvNum. Can be 0.
7 OrthoChartRowNum bigint(20) FK to orthochartrow.OrthoChartRowNum.

orthochartlog
This stores log entries for debugging the orthochart. Logging gets turned on and off with the pref. This table will go away once the bug is found.
Order Name Type Summary
0 OrthoChartLogNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 ComputerName varchar(255)
3 DateTimeLog datetime DateTime that this log entry was made
4 DateTimeService datetime DateTime of the chart row.
5 UserNum bigint(20) FK to userod.UserNum. The user that created or last edited an ortho chart field.
6 ProvNum bigint(20) FK to provider.ProvNum.
7 OrthoChartRowNum bigint(20) FK to orthochartrow.OrthoChartRowNum.
8 LogData mediumtext This can be long and complex -- whatever you want. MediumText, so max length=16M.

orthochartrow
Represent a row in the ortho chart UI grid.
Order Name Type Summary
0 OrthoChartRowNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 DateTimeService datetime DateTime of service.
3 UserNum bigint(20) FK to userod.UserNum. The user that created or last edited an ortho chart field.
4 ProvNum bigint(20) FK to provider.ProvNum.
5 Signature text Examples: "0:ritwq/wV8vlrgUYahhK+RH5UeBFA6W4jCkZdo0cDWd63aZb1S/W3Z4eW5LmchqfgniG23" and "1:52222559445999975122111500485555". The 1st character is whether or not the signature is Topaz. The 2nd character is a separator. The rest of the string is the hashed signature data. Raw signature data is the concatenation of the FieldName and FieldValue of all cells (orthocharts), ordered by FieldName.

orthocharttab
This represents one column in one orthocharttab. The field name and width are retrieved from displayfield table using DisplayFieldNum. A displayfield can show on multiple orthocharttabs.
Order Name Type Summary
0 OrthoChartTabNum bigint(20) FK to orthocharttab.OrthoChartTabNum.
1 TabName varchar(255)
2 ItemOrder int(11) The order of this column in the ortho chart tab.
3 IsHidden tinyint(4)

orthocharttablink
This represents one column in one orthocharttab. The field name and width are retrieved from displayfield table using DisplayFieldNum. A displayfield can show on multiple orthocharttabs.
Order Name Type Summary
0 OrthoChartTabLinkNum bigint(20) Primary key.
1 ItemOrder int(11) The order of this column in the ortho chart tab.
2 OrthoChartTabNum bigint(20) FK to orthocharttab.OrthoChartTabNum.
3 DisplayFieldNum bigint(20) FK to displayfield.DisplayFieldNum. Use this to get field name and default width.
4 ColumnWidthOverride int(11) Overrides the DisplayField.ColumnWidth for OrthChartTabLinks when not 0. Otherwise uses associated DisplayFieldFieldNums DisplayField.ColumnWidth value.

orthohardware
Represents one bracket, wire, or elastic.
Order Name Type Summary
0 OrthoHardwareNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 DateExam date Every hardware entry is tied to a single date. At each exam, a copy can be made of the hardware from the previous exam, and then it can be edited. It normally shows the most recent exam, and the hardware items showing in the ortho grid only include the most recent exam. Not sure yet how we will show hardware for previous exams/dates.
3 OrthoHardwareType tinyint(4) Enum:EnumOrthoHardwareType Bracket, Wire, or Elastic.
Bracket: 0
Wire: 1
Elastic: 2
4 OrthoHardwareSpecNum bigint(20) FK to orthohardwarespec.OrthoHardwareSpecNum. This is where the description and color come from.
5 ToothRange varchar(255) Tooth numbers stored here are always stored in Universal (1-32) notation. They are displayed to the user as Palmer notation. For brackets, always use single tooth numbers, like 8. For wires, must use a range like 2-15. For elastics, typically use 2 teeth separated with commas, but more are allowed.
6 Note varchar(255)
7 IsHidden tinyint(4)

orthohardwarespec
Specification for ortho hardware. Linked to one type such as bracket, wire, or elastic. This is a pick list of description and color for the user. These remain linked to patient data, so changes here will affect historical chart entries.
Order Name Type Summary
0 OrthoHardwareSpecNum bigint(20) Primary key.
1 OrthoHardwareType tinyint(4) Enum:EnumOrthoHardwareType Bracket, Wire, or Elastic.
Bracket: 0
Wire: 1
Elastic: 2
2 Description varchar(255) Example NITI 16x25
3 ItemColor int(11)
4 IsHidden tinyint(4)
5 ItemOrder int(11) 0 indexed. User controls it with arrows.

orthoplanlink
Used to attach payment plans and ortho schedules to an Ortho Case.
Order Name Type Summary
0 OrthoPlanLinkNum bigint(20) Primary key
1 OrthoCaseNum bigint(20) FK to orthocase.OrthoCaseNum.
2 LinkType tinyint(4) Enum:OrthoPlanLinkType Holds the type of object that is being linked.
OrthoSchedule: 0 - OrthoSchedule. For this type, FKey is orthoschedule.OrthoScheduleNum.
InsPayPlan: 1 - Insurance Payment Plan
PatPayPlan: 2 - Patient Payment Plan. For this type, FKey is payplan.PayPlanNum.
3 FKey bigint(20) FK to orthoschedule.OrthoScheduleNum AND LinkType=0, FK to payplan.PayPlanNum AND LinkType=2.
4 IsActive tinyint(4) Denotes if plan link is active or not.
5 SecDateTEntry datetime DateTime. Date plan link was added. Not editable by user.
6 SecUserNumEntry bigint(20) FK to userod.UserNum. User that added the plan link.

orthoproclink
Used to attach procedures to an OrthoCase. Multiple procs are typically attached to one OrthoCase.
Order Name Type Summary
0 OrthoProcLinkNum bigint(20) Primary key
1 OrthoCaseNum bigint(20) FK to orthocase.OrthoCaseNum.
2 ProcNum bigint(20) FK to procedurelog.ProcNum
3 SecDateTEntry datetime DateTime proclink was added. Not editable by user.
4 SecUserNumEntry bigint(20) FK to userod.UserNum. User that added the proc link.
5 ProcLinkType tinyint(4) Enum:OrthoProcType Indicates what type of procedure is being associated to Ortho Case in link.
Banding: 0 - Procedure for putting appliance on.
Debond: 1 - Procedure for removing appliance.
Visit: 2 - All maintenance visits between Banding and Debond procedures.

orthorx
A group of ortho hardware that allows for faster entry than one tooth at a time. Changes to this table do not affect any patient records.
Order Name Type Summary
0 OrthoRxNum bigint(20) Primary key.
1 OrthoHardwareSpecNum bigint(20) FK to orthohardwarespec.OrthoHardwareSpecNum. Description comes from here.
2 Description varchar(255) The description used for picking the prescription from a list.
3 ToothRange varchar(255) Tooth numbers stored here are always stored in Universal (1-32) notation. They are displayed to the user as Palmer notation. For brackets and elastics, always use tooth numbers separated by commas, like 2,3,4,5,6. For wires, must use a range like 2-15.
4 ItemOrder int(11) 0 indexed. User controls it with arrows.

orthoschedule
Optional. Holds the Production Schedule for an OrthoCase.
Order Name Type Summary
0 OrthoScheduleNum bigint(20) Primary key
1 BandingDateOverride date Override for banding date.
2 DebondDateOverride date Override for debond date.
3 BandingAmount double Amount to charge for banding procedure.
4 VisitAmount double Used every visit until the total off all visits+BandingAmount+DebondAmount=Fee of linked OrthoCase.
5 DebondAmount double Amount to charge for debond procedure.
6 IsActive tinyint(4) Is true if the ortho schedule is active.
7 SecDateTEdit timestamp DateTime the ortho schedule was last modified. Not editable by user.

patfield
These are custom fields added and managed by the user. Each row here is a field value for one patient.
Order Name Type Summary
0 PatFieldNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum
2 FieldName varchar(255) FK to patfielddef.FieldName. The full name is shown here for ease of use when running queries. But the user is only allowed to change fieldNames in the patFieldDef setup window.
3 FieldValue text Any text that the user types in. For picklists, this will contain the picked text. For dates, this is stored as the user typed it, after validating that it could be parsed. So queries that involve dates won't work very well. If we want better handling of date fields, we should add a column to this table. Checkbox will either have a value of 1, or else the row will be deleted from the db. Currency is handled in a culture neutral way, just like other currency in the db.
4 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
5 SecDateEntry date Timestamp automatically generated and user not allowed to change. The actual date of entry.
6 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.

patfielddef
These are the definitions for the custom patient fields added and managed by the user.
Order Name Type Summary
0 PatFieldDefNum bigint(20) Primary key.
1 FieldName varchar(255) This is treated as the key. The name of the field that the user will be allowed to fill in the patient info window.
2 FieldType tinyint(4) Enum:PatFieldType Text=0,PickList=1,Date=2,Checkbox=3,Currency=4
Text: 0
PickList: 1
Date: 2-Stored in db as entered, already localized. For example, it could be 2/04/11, 2/4/11, 2/4/2011, or any other variant. This makes it harder to create queries that filter by date, but easier to display dates as part of results.
Checkbox: 3-If checked, value stored as "1". If unchecked, row deleted.
Currency: 4-Numbers only.
InCaseOfEmergency: 5 - DEPRECATED. (Only used 16.3.1, deprecated by 16.3.4)
CareCreditStatus: 6 - CareCredit pre-approval status. For example, FieldValue string="Pre-Approved", from CareCreditWebStatus enum.
CareCreditPreApprovalAmt: 7 - CareCredit pre-approval amount.
CareCreditAvailableCredit: 8 - CareCredit - Remaining available Credit for CareCredit cardholders.
3 PickList text Deprecated. Use patfieldpickitem.
4 ItemOrder int(11)
5 IsHidden tinyint(4) Hides this PatField for any patient where it's currently blank. If already in use by a patient, then it still shows.

patfieldpickitem
Each row is an item in a PatFieldDef picklist. Not used unless the PatFieldDef is a Picklist type. These objects are created and managed by user.
Order Name Type Summary
0 PatFieldPickItemNum bigint(20) Primary key.
1 PatFieldDefNum bigint(20) FK to patfielddef.PatFieldDefNum
2 Name varchar(255) Full text of PickList item.
3 Abbreviation varchar(255) Abbr to show when PickList item is displayed in cramped spaces like columns. Only implemented in Superfamily grid so far.
4 IsHidden tinyint(4) False for normal PickList items. Even if true/hidden, this item will still show in all the various windows where patient fields show. A hidden item will not normally show when picking from list for a patient unless the patient has already been assigned this item.
5 ItemOrder int(11) 0-based.

patient
One row for each patient. Includes deleted patients.
Order Name Type Summary
0 PatNum bigint(20) Primary key.
1 LName varchar(100) Last name.
2 FName varchar(100) First name.
3 MiddleI varchar(100) Middle initial or name.
4 Preferred varchar(100) Preferred name, aka nickname.
5 PatStatus tinyint Enum:PatientStatus
Patient: 0
NonPatient: 1
Inactive: 2
Archived: 3 - This status is also used for a merged patient that you're not keeping.
Deleted: 4
Deceased: 5
Prospective: 6- Not an actual patient yet.
6 Gender tinyint Enum:PatientGender
Male: 0
Female: 1
Unknown: 2- Required by HIPAA for privacy. Required by ehr to track missing entries. EHR/HL7 known as undifferentiated (UN).
Other: 3
7 Position tinyint Enum:PatientPosition Marital status would probably be a better name for this column.
Single: 0
Married: 1
Child: 2
Widowed: 3
Divorced: 4
8 Birthdate date Age is not stored in the database. Age is always calculated as needed from birthdate.
9 SSN varchar(100) In the US, this is 9 digits, no dashes. For all other countries, any punctuation or format is allowed.
10 Address varchar(100) .
11 Address2 varchar(100) Optional second address line.
12 City varchar(100) .
13 State varchar(100) 2 Char in USA. Used to store province for Canadian users.
14 Zip varchar(100) Postal code. For Canadian claims, it must be ANANAN. No validation gets done except there.
15 HmPhone varchar(30) Home phone. Includes any punctuation
16 WkPhone varchar(30) .
17 WirelessPhone varchar(30) .
18 Guarantor bigint(20) FK to patient.PatNum. Head of household.
19 CreditType char(1) Single char. Shows at upper right corner of appointments. Suggested use is A,B,or C to designate creditworthiness, but it can actually be used for any purpose.
20 Email varchar(100) .
21 Salutation varchar(100) Dear __. This field does not include the "Dear" or a trailing comma. If this field is blank, then the typical salutation is FName. Or, if a Preferred name is present, that is used instead of FName.
22 EstBalance double Current patient balance.(not family). Never subtracts insurance estimates.
23 PriProv bigint(20) FK to provider.ProvNum. The patient's primary provider. Required. The database maintenance tool ensures that every patient always has this number set, so the program no longer has to handle 0.
24 SecProv bigint(20) FK to provider.ProvNum. Secondary provider (hygienist). Optional.
25 FeeSched bigint(20) FK to feesched.FeeSchedNum. Fee schedule for this patient. Usually not used. If missing, the practice default fee schedule is used. If patient has insurance, then the fee schedule for the insplan is used.
26 BillingType bigint(20) FK to definition.DefNum. Required or the patient will not show on some reports and OD might crash in some places.
27 ImageFolder varchar(100) Name of folder where images will be stored. Not editable for now. Max length 100 because max path length is 260 and this is just part of the path..
28 AddrNote text Address or phone note. Unlimited length in order to handle data from other programs during a conversion.
29 FamFinUrgNote text Family financial urgent note. Only stored with guarantor, and shared for family.
30 MedUrgNote varchar(255) Individual patient note for Urgent medical.
31 ApptModNote varchar(255) Individual patient note for Appointment module note.
32 StudentStatus char(1) Single char. Nonstudent='N' or blank, Parttime='P', Fulltime='F'.
33 SchoolName varchar(255) College name. If Canadian, then this is field C10 and must be filled if C9 (patient.CanadianEligibilityCode) is 1 and patient is 18 or older.
34 ChartNumber varchar(100) Usually blank. Alternative and supplement to PatNum. Can take alphanumeric. Usually set during conversion or when bridging to imaging software. Historically, it typically showed as a sticker on the outside of a paper chart. Max length 100 to support larger ids for bridging to imaging softwares.
35 MedicaidID varchar(20) Optional. The Medicaid ID for this patient.
36 Bal_0_30 double Aged balance from 0 to 30 days old. Aging numbers are for entire family. Only stored with guarantor.
37 Bal_31_60 double Aged balance from 31 to 60 days old. Aging numbers are for entire family. Only stored with guarantor.
38 Bal_61_90 double Aged balance from 61 to 90 days old. Aging numbers are for entire family. Only stored with guarantor.
39 BalOver90 double Aged balance over 90 days old. Aging numbers are for entire family. Only stored with guarantor.
40 InsEst double Insurance Estimate for entire family. Only stored with guarantor.
41 BalTotal double Total balance for entire family before insurance estimate. Not the same as the sum of the 4 aging balances because this can be negative. Only stored with guarantor.
42 EmployerNum bigint(20) FK to employer.EmployerNum.
43 EmploymentNote varchar(255) Not used since version 2.8.
44 County varchar(255) FK to county.CountyName, although it will not crash if key absent.
45 GradeLevel tinyint(4) Enum:PatientGrade Gradelevel.
Unknown: 0
First: 1
Second: 2
Third: 3
Fourth: 4
Fifth: 5
Sixth: 6
Seventh: 7
Eighth: 8
Ninth: 9
Tenth: 10
Eleventh: 11
Twelfth: 12
PrenatalWIC: 13
PreK: 14
Kindergarten: 15
Other: 16
46 Urgency tinyint(4) Enum:TreatmentUrgency Used in public health screenings.
Unknown:
NoProblems:
NeedsCare:
Urgent:
47 DateFirstVisit date The date that the patient first visited the office. Automated.
48 ClinicNum bigint(20) FK to clinic.ClinicNum. Can be zero if not attached to a clinic or no clinics set up.
49 HasIns varchar(255) For now, an 'I' indicates that the patient has insurance. This is only used when displaying appointments. It will later be expanded. User can't edit.
50 TrophyFolder varchar(255) The Trophy bridge is inadequate, this attempts to make it usable for offices that have invested in Trophy hardware.
51 PlannedIsDone tinyint This simply indicates whether the 'done' box is checked in the chart module. Used to be handled as a -1 in the NextAptNum field, but now that field is unsigned.
52 Premed tinyint Set to true if patient needs to be premedicated for appointments, includes PAC, halcion, etc.
53 Ward varchar(255) Only used in hospitals.
54 PreferConfirmMethod tinyint Enum:ContactMethod Used for eCR, which includes eReminders eConfirmations.
None: 0
DoNotCall: 1
HmPhone: 2
WkPhone: 3
WirelessPh: 4
Email: 5
SeeNotes: 6
Mail: 7
TextMessage: 8
55 PreferContactMethod tinyint Enum:ContactMethod
None: 0
DoNotCall: 1
HmPhone: 2
WkPhone: 3
WirelessPh: 4
Email: 5
SeeNotes: 6
Mail: 7
TextMessage: 8
56 PreferRecallMethod tinyint Enum:ContactMethod
None: 0
DoNotCall: 1
HmPhone: 2
WkPhone: 3
WirelessPh: 4
Email: 5
SeeNotes: 6
Mail: 7
TextMessage: 8
57 SchedBeforeTime time .
58 SchedAfterTime time .
59 SchedDayOfWeek tinyint We do not use this, but some users do, so here it is. 0=none. Otherwise, 1-7 for day.
60 Language varchar(100) The primary language of the patient. Typically eng (English), fra (French), spa (Spanish), or similar. If it's a custom language, then it might look like Tahitian. If none, then empty string.
61 AdmitDate date Used in hospitals. It can be before the first visit date. It typically gets set automatically by the hospital system.
62 Title varchar(15) Includes any punctuation. For example, Mr., Mrs., Miss, Dr., etc. There is no selection mechanism yet for user; they must simply type it in.
63 PayPlanDue double Amount "due now" for all payment plans such that someone in this family is the payment plan guarantor. This is the total of all payment plan charges past due (taking into account the PayPlansBillInAdvanceDays setting) subtract the amount already paid for the payment plans. Only stored with family guarantor.
64 SiteNum bigint(20) FK to site.SiteNum. Can be zero. Replaces the old GradeSchool field with a proper foreign key.
65 DateTStamp timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable.
66 ResponsParty bigint(20) FK to patient.PatNum. Can be zero. Person responsible for medical decisions rather than finances. Guarantor is still responsible for finances. This is useful for nursing home residents. Part of public health.
67 CanadianEligibilityCode tinyint(4) C09. Eligibility Exception Code. A number between 1-4. 0 is not acceptable for e-claims. 1=FT student, 2=disabled, 3=disabled student, 4=code not applicable. Warning. 4 is a 0 if using CDAnet version 02. This column should have been created as an int.
68 AskToArriveEarly int(11) Number of minutes patient is asked to come early to appointments.
69 PreferContactConfidential tinyint(4) Enum:ContactMethod Used for EHR.
None: 0
DoNotCall: 1
HmPhone: 2
WkPhone: 3
WirelessPh: 4
Email: 5
SeeNotes: 6
Mail: 7
TextMessage: 8
70 SuperFamily bigint(20) FK to patient.PatNum. If this is the same as PatNum, then this is a SuperHead. If zero, then not part of a superfamily. Synched for entire family. If family is part of a superfamily, then the guarantor for this family will show in the superfamily list in the Family module for anyone else who is in the superfamily. Only a guarantor can be a superfamily head.
71 TxtMsgOk tinyint(4) Enum:YN
Unknown: 0
Yes: 1
No: 2
72 SmokingSnoMed varchar(32) EHR smoking status as a SNOMED code. Will always be the most recent smoking status for the patient.
73 Country varchar(255) Country name. Only used by HQ to add country names to statements.
74 DateTimeDeceased datetime Needed for EHR syndromic surveillance messaging. Used in HL7 PID-29. Also for feature request #3040. Date and time because we need precision to the minute in syndromic surveillence messging.
75 BillingCycleDay int(11) A number between 1 and 31 that is the day of month that repeat charges should be applied to this account. Previously this was determined by the start date of the repeate charges.
76 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
77 SecDateEntry date Date automatically generated and user not allowed to change. Date when patient was inserted.
78 HasSuperBilling tinyint(4) 0 by default. If true, this guarantor should be included in superbilling statements.
79 PatNumCloneFrom bigint(20) Deprecated, use patientlink table instead. Indicates if this patient should act as a clone of another patient. Previously, ortho cloned patients were signified by capitalizing the name fields of the newly cloned patient. This field will allow for an explicit flag to be set to indicate cloned status.
80 DiscountPlanNum bigint(20) Deprecated, use discountplansub table instead. FK to discountplan.DiscountPlanNum. Will be 0 if there is no DiscountPlan.
81 HasSignedTil tinyint(4) Signed Truth in Lending, relates to client permission to be charged interest on a payment plan.
82 ShortCodeOptIn tinyint(4) Syncs down from HQ and indicates whether the patient has texted STOP or START in response to text messages. Indicates if the patient has opted in, out, or not yet to using Short Codes for Appointment Texts.
83 SecurityHash varchar(255) Holds the salted hash of the PatNum. This prevents 3rd parties from inserting patients without our Db Integrity system noticing.

patientlink
Keeps track of patients who have been merged or cloned.
Order Name Type Summary
0 PatientLinkNum bigint(20) Primary key.
1 PatNumFrom bigint(20) FK to patient.PatNum. The patient that is linked from. For a Merge type, this is that patient that was merged from. For a Clone type, this is the original or master patient.
2 PatNumTo bigint(20) FK to patient.PatNum, unless LinkType=PaySimple. The patient that is linked to. For a Merge type, this is that patient that was merged into. For a Clone type, this represents the clone that was made from the PatNumFrom patient.
3 LinkType tinyint(4) Enum:PatientLinkType The type of link.
Undefined: 0
Merge: 1 - The two patients have been merged into each other.
Clone: 2 - A clone has been made of the From patient. PatNumFrom is the original or master and PatNumTo is the clone.
PaySimple: 3 - The PatNumFrom column will hold the ID for PaySimple. This should not be used in OpenDental to get a patient.
4 DateTimeLink datetime The time the link was created.

patientnote
Essentially more columns in the patient table. They are stored here because these fields can contain a lot of information, and we want to try to keep the size of the patient table a bit smaller.
Order Name Type Summary
0 PatNum bigint(20) FK to patient.PatNum. Also the primary key for this table. Always one to one relationship with patient table. A new patient might not have an entry here until needed.
1 FamFinancial text Only one note per family stored with guarantor.
2 ApptPhone text No longer used.
3 Medical text Medical Summary
4 Service text Service notes. Shows in Medical information window and in the Pt Info section of the Chart module.
5 MedicalComp text Complete current Medical History
6 Treatment text Shows in the Chart module normally just below the graphical tooth chart. Also known as Odontogram Notes.
7 ICEName varchar(255) In Case of Emergency Name.
8 ICEPhone varchar(30) In Case of Emergency Phone.
9 OrthoMonthsTreatOverride int(11) -1 by default. Overrides the default number of months for an ortho treatment for this patient. Gets automatically set to the current value found in the pref OrthoDefaultMonthsTreat when the first placement procedure has been completed and this value is -1. This column is an integer instead of a byte because it needs to store -1 so that users can override with the value of 0. When set to -1 the default practice value for the pref OrthoDefaultMonthsTreat is used.
10 DateOrthoPlacementOverride date Overrides the date of the first ortho procedure for this patient to use for ortho case patients. If MinDate, then the date is derived by looking at the first ortho procedure for this patient.
11 SecDateTEntry datetime Timestamp automatically generated and user not allowed to change. The actual date of entry.
12 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed.
13 Consent tinyint(4) Enum:PatConsentFlags None=0,ShareMedicationHistoryErx=1, Indicates if the patient consents for DoseSpot to access their medication history, bitwise.
None: 0 - None
ShareMedicationHistoryErx: 1 - Patient consents for eRx to access their medication history
14 UserNumOrthoLocked bigint(20) FK to userod.UserNum. A real-time flag of which user is currently editing the Orth Chart. Prevents concurrency issues. 0 indicates unlocked. -5 indicates that an instance of OD changed users locally in order to sign an Ortho Chart row. -4 only lasts for 5 seconds and indicates that a user saved the chart and all machines viewing that chart need to refresh -1 indicates another user with the same username took control.
15 Pronoun tinyint(4) Enum: PronounPreferred Patient Pronoun override. None indicates no override.

patientportalinvite
Order Name Type Summary
0 PatientPortalInviteNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum for the corresponding patient.
2 ApptNum bigint(20) FK to appointment.AptNum. Foreign key to the appointment represented by this AutoCommAppt.
3 ClinicNum bigint(20) FK to clinic.ClinicNum for the corresponding appointment.
4 DateTimeEntry datetime Generated by OD. Timestamp when row is created.
5 TSPrior bigint(20) This was the TSPrior used to send this reminder.
6 SendStatus tinyint(4) Indicates status of message.
7 MessageFk bigint(20) FK to smstomobile.SmsToMobileNum AND MessageType=1, FK to emailmessage.EmailMessageNum AND MessageType=2.
8 ResponseDescript text Generated by OD in some cases and HQ in others. Any human readable error message generated by either HQ or EConnector. Used for debugging.
9 MessageType tinyint(4)
10 DateTimeSent datetime DateTime the message was sent.
11 ApptReminderRuleNum bigint(20) FK to apptreminderrule.ApptReminderRuleNum. Allows us to look up the rules to determine how to send this apptcomm out.
12 ApptDateTime datetime The Date and time of the original appointment. We need this in case the appointment was moved and needs another reminder sent out.

patientrace
Each patient may have multiple races. Used to represent a race or an ethnicity for a patient.
Order Name Type Summary
0 PatientRaceNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 Race tinyint(4) Enum:PatRace Deprecated. CdcrecCode should be used exclusively.
NotSet: -1 - The value for all PatientRace entries after the Race column was deprecated.
Aboriginal: 0 - Hidden for EHR.
AfricanAmerican: 1 - CDCREC:2054-5 Race
AmericanIndian: 2 - CDCREC:1002-5 Race
Asian: 3 - CDCREC:2028-9 Race
DeclinedToSpecifyRace: 4 - Our hard-coded option for EHR reporting.
HawaiiOrPacIsland: 5 - CDCREC:2076-8 Race
Hispanic: 6 - CDCREC:2135-2 Ethnicicty. If EHR is turned on, our UI will force this to be supplemental to a base 'race'.
Multiracial: 7 - We had to keep this for backward compatibility. Hidden for EHR because it's explicitly not allowed.
Other: 8 - CDCREC:2131-1 Race.
White: 9 - CDCREC:2106-3 Race
NotHispanic: 10 - CDCREC:2186-5 Ethnicity. We originally used the lack of Hispanic to indicate NonHispanic. Now we are going to explicitly store NonHispanic to make queries for ClinicalQualityMeasures easier.
DeclinedToSpecifyEthnicity: 11 - Our hard-coded option for EHR reporting.
3 CdcrecCode varchar(255) FK to cdcrec.CdcrecCode. Example 2054-5. The value 'Declined to Specify' is stored as ASKU-ETHNICITY for ethnicity and ASKU-RACE as race.

patplan
Each row represents the linking of one insplan to one patient for current coverage. Dropping a plan will delete the entry in this table. Deleting a patplan will delete the actual insplan (if no dependencies).
Order Name Type Summary
0 PatPlanNum bigint(20) Primary key
1 PatNum bigint(20) FK to patient.PatNum. The patient who currently has the insurance. Not the same as the subscriber.
2 Ordinal tinyint Number like 1, 2, 3, etc. Represents primary ins, secondary ins, tertiary ins, etc. 0 is not used. Max 10 is arbitrary.
3 IsPending tinyint For informational purposes only. You have to enter the plan in order to check this box. Not related at all to the InsPending table.
4 Relationship tinyint Enum:Relat Remember that this may need to be changed in the Claim also, if already created.
Self: 0
Spouse: 1
Child: 2
Employee: 3
HandicapDep: 4
SignifOther: 5
InjuredPlaintiff: 6
LifePartner: 7
Dependent: 8
5 PatID varchar(100) An optional patient ID which will override the insplan.SubscriberID on eclaims. For Canada, this holds the Dependent Code, C17 and E17, and in that use it doesn't override subscriber id, but instead supplements it.
6 InsSubNum bigint(20) FK to inssub.InsSubNum. Gives info about the subscriber.
7 OrthoAutoFeeBilledOverride double Only for Ortho practices. The fee that will be charged out by the auto procedureto insurance each period. Overrides insplan.OrthoAutoFeeBilled. -1 to use insplan default. Instantiated to -1 in the program so that it defaults to the insplan default.
8 OrthoAutoNextClaimDate date Only for Ortho practices. The date before which the next automatic ortho procedure/claim cannot be automatically generated. If blank, this patient's ortho treatment has been stopped.
9 SecDateTEntry datetime Timestamp automatically generated and user not allowed to change. The actual date of entry.
10 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.

patrestriction
Currently only used to block scheduling of specific patients.
Order Name Type Summary
0 PatRestrictionNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 PatRestrictType tinyint(4) Enum:PatRestrict
None: 0
ApptSchedule: 1 - Patient cannot be scheduled nor have schedule edited. This PatRestrict should probably be checked every place the group permissions AppointmentCreate, AppointmentMove, and AppointmentEdit are checked.

payconnectresponseweb
This table will never delete records, only upsert. PayConnectResponseWeb rows are records of all payments made from the Patient Portal via either PayConnect's Web Portal, or PayConnect's Merchant Services WebService if using a credit card token as a result of PayConnect's Web Portal.
Order Name Type Summary
0 PayConnectResponseWebNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 PayNum bigint(20) FK to payment.PayNum.
3 AccountToken varchar(255) The account token used to poll the processing status.
4 PaymentToken varchar(255) The payment token used for future payments.
5 ProcessingStatus varchar(255) Enum:PayConnectWebStatus Used to determine if the payment is pending, needs action, or is completed and attached to a payment.
Created: 0.
CreatedError: 1.
Pending: 2.
PendingError: 3.
Expired: 4.
Completed: 5.
Cancelled: 6.
Declined: 7.
Unknown: 8.
UnknownError: 9.
6 DateTimeEntry datetime Timestamp automatically generated and user not allowed to change. The actual datetime of entry.
7 DateTimePending datetime DateTime that the payment went to the pending status.
8 DateTimeCompleted datetime DateTime that the payment went to the completed status and is attached to a payment.
9 DateTimeExpired datetime DateTime that the payment opportunity time expired.
10 DateTimeLastError datetime DateTime of the last time that the payment had an error.
11 LastResponseStr text Raw JSON response (or error) from PayConnect.
12 CCSource tinyint(4) Enum:CreditCardSource .
None: 0 - This is used when the payment is not a Credit Card. If CC, then this means we are storing the actual credit card number. Not recommended.
XServer: 1 - Local installation of X-Charge
XWeb: 2 - Credit card created via X-Web (an eService)
PayConnect: 3 - PayConnect web service (from within OD).
XServerPayConnect: 4 - Credit card has been added through the local installation of X-Charge and the PayConnect web service.
XWebPortalLogin: 5 - Made from the login screen of the Patient Portal.
PaySimple: 6 - PaySimple web service (from within OD).
PaySimpleACH: 7 - PaySimple ACH web service (from within OD).
PayConnectPortal: 8 - PayConnect credit card (made from Patient Portal)
PayConnectPortalLogin: 9 - PayConnect credit card (made from Patient Portal Login screen).
CareCredit: 10 - CareCredit.
EdgeExpressRCM: 11 - Global Payments V1 Cloud (formerly EdgeExpress/GlobalPayments) when calling the RCM program.
EdgeExpressCNP: 12 - Global Payments V1 Card Not Present API (formerly EdgeExpress/GlobalPayments).
API: 13 - Payment taken through Open Dental API.
EdgeExpressPaymentPortal: 14 - Global Payments V1 (formerly EdgeExpress/GlobalPayments) payment taken through the Payment Portal.
EdgeExpressPaymentPortalGuest: 15 - Global Payments V1 (formerly EdgeExpress/GlobalPayments) payment taken through the Payment Portal as a guest.
PayConnectPaymentPortal: 16 - PayConnect payment taken through the Payment Portal.
PayConnectPaymentPortalGuest: 17 - PayConnect payment taken through the Payment Portal as a guest.
PaySimplePaymentPortal: 18 - PaySimple payment taken through the Payment Portal.
PaySimplePaymentPortalGuest: 19 - PaySimple payment taken through the Payment Portal as a guest.
PaySimplePaymentPortalACH: 20 - PaySimple ACH Payment taken through the Payment Portal.
XWebPaymentPortal: 21 - XWeb payment taken through the Payment Portal.
XWebPaymentPortalGuest: 22 - XWeb payment taken through the Payment Portal as a guest.
MeetInTheCloudTerminal: 23 - MeetInTheCloud (UI: Global Payments V2) payment via terminal.
MeetInTheCloudPaymentPortal: 25 - MeetInTheCloud payment taken through the Payment Portal.
MeetInTheCloudPaymentPortalGuest: 26 - MeetInTheCloud payment taken through the Payment Portal as a guest.
13 Amount double The amount of the payment that is attempting to be made.
14 PayNote varchar(255) The note entered when making a payment.
15 IsTokenSaved tinyint(4) Whether or not the credit card token can be saved for future uses.
16 PayToken varchar(255) The payment token used to poll the processing status.
17 ExpDateToken varchar(255) Provides the Expiration Date of the account being accessed. Format is yyMM from XWeb gateway. Will be converted to ExpirationDate.
18 RefNumber varchar(255) The RefNumber associated to this transaction. Will only be set for Completed PayConnectWebStatuses.
19 TransType varchar(255) The Transaction Type associated to this transaction. Will only be set for Completed PayConnectWebStatuses.
20 EmailResponse varchar(255) Email address used for a requested receipt provided by the user when making a payment via the patient portal.
21 LogGuid varchar(36) The GUID used in EserviceLogs related to this response. May be blank.

payment
A patient payment. Always has at least one split.
Order Name Type Summary
0 PayNum bigint(20) Primary key.
1 PayType bigint(20) FK to definition.DefNum. This will be 0 if this is an income transfer to another provider. Examples: Cash, Check, CC, Refund.
2 PayDate date The date that the payment displays on the patient account.
3 PayAmt double Amount of the payment. Must equal the sum of the splits.
4 CheckNum varchar(25) Check number is optional.
5 BankBranch varchar(25) Bank-branch code for checks. Example 19-7076.
6 PayNote text Any admin note. Not for patient to see. UI limits input length to 4000.
7 IsSplit tinyint No longer used. Set to true to indicate that a payment has more than one paysplit.
8 PatNum bigint(20) FK to patient.PatNum. The patient where the payment entry will show. But only the splits affect account balances. This has a value even if the 'payment' is actually an income transfer to another provider.
9 ClinicNum bigint(20) FK to clinic.ClinicNum. Can be 0 to indicate no clinic (unassigned). Copied from patient.ClinicNum when creating payment, but user can override. Not used in provider income transfers. Cannot be used in financial reporting when grouping by clinic, because payments may be split between clinics.
10 DateEntry date The date that this payment was entered. Not user editable.
11 DepositNum bigint(20) FK to deposit.DepositNum. 0 if not attached to any deposits. Cash does not usually get attached to a deposit; only checks.
12 Receipt text Text of printed receipt if the payment was done electronically. Allows reprinting if needed.
13 IsRecurringCC tinyint(4) True if this was an automatically added recurring CC charge rather then one entered by the user. This was set to true for all historical entries before version 11.1, but will be accurate after that.
14 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
15 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
16 PaymentSource tinyint(4) Enum:CreditCardSource Indicates the origin of the payment if the payment came from a credit card or from an external API. Will be 'None' if this payment did not use a credit card or API
None: 0 - This is used when the payment is not a Credit Card. If CC, then this means we are storing the actual credit card number. Not recommended.
XServer: 1 - Local installation of X-Charge
XWeb: 2 - Credit card created via X-Web (an eService)
PayConnect: 3 - PayConnect web service (from within OD).
XServerPayConnect: 4 - Credit card has been added through the local installation of X-Charge and the PayConnect web service.
XWebPortalLogin: 5 - Made from the login screen of the Patient Portal.
PaySimple: 6 - PaySimple web service (from within OD).
PaySimpleACH: 7 - PaySimple ACH web service (from within OD).
PayConnectPortal: 8 - PayConnect credit card (made from Patient Portal)
PayConnectPortalLogin: 9 - PayConnect credit card (made from Patient Portal Login screen).
CareCredit: 10 - CareCredit.
EdgeExpressRCM: 11 - Global Payments V1 Cloud (formerly EdgeExpress/GlobalPayments) when calling the RCM program.
EdgeExpressCNP: 12 - Global Payments V1 Card Not Present API (formerly EdgeExpress/GlobalPayments).
API: 13 - Payment taken through Open Dental API.
EdgeExpressPaymentPortal: 14 - Global Payments V1 (formerly EdgeExpress/GlobalPayments) payment taken through the Payment Portal.
EdgeExpressPaymentPortalGuest: 15 - Global Payments V1 (formerly EdgeExpress/GlobalPayments) payment taken through the Payment Portal as a guest.
PayConnectPaymentPortal: 16 - PayConnect payment taken through the Payment Portal.
PayConnectPaymentPortalGuest: 17 - PayConnect payment taken through the Payment Portal as a guest.
PaySimplePaymentPortal: 18 - PaySimple payment taken through the Payment Portal.
PaySimplePaymentPortalGuest: 19 - PaySimple payment taken through the Payment Portal as a guest.
PaySimplePaymentPortalACH: 20 - PaySimple ACH Payment taken through the Payment Portal.
XWebPaymentPortal: 21 - XWeb payment taken through the Payment Portal.
XWebPaymentPortalGuest: 22 - XWeb payment taken through the Payment Portal as a guest.
MeetInTheCloudTerminal: 23 - MeetInTheCloud (UI: Global Payments V2) payment via terminal.
MeetInTheCloudPaymentPortal: 25 - MeetInTheCloud payment taken through the Payment Portal.
MeetInTheCloudPaymentPortalGuest: 26 - MeetInTheCloud payment taken through the Payment Portal as a guest.
17 ProcessStatus tinyint(4) Enum:ProcessStat Flags whether a payment came from online and needs to be processed.
OfficeProcessed: 0 - Payment made within the OD program.
OnlineProcessed: 1 - Payment made from the Patient Portal and has been processed within OD.
OnlinePending: 2 - Payment made from the Patient Portal and needs to be processed within OD.
18 RecurringChargeDate date The date of the recurring charge that this payment applies to.
19 ExternalId varchar(255) External Id
20 PaymentStatus tinyint(4) Enum:PaymentStatus
None: 0 - None
PaySimpleAchPosted: 1 - PaySimpleAchPosted
PaySimpleAchSettled: 2 - PaySimpleAchSettled
PaySimpleAchFailed: 3 - PaySimpleAchFailed
21 IsCcCompleted tinyint(4) A credit card transaction has been completed. This disables the CC buttons at the top of payment edit window to prevent duplicates.
22 MerchantFee double Stores any additional fees charged to the customer during a transaction. For display and reporting purposes.

payortype
Used to identify the source of payment for a given patient at a given point in time. As insurance is added and removed, rows should be either automatically inserted into this table, or the user should be prompted to specify what the new payor type is. The DateStart of one payor type is interpreted as the end date of the previous payor type. Example: Patient with no insurance may have payortype.SopCode=81 ("SelfPay"). Patient then adds Medicaid insurance and gets a second new PayorType entry with SopCode=2 (Medicaid).
Order Name Type Summary
0 PayorTypeNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 DateStart date Date of the beginning of new payor type. End date is the DateStart of the next payor type entry.
3 SopCode varchar(255) FK to sop.SopCode. Examples: 121, 3115, etc.
4 Note text

payperiod
Used to view employee timecards. Timecard entries are not linked to a pay period. Instead, payperiods are set up, and the user can only view specific pay periods. So it feels like they are linked, but it's date based.
Order Name Type Summary
0 PayPeriodNum bigint(20) Primary key.
1 DateStart date The first day of the payperiod
2 DateStop date The last day of the payperiod. Inclusive, ignoring time of day.
3 DatePaycheck date The date that paychecks will be dated. A few days after the dateStop. Optional.

payplan
Each row represents one signed agreement to make payments.
Order Name Type Summary
0 PayPlanNum bigint(20) Primary key
1 PatNum bigint(20) FK to patient.PatNum. The patient who had the treatment done.
2 Guarantor bigint(20) FK to patient.PatNum. The person responsible for the payments. Does not need to be in the same family as the patient. Not necessarily the same as the guarantor on the PayPlanCharge.
3 PayPlanDate date Date that the payment plan will display in the account.
4 APR double Annual percentage rate. eg 18. This does not take into consideration any late payments, but only the percentage used to calculate the amortization schedule.
5 Note text Generally used to archive the terms when the amortization schedule is created.
6 PlanNum bigint(20) FK to insplan.PlanNum. Will be 0 if standard payment plan. But if this is being used to track expected insurance payments, then this will be the foreign key to insplan.PlanNum, and Guarantor will be 0.
7 CompletedAmt double The amount of the treatment that has already been completed. This should match the sum of the principal amounts of the attached procedures for Dynamic Payment Plans, unless treatment planned procedures are attached. In that case, those treatment planned procedures may not contribute to the completed amt depending on the DynamicPayPlanTPOptions enum below. For Old pay plans, this is the total principal of the charges. It never changes, even if it has a paysplit attached that pays it off.
8 InsSubNum bigint(20) FK to inssub.InsSubNum. Will be 0 if standard payment plan. But if this is being used to track expected insurance payments, then this will be the foreign key to inssub.InsSubNum, and Guarantor will be 0.
9 PaySchedule tinyint(4) Enum:PaymentSchedule How often payments are scheduled to be made. This was used to make charges for amortization schedules of patient payment plans before dynamic payment plans were created. It is conceptually the same as ChargeFrequency and provides the same options. This is still set in various places, but only ChargeFrequency is used in algorithms for creating charges. This is now only used for insurance and old patient payment plans.
Monthly: 0 - Pay 1 time every month.
MonthlyDayOfWeek: 1 - Pay monthly, same week and day (e.g. 3rd Friday)
Weekly: 2 - Pay every week per month.
BiWeekly: 3 - Pay every other week per times per month.
Quarterly: 4 - Pay 4 times per year.
10 NumberOfPayments int(11) The number of payments that will be made to complete the payment plan.
11 PayAmt double Payment amount due per payment plan charge.
12 DownPayment double The amount paid toward the payment plan when it was first opened.
13 IsClosed tinyint(4) True if this payment plan is closed. Closed should not be edited.
14 Signature text The encrypted and bound signature in base64 format. The signature is bound to the concatenation of the Total Amount,APR,Number of Payments,Payment Amount
15 SigIsTopaz tinyint(4) True if the signature is in Topaz format rather than OD format.
16 PlanCategory bigint(20) FK to definition.DefNum
17 IsDynamic tinyint(4) True if this payment plan is a dynamic payment plan, false if it is static.
18 ChargeFrequency tinyint(4) Enum:PayPlanFrequency How often charges are created for the payment plan. This column was added when dynamic payment plans were created. Why this was added is uncertain because it is conceptually the same as PaySchedule and provides the same options. PaySchedule is still set in various places, but only ChargeFrequency is used in algorithms for creating charges. This is only used for dynamic payment plans.
Weekly: 0 - Weekly
EveryOtherWeek: 1 - Every Other Week
OrdinalWeekday: 2 - Monthly, same week and day (e.g. 3rd Friday)
Monthly: 3 - Monthly
Quarterly: 4 - Quarterly
19 DatePayPlanStart date The date of the first payment plan charge. Does not include downpayment.
20 IsLocked tinyint(4) True if the payment plan is locked. This is "Locked", not just disabling the terms. Locked payment plans cannot add production or modify terms. The checkbox 'Locked' can't be unchecked unless the user has the PayPlanUnlock permission. If the preference PayPlanRequireLockForAPR is enabled, 'Locked' must be checked before saving a plan with APR.
21 DateInterestStart date The date on which the pay plan can begin posting interest charges.
22 DynamicPayPlanTPOption tinyint(4) Enum:DynamicPayPlanTPOptions Indicates the selected mode for how treatment planned procedures are handled by a dynamic payment plan.
None: 0
AwaitComplete: 1
TreatAsComplete: 2
23 MobileAppDeviceNum bigint(20) FK to mobileappdevice.MobileAppDeviceNum. The mobile app device that the PayPlan is currently on.
24 SecurityHash varchar(255) Holds the salted hash of the following paysplit fields: Guarantor, PayAmt, IsClosed, IsLocked.
25 SheetDefNum bigint(20) FK to sheetdef.SheetDefNum. This is use when printing. Can only be payment plan type sheet. If 0, uses hard coded logic.

payplancharge
One of the dated charges attached to a payment plan. This has nothing to do with payments, but rather just causes the amount due to increase on the date of the charge. The amount of the charge is the sum of the principal and the interest.
Order Name Type Summary
0 PayPlanChargeNum bigint(20) Primary key.
1 PayPlanNum bigint(20) FK to payplan.PayPlanNum.
2 Guarantor bigint(20) FK to patient.PatNum. The guarantor account that each charge will affect. Does not have to match the guarantor of the payment plan. This column doesn't even have to point to a family guarantor at all because that has a different meaning than a PP guarantor. E.g. Credits and Closeout debits will be linked to the patient, not guarantor.
3 PatNum bigint(20) FK to patient.PatNum. The patient account that the principal gets removed from.
4 ChargeDate date The date that the charge will show on the patient account. Any charge with a future date will not show on the account yet and will not affect the balance.
5 Principal double For Debits, this is the principal charge amount. For Credits (version 2 only), then this is the credit amount.
6 Interest double For Debits, this is the interest portion of this payment. Always 0 for Credits.
7 Note text Any note about this particular payment plan charge
8 ProvNum bigint(20) FK to provider.ProvNum. In old PPs, this was required to be the same for all payplancharges. In DPPs, it can be different for each charge. This must match the object that FKey is pointing to, whether proc, adj, or orthocase. When a payment is applied, it's done with paysplit.PayPlanChargeNum. Those paysplit ProvNums also need to match. Old payment plans didn't need to have production attched, which is why ProvNums previously had to be the same.
9 ClinicNum bigint(20) FK to clinic.ClinicNum. Since there is no ClincNum field at the payplan level, the clinic must be the same for all payplancharges. It's initially assigned using the patient clinic. Payments applied should be to this clinic, although the current user interface does not help with this.
10 ChargeType tinyint(4) Enum:PayPlanChargeType The charge type of the payment plan. 0 - ChargeDue, 1 - Production. Only relevant for those on Payment Plan Version 2, not Dynamic Payment Plans.
Debit: 0
Credit: 1 - The production can be either Procedure, Adjust, or Ortho. Only used for PPv2, not DPPs.
11 ProcNum bigint(20) FK to procedurelog.ProcNum. The procedure that this payplancharge is attached to. Only applies to credits. Since DPPs dont' use credits, this column is not used for DPPs. Always 0 for ChargeDue. Can be 0 for production not attached to a procedure.
12 SecDateTEntry datetime DateTime payplancharge was added to the payplan. Not editable by user.
13 SecDateTEdit timestamp DateTime payplancharge was edited. Not editable by user.
14 StatementNum bigint(20) FK to statement.StatementNum. Only used when the statement is an invoice. When attached to an invoice, the pay plan charge is linked directly through this field rather than through StmtLinks.
15 FKey bigint(20) Only present for dynamic payment plans. Contains FKey of the link type. ProcNum, AdjNum, or OrthoCaseNum. Since one ChargeDue can be split to multiple procedures, multiple rows are created in that case. In UI, these would be grouped by due date unless user checked ungroup box. FK to adjustment.AdjNum AND LinkType=1, FK to procedurelog.ProcNum AND LinkType=2, FK to orthocase.OrthoCaseNum AND LinkType=3.
16 LinkType tinyint(4) Enum:PayPlanLinkType Only present for dynamic payment plans.
None: 0 - None. Should only be this when charges/credits are for regular static payment plans.
Adjustment: 1 - Adjustment. For this type, FKey is adjustment.AdjNum.
Procedure: 2 - Procedure. For this type, FKey is procedurelog.ProcNum.
OrthoCase: 3 - OrthoCase. For this type, FKey is orthocase.OrthoCaseNum.
17 IsOffset tinyint(4) Set to true if this charge is created to offset an overcharge. Dynamic payment plans can get into this rare scenario where a charge has been inserted into the database for too much value. There is a 'fix' that users can apply from within the dynamic payment plan overcharge report which will create offsetting negative charges. The Income Transfer logic needs to know that this is an overcharge in order to remove value from corresponding charge that is linked to the same production entry (proc, adj, etc).
18 IsDownPayment tinyint(4) Set to true if this charge is a down payment. There can be multiple charges marked as down payment on one pay plan because of how charges get split because they get attached to production.

payplanlink
Each row represents Production for a Procedure, Adjustment, or OrthoCase on a (Dynamic) Payment Plan. The sum of these is the total of the payment plan.
Order Name Type Summary
0 PayPlanLinkNum bigint(20) Primary key
1 PayPlanNum bigint(20) FK to payplan.PayPlanNum
2 LinkType tinyint(4) Enum:PayPlanLinkType The object type being linked to be credited.
None: 0 - None. Should only be this when charges/credits are for regular static payment plans.
Adjustment: 1 - Adjustment. For this type, FKey is adjustment.AdjNum.
Procedure: 2 - Procedure. For this type, FKey is procedurelog.ProcNum.
OrthoCase: 3 - OrthoCase. For this type, FKey is orthocase.OrthoCaseNum.
3 FKey bigint(20) FK to adjustment.AdjNum AND LinkType=1, FK to procedurelog.ProcNum AND LinkType=2, FK to orthocase.OrthoCaseNum AND LinkType=3.
4 AmountOverride double Optional override if full amount of object is not desired.
5 SecDateTEntry datetime DateTime. Date the link was created. If pref.PayPlanItemDateShowProc is false, then this is also the date that this entry shows in the main account module.

payplantemplate
A template of payplan terms that can be copied to a payment plan. Only used for dynamic payment plans, not patient payment plans.
Order Name Type Summary
0 PayPlanTemplateNum bigint(20) Primary key
1 PayPlanTemplateName varchar(255) The name of the Pay Plan Template.
2 ClinicNum bigint(20) FK to clinic.ClinicNum. Can be 0.
3 APR double Annual percentage rate. eg 18.
4 InterestDelay int(11) The number of payments before interest is applied.
5 PayAmt double The total payment amount due for each period.
6 NumberOfPayments int(11) The total number of periods for the payment plan. If the Pay Plan is dynamic and NumberOfPayments is not 0 then this is only used to calculate the PayAmt. After the PayAmt is calculated, NumberOfPayments is set to 0.
7 ChargeFrequency tinyint(4) Enum:PayPlanFrequency How often charges are created for the payment plan. Monthly, weekly, etc. Only for Dynamic Payment Plans.
Weekly: 0 - Weekly
EveryOtherWeek: 1 - Every Other Week
OrdinalWeekday: 2 - Monthly, same week and day (e.g. 3rd Friday)
Monthly: 3 - Monthly
Quarterly: 4 - Quarterly
8 DownPayment double The amount paid toward the payment plan when it was first opened.
9 DynamicPayPlanTPOption tinyint(4) Enum:DynamicPayPlanTPOptions Indicates the selected mode for how treatment planned procedures are handled by a dynamic payment plan. None, AwaitComplete, or TreatAsComplete.
None: 0
AwaitComplete: 1
TreatAsComplete: 2
10 Note varchar(255) A detailed note of the terms shows for future reference. Any changes made to the terms will be added to the note. Other notes can be added as needed.
11 IsHidden tinyint(4) Templates can not be deleted, but can be hidden if not needed any more.
12 SheetDefNum bigint(20) FK to sheetdef.SheetDefNum. This is use when printing. Can only be payment plan type sheet. If 0, uses hard coded logic.

paysplit
Always attached to a payment. Always affects exactly one patient account and one provider.
Order Name Type Summary
0 SplitNum bigint(20) Primary key.
1 SplitAmt double Amount of split.
2 PatNum bigint(20) FK to patient.PatNum. Can be the PatNum of the guarantor if this is a split for a payment plan and the guarantor is in another family.
3 ProcDate date DEPRECATED. No longer used. In older versions (before 7.0), this was the date that showed on the account. Frequently the same as the date of the payment, but not necessarily. Not when the payment was made.
4 PayNum bigint(20) FK to payment.PayNum. Every paysplit must be linked to a payment.
5 IsDiscount tinyint No longer used.
6 DiscountType tinyint No longer used
7 ProvNum bigint(20) FK to provider.ProvNum.
8 PayPlanNum bigint(20) FK to payplan.PayPlanNum. 0 if not attached to a payplan.
9 DatePay date Date always in perfect synch with Payment date.
10 ProcNum bigint(20) FK to procedurelog.ProcNum. 0 if not attached to a procedure.
11 DateEntry date Date this paysplit was created. User not allowed to edit.
12 UnearnedType bigint(20) FK to definition.DefNum. Usually 0 unless this is an Unearned / Prepayment split. If there is no procedure attached to the paysplit, defaults to the type set in Pref PrepaymentUnearnedType. In the paysplit UI, 0=None. When this is set, it defaults to the first one in the list of defs which is typically Prepayment.
13 ClinicNum bigint(20) FK to clinic.ClinicNum. Can be 0. Need not match the ClinicNum of the Payment, because a payment can be split between clinics.
14 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
15 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
16 FSplitNum bigint(20) No longer used.
17 AdjNum bigint(20) FK to adjustment.AdjNum. Can be 0. Indicates that this paysplit is meant to counteract an Adjustment.
18 PayPlanChargeNum bigint(20) FK to payplancharge.PayPlanChargeNum. Can be 0. Indicates that this paysplit is meant to counteract a PayPlanCharge.
19 PayPlanDebitType tinyint(4) Enum:PayPlanDebitTypes Explicitly specifies what this paysplit should be applied towards in regards to principal or interest.
Unknown: 0 - Legacy splits associated to payment plans did not specify what SplitAmt was applied towards and use this status.
Principal: 1 - Flags a split as a principal only payment.
Interest: 2 - Flags a split as an interest only payment.
20 SecurityHash varchar(255) Holds the salted hash of the following paysplit fields: PatNum, SplitAmt, DateEntry.

paysuitepayment
Received from various instream PaySuite API calls. Primarily used to post or reconcile insurance payments in Open Dental.
Order Name Type Summary
0 PaySuitePaymentNum bigint(20) Primary key.
1 PaymentId varchar(255) PaySuite's payment identifier.
2 ProviderId varchar(255) CDA provider number of provider the payment was issued to. Provider.NationalProvID in Open Dental.
3 PaymentMethod varchar(255) "C" if payment is a cheque. "D" if payment is Direct Deposit.
4 PaymentReference varchar(255) Cheque number if PaymentMethod is "C". Direct deposit reference number if PaymentMethod is "D".
5 PaymentAmount double The total amount of the payment.
6 PaymentDate date Date the payment was made. Only specific to the date, not the time.
7 PaymentStatus varchar(255) PaySuite's payment status. "I"-Issued (Check/Direct Deposit not cashed or deposited yet), "P"-Paid (Check/Direct Deposit has been cashed or deposited), R-"Reversed", UT-Under Threshold (payment is too small for Direct Pay and will be rolled into a future payment).
8 ReversalReasonCode varchar(255) Reason the payment was reversed. "L"-Lost,"STO"-Stolen,"STA"-Stale,"MB"-Mailed back to instream,"PI"-Reversed by Payor,"O"-Other, blank if PaymentStatus is not "R".
9 AssociatedPaymentId varchar(255) If PaymentStatus is "R" or "UT", this is the PaymentId of the subsequent payment that this payment was rolled into. Will be blank for other statuses.
10 PaySuitePaymentDetailNum bigint(20) FK to paysuitepaymentdetail.PaySuitePaymentDetailNum.
11 HasUnresolvedClaimPayment tinyint(4) True for PaySuitePayments with PaymentStatus "P" when the linked ClaimPayment has an incorrect amount, the linked ClaimPayment's ClaimProcs have an incorrect InsPayAmt sum, or there are missing or incorrect ClaimProcs linked to the ClaimPayment. True for PaySuitePayment with a PaymentStatus of "R" (Reversed) if a ClaimPayment is still linked to it.
12 ReconciliationStatus tinyint(4) Enum:EnumReconciliationStatus (0) DoNotProcess by default. Determines which stage of PaySuite reconciliation processing this PaySuitePayment is in.
DoNotProcess: 0 - Set for PaySuitePayments we don't need to reconcile, those with a PaymentStatus of "I" (Issued), "UT" (UnderThreshold), or ones that enter the database as "R" (Reversed).
ReadyToProcess: 1 - The OpenDentalService will attempt to reconcile these PaySuitePayments. We set this for PaySuitePayments that get inserted or updated with a PaymentStatus of "P" (Paid) and those that change from "P" to "R" (Reversed). A PaySuitePayment will also be set to this status from the UnresolvedClaims status after the user removes duplicate claims matches.
MultiClaimMatches: 2 - The OpenDentalService sets this status during reconciliation processing when a claim has multiple matches in the database.
DiscrepanciesFound: 3 - The OpenDentalService sets this status during reconciliation processing when discrepancies are found between a claim from the database and PaySuite's claim or eob.
NoDiscrepanciesFound: 4 - Set when a PaySuitePayment matches all claims and no discrepancies are detected.
13 ClaimPaymentNum bigint(20) FK to claimpayment.ClaimPaymentNum. non-claim-specific PaySuite adjustments and fees will be added to the linked ClaimPayment without ClaimProcs to represent them.

paysuitepaymentdetail
Additional details for a PaySuitePayment stored as a JSON string. The reason we have a separate table is because the json can be quite large and we don't usually need it.
Order Name Type Summary
0 PaySuitePaymentDetailNum bigint(20) Primary key.
1 DetailsJson mediumtext JSON string containing additional details for a PaySuitePayment. Can be deserialized to class PaySuitePaymentDetails. Includes arrays for PaymentIds of payments rolled into this one, claims paid by this payment, adjustments to the payment, credits and debits issued by the payor during the payment period, and PaySuite fees (an empty array unless the provider's subscription method deducts fees from insurance payments).

payterminal
Stores information about credit card terminals used for taking payments. Only used for PayConnect.
Order Name Type Summary
0 PayTerminalNum bigint(20) Primary key.
1 Name varchar(255) User defined name for the payterminal. E.g. Front Desk.
2 ClinicNum bigint(20) FK to clinic.ClinicNum.
3 TerminalID varchar(255) Serial number of physical device, typically provided by the card processor.
4 CCIntegration varchar(50) Credit Card integration associated with the pay terminal (e.g. PayConnect)

pearlrequest
Stores the necessary information for polling Pearl’s API to check if AI annotations have been generated for an image sent from the Imaging module. It's also used to prevent duplicate image submissions to the API, which would return an error response. To poll Pearl for an image, all that's required is a request_id and an organization_id. Organization_id is stored in the Pearl program link.
Order Name Type Summary
0 PearlRequestNum bigint(20) Primary key.
1 RequestId varchar(255) Request ID given to Pearl to uniquely identify this request. Generated as a GUID before uploading an image to Pearl.
2 DocNum bigint(20) FK to document.DocNum. Links this request to the image that was sent. This is sufficient for mounts because mount images are sent individually to Pearl.
3 RequestStatus tinyint(4) Enum:EnumPearlStatus Keeps track of the request's status. Can be Polling, Received, or Error.
Polling: 0 - An individual machine is actively polling Pearl.
Received: 1 - The image was successfully processed and AI annotations were returned from Pearl.
Error: 2 - An error occurred on Pearl’s side. Only set for errors that prevent this request from ever being fulfilled, such as the image being rejected.
TimedOut: 3 - Pearl did not give results within the timeout period of 10 minutes. Polling for this request can be retried.
Uploading: 4 - The image is being uploaded to Pearl.
ErrorUploading: 5 - An error occurred while uploading. The image should be reuploaded..
ErrorProcessing: 6 - An error occurred while processing. The image should not be reuploaded, but we can restart polling.
NoResults: 7 - Pearl returned no results for this image. The image show not be reuploaded.
4 DateTSent date The time the image was originally sent to Pearl.
5 DateTChecked date The most recent time an API call was made to Pearl to check the status of this request.

perioexam
One perio exam for one patient on one date. Has lots of periomeasures attached to it.
Order Name Type Summary
0 PerioExamNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 ExamDate date .
3 ProvNum bigint(20) FK to provider.ProvNum.
4 DateTMeasureEdit datetime Date and time PerioExam was created or modified, including the associated PerioMeasure rows.
5 Note text Note box for exam based notes.

periomeasure
One row can hold up to six measurements for one tooth, all of the same type. Always attached to a perioexam.
Order Name Type Summary
0 PerioMeasureNum bigint(20) Primary key.
1 PerioExamNum bigint(20) FK to perioexam.PerioExamNum.
2 SequenceType tinyint Enum:PerioSequenceType eg probing, mobility, recession, etc.
Mobility: 0
Furcation: 1
GingMargin: 2-AKA recession.
MGJ: 3-MucoGingivalJunction- the division between attached and unattached mucosa.
Probing: 4
SkipTooth: 5-For the skiptooth type, set surf to none, and ToothValue to 1.
BleedSupPlaqCalc: 6. Sum of flags for bleeding(1), suppuration(2), plaque(4), and calculus(8).
CAL: 7. But this type is never saved to the db. It is always calculated on the fly.
AttGing: 8. Attached Gingiva. This type is auto calculated and is never saved to the db.
3 IntTooth smallint(6) Valid values are 1-32. Every measurement must be associated with a tooth.
4 ToothValue smallint(6) This is used when the measurement does not apply to a surface(mobility and skiptooth). Valid values for all surfaces are 0 through 19, or -1 to represent no measurement taken.
5 MBvalue smallint(6) -1 represents no measurement and are very common. Values of 100+ represent positive values for Gingival Margins. Example: +5. Non-probing numbers show through from previous exams as slightly greyed out. The value from the most recent exam will show through. It will ignore any -1's on recent exams when deciding what should show through.
6 Bvalue smallint(6) .
7 DBvalue smallint(6) .
8 MLvalue smallint(6) .
9 Lvalue smallint(6) .
10 DLvalue smallint(6) .
11 SecDateTEntry datetime Timestamp automatically generated and user not allowed to change. The actual date of entry.
12 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.

pharmacy
An individual pharmacy store.
Order Name Type Summary
0 PharmacyNum bigint(20) Primary key.
1 PharmID varchar(255) NCPDPID assigned by NCPDP. Not used yet.
2 StoreName varchar(255) For now, it can just be a common description. Later, it might have to be an official designation.
3 Phone varchar(255) Includes all punctuation.
4 Fax varchar(255) Includes all punctuation.
5 Address varchar(255) .
6 Address2 varchar(255) Optional.
7 City varchar(255) .
8 State varchar(255) Two char, uppercase.
9 Zip varchar(255) .
10 Note text A freeform note for any info that is needed about the pharmacy, such as hours.
11 DateTStamp timestamp The last date and time this row was altered. Not user editable.

pharmclinic
Links a pharmacy store to a clinic. A pharmacy can be linked to multiple clinics, including ClinicNum 0 (Unassigned). When "All" is selected in a ComboClinic, links are created for every clinic the user has access to, which includes ClinicNum 0 if the user is not restricted to any clinics. PharmClinic records are not created if clinics are disabled when creating new Pharmacies.
Order Name Type Summary
0 PharmClinicNum bigint(20) Primary key.
1 PharmacyNum bigint(20) FK to pharmacy.PharmacyNum.
2 ClinicNum bigint(20) FK to clinic.ClinicNum. ClinicNum 0 represents Unassigned/HQ.

phonenumber
Used to store phone numbers for patients.
Order Name Type Summary
0 PhoneNumberNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 PhoneNumberVal varchar(255) The actual phone number for the patient. Includes any punctuation. No leading 1 or plus, so almost always 10 digits.
3 PhoneNumberDigits varchar(30) The phone number for the patient with all non-digit chars and any leading 1's or 0's removed.
4 PhoneType tinyint(4) Enum:PhoneType . Used to determine which column in the patient table, if any, this row should be synced with. Rows with 0 - Other are not synced with patient table columns. The other values sync with their corresponding column in the patient table 1 - HmPhone, 2 - WkPhone, and 3 - WirelessPhone.
Other: 0 - Other
HmPhone: 1 - HmPhone. Row is synced with the patient.HmPhone column.
WkPhone: 2 - WkPhone. Row is synced with the patient.WkPhone column.
WirelessPhone: 3 - WirelessPhone. Row is synced with the patient.WirelessPhone column.

popup
If an existing popup message gets changed, then an archive first gets created that's a copy of the original. This is so that we can track historical changes. When a new one gets created, all the archived popups will get automatically repointed to the new one. If you "delete" a popup, it actually archives that popup. All the other archives of that popup still point to the newly archived popup, but now there is no popup in that group with the IsArchived flag not set.
Order Name Type Summary
0 PopupNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 Description text The text of the popup.
3 IsDisabled tinyint(1) Deprecated. Use DateTimeDisabled instead.
4 PopupLevel tinyint(4) Enum:EnumPopupLevel 0=Patient, 1=Family, 2=Superfamily. If Family, then this Popup will apply to the entire family. If Superfamily, then this popup will apply to the entire superfamily.
Patient: 0=Patient
Family: 1=Family
SuperFamily: 2=SuperFamily
Automation: 3=Automation. Not in db. This is only used in FormPopupsForFam as a dummy status for temporary display objects that will not be in db.
5 UserNum bigint(20) FK to userod.UserNum.
6 DateTimeEntry datetime The server time that this note was entered. Cannot be changed by user. Does not get changed automatically when level or isDisabled gets changed. If note itself changes, then a new popup is created along with a new DateTimeEntry. Current popup's edit date gets set to the previous entry's DateTimeEntry
7 IsArchived tinyint(4) Indicates that this is not the most current popup and that it is an archive. True for any archived or "deleted" popups.
8 PopupNumArchive bigint(20) FK to popup.PopupNum. This will be zero for current popups that show when a patient is selected. Archived popups will have a value which is the FK to its parent Popup. The parent popup could be the most recent popup or another archived popup. Will be zero for current and "deleted" popups.
9 DateTimeDisabled datetime The DateTime at which this popup will be disabled. If this is DateTime.MinValue, then it will never be disabled.

preference
Stores small bits of data for a wide variety of purposes. Any data that's too small to warrant its own table will usually end up here.
Order Name Type Summary
0 PrefName varchar(255) The text 'key' in the key/value pairing.
1 ValueString text The stored value.
2 PrefNum bigint(20) Primary key. Not actually used. All queries are designed to use PrefName.
3 Comments text Documentation on usage and values of each pref. Mostly deprecated now in favor of using XML comments in the code.

printer
One printer selection for one situation for one computer.
Order Name Type Summary
0 PrinterNum bigint(20) Primary key.
1 ComputerNum bigint(20) FK to computer.ComputerNum. This will be changed some day to refer to the computername, because it would make more sense as a key than a cryptic number.
2 PrintSit tinyint Enum:PrintSituation One of about 10 different situations where printing takes place. PrintSituation.Default is the OD default, not the windows default.
Default: 0- Covers any printing situation not listed separately.
Statement: 1
LabelSingle: 2
Claim: 3
TPPerio: 4- TP and perio
Rx: 5
LabelSheet: 6
Postcard: 7
Appointments: 8
RxControlled: 9
Receipt: 10
RxMulti: 11
3 PrinterName varchar(255) The name of the printer as set from the specified computer. Usually, if no printer was selected for a specific or default situation, then there will be no row in the db. But this can also be an empty string. For example, if DisplayPrompt is true, then a row is required in the db even if no specific printer is selected. Empty string or missing row indicates to use windows default or OD default.
4 DisplayPrompt tinyint If true, then user will be prompted for printer. Otherwise, print directly with little user interaction.
5 FileExtension varchar(255) String that holds the file extension type for this printer. No leading period. Example pdf or xps. Only used when IsVirtualPrinter is true.
6 IsVirtualPrinter tinyint(4) Bool that indicates if this printer is a virtual printer (pdf, xps, etc).

procapptcolor
An individual procedure code color range.
Order Name Type Summary
0 ProcApptColorNum bigint(20) Primary key.
1 CodeRange varchar(255) Procedure code range defined by user. Includes commas and dashes, but no spaces. The codes need not be valid since they are ranges.
2 ColorText int(11) Color that shows in appointments
3 ShowPreviousDate tinyint(4) Adds most recent completed date to ProcsColored

procbutton
The 'buttons' to show in the Chart module. They must have items attached in order to do anything.
Order Name Type Summary
0 ProcButtonNum bigint(20) Primary key
1 Description varchar(255) The text to show on the button.
2 ItemOrder smallint Order that they will show in the Chart module.
3 Category bigint(20) FK to definition.DefNum.
4 ButtonImage text If no image, then the clob will be an empty string. In this case, the bitmap will be null when loaded from the database.
5 IsMultiVisit tinyint(4) Only useful for procedure buttons which cause more than one procedure to be charted. Example: Crown (D code) and Delivery (N code). Causes the procedures generated by this procedure button to be grouped using links in the procmultivisit table.

procbuttonitem
Attached to procbuttons. These tell the program what to do when a user clicks on a button. There are two types: proccodes or autocodes.
Order Name Type Summary
0 ProcButtonItemNum bigint(20) Primary key.
1 ProcButtonNum bigint(20) FK to procbutton.ProcButtonNum.
2 OldCode varchar(15) Do not use.
3 AutoCodeNum bigint(20) FK to autocode.AutoCodeNum. 0 if this is a procedure code.
4 CodeNum bigint(20) FK to procedurecode.CodeNum. 0 if this is an autocode.
5 ItemOrder bigint(20) Unusual ItemOrder column. Set implicitly based on the order procedures were added to the procedure button. This should prevent "random" ordered procedures on buttons with multiple procedures.

procbuttonquick
Used to customize quick buttons in the chart module.
Order Name Type Summary
0 ProcButtonQuickNum bigint(20) Primary Key.
1 Description varchar(255) Description used for display.
2 CodeValue varchar(255) FK to procedurecode.ProcCode.
3 Surf varchar(255) Surfaces.
4 YPos int(11) Zero based YPos, row number within panel.
5 ItemOrder int(11) Items within each row are sorted using item order. Smallest item order will be drawn on the left.
6 IsLabel tinyint(4) If true, this "button" will be displayed as a label.

proccodenote
Stores the default note and time increments for one procedure code for one provider. That way, an unlimited number of providers can each have different notes and times. These notes and times override the defaults which are part of the procedurecode table. So, for single provider offices, there will be no change to the current interface.
Order Name Type Summary
0 ProcCodeNoteNum bigint(20) Primary Key.
1 CodeNum bigint(20) FK to procedurecode.CodeNum.
2 ProvNum bigint(20) FK to provider.ProvNum.
3 Note text The note.
4 ProcTime varchar(255) X's and /'s describe Dr's time and assistant's time in the same increments as the user has set.
5 ProcStatus tinyint(4) Enum:ProcStat Indicates which status the procedure has to be set to in order for this note to take affect. Should only ever be 1 (TP) or 2 (C). See procedurelog.ProcStatus for more info.
None: 0 - Not used.
TP: 1- Treatment Plan.
C: 2- Complete.
EC: 3- Existing Current Provider.
EO: 4- Existing Other Provider.
R: 5- Referred Out.
D: 6- Deleted.
Cn: 7- Condition.
TPi: 8- Treatment Plan inactive.

procedurecode
A list setup ahead of time with all the procedure codes used by the office. Every procedurelog entry which is attached to a patient is also linked to this table.
Order Name Type Summary
0 CodeNum bigint(20) Primary Key. This happened in version 4.8.7.
1 ProcCode varchar(15) D-Code. Was Primary key, but now CodeNum is primary key. Can hold dental codes, medical codes, custom codes, etc. Limit 15 char. No commas, hyphens or non-breaking hyphens (\u2011).
2 Descript varchar(255) The main description.
3 AbbrDesc varchar(50) Abbreviated description.
4 ProcTime varchar(24) X's and /'s describe Dr's time and assistant's time in the same increments as the user has set.
5 ProcCat bigint(20) FK to definition.DefNum. The category that this code will be found under in the search window. Has nothing to do with insurance categories.
6 TreatArea tinyint Enum:TreatmentArea
None: 0-goes on claims as blank.
Surf: 1
Tooth: 2
Mouth: 3-goes on claims as 00.
Quad: 4
Sextant: 5
Arch: 6
ToothRange: 7
7 NoBillIns tinyint If true, do not usually bill this procedure to insurance.
8 IsProsth tinyint True if Crown,Bridge,Denture, or RPD. Forces user to enter Initial or Replacement and Date.
9 DefaultNote text The default procedure note to copy when marking complete.
10 IsHygiene tinyint Identifies hygiene procedures so that the correct provider can be selected.
11 GTypeNum smallint No longer used.
12 AlternateCode1 varchar(15) For Medicaid. There may be more later.
13 MedicalCode varchar(15) FK to procedurecode.ProcCode. The actual medical code that is being referenced must be setup first. Anytime a procedure it added, this medical code will also be added to that procedure. The user can change it in procedurelog.
14 IsTaxed tinyint Used by some offices. SalesTaxPercentage has been added to the preference table to store the amount of sales tax to apply as an adjustment attached to a procedurelog entry.
15 PaintType tinyint(4) Enum:ToothPaintingType
None: 0
Extraction: 1
Implant: 2
RCT: 3
PostBU: 4
FillingDark: 5
FillingLight: 6
CrownDark: 7
CrownLight: 8
BridgeDark: 9
BridgeLight: 10
DentureDark: 11
DentureLight: 12
Sealant: 13
Veneer: 14
Text: 15-Text was previously called Watch
RetainedRoot: 16
SpaceMaintainer: 17
TextBelow: 18
16 GraphicColor int(11) If set to anything but 0, then this will override the graphic color for all procedures of this code, regardless of the status.
17 LaymanTerm varchar(255) When creating treatment plans, this description will be used instead of the technical description.
18 IsCanadianLab tinyint Only used in Canada. Set to true if this procedure code is only used as an adjunct to track the lab fee.
19 PreExisting tinyint(1) This is true if this procedure code existed before ADA code distribution changed at version 4.8, false otherwise.
20 BaseUnits int(11) Support for Base Units for a Code (like anesthesia). Should normally be zero.
21 SubstitutionCode varchar(25) FK to procedurecode.ProcCode. Used for posterior composites because insurance substitutes the amalgam code when figuring the coverage.
22 SubstOnlyIf int(11) Enum:SubstitutionCondition Used so that posterior composites only substitute if tooth is molar. Ins usually pays for premolar composites.
Always: 0
Molar: 1
SecondMolar: 2
Never: 3
Posterior: 4
23 DateTStamp timestamp Last datetime that this row was inserted or updated.
24 IsMultiVisit tinyint(4) Deprecated
25 DrugNDC varchar(255) 11 digits or blank, enforced. For 837I
26 RevenueCodeDefault varchar(255) Gets copied to procedure.RevCode. For 837I
27 ProvNumDefault bigint(20) FK to provider.ProvNum. 0 for none. Otherwise, this provider will be used for this code instead of the normal provider.
28 CanadaTimeUnits double For Canadian customers, tracks scaling insurance and periodontal scaling units for patients depending on coverage.
29 IsRadiology tinyint(4) Set to true for radiology procedures. An EHR core measure uses this flag to help determine the denominator for rad orders.
30 DefaultClaimNote text Default note inserted to claim note when claim is created.
31 DefaultTPNote text The default procedure note used when creating a new treatment planned procedure.
32 BypassGlobalLock tinyint(4) Enum:BypassLockStatus Specifies whether a proceduce with this code can be created before the global lock date. The only values that should be used for this field are NeverBypass and BypassIfZero.
NeverBypass: 0 - Never bypass the lock date.
BypassIfZero: 1 - Bypass the lock date if the fee is zero.
BypassAlways: 2 - Always bypass the global lock date.
33 TaxCode varchar(16) Used only by OD HQ for Sales Tax. This is the tax code we send to Avalara API so they can determine how much sales tax to charge for this procedure. The only way to edit this value is through raw queries, which is very dangerous.
34 PaintText varchar(255) The text to draw on the tooth for paint type Text.
35 AreaAlsoToothRange tinyint(4) This is an adjunct to TreatArea. If Quad or Arch, then this allows users to also specify a tooth or tooth range. Required by some insurance.
36 DiagnosticCodes varchar(255) Text to store up to 4 ICD-10 codes. Codes are comma-separated with no whitespace. Used to set the default DiagnosticCode, DiagnosticCode2, DiagnosticCode3, and DiagnosticCode4 fields for new procedures linked to the procedure code. When this field is not empty or null, it will override the ICD9DefaultForNewProcs preference. Example: M26.31,K08.401,K02.51

procedurelog
Database table is procedurelog. A procedure for a patient. Can be treatment planned or completed. Once it's completed, it gets tracked more closely by the security portion of the program. A procedure can NEVER be deleted. Status can just be changed to "deleted". A "Group Note" is a special kind of procedure. Its status is always EC. It always uses DCode "~GRP~". Just like all other procs, it can have exactly one ProcNote. To attach other procs to a Group Note, we use the ProcGroupItem table. It does not have to have any attachd procs, and their ProcStatuses do not matter (except maybe D). The ProvNum of a GroupNote can be set independently of the ProvNums on the attached procs.
Order Name Type Summary
0 ProcNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum
2 AptNum bigint(20) FK to appointment.AptNum. Only allowed to attach proc to one appt(not counting planned appt)
3 OldCode varchar(15) No longer used.
4 ProcDate date Procedure date that will show in the account as the date performed. If just treatment planned, the date can be the date it was tp'd, or the date can be min val if we don't care. This has no time component. Also see ProcTime column.
5 ProcFee double Procedure fee.
6 Surf varchar(10) Surfaces (B/F, V, M, O/I, D, L). V is a special surface that is converted to B or F on all claims. You can also use "UL" etc for quadrant, "2" etc for sextant, "U","L" for arches. Sextants in the United States are: 1 (Upper Right), 2 (Upper Anterior), 3 (Upper Left), 4 (Lower Left), 5 (Lower Anterior), 6 (Lower Right). In Canada, Sextants are 03 through 08 (add 2 to the US sextant and prepend a zero).
7 ToothNum varchar(2) May be blank, otherwise 1-32 or A-T, 1 or 2 char. For supernumerary, add 50 to use 51-82. For supernumerary primary, use AS-TS. For Canadian users, using FDI nomenclature, we use 51-55 as a placeholder for supernumerary teeth, which are tooth numbers 99, 19 (UL quadrant), 29 (UR quadrant), 39 (LR quadrant), and 49 (LL quadrant). Logic for this is handled in the tooth logic class.
8 ToothRange varchar(100) May be blank, otherwise is series of toothnumbers separated by commas. No dashes. Tooth numbers include 1-32 or A-T. Supernumeraries not supported here yet.
9 Priority bigint(20) FK to definition.DefNum. The definition.Category in the definition table is DefCat.TxPriorities (DefCat=20), which contains the text of the priority. Identical to TreatPlanAttach.Priority but is used to prioritize treatment in the Treatment Plan Module for a single procedure.
10 ProcStatus tinyint Enum:ProcStat TP=1,Complete=2,Existing Cur Prov=3,Existing Other Prov=4,Referred=5,Deleted=6,Condition=7.
None: 0 - Not used.
TP: 1- Treatment Plan.
C: 2- Complete.
EC: 3- Existing Current Provider.
EO: 4- Existing Other Provider.
R: 5- Referred Out.
D: 6- Deleted.
Cn: 7- Condition.
TPi: 8- Treatment Plan inactive.
11 ProvNum bigint(20) FK to provider.ProvNum.
12 Dx bigint(20) FK to definition.DefNum, which contains text of the Diagnosis.
13 PlannedAptNum bigint(20) FK to appointment.AptNum. Was called NextAptNum in older versions. Allows this procedure to be attached to a Planned appointment as well as a standard appointment.
14 PlaceService tinyint Enum:PlaceOfService Only used in Public Health. Defaults to Pref.DefaultProcedurePlaceService or Clinic.DefaultPlaceService if using clinics when completing or creating a new proc.
Office: 0. Code 11
PatientsHome: 1. Code 12
InpatHospital: 2. Code 21
OutpatHospital: 3. Code 22
SkilledNursFac: 4. Code 31
CustodialCareFacility: 5. Code 33. In X12, a similar code AdultLivCareFac 35 is mentioned.
OtherLocation: 6. Code 99. We use 11 for office.
MobileUnit: 7. Code 15
School: 8. Code 03
MilitaryTreatFac: 9. Code 26
FederalHealthCenter: 10. Code 50
PublicHealthClinic: 11. Code 71
RuralHealthClinic: 12. Code 72
EmergencyRoomHospital: 13. Code 23
AmbulatorySurgicalCenter: 14. Code 24
TelehealthOutsideHome: 15. Code 02.
TelehealthInHome: 16. Code 10
OutreachSiteOrStreet: 17. Code 27
15 Prosthesis char(1) Single char. Blank=no, I=Initial, R=Replacement.
16 DateOriginalProsth date For a prosthesis Replacement, this is the original date.
17 ClaimNote varchar(80) This note goes out on e-claims. Not visible in Canada.
18 DateEntryC date This is the date this procedure was entered or set complete. If not status C, then the value is ignored. This date is set automatically when Insert, but older data or converted data might not have this value set. It gets updated when set complete. User never allowed to edit. This will be enhanced later.
19 ClinicNum bigint(20) FK to clinic.ClinicNum. 0 if no clinic.
20 MedicalCode varchar(15) FK to procedurecode.ProcCode. Optional.
21 DiagnosticCode varchar(255) Simple text for ICD-9 code. Gets sent with medical claims.
22 IsPrincDiag tinyint Set true if this medical diagnostic code is the principal diagnosis for the visit. If no principal diagnosis is marked for any procedures on a medical e-claim, then it won't be allowed to be sent. If more than one is marked, then it will just use one at random.
23 ProcNumLab bigint(20) FK to procedurelog.ProcNum. Only used in Canada. If not zero, then this proc is a lab fee and this indicates to which actual procedure the lab fee is attached. For ordinary use, they are treated like two separate procedures. It's only for insurance claims that we need to know which lab fee belongs to which procedure. Two lab fees may be attached to one procedure.
24 BillingTypeOne bigint(20) FK to definition.DefNum. Lets some users track charges for certain types of reports. For example, a Medicaid billing type could be assigned to a procedure, flagging it for inclusion in a report mandated by goverment. Would be more useful if it was automated to flow down based on insurance plan type, but that can be added later. Not visible if prefs.EasyHideMedicaid is true.
25 BillingTypeTwo bigint(20) FK to definition.DefNum. Same as BillingTypeOne, but used when there is a secondary billing type to account for.
26 CodeNum bigint(20) FK to procedurecode.CodeNum
27 CodeMod1 char(2) Modifier for certain CPT codes.
28 CodeMod2 char(2) Modifier for certain CPT codes.
29 CodeMod3 char(2) Modifier for certain CPT codes.
30 CodeMod4 char(2) Modifier for certain CPT codes.
31 RevCode varchar(45) NUBC Revenue Code for medical/inst billing. Used on UB04 and 837I.
32 UnitQty int(11) Default is 1. Becomes Service Unit Count on institutional UB claimforms SV205. Becomes Service Unit Count on medical 1500 claimforms SV104. Becomes procedure count on dental claims SV306. Gets multiplied by fee in all accounting calculations.
33 BaseUnits int(11) Base units used for some billing codes. Default is 0. No UI for this field. It is only edited in the ProcedureCode window. The database maint tool changes BaseUnits of all procedures to match that of the procCode. Not sure yet what it's for.
34 StartTime int(11) Start time in military. No longer used, but not deleting just in case someone has critical information stored here.
35 StopTime int(11) Stop time in military. No longer used, but not deleting just in case someone has critical information stored here.
36 DateTP date The date that the procedure was originally treatment planned. Does not change when marked complete.
37 SiteNum bigint(20) FK to site.SiteNum.
38 HideGraphics tinyint(4) Set to true to hide the chart graphics for this procedure. For example, a crown was done, but then tooth extracted.
39 CanadianTypeCodes varchar(20) F16, up to 5 char. One or more of the following: A=Repair of a prior service, B=Temporary placement, C=TMJ, E=Implant, L=Appliance lost, S=Appliance stolen, X=none of the above. Blank is equivalent to X for claim output, but one value will not be automatically converted to the other in this table. That will allow us to track user entry for procedurecode.IsProsth.
40 ProcTime time Used to be part of the ProcDate, but that was causing reporting issues.
41 ProcTimeEnd time Marks the time a procedure was finished.
42 DateTStamp timestamp Automatically updated by MySQL every time a row is added or changed.
43 Prognosis bigint(20) FK to definition.DefNum, which contains text of the Prognosis.
44 DrugUnit tinyint(4) Enum:EnumProcDrugUnit For 837I and UB04
None: 0
InternationalUnit: 1 - F2 on UB04.
Gram: 2 - GR on UB04.
Milligram: 3 - GR on UB04.
Milliliter: 4 - ML on UB04.
Unit: 5 - UN on UB04.
45 DrugQty float Includes fractions. For 837I
46 UnitQtyType tinyint(4) Enum:ProcUnitQtyType For dental, the type is always sent electronically as MultiProcs. For institutional SV204, Days will be sent electronically if chosen, otherwise ServiceUnits will be sent. For medical SV103, MinutesAnesth will be sent electronically if chosen, otherwise ServiceUnits will be sent.
MultProcs: 0-Only allowed on dental, and only option allowed on dental. This is also the default for all procs in our UI. For example, 4 PAs all on one line on the e-claim.
MinutesAnesth: 1-Only allowed on medical SV103.
ServiceUnits: 2-Allowed on medical SV103 and institutional SV204. This is the default for both medical and inst when creating X12 claims, regardless of what is set on the proc.
Days: 3-Only allowed on institutional SV204.
47 StatementNum bigint(20) FK to statement.StatementNum. Only used when the statement in an invoice.
48 IsLocked tinyint(4) If this flag is set, then the proc is locked down tight. No changes at all can be made except to append, sign, or invalidate. Invalidate really just sets the proc to status 'deleted'. An invalidated proc retains its IsLocked status. All locked procs will be status of C or D. Locked group notes will be status of EC or D.
49 BillingNote varchar(255) A note that will show directly in the Account module. Also used for repeating charges. Helps distinguish between charges for the same proccode in the same month.
50 RepeatChargeNum bigint(20) FK to repeatcharge.RepeatChargeNum. Used in repeating charges to determine which procedures belong to each repeating charge. If the repeat charge that this RepeatChargeNum points to is deleted, this column will not be set to 0 so that a record will still exist that this procedure came from a repeat charge.
51 SnomedBodySite varchar(255) Some procedures require a SNOMED code which indicates that site on the body at which this procedure was performed.
52 DiagnosticCode2 varchar(255) Simple text for ICD-9 code. Gets sent with medical claims.
53 DiagnosticCode3 varchar(255) Simple text for ICD-9 code. Gets sent with medical claims.
54 DiagnosticCode4 varchar(255) Simple text for ICD-9 code. Gets sent with medical claims.
55 ProvOrderOverride bigint(20) FK to provider.ProvNum. Ordering provider override. Goes hand-in-hand with OrderingReferralNum. Medical eclaims only. Defaults to zero.
56 Discount double Stores the dollar amount of the discount, not full price. E.g. for a 10% discount, Fee = $160 Discount = $16. This column is used by treatment planned procedures to create an adjustment when set complete. It should not be used as an accurate monetary discount value for completed procedures.
57 IsDateProsthEst tinyint(4) For prosthesis replacement procedures on 5010 eclaims only. If true, indicates that the DateOriginalProsth is an estimated date. Estimated dates are often used when the original prosthesis was performed by another doctor.
58 IcdVersion tinyint The ICD code version for all diagnosis codes on this procedure, including DiagnosisCode, DiagnosisCode2, DiagnosisCode3, and DiagnosisCode4. Value of 9 for ICD-9, 10 for ICD-10, etc. Default value is 9. This value is copied from the DxIcdVersion preference when a procedure is created. The user can also manually change the IcdVersion on individual procedures.
59 IsCpoe tinyint(4) Procedures will be flagged as CPOE (Computerized Provider Order Entry) if this procedure was created by a provider. If a provider views, edits, or has any interaction with this procedure after its creation, it will be flagged as IsCPOE. Also, there will be a helpful window where providers can go to to "approve" non-CPOE procedures and mark them as CPOE to help meet EHR measures. If a staff person is logged in and enters this procedure then this is non-CPOE, so false.
60 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
61 SecDateEntry datetime Timestamp automatically generated and user not allowed to change. The actual date and time of entry.
62 DateComplete date Normally do not use this field. The date the procedure was originally set complete. If status is set complete and then set to something other than complete, this field will be set to DateTime.MinValue if DateComplete is today. If DateComplete is set to a day in the past and the status is changed from complete to something else, the field will not be cleared or updated. Db only field used by one customer and this is how they requested it. PatNum #19191
63 OrderingReferralNum bigint(20) FK to referral.ReferralNum. Goes hand-in-hand with ProvOrderOverride. Medical eclaims only. Defaults to zero. If set, and the ProvOrderOverride is not set, then this referral will go out at the ordering provider on medical e-claims.
64 TaxAmt double Holds the Sales Tax estimate for this procedure. Becomes a finalized amount when the procedure is marked complete.
65 Urgency tinyint(4) Enum:ProcUrgency Used in 1500 Medical Claim Form box 24c. Normal=blank 24c,Emergency='Y' in 24c.
Normal: 0 - Standard procedure urgency. Most procedures will have this ProcUrgency. This will result in the 1500 Medical Claim Form box 24c being blank. (Normal=blank,Emergency='Y')
Emergency: 1 - Emergency ProcUrgency is used to populate the 1500 Medical Claim Form box 24c with a 'Y'. (Emergency='Y',Normal=blank)
66 DiscountPlanAmt double The difference between the billed fee and discount plan fee. Frequently recalculated when procedure is TP.
67 NoBillIns tinyint(4) Preserves a “Do Not Bill Insurance” decision on individual procedures, ClaimProcs inherit this setting to their own NoBillIns preference as they are initially calculated and when they are regenerated due to insurance plan changes. Can only be set true by deliberately checking "Do Not Bill to Ins" on the Procedure Info window. Will automatically be set back to false if any attached ClaimProcs are manually edited to be billed to insurance. This field is not a separate checkbox on proc edit window. It just changes the behavior of the existing checkbox.

procgroupitem
Links Procedures(groupnotes) to Procedures in a 1-n relationship.
Order Name Type Summary
0 ProcGroupItemNum bigint(20) Primary key.
1 ProcNum bigint(20) FK to procedurelog.ProcNum.
2 GroupNum bigint(20) FK to procedurelog.ProcNum.This is the group note that the procedure is in.

procmultivisit
Example: a crown prep and seat is spread over two appointments. A ProcMultiVisit row is created for each procedure. The procedure "In Process" status is a derived status in the UI based on the existence of a link between procedures in this table. In Process is removed once all procs in the group have been set complete. Having a procedure become part of a multi-visit group can affect how benefits are calculated and will set claim statuses so that they reflect that a multi-visit group is in progress.
Order Name Type Summary
0 ProcMultiVisitNum bigint(20) Primary key
1 GroupProcMultiVisitNum bigint(20) FK to procmultivisit.ProcMultiVisitNum. Groups procmultivisit rows. Set to the ProcMultiVisitNum of the first row in the group.
2 ProcNum bigint(20) FK to procedurelog.ProcNum.
3 ProcStatus tinyint(4) Enum:ProcStat A copy of the value from procedurelog.ProcStatus, based on ProcNum. Reduces queries and speeds up logic.
None: 0 - Not used.
TP: 1- Treatment Plan.
C: 2- Complete.
EC: 3- Existing Current Provider.
EO: 4- Existing Other Provider.
R: 5- Referred Out.
D: 6- Deleted.
Cn: 7- Condition.
TPi: 8- Treatment Plan inactive.
4 IsInProcess tinyint(4) A pseudo-status, calculated for the entire group and based on ProcStatuses of all procedures in the group. This will be true for all rows in an In Process group.
5 SecDateTEntry datetime Timestamp automatically generated and user not allowed to change. The actual date of entry.
6 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
7 PatNum bigint(20) FK to patient.PatNum.

procnote
A procedure note for one procedure. User does not have any direct control over this table at all. It's handled automatically. When user "edits" a procedure note, the program actually just adds another note. No note can EVER be edited or deleted.
Order Name Type Summary
0 ProcNoteNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum
2 ProcNum bigint(20) FK to procedurelog.ProcNum
3 EntryDateTime datetime The server time that this note was entered. Essentially a timestamp.
4 UserNum bigint(20) FK to userod.UserNum.
5 Note text The actual note.
6 SigIsTopaz tinyint There are two kinds of signatures. Topaz signatures use hardware manufactured by that company, and the signature is created by their library. OD signatures work exactly the same way, but are only for on-screen signing.
7 Signature text The encrypted signature. A signature starts as a collection of vectors. The Topaz .sig file format is proprietary. The OD signature format looks like this: 45,68;48,70;49,72;0,0;55,88;etc. Tenths are allowed, so it's common to see decimals. It's simply a sequence of points, separated by semicolons. 0,0 represents pen up. Then, a hash is created from the Note, concatenated directly with the userNum. For example, "This is a note3" gets turned into a hash of 2849283940385391 (16 bytes). The hash is used to encrypt the signature data string using symmetric encryption. Therefore, the actual signature cannot be retrieved from the database by ordinary means. Also, the signature info cannot even be retrieved by Open Dental at all unless it supplies the same hash as before, proving that the data has not changed since signed. If OD supplies the correct hash, then it will be able to extract the sequence of vectors which it will then use to display the signature. The OD sigs are not compressed, and the Topaz sigs are. But there is very little difference in their sizes. It would be very rare for a signature to be larger than 1000 bytes. There are also situations where the API or web service inserts a totally different here. The first two points are int.MinVal. Example: -2147483648,-2147483648;-2147483648,-2147483648;47,23;12,35;... The remaining points after the first two are the byte values of individual letters that make up a string that will be displayed inside the signature box.
8 UserNum2 bigint(20) The user that signs a secondary signatureBoxWrapper.
9 Signature2 text A secondary encrypted signature. See "Signature" for more documentation.
10 SigIsTopaz2 tinyint Topaz check for a secondary signature. See SigIsTopaz for more documentation.

proctp
These are copies of procedures that are attached to saved treatment plans. The ProcNumOrig points to the actual procedurelog row.
Order Name Type Summary
0 ProcTPNum bigint(20) Primary key.
1 TreatPlanNum bigint(20) FK to treatplan.TreatPlanNum. The treatment plan to which this proc is attached.
2 PatNum bigint(20) FK to patient.PatNum.
3 ProcNumOrig bigint(20) FK to procedurelog.ProcNum. This procNum is only here to compare and test the existence of the referenced procedure. If present, it will check to see whether the procedure is still status TP.
4 ItemOrder smallint The order of this proc within its tp. This is set when the tp is first created and can't be changed. Drastically simplifies loading the tp.
5 Priority bigint(20) FK to definition.DefNum which contains the text of the priority.
6 ToothNumTP varchar(255) A simple string displaying the tooth number. If international tooth numbers are used, then this will be in international format already. For Canadian users, using FDI nomenclature, we use 51 as a placeholder for supernumerary teeth, which is tooth number 99 according to CDHA standards (2/17/2014). Logic for this is handled in the tooth logic class.
7 Surf varchar(255) Tooth surfaces or area. This is already converted for international use. If arch or quad, then it will have U,LR, etc.
8 ProcCode varchar(15) Not a foreign key. Simply display text. Can be changed by user at any time.
9 Descript varchar(255) Description is originally copied from procedurecode.Descript, but user can change it.
10 FeeAmt double The fee charged to the patient. Never gets automatically updated.
11 PriInsAmt double The amount primary insurance is expected to pay. Never gets automatically updated.
12 SecInsAmt double The amount secondary insurance is expected to pay. Never gets automatically updated.
13 PatAmt double The amount the patient is expected to pay. Never gets automatically updated.
14 Discount double The amount of discount. Used for PPOs and procedure level discounts.
15 Prognosis varchar(255) Text from prognosis definition. Can be changed by user at any time.
16 Dx varchar(255) Text from diagnosis definition. Can be changed by user at any time.
17 ProcAbbr varchar(50) The ProcedureCode abbreviation. Can be changed by user at any time.
18 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
19 SecDateEntry date Timestamp automatically generated and user not allowed to change. The actual date of entry.
20 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
21 FeeAllowed double The amount primary insurance allows. Should be the exact amount in the FormClaimProc allowed amount field. May be either the PPO fee or the out of network allowed fee.
22 TaxAmt double Holds the Sales Tax estimate for this procedure. Used to review history when being reviewed by accounting. In the Treatment Plan, this represents an estimate and a record for pre-payments.
23 ProvNum bigint(20) FK to provider.ProvNum. Holds the ProvNum for this procedure's provider.
24 DateTP date Holds the DateTP for this procedure.
25 ClinicNum bigint(20) FK to clinic.ClinicNum. Holds the ClinicNum for this procedure's clinic.
26 CatPercUCR double The UCR fee for the procedure. Cannot be changed by the user.

program
Each row is a bridge to an outside program, frequently an imaging program. Most of the bridges are hard coded, and simply need to be enabled. But user can also add their own custom bridge.
Order Name Type Summary
0 ProgramNum bigint(20) Primary key.
1 ProgName varchar(100) Unique name for built-in program bridges. Not user-editable. enum ProgramName
2 ProgDesc varchar(100) Description that shows.
3 Enabled tinyint True if enabled.
4 Path text The path of the executable to run or file to open. Text since 255 is the largest VARCHAR supported and some softwares have long paths that can easily exceed 255 characters.
5 CommandLine text Some programs will accept command line arguments. Text since 255 is the largest VARCHAR supported and some softwares have long command line arguments that can easily exceed 255 characters.
6 Note text Notes about this program link. Peculiarities, etc.
7 PluginDllName varchar(255) If this is a Plugin, then this is the filename of the dll, including the extension. The dll must be located in the application directory.
8 ButtonImage text If no image, then will be an empty string. In this case, the bitmap will be null when loaded from the database. Must be a 22 x 22 image, and thus needs (width) x (height) x (depth) = 22 x 22 x 4 = 1936 bytes.
9 FileTemplate text For custom program links only. Stores the template of a file to be generated when launching the program link.
10 FilePath varchar(255) For custom program links only. Stores the path of a file to be generated when launching the program link.
11 IsDisabledByHq tinyint(4) Do not use directly. Call Programs.IsEnabledByHq() instead. Has HQ disabled this program for all customers via WebServiceHq.EnableAdditionalFeatures(). Using 'Disabled' because the web method will only send Programs HQ cares about. Any user defined Programs should not be marked as 'Disabled' by default.
12 CustErr varchar(255) Typically blank. A value is added to this if we have disabled this program at HQ's side and will be updated during HqProgram.Download()

programproperty
Some program links (bridges), have properties that need to be set. The property names are always hard coded. User can change the value. The property is usually retrieved based on its name.
Order Name Type Summary
0 ProgramPropertyNum bigint(20) Primary key.
1 ProgramNum bigint(20) FK to program.ProgramNum
2 PropertyDesc varchar(255) The description or prompt for this property. Blank for workstation overrides of program path. Many bridges use this description as an "internal description". This way it can act like a FK in order to look up this particular property. Users cannot edit.
3 PropertyValue text The value. Could contain FK to other tables.
4 ComputerName varchar(255) The human-readable name of the computer on the network (not the IP address). Only used when overriding program path. Blank for typical Program Properties.
5 ClinicNum bigint(20) FK to clinic.ClinicNum. This is only used by a few bridges. Set to 0 for most bridges.
6 IsMasked tinyint(4) Is true if the program property is sensitive information that would need to be masked in the UI. False by default.
7 IsHighSecurity tinyint(4) Is true if the program property is a high security property. False by default.

promotion
This table represents a grouping of promotionlogs. When sending a waive of emails, this table links those promotion logs/emails together.
Order Name Type Summary
0 PromotionNum bigint(20) Primary key.
1 PromotionName varchar(255) The name of the promotion.
2 DateTimeCreated date The time this promotion was sent out.
3 ClinicNum bigint(20) FK to clinic.ClinicNum The clinic this promotion was sent for.
4 TypePromotion tinyint(4) Enum:PromotionType - The type of promotion this is.
Manual: 0 - Signifies Manually Sent Promotions like from Mass Emails
Birthday: 1 - Signifies Birthday Greetings
Treatment: 2 - Promotional Treatment
Special: 3 - Special Promotions

promotionlog
When a reminder is sent for an appointment a record of that send is stored here. This is used to prevent re-sends of the same reminder.
Order Name Type Summary
0 PromotionLogNum bigint(20) Primary key.
1 PromotionNum bigint(20) FK to promotion.PromotionNum
2 PatNum bigint(20) FK to patient.PatNum for the corresponding patient.
3 MessageFk bigint(20) FK to smstomobile.SmsToMobileNum AND MessageType=1, FK to emailmessage.EmailMessageNum AND MessageType=2.
4 EmailHostingFK bigint(20) A foreign key from the email hosting API that allows us to receive status updates on this specific email.
5 DateTimeSent datetime DateTime the message was sent.
6 PromotionStatus tinyint(4) Enum:PromotionLogStatus
Unknown: 0 - Unknown
Pending: 1 - Promotion has not been sent.
Bounced: 2 - Email has bounced because email does not exist.
Unsubscribed: 3 - User has unsubscribed in the passed and this was rejected.
Complaint: 4 - This email was sent and then marked as spam by the user.
Delivered: 5 - The email sent and delivered successfully.
Failed: 6 - The email failed to send for a different reason than any of the reasons above.
Opened: 7 - The email was opened by the user.
7 ClinicNum bigint(20) FK to clinic.ClinicNum for the corresponding appointment.
8 SendStatus tinyint(4) Indicates status of message.
9 MessageType tinyint(4)
10 DateTimeEntry datetime Generated by OD. Timestamp when row is created.
11 ResponseDescript text Generated by OD in some cases and HQ in others. Any human readable error message generated by either HQ or EConnector. Used for debugging.
12 ApptReminderRuleNum bigint(20) FK to apptreminderrule.ApptReminderRuleNum. Allows us to look up the rules to determine how to send this apptcomm out.

provider
A provider is usually a dentist or a hygienist. But a provider might also be a denturist, a dental student, or a dental hygiene student. A provider might also be a 'dummy', used only for billing purposes or for notes in the Appointments module. There is no limit to the number of providers that can be added.
Order Name Type Summary
0 ProvNum bigint(20) Primary key.
1 Abbr varchar(255) Abbreviation. There was a limit of 5 char before version 5.4. The new limit is 255 char. This will allow more elegant solutions to various problems. Providers will no longer be referred to by FName and LName. Abbr is used as a human readable primary key.
2 ItemOrder smallint Order that provider will show in lists. 0-based.
3 LName varchar(100) Last name.
4 FName varchar(100) First name.
5 MI varchar(100) Middle inital or name.
6 Suffix varchar(100) eg. DMD or DDS.
7 FeeSched bigint(20) FK to feesched.FeeSchedNum.
8 Specialty bigint(20) FK to definition.DefNum.
9 SSN varchar(12) or TIN. No punctuation
10 StateLicense varchar(15) DEPRECATED. Can include punctuation
11 DEANum varchar(15) DEPRECATED. DEANum can be found in the providerclinic table.
12 IsSecondary tinyint True if hygienist.
13 ProvColor int(11) Color that shows in appointments. 0 represents empty no color.
14 IsHidden tinyint If true, provider will not show on any lists. The provider will still be a selection option in standard reports. Use IsHiddenReport to hide from reports. Hidden providers cannot access eRx. This will not affect scheduled appointments.
15 UsingTIN tinyint True if the SSN field is actually a Tax ID Num
16 BlueCrossID varchar(25) No longer used since each state assigns a different ID. Use the providerident instead which allows you to assign a different BCBS ID for each Payor ID.
17 SigOnFile tinyint Signature on file.
18 MedicaidID varchar(20) .
19 OutlineColor int(11) Color that shows in appointments as outline when highlighted. 0 represents empty no color.
20 SchoolClassNum bigint(20) FK to schoolclass.SchoolClassNum Used in dental schools. Each student is a provider. This keeps track of which class they are in.
21 NationalProvID varchar(255) US NPI, and Canadian UIN/CDA provider number.
22 CanadianOfficeNum varchar(100) Canadian field required for e-claims. Assigned by CDA. It's OK to have multiple providers with the same OfficeNum. Max length should be 4.
23 DateTStamp timestamp .
24 AnesthProvType bigint(20) FK to ??. Field used to set the Anesthesia Provider type. Used to filter the provider dropdowns on FormAnestheticRecord
25 TaxonomyCodeOverride varchar(255) If none of the supplied taxonomies works. This will show on claims.
26 IsCDAnet tinyint(4) For Canada. Set to true if CDA Net or a Canadian billable provider.
27 EcwID varchar(255) The name of this field is bad and will soon be changed to MedicalSoftID. This allows an ID field that can be used for HL7 synch with other software. Before this field was added, we were using prov abbreviation, which did not work well.
28 StateRxID varchar(255) DEPRECATED. Provider medical State ID.
29 IsNotPerson tinyint(4) Default is false because most providers are persons. But some dummy providers used for practices or billing entities are not persons. This is needed on 837s.
30 StateWhereLicensed varchar(50) DEPRECATED. The state abbreviation where the state license number in the StateLicense field is legally registered.
31 EmailAddressNum bigint(20) Not currently used. FK to emailaddress.EmailAddressNum. Optional, can be 0.
32 IsInstructor tinyint(4) Default is false because most providers will not be instructors. Used in Dental Schools
33 EhrMuStage int(11) Used to determine which stage of MU the provider is shown. 0=Global preference(Default), 1=Stage 1, 2=Stage 2, 3=Modified Stage 2.
34 ProvNumBillingOverride bigint(20) FK to provider.ProvNum
35 CustomID varchar(255) Custom ID used for reports or bridges only.
36 ProvStatus tinyint(4) Enum:ProviderStatus
Active: 0
Deleted: 1
37 IsHiddenReport tinyint(4) Determines whether the provider will show in the combobox on standard reports. IsHidden will not hide from reports. Data for this provider is still included on reports when running for "All" providers.
38 IsErxEnabled tinyint(4) Enum:ErxEnabledStatus Indicates whether or not the provider has individually agreed to accept eRx charges. Defaults to Disabled for new providers.
Disabled: 0.
Enabled: 1.
EnabledWithLegacy: 2.
39 Birthdate date The birthdate of the provider.
40 SchedNote varchar(255) Indicates if the provider should only be scheduled in a certain way (e.g. Root canals only)
41 WebSchedDescript varchar(500) The description of the provider that is displayed to patients in Web Sched.
42 WebSchedImageLocation varchar(255) The image of the provider that is displayed to patients in Web Sched. File name only (path not included). This should be a file name in the A to Z folder.
43 HourlyProdGoalAmt double The hourly production goal amount of the provider.
44 DateTerm date The date that the provider's term ends. This can be used to prevent appointments from being scheduled, appointments from being marked complete, prescriptions from being prescribed, and claims from being sent.
45 PreferredName varchar(100) The preferred name of the provider, shows what will be displayed to patients in eClipboard.
46 ClaimFormNum bigint(20) FK to claimform.ClaimFormNum. Sets the default claim form created for the provider. This takes priority over pref.DefaultClaimForm and insplan.ClaimFormNum.
47 GlidewellAcctNum bigint(20) FK to glidewellacct.GlidewellAcctNum. The default for this provider to send a lab case to Glidewell, although they can choose a different one when sending (once we add that UI feature). Multiple providers can have the same GlidewellAcctNum.

providerclinic
Allows specifying DEA number override and other overrides for the given combination of provider and clinic. This is different from the ProviderClinicLink table. That table records which providers are restricted to which clinics.
Order Name Type Summary
0 ProviderClinicNum bigint(20) Primary key.
1 ProvNum bigint(20) FK to provider.ProvNum.
2 ClinicNum bigint(20) FK to clinic.ClinicNum.
3 DEANum varchar(15) The DEA number for this provider and clinic. The DEA number used to be stored in provider.DEANum.
4 StateLicense varchar(50) License number corresponding to the StateWhereLicensed. Can include punctuation
5 StateRxID varchar(255) Provider medical State ID.
6 StateWhereLicensed varchar(15) The state abbreviation where the state license number in the StateLicense field is legally registered.
7 CareCreditMerchantId varchar(20) The merchant number for this provider and clinic.

providercliniclink
This table restricts a provider to a certain clinic. Muliple entries will allow them access to multiple clinics. If a provider does not have an entry in this table, it means that provider is linked to all clinics. This is different from the ProviderClinic table. That table holds override information for providers for certain clinics.
Order Name Type Summary
0 ProviderClinicLinkNum bigint(20) Primary key.
1 ProvNum bigint(20) FK to provider.ProvNum
2 ClinicNum bigint(20) FK to clinic.ClinicNum. An entry of -1 means the provider is associated to no clinics.

providererx
Tracks which providers have access to eRx based on NPI. Synchronized with HQ.
Order Name Type Summary
0 ProviderErxNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum. Holder of registration key only for HQ record, in customer record this will be 0.
2 NationalProviderID varchar(255) NPI of a provider from the provider table. May correspond to multiple records in the provider table.
3 IsEnabled tinyint(4) Enum:ErxStatus Set to Enabled if the provider with the given NationalProviderID has access to eRx. Pending statuses are treated as if Disabled.
Disabled: 0.
Enabled: 1.
Undefined: 2.
PendingAccountId: 3.
NeedsManualAccountId: 4.
PendingEmail: 5.
Pending: 6.
PendingEconnTransmit: 7.
InTransitToEconn: 8.
NeedsManualOfficeContact: 9.
NeedsErxId: 10.
4 IsIdentifyProofed tinyint(4) True if HQ knows that the provider has completed the Identify Proofing (IDP) process and is allowed access to eRx. A provider can be enabled even when this is false if the provider is an existing provider before version 15.4 (a legacy provider).
5 IsSentToHq tinyint(4) Set to true if the NationalProviderID has been sent to HQ. Will be false in customer db until sent. If true, this tells us that the IsEnabled and IsIdentityProofed flags are set according to HQ records.
6 IsEpcs tinyint(4) Set to true manually if the customer has completed their EPCS process.
7 ErxType tinyint(4) Enum:ErxOption Identifies which eRx option is being used when asking HQ if they are enabled.
NewCrop: 0. Rebranded to Ensora.
DoseSpot: 1.
DoseSpotWithNewCrop: 2.
8 UserId varchar(255) User identifier used by the associated ErxType. Only used by OD HQ.
9 AccountId varchar(25) Only used by OD HQ.
10 RegistrationKeyNum bigint(20) FK to registrationkey.RegistrationKeyNum. HQ only, links to the registration key used to make this providererx row.

providerident
Some insurance companies require special provider ID #s, and this table holds them.
Order Name Type Summary
0 ProviderIdentNum bigint(20) Primary key.
1 ProvNum bigint(20) FK to provider.ProvNum. An ID only applies to one provider.
2 PayorID varchar(255) FK to carrier.ElectID aka Electronic ID. An ID only applies to one insurance carrier.
3 SuppIDType tinyint Enum:ProviderSupplementalID
BlueCross: 0
BlueShield: 1
SiteNumber: 2
CommercialNumber: 3
4 IDNumber varchar(255) The number assigned by the ins carrier.

queryfilter
Each row is a query filter for the Query Monitor window. That window will exclude queries from showing and logging when they contain FilterText. This can significantly reduce the noise when looking through the queries.
Order Name Type Summary
0 QueryFilterNum bigint(20) Primary key.
1 GroupName varchar(255) This is a simple string instead of a FK to another small table.
2 FilterText varchar(255) The text that we look for in the query monitor. Any query that contains this text will be filtered out.

question
Each row is one Question for one patient. If a patient has never filled out a questionnaire, then they will have no rows in this table.
Order Name Type Summary
0 QuestionNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum
2 ItemOrder smallint The order that this question shows in the list.
3 Description text The original question.
4 Answer text The answer to the question in text form.
5 FormPatNum bigint(20) FK to formpat.FormPatNum

questiondef
Each row represents one question on the medical history questionnaire. Later, other questionnaires will be allowed, but for now, all questions are on one questionnaire for the patient. This table has no dependencies, since the question is copied when added to a patient record. Any row can be freely deleted or altered without any problems.
Order Name Type Summary
0 QuestionDefNum bigint(20) Primary key.
1 Description text The question as presented to the patient.
2 ItemOrder smallint The order that the Questions will show.
3 QuestType tinyint Enum:QuestionType
FreeformText: 0
YesNoUnknown: 1

quickpastecat
Quick paste categories are used by the quick paste notes feature. Every note must be in a category.
Order Name Type Summary
0 QuickPasteCatNum bigint(20) Primary key.
1 Description varchar(255) .
2 ItemOrder smallint The order of this category within the list. 0-based.
3 DefaultForTypes text Enum:EnumQuickPasteType Each Category can be set to be the default category for multiple types of notes. Stored as integers separated by commas.
None: 0 - If None is used for a TextRich, then QuickPasteNotes will be disabled. However, if an area does not have an assigned category, only Quick Paste Notes in the first category with this type can be used.
Procedure: 1
Appointment: 2
CommLog: 3
Adjustment: 4
Claim: 5
Email: 6
InsPlan: 7
Letter: 8
MedicalSummary: 9
ServiceNotes: 10
MedicalHistory: 11
MedicationEdit: 12
MedicationPat: 13
PatAddressNote: 14
Payment: 15
PayPlan: 16
Query: 17
Referral: 18
Rx: 19
FinancialNotes: 20
ChartTreatment: 21
MedicalUrgent: 22
Statement: 23
Recall: 24
Popup: 25
TxtMsg: 26
Task: 27
Schedule: 28
TreatPlan: 29
ClaimCustomTrack: 30
AutoNotePrompt: 31
JobManager: 32
ReadOnly: 33 - Do not use
Lab: 34
Equipment: 35
Etrans834Import: 36
InCaseOfEmergency: 37
ProviderSearchFilter: 38
ProgramLink: 39
PhoneEmpDefaultStatus: 40
WebChat: 41
FAQ: 42
Sheets: 43-Just autonotes, not quickpaste.

quickpastenote
Template for quick pasted note feature.
Order Name Type Summary
0 QuickPasteNoteNum bigint(20) Primary key.
1 QuickPasteCatNum bigint(20) FK to quickpastecat.QuickPasteCatNum. Keeps track of which category this note is in.
2 ItemOrder smallint The order of this note within it's category. 0-based.
3 Note text The actual note. Can be multiple lines and possibly very long.
4 Abbreviation varchar(255) The abbreviation which will automatically substitute when preceded by a ?.

reactivation
Track patient contact via a commlog type ("Reactivation"). Any commlogs of this type that occur after the last completed procedure will be considered a contact attempt. Patients should show in this list if they have previously completed procedures (excluding broken/canceled), and the most recent was completed before the time span specified by the "Days Past" preference. Include Patients with the following PatStatus: Patient, Inactive, Prospective Patients should not show in this list if they have been marked "Do not contact". Patients should not show in this list if a future appointment is scheduled. Once contacted, Patient should not show in this list. Patient will later reappear in this list if the "Reactivation contact interval" time period passes since the last contact and an appointment has not yet been scheduled. If the patient is contacted the maximum number of times specified by the "Count Contact Max" preference, mark the patient as "Do Not Contact". Example: Johnny Patient had his last procedure completed on 1/1/2018. There is a "Reactivation" type commlog on his chart from 6/1/2018. He does not have any future scheduled appointments. Johnny would be included in the list of "Reactivation" patients, with a single contact attempt having been made already.
Order Name Type Summary
0 ReactivationNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 ReactivationStatus bigint(20) FK to definition.DefNum. Uses the existing RecallUnschedStatus DefCat.
3 ReactivationNote text An administrative note for staff use.
4 DoNotContact tinyint(4) The patient can set this property if they don't want to be contacted so that it won't interfere with the max attempts to contact option.

recall
A patient can only have one recall object per type. The recall table stores a few dates that must be kept synchronized with other information in the database. This is difficult. Anytime one of the following items changes, things need to be synchronized: procedurecode.SetRecall, any procedurelog change for a patient (procs added, deleted, completed, status changed, date changed, etc), patient status changed. There are expected to be a few bugs in the synchronization logic, so anytime a patient's recall is opened, it will also update. During synchronization, the program will frequently alter DateDueCalc, DateDue, and DatePrevious based on trigger procs. The system will also add and delete recalls as necessary. But it will not delete a recall unless all values are default and there is no useful information. When a user tries to delete a recall, they will only be successful if the trigger conditions do not apply. Otherwise, they will have to disable the recall instead.
Order Name Type Summary
0 RecallNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 DateDueCalc date Not editable. The calculated date due. Generated by the program and subject to change anytime the conditions change. It can be blank (0001-01-01) if no appropriate triggers.
3 DateDue date This is the date that is actually used when doing reports for recall. It will usually be the same as DateDueCalc unless user has changed it. System will only update this field if it is the same as DateDueCalc. Otherwise, it will be left alone. Gets cleared along with DateDueCalc when resetting recall. When setting disabled, this field will also be cleared. This is the field to use if converting from another software.
4 DatePrevious date Not editable. Previous date that procedures were done to trigger this recall. It is calculated and enforced automatically. If you want to affect this date, add a procedure to the chart with a status of C, EC, or EO.
5 RecallInterval int(11) The interval between recalls. The Interval struct combines years, months, weeks, and days into a single integer value.
6 RecallStatus bigint(20) FK to definition.DefNum, or 0 for none.
7 Note text An administrative note for staff use.
8 IsDisabled tinyint If true, this recall type will be disabled (there's only one type right now). This is usually used rather than deleting the recall type from the patient because trigger conditions must be enforced for all patients.
9 DateTStamp timestamp Last datetime that this row was inserted or updated.
10 RecallTypeNum bigint(20) FK to recalltype.RecallTypeNum.
11 DisableUntilBalance double Default is 0. If a positive number is entered, then the family balance must be less in order for this recall to show in the recall list.
12 DisableUntilDate date If a date is entered, then this recall will be disabled until that date.
13 DateScheduled date This will only have a value if a recall is scheduled.
14 Priority tinyint(4) Enum:RecallPriority Indicates if the appointment has any special priority.
Normal: 0 - Default priority
ASAP: 1 - Used to identify items for the ASAP list
15 TimePatternOverride varchar(255) Default is an empty string. Used to override a RecallTypes time pattern.

recalltrigger
Links one procedurecode to one recalltype. The presence of this trigger is used when determining DatePrevious in the recall table.
Order Name Type Summary
0 RecallTriggerNum bigint(20) Primary key.
1 RecallTypeNum bigint(20) FK to recalltype.RecallTypeNum
2 CodeNum bigint(20) FK to procedurecode.CodeNum

recalltype
All recalls are based on these recall types. Recall triggers are in their own table.
Order Name Type Summary
0 RecallTypeNum bigint(20) Primary key.
1 Description varchar(255) .
2 DefaultInterval int(11) The interval between recalls. The Interval struct combines years, months, weeks, and days into a single integer value.
3 TimePattern varchar(255) Stores the length of the appointment in /'s and X's. Used when scheduling the appointment. Each / or X represents one unit in regards to the global 'Time Increments' appointment view setting. This means that recall appointment lengths change along with the 'Time Increments' preference. /X/ could rep 15 mins, 30 mins, etc.
4 Procedures varchar(255) What procedures to put on the recall appointment. Comma delimited set of ProcCodes. (We may change this to CodeNums).
5 AppendToSpecial tinyint(4) Set to true if this recall type should be automatically appended to the appointment when scheduling a special recall type. This boolean only gets considered if this recall type is a "manual" or "custom" recall type. If this recall type is flagged as a special recall type then variable is ignored.

reconcile
Used in the Accounting section. Each row represents one reconcile. Transactions will be attached to it.
Order Name Type Summary
0 ReconcileNum bigint(20) Primary key.
1 AccountNum bigint(20) FK to account.AccountNum
2 StartingBal double User enters starting balance here.
3 EndingBal double User enters ending balance here.
4 DateReconcile date The date that the reconcile was performed.
5 IsLocked tinyint If StartingBal + sum of entries selected = EndingBal, then user can lock. Unlock requires special permission, which nobody will have by default.

recurringcharge
This table holds a record of recurring charges that have been attempted.
Order Name Type Summary
0 RecurringChargeNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum. The patient this recurring charge is for.
2 ClinicNum bigint(20) FK to clinic.ClinicNum. The clinic this recurring charge is for.
3 DateTimeCharge datetime The date time of the charge.
4 ChargeStatus tinyint(4) Enum:RecurringChargeStatus
NotYetCharged: 0 - The charge has not been attempted yet.
ChargeSuccessful: 1 - The charge was successful.
ChargeFailed: 2 - Processing the charge failed.
ChargeDeclined: 3 - Processing the charge failed and was specifically declined.
5 FamBal double The family balance at the time this charge was created.
6 PayPlanDue double The pay plan due at the time this charge was created.
7 TotalDue double The sum of the FamBal and PayPlanDue at the time this charge was created.
8 RepeatAmt double The recurring charge amount from the credit card at the time this charge was created.
9 ChargeAmt double The amount that was charged (or will be charged if the status is NotYetCharged).
10 UserNum bigint(20) FK to userod.UserNum. The user that processed this charge. Will be 0 if this was done automatically.
11 PayNum bigint(20) FK to payment.PayNum. The payment created from this charge.
12 CreditCardNum bigint(20) FK to creditcard.CreditCardNum. The credit card that caused this charge.
13 ErrorMsg text Any error message from processing this charge.

refattach
Attaches a referral to a patient.
Order Name Type Summary
0 RefAttachNum bigint(20) Primary key.
1 ReferralNum bigint(20) FK to referral.ReferralNum.
2 PatNum bigint(20) FK to patient.PatNum.
3 ItemOrder smallint Order to display in patient info. One-based. Will be automated more in future.
4 RefDate date Date of referral.
5 RefType tinyint(4) Enum:ReferralType 0=RefTo,1=RefFrom,2=RefCustom.
RefTo: 0-
RefFrom: 1-
RefCustom: 2-Rarely used. Neither to nor from. Will not show on reports.
6 RefToStatus tinyint Enum:ReferralToStatus 0=None,1=Declined,2=Scheduled,3=Consulted,4=InTreatment,5=Complete.
None: 0
Declined: 1
Scheduled: 2
Consulted: 3
InTreatment: 4
Complete: 5
7 Note text Why the patient was referred out, or less commonly, the circumstances of the referral source. Also used when importing from forms. A referral is created with LName=Other. It gets attached to the patient with a note here.
8 IsTransitionOfCare tinyint(4) Used to track ehr events. All outgoing referrals default to true. The incoming ones get a popup asking if it's a transition of care.
9 ProcNum bigint(20) FK to procedurelog.ProcNum
10 DateProcComplete date .
11 ProvNum bigint(20) FK to provider.ProvNum. Used when referring out a patient to track the referring provider for EHR meaningful use. Will be -1 when RefType is not set to RefTo.
12 DateTStamp timestamp The datetime this referral attachment was last edited.

referral
All info about a referral is stored with that referral even if a patient. That way, it's available for easy queries.
Order Name Type Summary
0 ReferralNum bigint(20) Primary key.
1 LName varchar(100) Last name. Or, if this is a referral like "website" or "word of mouth", then that text goes here in the LName field.
2 FName varchar(100) First name.
3 MName varchar(100) Middle name or initial.
4 SSN varchar(9) SSN or TIN, no punctuation. For Canada, this holds the referring provider CDA num for claims.
5 UsingTIN tinyint Specificies if SSN is real SSN.
6 Specialty bigint(20) FK to definition.DefNum.
7 ST varchar(2) State
8 Telephone varchar(30) Primary phone. Prior to version 25.4, this was restrictive and only allowed exactly 10 digits.
9 Address varchar(100) .
10 Address2 varchar(100) .
11 City varchar(100) .
12 Zip varchar(10) .
13 Note text Holds important info about the referral.
14 Phone2 varchar(30) Additional phone no restrictions
15 IsHidden tinyint Can't delete a referral, but can hide if not needed any more.
16 NotPerson tinyint Set to true for referralls such as Yellow Pages.
17 Title varchar(255) i.e. DMD or DDS
18 EMail varchar(255) .
19 PatNum bigint(20) FK to patient.PatNum for referrals that are patients.
20 NationalProvID varchar(255) NPI for the referral
21 Slip bigint(20) FK to sheetdef.SheetDefNum. Referral slips can be set for individual referral sources. If zero, then the default internal referral slip will be used instead of a custom referral slip.
22 IsDoctor tinyint(4) True if another dentist or physician. Cannot be a patient.
23 IsTrustedDirect tinyint(4) True if checkbox E-mail Trust for Direct is checked.
24 DateTStamp timestamp The datetime this referral was last edited.
25 IsPreferred tinyint(4) True if the referral is a preferred referral. The only purpose is to allow filtering in the list of referrals so that the list can be much shorter.
26 BusinessName varchar(255) Represents the name of the business that the referral works for.
27 DisplayNote varchar(4000) This is a global field used for Scheduling Notes that will show in the family module patient info grid.

referralcliniclink
Table to link referrals and clinics together.
Order Name Type Summary
0 ReferralClinicLinkNum bigint(20) Primary key.
1 ReferralNum bigint(20) FK to referral.ReferralNum.
2 ClinicNum bigint(20) FK to clinic.ClinicNum.

registrationkey
Keeps track of which product keys have been assigned to which customers. This datatype is only used if the program is being run from a distributor installation. A single customer is allowed to have more than one key, to accommodate for various circumstances, including having multiple physical business locations.
Order Name Type Summary
0 RegistrationKeyNum bigint(20) Primary Key.
1 PatNum bigint(20) FK to patient.PatNum. The customer to which this registration key applies.
2 RegKey varchar(4000) The registration key as stored in the customer database.
3 Note varchar(4000) Db note about the registration key. Specifically, the note must include information about the location to which this key pertains, since once at least one key must be assigned to each location to be legal.
4 DateStarted date This will help later with tracking for licensing.
5 DateDisabled date This is used to completely disable a key. Might possibly even cripple the user's program. Usually only used if reassigning another key due to abuse or error. If no date specified, then this key is still valid.
6 DateEnded date This is used when the customer cancels monthly support. This still allows the customer to get downloads for bug fixes, but only up through a certain version. Our web server program will use this date to deduce which version they are allowed to have. Any version that was released as a beta before this date is allowed to be downloaded.
7 IsForeign tinyint(1) This is assigned automatically based on whether the registration key is a US version vs. a foreign version. The foreign version is not able to unlock the procedure codes. There are muliple layers of safeguards in place.
8 UsesServerVersion tinyint(4) Deprecated.
9 IsFreeVersion tinyint(4) We have given this customer a free version. Typically in India.
10 IsOnlyForTesting tinyint(4) This customer is not using the software with live patient data, but only for testing and development purposes.
11 VotesAllotted int(11) Typically 100, although it can be more for multilocation offices.
12 IsResellerCustomer tinyint(4) This is a customer of a reseller, so this customer will not have full access to all our services.
13 HasEarlyAccess tinyint(4) This is a customer that is allowed early access to certain features. E.g. downloading the Alpha version of the software.
14 DateTBackupScheduled datetime Deprecated. Moved to the supplementalbackups database. Next date and time of supplemental backup for the customer who owns this registration key.
15 BackupPassCode varchar(32) Deprecated. Moved to the supplementalbackups database. Pass code for next supplemental backup expected from this customer.
16 DateTClinicAccess datetime This is set at HQ and gives the office the ability to add new clinics until this time passes.

reminderrule
Ehr
Order Name Type Summary
0 ReminderRuleNum bigint(20) Primary key.
1 ReminderCriterion tinyint(4) Enum:EhrCriterion Problem,Medication,Allergy,Age,Gender,LabResult.
Problem: 0-DiseaseDef. Shows as 'problem' because it needs to be human readable. For this type, FKey is diseasedef.DiseaseDefNum.
Medication: 1-Medication. For this type, FKey is medication.MedicationNum.
Allergy: 2-AllergyDef. For this type, FKey is allergydef.AllergyDefNum.
Age: 3-Age
Gender: 4-Gender
LabResult: 5-LabResult
2 CriterionFK bigint(20) FK to diseasedef.DiseaseDefNum AND ReminderCriterion=0, FK to medication.MedicationNum AND ReminderCriterion=1, FK to allergydef.AllergyDefNum AND ReminderCriterion=2. Will be 0 if Age, Gender, or LabResult are the trigger.
3 CriterionValue varchar(255) Only used if Age, Gender, or LabResult are the trigger. Examples: "<25"(must include < or >), "Male"/"Female", "INR" (the simple description of the lab test)
4 Message varchar(255) Text that will show as the reminder.

repeatcharge
Each row represents one charge that will be added. Usually monthly, but quarterly and annually are allowed.
Order Name Type Summary
0 RepeatChargeNum bigint(20) Primary key
1 PatNum bigint(20) FK to patient.PatNum.
2 ProcCode varchar(15) FK to procedurecode.ProcCode. The code that will be added to the account as a completed procedure.
3 ChargeAmt double The amount that will be charged. The amount from the procedurecode will not be used. This way, a repeating charge cannot be accidentally altered.
4 DateStart date The date of the first charge if UseBillingCycleDays is not enabled. Charges will always be added on the same day of the frequency start date. If UseBillingCycleDays is enabled, repeat charges will be applied on billing cycle day instead. If more than one frequency cycle goes by without applying repeating charges, then multiple procedures will be added.
5 DateStop date The last date on which a charge is allowed. Can be blank (0001-01-01) to represent a perpetual repeating charge.
6 Note text Any note for internal use.
7 CopyNoteToProc tinyint(4) Indicates that the note should be copied to the corresponding procedure billing note.
8 CreatesClaim tinyint(4) Set to true to have a claim automatically created for the patient with the procedure that is attached to this repeating charge.
9 IsEnabled tinyint(4) Set to false to disable the repeating charge. This allows patients to have repeating charges in their history that are not active. Used mainly for repeating charges with notes that should not be deleted.
10 UsePrepay tinyint(4) Set to true to use prepayments for repeating charges.
11 Npi text Stores the NPI of the provider on this repeating charge for Erx. This used to be stored in the Note field but got moved over to its own column in 17.2.
12 ErxAccountId text Stores the Erx Account ID on this repeating charge for Erx. This used to be stored in the Note field but got moved over to its own column in 17.2.
13 ProviderName text Stores the name of the provider on this repeating charge for Erx. Value is received directly from Ensora.
14 ChargeAmtAlt double HQ Only. An alternate amount to be charged for this RepeatCharge in some cases. Should always default to -1 as -1 will be used as a flag to indicate it has not been set. A value of 0 means ChargeAmtAlt has been intentionally set to 0.
15 UnearnedTypes varchar(4000) If UsePrepay is true, when the procedure is created from this repeat charge, it will allocate payments from these unearned types. Stored as a comma separated list of DefNums of Category PaySplitUnearnedType. If empty, then all unearned types will be considered.
16 Frequency tinyint(4) Enum:EnumRepeatChargeFrequency 0-Monthly, 1-Quarterly, 2-Annually.
Monthly: 0 - Monthly
Quarterly: 1 - Quarterly
Annually: 2 - Annually

replicationserver
Replication server information. Used for server specific replication settings, manually entered by the user. Each row is one server.
Order Name Type Summary
0 ReplicationServerNum bigint(20) Primary key.
1 Descript text The description or name of the server. Optional.
2 ServerId int(10) Db admin sets this server_id server variable on each replication server. Allows us to know what server each workstation is connected to. In display, it's ordered by this value. Users are always forced to enter a value here.
3 RangeStart bigint(20) Deprecated. Only used for Random Primary Keys. The start of the key range for this server. 0 if no value entered yet.
4 RangeEnd bigint(20) Deprecated. Only used for Random Primary Keys. The end of the key range for this server. 0 if no value entered yet.
5 AtoZpath varchar(255) The AtoZpath for this server. Optional.
6 UpdateBlocked tinyint(4) If true, then this server cannot initiate an update. Typical for satellite servers.
7 SlaveMonitor varchar(255) Deprecated. Monitoring the status of replication is now monitored by a separate service. See online manual for information on installing the new service. The description or name of the comptuer that will monitor replication for this server.

reqneeded
For Dental Schools. Requirements needed in order to complete course or graduation needs. Copied from def to course so that the ones attached to defs can be freely deleted or edited without affecting any students.
Order Name Type Summary
0 ReqNeededNum bigint(20) Primary key.
1 Descript varchar(255) .
2 SchoolCourseNum bigint(20) FK to schoolcourse.SchoolCourseNum. Will be 0 if req is for a course def or defining a grad requirement.
3 SchoolClassNum bigint(20) FK to schoolclass.SchoolClassNum. Will be 0 if req is for a course def.
4 SchoolCourseDefNum bigint(20) FK to schoolcoursedef.SchoolCourseDefNum. Will be 0 if req is for a course or defining a grad requirement.

reqstudent
For Dental Schools. The purpose of this table changed significantly in version 4.5. This now only stores completed requirements. There can be multiple completed requirements of each ReqNeededNum. No need to synchronize any longer.
Order Name Type Summary
0 ReqStudentNum bigint(20) Primary key.
1 ReqNeededNum bigint(20) FK to reqneeded.ReqNeededNum.
2 Descript varchar(255) .
3 SchoolCourseNum bigint(20) FK to schoolcourse.SchoolCourseNum. Never 0.
4 ProvNum bigint(20) FK to provider.ProvNum. The student. Never 0.
5 AptNum bigint(20)
6 PatNum bigint(20) FK to patient.PatNum
7 InstructorNum bigint(20) FK to provider.ProvNum
8 DateCompleted date The date that the requirement was completed.
9 ProcNum bigint(20) FK to procedurelog.ProcNum

requiredfield
Each row represents a field that is required to be filled out.
Order Name Type Summary
0 RequiredFieldNum bigint(20) Primary key.
1 FieldType tinyint(4) Enum:RequiredFieldType . The area of the program that uses this field.
PatientInfo: 0 - Edit Patient Information window and Add Family (FormPatientAddAll) window.
InsPayEdit: 1 - Edit Claim Payment window.
2 FieldName varchar(50) Enum:RequiredFieldName
Address:
Address2:
AddressPhoneNotes:
AdmitDate:
AskArriveEarly:
BatchNumber:
BillingType:
Birthdate:
Carrier:
ChartNumber:
CheckDate:
CheckNumber:
City:
Clinic:
CollegeName:
County:
CreditType:
DateFirstVisit:
DateTimeDeceased:
DepositAccountNumber:
DepositDate:
DischargeDate:
EligibilityExceptCode:
EmailAddress:
EmergencyName:
EmergencyPhone:
Employer:
Ethnicity:
FeeSchedule:
FirstName:
Gender:
GenderIdentity:
GradeLevel:
GroupName:
GroupNum:
HomePhone:
InsPayEditClinic:
InsurancePhone:
InsuranceSubscriber:
InsuranceSubscriberID:
Language:
LastName:
PaymentAmount:
PaymentType:
Position:
MedicaidID:
MedicaidState:
MiddleInitial:
MothersMaidenFirstName:
MothersMaidenLastName:
PatientStatus:
PreferConfirmMethod:
PreferContactMethod:
PreferRecallMethod:
PreferredName:
PrimaryProvider:
Race:
ReferredFrom:
ResponsibleParty:
Salutation:
SecondaryProvider:
SexualOrientation:
Site:
SocialSecurityNumber:
State:
StudentStatus:
TextOK:
Title:
TreatmentUrgency:
TrophyFolder:
Ward:
WirelessPhone:
WorkPhone:
Zip:

requiredfieldcondition
When one of these conditions is true, the corresponding requiredfield will be triggered.
Order Name Type Summary
0 RequiredFieldConditionNum bigint(20) Primary key.
1 RequiredFieldNum bigint(20) FK to requiredfield.RequiredFieldNum.
2 ConditionType varchar(50) Enum:RequiredFieldName
Address:
Address2:
AddressPhoneNotes:
AdmitDate:
AskArriveEarly:
BatchNumber:
BillingType:
Birthdate:
Carrier:
ChartNumber:
CheckDate:
CheckNumber:
City:
Clinic:
CollegeName:
County:
CreditType:
DateFirstVisit:
DateTimeDeceased:
DepositAccountNumber:
DepositDate:
DischargeDate:
EligibilityExceptCode:
EmailAddress:
EmergencyName:
EmergencyPhone:
Employer:
Ethnicity:
FeeSchedule:
FirstName:
Gender:
GenderIdentity:
GradeLevel:
GroupName:
GroupNum:
HomePhone:
InsPayEditClinic:
InsurancePhone:
InsuranceSubscriber:
InsuranceSubscriberID:
Language:
LastName:
PaymentAmount:
PaymentType:
Position:
MedicaidID:
MedicaidState:
MiddleInitial:
MothersMaidenFirstName:
MothersMaidenLastName:
PatientStatus:
PreferConfirmMethod:
PreferContactMethod:
PreferRecallMethod:
PreferredName:
PrimaryProvider:
Race:
ReferredFrom:
ResponsibleParty:
Salutation:
SecondaryProvider:
SexualOrientation:
Site:
SocialSecurityNumber:
State:
StudentStatus:
TextOK:
Title:
TreatmentUrgency:
TrophyFolder:
Ward:
WirelessPhone:
WorkPhone:
Zip:
3 Operator tinyint(4) Enum:ConditionOperator . The operator that is being applied to the ConditionType.
Equals: 0: =
NotEquals: 1: !=
GreaterThan: 2: >
LessThan: 3: <
GreaterThanOrEqual: 4: >=
LessThanOrEqual: 5: <=
4 ConditionValue varchar(255) The value that the condition is being compared against. Could be 18, Fulltime, Male, etc.
5 ConditionRelationship tinyint(4) Enum:LogicalOperator 0-None,1-And,2-Or. This field is only used when comparing continuous values such as age or date.
None: 0
And: 1
Or: 2

rxalert
Many-to-many relationship connecting Rx with DiseaseDef, AllergyDef, or Medication. Only one of those links may be specified in a single row; the other two will be 0.
Order Name Type Summary
0 RxAlertNum bigint(20) Primary key.
1 RxDefNum bigint(20) FK to rxdef.RxDefNum. This alert is to be shown when user attempts to write an Rx for this RxDef.
2 DiseaseDefNum bigint(20) FK to diseasedef.DiseaseDefNum. Only if DrugProblem interaction. This is compared against disease.DiseaseDefNum using PatNum. Drug-Problem (they call it Drug-Diagnosis) checking is also performed in Ensora.
3 AllergyDefNum bigint(20) FK to allergydef.AllergyDefNum. Only if DrugAllergy interaction. Compared against allergy.AllergyDefNum using PatNum. Drug-Allergy checking is also perfomed in Ensora.
4 MedicationNum bigint(20) FK to medication.MedicationNum. Only if DrugDrug interaction. This will be compared against medicationpat.MedicationNum using PatNum. Drug-Drug checking is also performed in Ensora.
5 NotificationMsg varchar(255) This is typically blank, so a default message will be displayed by OD. But if this contains a message, then this message will be used instead.
6 IsHighSignificance tinyint(4) False by default. Set to true to flag the drug-drug or drug-allergy intervention as high significance.

rxdef
Rx definitions. Can safely delete or alter, because they get copied to the rxPat table, not referenced.
Order Name Type Summary
0 RxDefNum bigint(20) Primary key.
1 Drug varchar(255) The name of the drug.
2 Sig varchar(255) Directions intended for the pharmacist.
3 Disp varchar(255) Amount to dispense.
4 Refills varchar(30) Number of refills.
5 Notes varchar(255) Notes about this drug. Will not be copied to the rxpat.
6 IsControlled tinyint(4) Is a controlled substance. This will affect the way it prints.
7 RxCui bigint(20) RxNorm Code identifier. Copied down into medicationpat.RxCui (medical order) when a prescription is written.
8 IsProcRequired tinyint(4) If true will require procedure be attached to this prescription when printed. Usually true if IsControlled is true.
9 PatientInstruction text Directions intended for the patient.

rxnorm
RxNorm created from a zip file.
Order Name Type Summary
0 RxNormNum bigint(20) Primary key.
1 RxCui varchar(255) RxNorm Concept universal ID. Throughout the program, this is actually used as the Primary Key of this table rather than the RxNormNum.
2 MmslCode varchar(255) Multum code. Only used for crosscoding during import/export with electronic Rx program. User cannot see multum codes. Most of the rows in this table do not have an MmslCode and user searches ignore rows with an MmslCode.
3 Description text Only used for RxNorms, not Multums.

rxpat
One Rx for one patient. Copied from rxdef rather than linked to it.
Order Name Type Summary
0 RxNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 RxDate date Date of Rx.
3 Drug varchar(255) Drug name. Example: PenVK 500 mg capsules. Example: Percocet 5/500 tablets.
4 Sig varchar(255) Directions intended for the pharmacist. Example: Take 2 tablets twice a day.
5 Disp varchar(255) Amount to dispense. Example: 12 (twelve)
6 Refills varchar(30) Number of refills. Example: 3. Example: 1 per month.
7 ProvNum bigint(20) FK to provider.ProvNum.
8 Notes varchar(255) Notes specific to this Rx. Will not show on the printout. For staff use only.
9 PharmacyNum bigint(20) FK to pharmacy.PharmacyNum.
10 IsControlled tinyint(4) Is a controlled substance. This will affect the way it prints.
11 DateTStamp timestamp The last date and time this row was altered. Not user editable.
12 SendStatus tinyint(4) Enum:RxSendStatus
Unsent: 0
InElectQueue: 1- This will never be used in production. It was only used for proof of concept when building EHR.
SentElect: 2
Printed: 3
Faxed: 4
CalledIn: 5
GaveScript: 6
Pending: 7
13 RxCui bigint(20) Deprecated. RxNorm Code identifier. Was used in FormRxSend for EHR 2011, but FormRxSend has been deleted. No longer in use anywhere. Still exists in db for now.
14 DosageCode varchar(255) NCI Pharmaceutical Dosage Form code. Only used with ehr. For example, C48542 is the code for “Tablet dosing unit”. User enters code manually, and it's only used for Rx Send, which will be deprecated with 2014 cert. Guaranteed that nobody actually uses or cares about this field.
15 ErxGuid varchar(40) eRx returns this unique identifier to use for electronic Rx. Also set for Open Dental created medications using a different format.
16 IsErxOld tinyint(4) True for historic prescriptions which existed prior to version 15.4. The purpose of this column is to keep historic reports accurate.
17 ErxPharmacyInfo varchar(255) The pharmacyinfo field contains the pharmacy name as well as other information about the pharmacy, but the information is inconsistent. The purpose of this field is to give the user means to visually verify they have the correct pharmacy selected.
18 IsProcRequired tinyint(4) If true will require procedure be attached to this prescription when printed. Usually true if IsControlled is true.
19 ProcNum bigint(20) FK to procedurelog.ProcNum. The procedure attached to this prescription when IsProcRequired is true.
20 DaysOfSupply double The number of days this prescription is intended to last. Only used when IsProcRequired is true.
21 PatientInstruction text Directions intended for the patient.
22 ClinicNum bigint(20) FK to clinic.ClinicNum.
23 UserNum bigint(20) FK to userod.UserNum. Used to log who is accessing pdmp bridge
24 RxType tinyint(4) Enum:RxTypes to check what bridge is being used to access pdmp. Indexed in database
Rx: 0 - Rx, existing entries should default to this
LogicoyAccess: 1 - LogicoyAccess
BambooAccess: 2 -

schedule
One block of time. Either for practice, provider, employee, or blockout. Not part of cache pattern, but does refresh in response to signals, similar to appointments.
Order Name Type Summary
0 ScheduleNum bigint(20) Primary key.
1 SchedDate date Date for this timeblock.
2 StartTime time Start time for this timeblock. Provider/Employee, Practice, and Holiday notes don't allow the user to set a start time and are inserted with a value of TimeSpan.Zero (00:00:00).
3 StopTime time Stop time for this timeblock. Provider/Employee, Practice, and Holiday notes don't allow the user to set a stop time and are inserted with a value of TimeSpan.Zero (00:00:00).
4 SchedType tinyint Enum:ScheduleType 0=Practice,1=Provider,2=Blockout,3=Employee. Practice is used as a way to indicate holidays and as a way to put a note in for the entire practice for one day. But whenever type is Practice, times will be ignored. Practice (including holiday) show in upper left corner of Appt Module.
Practice: 0. Only used for practice and holiday notes. Notes will appear in both the schedule setup and the upper left of the appointment module operatory bar. Includes hover effect.
Provider: 1
Blockout: 2
Employee: 3
WebSchedASAP: 4 - A slot of time that an ASAP appointment can be moved up to.
5 ProvNum bigint(20) FK to provider.ProvNum if a provider type.
6 BlockoutType bigint(20) FK to definition.DefNum if blockout. eg. HighProduction, RCT Only, Emerg.
7 Note text This contains various types of text entered by the user.
8 Status tinyint Enum:SchedStatus enumeration 0=Open,1=Override,2=Holiday. All blocks have a status of Open, but user doesn't see the status. The "Override" status is used only by ODHQ in Phone Graph Edit window. Holidays are a special type of practice schedule item which do not have providers attached. Holidays are also used by blockouts. Used to differentiate between Practice SchedType Holidays and Notes.
Open: 0
Override: 1
Holiday: 2
9 EmployeeNum bigint(20) FK to employee.EmployeeNum.
10 DateTStamp timestamp Last datetime that this row was inserted or updated.
11 ClinicNum bigint(20) FK to clinic.ClinicNum. Only used for SchedType.Practice (both holidays and practice notes). For all other schedule rows, this should be 0. It can also be 0 for SchedType.Practice to apply to all clinics. Scheduleops are never used in combination with ClinicNum.

scheduledprocess
Order Name Type Summary
0 ScheduledProcessNum bigint(20) Primary Key
1 ScheduledAction varchar(50) Enum:ScheduledActionEnum
RecallSync: 0
InsVerifyBatch: 1
Statements: 2
2 TimeToRun datetime What time of the day it's supposed to run.
3 FrequencyToRun varchar(50) Enum:FrequencyToRunEnum
Daily: 0
4 LastRanDateTime datetime Date and time when process last ran.

scheduleop
Links one schedule block to one operatory. A schedule block can be linked to one or more operatories. This table is not usually used. Instead, we usually depend on the default providers for operatories. Not used when schedule.ScheduleType is Practice.
Order Name Type Summary
0 ScheduleOpNum bigint(20) Primary key.
1 ScheduleNum bigint(20) FK to schedule.ScheduleNum.
2 OperatoryNum bigint(20) FK to operatory.OperatoryNum.

schoolapproval
Dental school instructor approval linked to a student item like a procedure or treatment plan.
Order Name Type Summary
0 SchoolApprovalNum bigint(20) Primary key.
1 ProvNum bigint(20) FK to provider.ProvNum. The student. Never 0.
2 SignOffStatus tinyint(4) The current review status of the item.
3 InstructorNum bigint(20) FK to provider.ProvNum. Indicates the instructor who reviewed this item.
4 AptNum bigint(20) FK to appointment.AptNum. Indicates the appointment this approval is for. 0 if not applicable.
5 ProcNum bigint(20) FK to procedurelog.ProcNum. Indicates the procedure this approval is for. 0 if not applicable.
6 TreatPlanNum bigint(20) FK to treatplan.TreatPlanNum. Indicates the treatment plan this approval is for. 0 if not applicable.
7 PerioExamNum bigint(20) FK to perioexam.PerioExamNum. Indicates the perio exam this approval is for. 0 if not applicable.
8 AllergyNum bigint(20) FK to allergy.AllergyNum. Indicates the allergy this approval is for. 0 if not applicable.
9 DiseaseNum bigint(20) FK to disease.DiseaseNum. Indicates the disease this approval is for. 0 if not applicable.
10 DocNum bigint(20) FK to document.DocNum. Indicates the document this approval is for. 0 if not applicable.
11 MountNum bigint(20) FK to mount.MountNum. Indicates the mount this approval is for. 0 if not applicable.
12 SecDateEntry date Timestamp automatically generated and user not allowed to change. The actual date of entry.
13 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.

schoolclass
Used in dental schools. eg. Dental 2009 or Hygiene 2007.
Order Name Type Summary
0 SchoolClassNum bigint(20) Primary key.
1 GradYear int(11) The year this class will graduate
2 Descript varchar(255) Description of this class. eg Dental or Hygiene

schoolcourse
A scheduled course in dental schools. These are copied from SchoolCourseDef and are linked to a class cohort. Example: OP 732 Operative Dentistry Clinic II.Students are not linked individually to courses. Instead, it is assumed that all students from the specified class are in this course.
Order Name Type Summary
0 SchoolCourseNum bigint(20) Primary key.
1 CourseID varchar(255) Alphanumeric. Example: PEDO 732.
2 Descript varchar(255) Full course name. Example: Pediatric Dentistry Clinic II
3 DateStart date Start date of the effective schedule. Required for default schedules
4 DateEnd date End date of the effective schedule. Required for default schedules.
5 SchoolClassNum bigint(20) FK to schoolclass.SchoolClassNum. Indicates which class cohort this scheduled course is assigned to. Can be zero for older courses. Use SchoolCourseEnrollees to see the students registered for this course.
6 GradingScaleNum bigint(20) FK to gradingscale.GradingScaleNum. Indicates the grading scale for this course. All associated EvaluationDefs must use the same grading scale.

schoolcoursedef
A course definition used in dental schools. These predefined courses are added from the course directory and can be copied when scheduling actual courses for a class cohort. Example OP 732 Operative Dentistry Clinic II. Can be deleted without affecting scheduled SchoolCourse entries.
Order Name Type Summary
0 SchoolCourseDefNum bigint(20) Primary key.
1 CourseID varchar(255) Alphanumeric. Example: PEDO 732.
2 Descript varchar(255) Full course name. Example: Pediatric Dentistry Clinic II
3 GradingScaleNum bigint(20) FK to gradingscale.GradingScaleNum. Indicates the grading scale for this course. All associated EvaluationDefs must use the same grading scale.

schoolcourseenrollee
Represents a student’s enrollment in a specific school course, including their current overall grade for the course.
Order Name Type Summary
0 SchoolCourseEnrolleeNum bigint(20) Primary key.
1 SchoolCourseNum bigint(20) FK to schoolcourse.SchoolCourseNum. Identifies the course in which the student is enrolled.
2 StudentNum bigint(20) FK to provider.ProvNum. Identifies the student.
3 GradeNumber float -1 by default, indicating that no grade number is assigned when there are no corresponding evaluations. The student’s calculated overall grade for this course. Computed by averaging all evaluations for the course and student. This value is then used to determine the displayed grade. For pick list grading scales, the closest scale item is chosen. For percentage and weighted grading, the number itself is shown as a percentage. There is no weight yet for different evaluations, so the automatically calculated course grades will treat all evaluations with equal weight.
4 GradeOverride float -1 by default, indicating no grade override. An optional override grade manually entered by an instructor. If populated, this value takes precedence over GradeNumber for the overall grade for this course.

schoolcourseinstructor
Links an instructor to a specific school course. A course can have multiple instructors, and an instructor can teach multiple courses.
Order Name Type Summary
0 SchoolCourseInstructorNum bigint(20) Primary key.
1 SchoolCourseNum bigint(20) FK to schoolcourse.SchoolCourseNum. Identifies the course this instructor is assigned to.
2 InstructorNum bigint(20) FK to provider.ProvNum. Identifies the instructor assigned to this course.

schoolcoursesched
Represents a single classroom session on a specific date and time for a school course's default schedule or a schedule override. Used for both SchoolCourse and SchoolCourseDef. Copied from def when creating course from def. For a typical course, there will be one row per scheduled day of the week, plus any override entries as needed.
Order Name Type Summary
0 SchoolCourseSchedNum bigint(20) Primary key.
1 SchoolCourseDefNum bigint(20) FK to schoolcoursedef.SchoolCourseDefNum. Indicates the course definition that this schedule applies to. 0 if it's for a schoolcourse.
2 SchoolCourseNum bigint(20) FK to schoolcourse.SchoolCourseNum. Indicates the course that this schedule applies to. 0 if it's for a schoolcoursedef.
3 TimeStart time The time of day the course is scheduled to start. Only allowed to be Zero if this is an IsCanceled row.
4 TimeEnd time The time of day the course is scheduled to end. Only allowed to be Zero if this is an IsCanceled row.
5 DayOfTheWeek tinyint(4) The day of the week this schedule applies to. 0 is Sunday, 1 is Monday, up to 6 for Saturday. Ignored and not visible if override.
6 DateOverride date Date of the override. Used only for SchoolCourse, not SchoolCourseDef.
7 IsOverride tinyint(4) True if this entry represents an override to the default schedule. False if it's part of the default schedule. Not used for SchoolCourseDef. Multiple allowed per day.
8 IsCanceled tinyint(4) Only used for overrides. True if the course session is canceled on the override date.

screen
Used in public health. This screening table is meant to be general purpose. It is compliant with the popular Basic Screening Survey. It is also designed with minimal foreign keys and can be easily adapted to a tablet PC. This table can be used with only the screengroup table, but is more efficient if provider, school, and county tables are also available.
Order Name Type Summary
0 ScreenNum bigint(20) Primary key
1 Gender tinyint Enum:PatientGender
Male: 0
Female: 1
Unknown: 2- Required by HIPAA for privacy. Required by ehr to track missing entries. EHR/HL7 known as undifferentiated (UN).
Other: 3
2 RaceOld tinyint(4) Enum:PatientRaceOld and ethnicity.
Unknown: 0
Multiracial: 1
HispanicLatino: 2
AfricanAmerican: 3
White: 4
HawaiiOrPacIsland: 5
AmericanIndian: 6
Asian: 7
Other: 8
Aboriginal: 9
BlackHispanic: 10 - Required by EHR.
3 GradeLevel tinyint(4) Enum:PatientGrade
Unknown: 0
First: 1
Second: 2
Third: 3
Fourth: 4
Fifth: 5
Sixth: 6
Seventh: 7
Eighth: 8
Ninth: 9
Tenth: 10
Eleventh: 11
Twelfth: 12
PrenatalWIC: 13
PreK: 14
Kindergarten: 15
Other: 16
4 Age tinyint Age of patient at the time the screening was done. Faster than recording birthdates.
5 Urgency tinyint(4) Enum:TreatmentUrgency
Unknown:
NoProblems:
NeedsCare:
Urgent:
6 HasCaries tinyint Enum:YN Set to true if patient has cavities.
Unknown: 0
Yes: 1
No: 2
7 NeedsSealants tinyint Enum:YN Set to true if patient needs sealants.
Unknown: 0
Yes: 1
No: 2
8 CariesExperience tinyint Enum:YN
Unknown: 0
Yes: 1
No: 2
9 EarlyChildCaries tinyint Enum:YN
Unknown: 0
Yes: 1
No: 2
10 ExistingSealants tinyint Enum:YN
Unknown: 0
Yes: 1
No: 2
11 MissingAllTeeth tinyint Enum:YN
Unknown: 0
Yes: 1
No: 2
12 Birthdate date Optional
13 ScreenGroupNum bigint(20) FK to screengroup.ScreenGroupNum.
14 ScreenGroupOrder smallint The order of this item within its group.
15 Comments varchar(255) .
16 ScreenPatNum bigint(20) FK to screenpat.ScreenPatNum.
17 SheetNum bigint(20) FK to sheet.SheetNum

screengroup
Used in public health. The database table only has 3 columns. There are 5 additional columns in C# that are not in the databae. These extra columns are used in the UI to organize input, and are transferred to the screen table as needed.
Order Name Type Summary
0 ScreenGroupNum bigint(20) Primary key
1 Description varchar(255) Up to the user.
2 SGDate date The date of the screening.
3 ProvName varchar(255) Required. Could be the name of the screener and not a provider necessarily.
4 ProvNum bigint(20) FK to provider.ProvNum. ProvNAME is always entered, but ProvNum supplements it by letting user select from list. When entering a provNum, the name will be filled in automatically. Can be 0 if the provider is not in the list, but provName is required.
5 PlaceService tinyint(4) Enum:PlaceOfService Describes where the screening will take place. Defaults to Zero(Office).
Office: 0. Code 11
PatientsHome: 1. Code 12
InpatHospital: 2. Code 21
OutpatHospital: 3. Code 22
SkilledNursFac: 4. Code 31
CustodialCareFacility: 5. Code 33. In X12, a similar code AdultLivCareFac 35 is mentioned.
OtherLocation: 6. Code 99. We use 11 for office.
MobileUnit: 7. Code 15
School: 8. Code 03
MilitaryTreatFac: 9. Code 26
FederalHealthCenter: 10. Code 50
PublicHealthClinic: 11. Code 71
RuralHealthClinic: 12. Code 72
EmergencyRoomHospital: 13. Code 23
AmbulatorySurgicalCenter: 14. Code 24
TelehealthOutsideHome: 15. Code 02.
TelehealthInHome: 16. Code 10
OutreachSiteOrStreet: 17. Code 27
6 County varchar(255) FK to county.CountyName, although it will not crash if key absent.
7 GradeSchool varchar(255) FK to site.Description, although it will not crash if key absent.
8 SheetDefNum bigint(20) FK to sheetdef.SheetDefNum

screenpat
This allows users to set up a list of students prior to actually going to the school. It also serves to attach the exam sheet to the screening.
Order Name Type Summary
0 ScreenPatNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum
2 ScreenGroupNum bigint(20) FK to screengroup.ScreenGroupNum. Every screening is attached to a group (classroom)
3 SheetNum bigint(20) Was never used. Was supposed to be FK to sheetdef.Sheet_DEF_Num, so not even named correctly.
4 PatScreenPerm tinyint(4) Enum:PatScreenPerm
Unknown:
Allowed:
NoPermission:
Refused:
Absent:
Behavior:
Other:

securitylog
Stores an ongoing record of database activity for security purposes. User not allowed to edit.
Order Name Type Summary
0 SecurityLogNum bigint(20) Primary key.
1 PermType smallint(6) Enum:EnumPermType
None: 0
AppointmentsModule: 1-No log entry.
FamilyModule: 2-A Security Log entry is made each time that the Family module button is clicked, as well as each time that the selected patient is changed while within the Family module. If the preference AuditTrailVisitModuleShow is set to false then no entries are created.
AccountModule: 3-Same behavior as FamilyModule.
TPModule: 4-Same behavior as FamilyModule.
ChartModule: 5-Same behavior as FamilyModule.
ImagingModule: 6-Same behavior as FamilyModule.
ManageModule: 7-No log entry.
Setup: 8. Currently covers a wide variety of setup functions.
RxCreate: 9
ProcComplEdit: 10 - DEPRECATED - Uses date restrictions. Covers editing/deleting of Completed, EO, and EC procs. Deleting procs of other statuses are covered by ProcDelete.
ChooseDatabase: 11
Schedules: 12
BlockoutEdit: 13 - There are two kinds of blockouts: those flagged as NS(no sched) or DC(disable cut/copy/paste) and those with no flag. This permission handles the edit of blockouts with no flag. Logs an audit trail entry when a blockout is edited. See BlockoutsFlagged permission for the other blockouts flagged as NS or DC. And see the other two blockout permissions for things other than edit.
ClaimSentEdit: 14. Uses date restrictions.
PaymentCreate: 15. Uses date restrictions.
PaymentEdit: 16. Uses date restrictions.
AdjustmentCreate: 17
AdjustmentEdit: 18. Uses date restrictions.
UserQuery: 19
StartupSingleUserOld: 20. Not used anymore.
StartupMultiUserOld: 21 Not used anymore.
Reports: 22
ProcComplCreate: 23. Includes setting procedures complete.
SecurityAdmin: 24. At least one user must have this permission.
AppointmentCreate: 25.
AppointmentMove: 26
AppointmentEdit: 27. AppointmentDelete permission required in order to delete appointments.
Backup: 28
TimecardsEditAll: 29
DepositSlips: 30
AccountingEdit: 31. Uses date restrictions.
AccountingCreate: 32. Uses date restrictions.
Accounting: 33
AnesthesiaIntakeMeds: 34
AnesthesiaControlMeds: 35
InsPayCreate: 36
InsPayEdit: 37. Uses date restrictions. Edit Batch Insurance Payment.
TreatPlanEdit: 38. Uses date restrictions.
ReportProdInc: 39. DEPRECATED
TimecardDeleteEntry: 40. Uses date restrictions.
EquipmentDelete: 41. Uses date restrictions. All other equipment functions are covered by .Setup.
SheetEdit: 42. Uses date restrictions. Also used in audit trail to log web form importing.
CommlogEdit: 43. Uses date restrictions.
ImageDelete: 44. Uses date restrictions. Allows deletion of images. SignedImageEdit permission is also needed to delete signed images.
PerioEdit: 45. Uses date restrictions.
ProcEditShowFee: 46. Shows the fee textbox in the proc edit window.
AdjustmentEditZero: 47
EhrEmergencyAccess: 48
ProcDelete: 49. Uses date restrictions. This only applies to non-completed procs. Deletion of completed procs is covered by ProcCompleteStatusEdit.
EhrKeyAdd: 50 - Only used at OD HQ. No user interface.
ProviderEdit: 51- Allows user to edit all providers. This is not fine-grained enough for extremely large organizations such as dental schools, so other permissions are being added as well.
EcwAppointmentRevise: 52
ProcedureNoteFull: 53
ReferralAdd: 54
InsPlanChangeSubsc: 55
RefAttachAdd: 56
RefAttachDelete: 57
CarrierCreate: 58
GraphicalReports: 59
AutoNoteQuickNoteEdit: 60
EquipmentSetup: 61
Billing: 62
ProblemDefEdit: 63
ProcFeeEdit: 64- There is no user interface in the security window for this permission. It is only used for tracking.
InsPlanChangeCarrierName: 65- There is no user interface in the security window for this permission. It is only used for tracking. Only tracks changes to carriername, not any other carrier info.
TaskNoteEdit: 66- (Was named TaskEdit prior to version 14.2.39) When editing an existing task: delete the task, edit original description, or double click on note rows. Even if you don't have the permission, you can still edit your own task description (but not the notes) as long as it's in your inbox and as long as nobody but you has added any notes.
WikiListSetup: 67- Add or delete lists and list columns..
Copy: 68- There is no user interface in the security window for this permission. It is only used for tracking. Tracks copying of patient information. Required by EHR.
Printing: 69- There is no user interface in the security window for this permission. It is only used for tracking. Tracks printing of patient information. Required by EHR.
MedicalInfoViewed: 70- There is no user interface in the security window for this permission. It is only used for tracking. Tracks viewing of patient medical information.
PatProblemListEdit: 71- Tracks creation and editing of patient problems.
PatMedicationListEdit: 72- Tracks creation and edting of patient medications.
PatAllergyListEdit: 73- Tracks creation and editing of patient allergies.
PatFamilyHealthEdit: 74- There is no user interface in the security window for this permission. It is only used for tracking. Tracks creation and editing of patient family health history.
PatientPortal: 75- There is no user interface in the security window for this permission. It is only used for tracking. Patient Portal access of patient information. Required by EHR.
RxEdit: 76
SchoolAdminStudentEdit: 77- Assign this permission to a staff person who will administer setting up and editing Dental School Students in the system.
SchoolAdminInstructorEdit: 78- Assign this permission to a staff person who will administer setting up and editing Dental School Instructors in the system.
OrthoChartEditFull: 79- Uses date restrictions. Has a unique audit trail so that users can track specific ortho chart edits.
PatientFieldEdit: 80- There is no user interface in the security window for this permission. It is only used for tracking. Mainly used for ortho clinics.
SchoolAdminAcesss: 81- Assign this permission to a staff member who needs full access to instructor and student records. Grants the ability to view anything they can view and perform any action on their behalf.
TreatPlanDiscountEdit: 82- There is no user interface in the security window for this permission. It is only used for tracking.
UserLogOnOff: 83- There is no user interface in the security window for this permission. It is only used for tracking.
TaskEdit: 84- Allows user to edit other users' tasks.
EmailSend: 85- Allows user to send unsecured email
WebMailSend: 86- Allows user to send webmail
UserQueryAdmin: 87- Allows user to run, edit, and write non-released queries.
InsPlanChangeAssign: 88- Security permission for assignment of benefits.
ImageEdit: 89- Uses date restrictions. Allows user to flip, rotate, resize, and crop image. Also allows editing of details on the "Item Info" window. SignedImageEdit permission is also needed to edit signed images.
EhrMeasureEventEdit: 90- Allows editing of all measure events. Also used to track changes made to events.
EServicesSetup: 91- Allows users to edit settings in the eServices Setup window. Also causes the Listener Service monitor thread to start upon logging in.
FeeSchedEdit: 92- Allows users to edit Fee Schedules throughout the program. Logs editing of fee schedule properties.
ProviderFeeEdit: 93- Allows user to edit and delete provider specific fees overrides.
PatientMerge: 94- Allows user to merge patients.
ClaimHistoryEdit: 95- Only used in Claim History Status Edit
AppointmentCompleteEdit: 96- Allows user to edit a completed appointment. AppointmentCompleteDelete permission required in order to delete completed appointments.
WebMailDelete: 97- Audit trail for deleting webmail messages. There is no user interface in the security window for this permission.
RequiredFields: 98- Audit trail for saving a patient with required fields missing. There is no user interface in the security window for this permission.
ReferralMerge: 99- Allows user to merge referrals.
ProcEdit: 100- There is no user interface in the security window for this permission. It is only used for tracking. Currently only used for tracking automatically changing the IsCpoe flag on procedures. Can be enhanced to do more in the future. There is only one place where we could have automatically changed IsCpoe without a corresponding log of a different permission. That place is in the OnClosing of the Procedure Edit window. We update this flag even when the user Cancels out of it.
ProviderMerge: 101- Allows user to use the provider merge tool.
MedicationMerge: 102- Allows user to use the medication merge tool.
AccountProcsQuickAdd: 103- Allow users to use the Quick Add tool in the Account module.
ClaimSend: 104- Allow users to send claims.
TaskListCreate: 105- Allow users to create new task lists.
PatientCreate: 106 - Audit when a new patient is added.
GraphicalReportSetup: 107- Allows changing the settings for graphical repots.
PatientEdit: 108 - Audit when a patient is edited and restrict editing patients.
InsPlanCreate: 109 - Audit when an insurance plan is created. Currently only used in X12 834 insurance plan import.
InsPlanEdit: 110 - Audit when an insurance plan is edited. Currently only used in X12 834 insurance plan import.
InsPlanCreateSub: 111 - InsSub Created. Currently only used in X12 834 insurance plan import and in API.
InsPlanEditSub: 112 - Audit when an insurance subscriber is edited. Currently only used in X12 834 insurance plan import.
InsPlanAddPat: 113 - Audit when a patient is added to an insurance plan. Currently only used in X12 834 insurance plan import.
InsPlanDropPat: 114 - Audit when a patient is dropped from an insurance plan. Currently only used in X12 834 insurance plan import.
InsPlanVerifyList: 115 - Allows users to be assigned Insurance Verifications.
SplitCreatePastLockDate: 116 - Allows users to bypass the global lock date to add paysplits.
ProcComplEditLimited: 117 - DEPRECATED - Uses date restrictions. Covers editing some fields of completed procs.
ClaimDelete: 118 - Uses date restrictions based on the SecDateEntry field as the claim date. Covers deleting a claim of any status (Sent, Waiting to Send, Received, etc).
InsWriteOffEdit: 119 - Covers editing the Write-off and Write-off Override fields for claimprocs. Prevents the user from creating a claimproc to prevent subversion of an existing write-off. Prevents the user from deleting a claimproc as well, since otherwise deleting one outside the date range and creating a new one would subvert the date/days restriction. Uses date/days restriction based on the attached proc.DateEntryC; unless it's a total payment, then uses claimproc.SecDateEntry.Applies to all plan types (i.e. PPO, Category%, Capitation, etc).
ApptConfirmStatusEdit: 120 - Allows users to change appointment confirmation status.
GraphicsRemoteEdit: 121 - Audit trail for when users change graphical settings for another workstation in FormGraphics.cs.
AuditTrail: 122 - Audit Trail (Separated from SecurityAdmin permission)
TreatPlanPresenterEdit: 123 - Allows the user to change the presenter on a treatment plan.
ProviderAlphabetize: 124 - Allows users to use the Alphabetize Provider button from FormProviderSetup to permanently re-order providers.
ClaimProcReceivedEdit: 125 - Allows editing of claimprocs that are marked as received status.
StatementPatNumMismatch: 126 - Used to diagnose an error in statement creation. Audit Trail Permission Only
MobileWeb: 127 - User has access to ODTouch.
PatPlanCreate: 128 - For logging purposes only. Used when PatPlans are created and not otherwise logged.
PatPriProvEdit: 129 - Allows the user to change a patient's primary provider, with audit trail logging.
ReferralEdit: 130
PatientBillingEdit: 131 - Allows users to change a patient's billing type.
ReportProdIncAllProviders: 132 - Allows viewing annual prod inc of all providers instead of just a single provider.
ReportDaily: 133 - Allows running daily reports. DEPRECATED.
ReportDailyAllProviders: 134 - Allows viewing daily prod inc of all providers instead of just a single provider
PatientApptRestrict: 135 - Allows user to change the appointment schedule flag.
SheetDelete: 136 - Allows deleting sheets when they're associated to patients.
UpdateCustomTracking: 137 - Allows updating custom tracking on claims.
GraphicsEdit: 138 - Allows people to set graphics option for the workstation and other computers.
InsPlanOrthoEdit: 139 - Allows user to change the fields within the Ortho tab of the Ins Plan Edit window.
ClaimProcClaimAttachedProvEdit: 140 - Allows user to change the provider on claimproc when claimproc is attached to a claim.
InsPlanMerge: 141 - Audit when insurance plans are merged.
InsCarrierCombine: 142 - Allows user to combine carriers.
PopupEdit: 143 - Allows user to edit popups. A user without this permission will still be able to edit their own popups.
InsPlanPickListExisting: 144 - Allows user to select new insplan from list prior to dropping current insplan associated with a patplan.
OrthoChartEditUser: 145 - Allows user to edit their own signed ortho charts even if they don't have full permission.
ProcedureNoteUser: 146 - Allows user to edit procedure notes that they created themselves if they don't have full permission.
GroupNoteEditSigned: 147 - Allows user to edit group notes signed by other users. If a user does not have this permission, they can still edit group notes that they themselves have signed.
WikiAdmin: 148 - Allows user to lock and unlock wiki pages. Also allows the user to edit locked wiki pages.
PayPlanEdit: 149 - Allows user to create, edit, close, and delete payment plans.
ClaimEdit: 150 - Used for logging when a claim is created, cancelled, or saved.
CommandQuery: 151- Allows user to run command queries. Command queries are any non-SELECT queries for any non-temporary table.
ReplicationSetup: 152 - Gives user access to the replication setup window.
PreAuthSentEdit: 153 - Allows user to edit and delete sent and received pre-auths. Uses date restriction.
LogFeeEdit: 154 - Edit fees (for logging only). Security log entry for this points to feeNum instead of CodeNum.
LogSubscriberEdit: 155 - Log ClaimProcEdit
RecallEdit: 156 - Logs changes to recalls, recalltypes, and recaltriggers.
ProcCodeEdit: 157 - Allows users with this permission the ability to edit procedure codes. Users with the Setup permission have this by default. Logs changes made to individual proc codes (excluding fee changes) including when run from proc code tools.
AddNewUser: 158 - Allows users with this permission the ability to add new users. Security admins have this by default.
ClaimView: 159 - Allows users with this permission the ability to view claims.
RepeatChargeTool: 160 - Allows users to run the Repeat Charge Tool.
DiscountPlanAddDrop: 161 - Logs when a discount plan is added or dropped from a patient.
TreatPlanSign: 162 - Allows users with this permission the ability to sign treatment plans.
ProcExistingEdit: 163 - Allows users with this permission to edit an existing EO or EC procedure.
UnrestrictedSearch: 164 - Allows users to search for patients in all clinics even when they are restricted to clinics. Also allows user to reassign patient clinic.
ArchivedPatientEdit: 165 - Allows users to edit patient information for archived patients. This really only stops editing inside Patient Edit window. Also see ArchivedPatientSelect. Blocking user from patient selection prevents changes to all the other tables.
CommlogPersistent: 166 - HQ only. Must access from dropdown menu next to commlog button. Only for new commlog. Originally, this was written to allow commlogs to reuse a single persistent non-modal window. In about 2023, we accidentally introduced a bug that made it not reuse the original window. So now, it's multiple non-modal windows. We like the change, so we're keeping it.
VerifyPhoneOwnership: 167 - Logs when a phone number has had its ownership verified. For OD HQ only.
SalesTaxAdjEdit: 168 - HQ only. Allows users to make changes to Sales Tax type adjustments.
InsuranceVerification: 169 - Allows user to set last verified dates for insurance benefits. Also allows access to FormInsVerificationList.
CreditCardMove: 170 - Logs when a credit card is moved from one patient to another. Makes a log for both patients. Audit Trail Permission Only.
AgingRan: 171 - Logs when aging is being ran and from where.
HeadmasterSetup: 172 - HQ only. Allows user to add, edit, and delete Headmaster services and devices.
DashboardWidget: 173 - Allows user to view a specific Dashboard Widget.
NewClaimsProcNotBilled: 174 - Prevent users from creating bulk claims from the Procs Not Billed Report if past the lock date.
PatientPortalLogin: 175 - Logging into patient portal. Used for audit trail only.
FAQEdit: 176 - Allows user to create and edit FAQ objects shown by the help button(?).
FeatureRequestEdit: 177 - HQ only. Alows user to edit feature request.
TaskReminderPopup: 178- Logs when a reminder task is popped up. Used for audit trail only.
SupplementalBackup: 179 - Logs when changes are made to supplemental backup settings inside the FormBackup window.
WebSchedRecallManualSend: 180 - Logs when a user sends a Web Sched Recall through the Recall List. Used for audit trail only
PatientSSNView: 181 - Allows the user to unmask patient SSN for temporary viewing. Logs any unmasks in the audit trail
PatientDOBView: 182 - Allows the user to unmask patient DOB for temporary viewing. Logs any unmasks in the audit trail
FamAgingTruncate: 183 - Logs when the family aging table has been truncated. For audit trails only.
DiscountPlanMerge: 184 - Logs when discount plans are merged. For audit trails only.
ProcCompleteStatusEdit: 185 - Uses date restrictions. Allows user to change status of a completed procedure, or delete compeleted procedure
ProcCompleteAddAdj: 186 - Allows user to add an adjustment to a procedure (date locked)
ProcCompleteEditMisc: 187 - Misc Edit that includes "Do Not Bill Ins" and "Hide Graphics" (date locked)
ProcCompleteNote: 188 - Edit the note of a completed procedure
ProcCompleteEdit: 189 - Edit main information of a procedure that is not already covered by the other permissions. Is not all inclusive.
ProtectedLeaveAdjustmentEdit: 190 - User can create, edit, and delete time card adjustments for protected leave on their time card of the current pay period. Users that also have the Edit All Time Cards permission, have this permission for all time cards.
TimeAdjustEdit: 191 - Logs when a time card adjustment is created, edited, or deleted.
QueryMonitor: 192 - Permission for users to monitor queries
CommlogCreate: 193 - Permission for users to create commlogs.
WebFormAccess: 194 - Permission for users to modify and discard webforms
CloseOtherSessions: 195 - Close other sessions of Open Dental Cloud
RepeatChargeCreate: 196 - Permission for Repeating Charge creation.
RepeatChargeUpdate: 197 - Permission for Repeating Charge update.
RepeatChargeDelete: 198 - Permission for Repeating Charge deletion.
Zoom: 199 - User can open the zoom window and edit zoom level. Used to block remote application users who all share the same computer.
FormAdded: 200 - Permission for forms added to eclipboard mobile check in.
ImageExport: 201. Uses date restrictions.
ImageCreate: 202. Permission to Scan, Import, and Create Images.
CertificationEmployee: 203 - Permission to update Employee Certifications.
CertificationSetup: 204 - Permission to set up Certifications.
EmployerCreate: 205 - Permission to create Employers.
AllowLoginFromAnyLocation: 206 - Permission to allow users to login to ODCloud from any IP Address.
LogDoseSpotMedicationNoteEdit: 207 - Logging only. Creates an entry if a medicationpat.PatNote needs to be truncated before sending to DoseSpot.
PayPlanChargeDateEdit: 208 - Allows user to edit a payment plan charge date that has an APR.
DiscountPlanAdd: 209 - Logs when discount plans are added. For audit trails only.
DiscountPlanEdit: 210 - Logs when discount plans are edited. For audit trails only.
AllowFeeEditWhileReceivingClaim: 211 - Permission to allow users without FeeSchedEdit permission to update fee schedule while receiving claims.
ManageHighSecurityProgProperties: 212 - Permission for managing high security program properties.
CreditCardEdit: 213 - Logs when a patient's credit card is edited.
MedicationDefEdit: 214 - Allows user to edit medication definitions.
AllergyDefEdit: 215 - Allows user to edit allergy definitions.
Advertising: 216 - Allows user to setup and use Advertising features like Postcards.
TextMessageView: 217 - Allows user to view text messages.
TextMessageSend: 218 - Allows uer to send text messages.
RxMerge: 219 - Allows user to merge prescriptions.
DefEdit: 220 - Allows user to add or update Definitions.
UpdateInstall: 221 - Allows user to install Open Dental updates.
AdjustmentTypeDeny: 222 - Denies users access to specific adjustment types. Special type of permission where having this permission actually denies users access. If a usergroup has an entry for this permission, then they do not have access to the adjustment type with the defnum that is stored in grouppermission.FKey. Pattern approved by Jordan.
StatementCSV: 223 - Allows user to export statements as CSV files.
CarrierEdit: 224 - Allows users to edit carriers.
ApiSubscription: 225 - Logs when API subscriptions are added or deleted. For audit trails only.
SecurityGlobal: 226 - Logs changes to global lock date. For audit trails only.
TaskDelete: 228 - Allows user to delete tasks.
SetupWizard: 229 - Allows user to use setup wizard.
ShowFeatures: 230 - Allows user to use show features.
PrinterSetup: 231 - Allows user to setup printer.
ProviderAdd: 232 - Allows user to add provider.
ClinicEdit: 233 - Allows user to edit clinic.
ApiAccountEdit: 234 - Allows the editing of customer accounts for the ODApi via the BCM.
RegistrationKeyCreate: 235 - Logs when registration keys are created. For audit trails only.
RegistrationKeyEdit: 236 - Logs when registration keys are edited. For audit trails only.
AppointmentDelete: 237 - Allows user to delete appointments.
AppointmentCompleteDelete: 238 - Allows user to delete completed appointments.
AppointmentTypeEdit: 239 - Logs when Appointment Types are edited. For audit trails only.
TextingAccountEdit: 240 - Only used at OD HQ. Allows users to make high level changes in regards to texting.
WebChatEdit: 241 - Logs when web chat sessions are edited. For audit trails only.
SupplierEdit: 242 - Allows users to access FormSuppliers
SupplyPurchases: 243 - Logs when any supply purchases are created, placed, or deleted.
PreferenceEditBroadcastMonitor: 244 - Only used at OD HQ. Ability to edit table rows via Broadcast Monitor.
AppointmentResize: 245 - Allows users to resize appointments.
CreditCardTerminal: 246 - Logs when a user pays with a credit card. For Audit Trails only.
ViewAppointmentAuditTrail: 247 - Only for viewing the audit trail in FormEditAppointment
PayPlanChargeEdit: 248 - Logs when a user edits a payment plan charge.
ArchivedPatientSelect: 249 - Also see ArchivedPatientEdit. Blocking user from patient selection prevents changes to all the other tables besides the patient table. It's more rigorous.
CloudCustomerEdit: 250 - Only used at OD HQ. Ability to edit Cloud tab info via Broadcast Monitor.
ChanSpy: 251 - Only used at OD HQ. Ability to listen to live calls.
ClaimProcFieldsBilledToInsEdit: 252 - Ability to edit Fee Billed to Insurance or Code Sent to Insurance in FormClaimProc, whether new or existing.
AllergyMerge: 253 - Allow users to merge allergies.
AIChatAdmin: 254 - Only used at OD HQ. Currently does nothing. Reserved for future ByteBot features.
BadgeIdEdit: 255 - Allow users to edit BadgeIds in the userod table.
ChildDaycareEdit: 256 - Internal Child Daycare only. Allow users to make changes to the daycare. Only used at HQ.
PerioEditCopy: 257 - Allow users to copy perio charts in the Perio Chart window.
LicenseAccept: 258 - For audit trail only. Logs when a license is accepted by a user.
EFormEdit: 259 - Uses date restrictions but no global lock date. Also used in audit trail to log importing.
EFormDelete: 260 - Allows deleting eForms when they're attached to patients. No date restrictions.
MobileNotification: 261 - Used for logging only. Can be used to log whenever mobile notifications are inserted into the database.
ChartViewsEdit: 262 - Allows users to move chart views up and down, and add new chart views
SuperFamilyDisband: 263 - Allows disbanding of Super Families.
ImageSignatureCreate: 264 - Allows creation of note and signature for images without a signature.
SignedImageEdit: 265 - Allows editing and deletion of note and signature for images with a signature. Allows users with the ImageEdit permission to edit signed images. Allows users with the ImageDelete permission to delete signed images.
BlockoutsFlagged: 266 - There are two kinds of blockouts: those flagged as NS(no sched) or DC(disable cut/copy/paste) and those with no flag. This permission handles all the flagged blockouts, including add, edit, copy/paste, and delete. Logs an audit trail entry when a flagged blockout is added, edited, deleted, cut, copied, pasted, or cleared. See Blockouts permission for the other unflagged blockouts.
PayPlanUnlock: 267 - Payment plans have a 'Locked' checkbox. This permission allows the user to uncheck that box which will unlock the payment plan. Users without this permission will not be able to unlock a payment plan.
SendAlertsFromHQ: 268 - Allows sending notifications from HQ to customers. Only used at HQ.
TextAllEmployees: 269 - Only used at OD HQ. Ability to send mass texts to all current employees.
ProcTPEditFee: 270 - Allows editing the fee of a treatment planned procedure.
EFormImport: 271 - Only used to make log entries.
BlockoutAdd: 272 - This permission handles adding, pasting, and copying blockouts with no flag.
BlockoutDelete: 273 - This permission handles deleting, cutting, and clearing blockouts with no flag.
PhoneExtension: 274 - Only used at HQ to make audit trail entries when a change is made to a row in the Phone table.
PatientSelected: 275 - Audit when a patient has been selected.
LogScraperHQ: 276 - Only used at OD HQ. Used for making changes to which services will have their logger folders scraped.
AdvancedTextingAccountEdit: 277 - Only used at OD HQ. Allows users to make more advanced changes in regards to texting accounts (e.g. manually editing JSON). This is a more rigorous permission than TextingAccountEdit.
2 UserNum bigint(20) FK to userod.UserNum
3 LogDateTime datetime The date and time of the entry. It's value is set when inserting and can never change. Even if a user changes the date on their computer, this remains accurate because it uses server time.
4 LogText text The description of exactly what was done. Varies by permission type.
5 PatNum bigint(20) FK to patient.PatNum. Can be 0 if not applicable.
6 CompName varchar(255) .
7 FKey bigint(20) A foreign key to a table associated with the PermType. 0 indicates not in use. This is typically used for objects that have specific audit trails so that users can see all audit entries related to a particular object. Every permission using FKey should be included and implmented in the CrudAuditPerms enum so that securitylog FKeys are note orphaned. Additonaly, the tabletype will to have the [CrudTable(CrudAuditPerms=CrudAuditPerm._____] added with the new CrudAuditPerm you created. For the patient portal, it is used to indicate logs created on behalf of other patients. It's uses include: AptNum with PermType AppointmentCreate, AppointmentEdit, or AppointmentMove tracks all appointment logs for a particular appointment. CodeNum with PermType ProcFeeEdit currently only tracks fee changes. PatNum with PermType PatientPortal represents an entry that a patient made on behalf of another patient. The PatNum column will represent the patient who is taking the action. PlanNum with PermType InsPlanChangeCarrierName tracks carrier name changes. FK to rxpat.RxNum AND PermType IN(0,9,76), FK to claim.ClaimNum AND PermType IN(14,36,104,118,150), FK to payment.PayNum AND PermType=15, FK to payplan.PayPlanNum AND PermType IN(16,149,208), FK to appointment.AptNum AND PermType IN(25,26,27,96,120,237,238), FK to transaction.TransactionNum AND PermType IN(31,32), FK to document.DocNum AND PermType IN(44,89,201,202,264,265), FK to provider.ProvNum AND PermType=51, FK to procedurecode.CodeNum AND PermType IN(64,157), FK to insplan.PlanNum AND PermType IN(65,109,110,111,112,113,114), FK to patient.PatNum AND PermType=75, FK to task.TaskNum AND PermType=84, FK to mobileappdevice.MobileAppDeviceNum AND PermType=91, FK to feesched.FeeSchedNum AND PermType=92, FK to fee.FeeNum AND PermType=154, FK to procedurelog.ProcNum AND PermType=189, FK to program.ProgramNum AND PermType=212, FK to creditcard.CreditCardNum AND PermType=213.
8 LogSource tinyint(4) Enum:LogSources None, WebSched, InsPlanImport834, FHIR, PatientPortal.
None: 0 - Open Dental and unknown entities.
WebSched: 1 - GWT Web Sched application Recall version.
InsPlanImport834: 2 - X12 834 Insurance Plan Import from the Manage Module.
HL7: 3 - HL7 is an automated process which the user may not be aware of.
DBM: 4 - Database maintenance. This process creates patients which are known to be missing, but the user may not be aware that the fix involves patient recreation.
FHIR: 5 - FHIR is an automated process which the user may not be aware of.
PatientPortal: 6 - Patient Portal application.
WebSchedNewPatAppt: 7 - GWT Web Sched application New Patient Appointment version
AutoConfirmations: 8 - Automated eConfirmation and eReminders
Diagnostic: 9 - Open Dental messages created for debugging and diagnostic purposes. For example, to diagnose an unhandled exception or unexpected behavior that is otherwise too hard to diagnose.
MobileWeb: 10 - Mobile Web application.
CanadaEobAutoImport: 11 - When retrieving reports in the background of FormOpenDental
WebSchedASAP: 12 - Web Sched application for moving ASAP appointments.
OpenDentalService: 13 - OpenDentalService.
BroadcastMonitor: 14 - Broadcast Monitor.
AutoLogOff: 15 - Automatic log off from main form. Used to track when auto log off needs to kill the program to force close open forms which are blocked or slow to respond.
ODMobile: 16 - ODMobile App.
TextMessaging: 17 - Open Dental text messaging.
CareCredit: 18 - CareCredit.
WebSchedExistingPatient: 19 - GWT Web Sched application Existing Patient Appointmention version
eRx: 20 - eRx
SignupPortal: 21 - SignupPortal
EmployerImport834: 22 - X12 834 Employer Import from the Manage Module.
API: 23 - The non-FHIR API.
ClaimReceiveAutomatic: 24 - Indicates that a claim was automatically received.
PaymentPortal: 25 - Indicates that a payment was made from the Payment Portal.
Era835Import: 26 - X12 835 ERA automatic import.
ODTouch: 27 - ODTouch mobile application.
eClipboard: 28 - eClipboard mobile application.
9 DefNum bigint(20) Not used.
10 DefNumError bigint(20) Not used.
11 DateTPrevious datetime Used to store the previous DateTStamp or SecDateTEdit of the object FKey refers to.

securityloghash
Stores hashes of audit logs for detecting alteration. User not allowed to edit.
Order Name Type Summary
0 SecurityLogHashNum bigint(20) Primary key.
1 SecurityLogNum bigint(20) FK to securitylog.SecurityLogNum.
2 LogHash varchar(255) The SHA-256 hash of PermType, UserNum, LogDateTime, LogText, and PatNum, all concatenated together. This hash has length of 32 bytes encoded as base64. Used to detect if the entry has been altered outside of Open Dental.

sequencecounter
This table is used when you need the "last" of some other table row. We can't use a datetime column to get the "last" one because those are only accurate to one second. This means you would need to choose between sometimes missing an entry (a boundary gap) and always getting duplicates that you would need to track and deduplicate on the client end. Most db engineers use the PK to solve this problem, but since we allow random PKs, this also won't work. This table is the solution. It has only one row for each other table where you are trying to solve this problem. Document in this file each time you add a row.
Order Name Type Summary
0 CounterNum bigint(20) Primary key.
1 CounterName varchar(255) This must be unique, typically just the name of the table you are using it for. Example: chatmsg.
2 CounterVal bigint(20) Just the number of the last item in the other table.

sessiontoken
Stores the session token for when a user has logged into something.
Order Name Type Summary
0 SessionTokenNum bigint(20) Primary key.
1 SessionTokenHash varchar(255) The hash of the token. Hashed using SHA3_512 without a salt.
2 Expiration datetime The datetime when this token will expire.
3 TokenType tinyint(4) Enum:SessionTokenType The type of token this is.
Undefined: 0 - Should not be used in the database.
PatientPortal: 1 - The patient has logged in with a username and password. For this type, FKey is patient.PatNum.
MobileWeb: 2 - The OD user has logged in with a username and password. For this type, FKey is userod.UserNum.
ODHQ: 3 - This token is for an OD HQ service that has authenticated to us.
PatientPortalVerifyUser: 4 - The patient verified him or herself with just a name and birthdate. For this type, FKey is patient.PatNum.
TwoFactorAuth: 5 - The patient has been sent a 2FA code.
4 FKey bigint(20) FK to patient.PatNum AND TokenType IN(1,4), FK to userod.UserNum AND TokenType=2.

sheet
One sheet for one patient. A better name might be Form, but that name is not unique enough and has already been used by MS. Sheets allow customized layout for things like postcards and lab slips. They also support data that the user fills out for things like medical histories.
Order Name Type Summary
0 SheetNum bigint(20) Primary key.
1 SheetType int(11) Enum:SheetTypeEnum
LabelPatient: 0-Requires SheetParameter for PatNum. Does not get saved to db.
LabelCarrier: 1-Requires SheetParameter for CarrierNum. Does not get saved to db.
LabelReferral: 2-Requires SheetParameter for ReferralNum. Does not get saved to db.
ReferralSlip: 3-Requires SheetParameters for PatNum,ReferralNum.
LabelAppointment: 4-Requires SheetParameter for AptNum. Does not get saved to db.
Rx: 5-Requires SheetParameter for RxNum.
Consent: 6-Requires SheetParameter for PatNum.
PatientLetter: 7-Requires SheetParameter for PatNum.
ReferralLetter: 8-Requires SheetParameters for PatNum,ReferralNum.
PatientForm: 9-Requires SheetParameter for PatNum.
RoutingSlip: 10-Requires SheetParameter for AptNum. Does not get saved to db.
MedicalHistory: 11-Requires SheetParameter for PatNum.
LabSlip: 12-Requires SheetParameter for PatNum, LabCaseNum.
ExamSheet: 13-Requires SheetParameter for PatNum.
DepositSlip: 14-Requires SheetParameter for DepositNum.
Statement: 15-Requires SheetParameter for PatNum.
MedLabResults: 16-Requires SheetParameters for PatNum,MedLab,MedLabResult.
TreatmentPlan: 17-Requires SheetParameters for PatNum,TreatmentPlan.
Screening: 18-Requires SheetParameter for ScreenNum. Optional SheetParameter for PatNum if screening is associated to a patient.
PaymentPlan: 19-Used for Payment Plans to Sheets.
RxMulti: 20-Requires SheetParameters for ListRxSheet and ListRxNums.
ERA: 21
ERAGridHeader: 22
RxInstruction: 23
PatientDashboard: 24-Deprecated. No longer needed when change was made to only display one Patient Dashboard at a time. Defines the layout of a patient specific dashboard sheet. Not directly user editable. Each sheetfielddef linked to this sheet type further links a PatientDashboardWidget type sheet to this PatientDashboard sheet, allowing users to place various PatientDashboardWidgets on their personal PatientDashboard.
PatientDashboardWidget: 25-Defines the layout and elements of a Patient Dashboard. Editable from Dashboard Setup with Setup permissions.
ChartModule: 26
None: 27-Not designed to be saved to the db. Useful when needing a "none" or "all" default option for UI.
Check: 28-For printing checks
2 PatNum bigint(20) FK to patient.PatNum. A saved sheet is always attached to a patient (except deposit slip). There are a few sheets that are so minor that they don't get saved, such as a Carrier label.
3 DateTimeSheet datetime The date and time of the sheet as it will be displayed in the commlog.
4 FontSize float The default fontSize for the sheet. The actual font must still be saved with each sheetField.
5 FontName varchar(255) The default fontName for the sheet. The actual font must still be saved with each sheetField.
6 Width int(11) Width of each page in the sheet in pixels, 100 pixels per inch.
7 Height int(11) Height of each page in the sheet in pixels, 100 pixels per inch.
8 IsLandscape tinyint(4) .
9 InternalNote text An internal note for the use of the office staff regarding the sheet. Not to be printed on the sheet in any way.
10 Description varchar(255) Copied from the SheetDef description.
11 ShowInTerminal tinyint(4) Examples: 1, 2, etc. The order that this sheet will show in the Kiosk queue, or zero if not set. Also determines if it will show in eClipboard in addition to any eClipboardSheetDef. For eClipboard, this is just treated like a boolean and that actual order is ignored.
12 IsWebForm tinyint(4) True if this sheet was downloaded from the webforms service. EForms uses Status field instead.
13 IsMultiPage tinyint(4) Forces old single page behavior, ignoring page breaks.
14 IsDeleted tinyint(4) Indicates whether or not this sheet has been marked deleted.
15 SheetDefNum bigint(20) FK to sheetdef.SheetDefNum. The SheetDef that was used to create this sheet. Will be 0 if an internal sheet or if the sheet was created before 17.2. Can be 0 for sheets that were created from web forms that were associated to web form sheet defs missing this value at HQ. The original purpose of this column was to use it in connection with RefID of the Sheet and SheetDef to automate the updating of forms such as office policies when they change significantly. It is now also used when making a copy of a sheet. Also used alongside EClipboardSheetDef to determine whether patient has already filled out a form.
16 DocNum bigint(20) FK to document.DocNum. Referral letters are stored as PDF in the A to Z folder.
17 ClinicNum bigint(20) FK to clinic.ClinicNum. Used by webforms to limit the sheets displayed based on the currently selected clinic.
18 DateTSheetEdited datetime The date and time the sheet was inserted or last time someone opened the sheet and clicked OK on FormSheetFillEdit. Gets updated even if no changes were made to the sheet or sheetfields, because we don't want to do the lengthy work of comparing all fields. Only used for one thing: when editing a sheet to warn user if the sheet has been edited by someone else while you had that window open.
19 HasMobileLayout tinyint(4) If true then this Sheet has been designed for mobile and will be displayed as a mobile-friendly WebForm.
20 RevID int(11) Revision ID. Used to determine in conjunction with PrefillMode for eClipboard to determine whether to show a patient a new form or have them update their last filled out form. Must match up with SheetDef RevID to show a previously filled out form.
21 WebFormSheetID bigint(20) Only set when this sheet was created from a Web Form. FK to webforms_sheet.SheetID within the Web Forms server. Used to determine if this particular Web Form has been retrieved before in order to avoid creating duplicate sheet entries for a single Web Form.
22 DateTimeSubmitted datetime The date and time the form was submitted. Automatically updated when submitted by the patient via eClipboard. Can be manually updated in the Fill Sheet window when the form is completed in Open Dental proper. MinValue if the form has not been submitted.

sheetdef
A definition (template) for a sheet. Can be pulled from the database, or it can be internally defined.
Order Name Type Summary
0 SheetDefNum bigint(20) Primary key.
1 Description varchar(255) The description of this sheetdef.
2 SheetType int(11) Enum:SheetTypeEnum
LabelPatient: 0-Requires SheetParameter for PatNum. Does not get saved to db.
LabelCarrier: 1-Requires SheetParameter for CarrierNum. Does not get saved to db.
LabelReferral: 2-Requires SheetParameter for ReferralNum. Does not get saved to db.
ReferralSlip: 3-Requires SheetParameters for PatNum,ReferralNum.
LabelAppointment: 4-Requires SheetParameter for AptNum. Does not get saved to db.
Rx: 5-Requires SheetParameter for RxNum.
Consent: 6-Requires SheetParameter for PatNum.
PatientLetter: 7-Requires SheetParameter for PatNum.
ReferralLetter: 8-Requires SheetParameters for PatNum,ReferralNum.
PatientForm: 9-Requires SheetParameter for PatNum.
RoutingSlip: 10-Requires SheetParameter for AptNum. Does not get saved to db.
MedicalHistory: 11-Requires SheetParameter for PatNum.
LabSlip: 12-Requires SheetParameter for PatNum, LabCaseNum.
ExamSheet: 13-Requires SheetParameter for PatNum.
DepositSlip: 14-Requires SheetParameter for DepositNum.
Statement: 15-Requires SheetParameter for PatNum.
MedLabResults: 16-Requires SheetParameters for PatNum,MedLab,MedLabResult.
TreatmentPlan: 17-Requires SheetParameters for PatNum,TreatmentPlan.
Screening: 18-Requires SheetParameter for ScreenNum. Optional SheetParameter for PatNum if screening is associated to a patient.
PaymentPlan: 19-Used for Payment Plans to Sheets.
RxMulti: 20-Requires SheetParameters for ListRxSheet and ListRxNums.
ERA: 21
ERAGridHeader: 22
RxInstruction: 23
PatientDashboard: 24-Deprecated. No longer needed when change was made to only display one Patient Dashboard at a time. Defines the layout of a patient specific dashboard sheet. Not directly user editable. Each sheetfielddef linked to this sheet type further links a PatientDashboardWidget type sheet to this PatientDashboard sheet, allowing users to place various PatientDashboardWidgets on their personal PatientDashboard.
PatientDashboardWidget: 25-Defines the layout and elements of a Patient Dashboard. Editable from Dashboard Setup with Setup permissions.
ChartModule: 26
None: 27-Not designed to be saved to the db. Useful when needing a "none" or "all" default option for UI.
Check: 28-For printing checks
3 FontSize float The default fontSize for the sheet. The actual font must still be saved with each sheetField.
4 FontName varchar(255) The default fontName for the sheet. The actual font must still be saved with each sheetField.
5 Width int(11) Width of each page in the sheet in pixels, 100 pixels per inch.
6 Height int(11) Height of each page in the sheet in pixels, 100 pixels per inch.
7 IsLandscape tinyint(4) Set to true to print landscape.
8 PageCount int(11) Amount of editable space. Actual size when filling sheet may be different.
9 IsMultiPage tinyint(4) If false, forces old single page behavior which ignores page breaks.
10 BypassGlobalLock tinyint(4) Enum:BypassLockStatus Specifies whether a sheet can be created before the global lock date.
NeverBypass: 0 - Never bypass the lock date.
BypassIfZero: 1 - Bypass the lock date if the fee is zero.
BypassAlways: 2 - Always bypass the global lock date.
11 HasMobileLayout tinyint(4) If true then this Sheet has been designed for mobile and will be displayed as a mobile-friendly WebForm.
12 DateTCreated datetime The Date and time that SheetDef was created. Defaults to 0001-01-01 00:00:00 for existing sheets. When duplicating a custom sheet, if the original custom sheet's DateTCreated is 0001-01-01 00:00:00, the duplicate's DateTCreated will also be 0001-01-01 00:00:00. This is because this column is used for altering text fields' positions in PDFs.
13 RevID int(11) Revision ID. Gets updated any time a sheet field is added or deleted from a sheetdef (this includes any time a new language is added) or a static text field is changed. Used to determine in conjunction with PrefillMode for eClipboard to determine whether to show a patient a new form or have them update their last filled out form. Must match up with Sheet RevID to show a filled out form.
14 AutoCheckSaveImage tinyint(4) Indicates whether sheets created with this sheet def get copied to the imaging module when changes are made and saved. It's badly named since we don't use a checkbox anymore.
15 AutoCheckSaveImageDocCategory bigint(20) FK to definition.DefNum. Used to override the category that is selected when auto saving the sheet to the imaging module. This allows users to choose the category that a sheet is saved to on a per sheet basis.

sheetfield
One field on a sheet. Any language translations have already happened. See SheetFieldDef. How Exam Sheet replacement fields work: Fields can be placed in a static text field on a PatientLetter, ReferralSlip, or ReferralLetter. 1. For fields with FieldName (not misc), format is [ExamSheet:ExamSheetName;FieldName]. 2. For misc radiobuttons, format is [ExamSheet:ExamSheetName;RadioButtonGroupName]. 3. For other fields, format is [ExamSheet:ExamSheetName;ReportableName]. When replacing text, for misc checkboxes and radio buttons, this tag is replaced with the ReportableName if the checkbox is checked or radio button is selected, and with nothing otherwise.
Order Name Type Summary
0 SheetFieldNum bigint(20) Primary key.
1 SheetNum bigint(20) FK to sheet.SheetNum.
2 FieldType int(11) Enum:SheetFieldType OutputText, InputField, StaticText,Parameter(only used for SheetField, not SheetFieldDef),Image,Drawing,Line,Rectangle,CheckBox,SigBox,PatImage,Grid, etc.
OutputText: 0-Pulled from the database to be printed on the sheet. Or also possibly just generated at runtime even though not pulled from the database. User still allowed to change the output text as they are filling out the sheet so that it can different from what was initially generated.
InputField: 1-A blank box that the user is supposed to fill in.
StaticText: 2-This is text that is defined as part of the sheet and will never change from sheet to sheet.
Parameter: 3-Stores a parameter other than the PatNum. Not meant to be seen on the sheet. Only used for SheetField, not SheetFieldDef.
Image: 4-Any image of any size, typically a background image for a form.
Drawing: 5-One sequence of dots that makes a line. Continuous without any breaks. Each time the pen is picked up, it creates a new field row in the database.
Line: 6-A simple line drawn from x,y to x+width,y+height. So for these types, we must allow width and height to be negative or zero.
Rectangle: 7-A simple rectangle outline.
CheckBox: 8-A clickable area on the screen. It's a form of input, so treated similarly to an InputField. The X will go from corner to corner of the rectangle specified. It can also behave like a radio button
SigBox: 9-A signature box, either Topaz pad or directly on the screen with stylus/mouse. The signature is encrypted based an a hash of all other field values in the entire sheet, excluding other SigBoxes. The order is critical.
PatImage: 10-An image specific to one patient.
Special: 11-Special: Used for ToothChart, ToothChartLegend, and 3 more chart module items.
Grid: 12-Grid: Placeable grids similar to ODGrids. Used primarily in statements.
ComboBox: 13-ComboBox: Placeable combo box for selecting filled options.
ScreenChart: 14-ScreenChart: A tooth chart that is desiged for screenings.
MobileHeader: 15-MobileHeader: The parent field of a group of fields. All fields in between this field and the next MobileHeader will be grouped toghether in the mobile view. EG... "Personal", "Address and Home Phone", "Insurance". A mobile header will always have XPos,YPos,Width, and Height=0 to not show in non-mobile.
SigBoxPractice: 16-A signature box, either Topaz pad or directly on the screen with stylus/mouse. The signature is encrypted based an a hash of all other field values in the entire sheet, excluding other SigBoxes. The order is critical.
MobileStaticText: Used when we want alternate text to show for mobile. The non-mobile version would have TabOrderMobile=0 by checking the box. A mobile header will always have XPos,YPos,Width, and Height=0 to not show in non-mobile.
3 FieldName varchar(255)
4 FieldValue text For OutputText, this value is set before printing. This is the data obtained from the database and ready to print. For StaticText, this is copied from the sheetFieldDef, but in-line fields like [this] will have been filled. For an archived sheet retrieved from the database (all SheetField rows), this value will have been saved and will not be filled again automatically.For InputField, this is the filled value. If an an AutoNote attached, then this field will start out like AutoNoteNum:### until they click to fill out the autonote.Parameter fieldtype: this will store the value of the parameter. FKs are numbers. Two of the parameters allow multiple ProcNums, which are stored here as comma list.Drawing fieldtype: this will be the point data for the lines. The format would look similar to this: 45,68;48,70;49,72;0,0;55,88;etc. It's simply a sequence of points, separated by semicolons.CheckBox: it will either be an X or empty.SigBox: the first char will be 0 or 1 to indicate SigIsTopaz, and all subsequent chars will be the Signature itself.PatImage: FK to document.DocNum, or blank, or "MountNum:####" to indicate mount instead of document.ComboBox: The chosen option, semicolon, then a pipe delimited list of options such as: March;January|February|March|AprilScreenChart: Contains a semicolon delimited list of a single number followed by groups of comma separated surfaces. The first digit represents what type of ScreenChart it is. 0 = Permanent, 1 = Primary It may look like 0;S,P,N;S,S,S;... etc.Grid: Not used. All grid content is generated on the fly rather than preserved in the database. In the future, we should serialize grid content into here. But we probably have to overhaul the language translation for grids first.
5 FontSize float The fontSize for this field regardless of the default for the sheet. The actual font must be saved with each sheetField.
6 FontName varchar(255) The fontName for this field regardless of the default for the sheet. The actual font must be saved with each sheetField.
7 FontIsBold tinyint(4) .
8 XPos int(11) In pixels.
9 YPos int(11) In pixels.
10 Width int(11) The field will be constrained horizontally to this size. Not allowed to be zero.
11 Height int(11) The field will be constrained vertically to this size. Not allowed to be stored as 0. It's not allowed to be zero so that it will be visible on the designer. Set to 0 in memory by SheetUtil.CalculateHeights if image is innacessible for printing.
12 GrowthBehavior int(11) Enum:GrowthBehaviorEnum
None: Not allowed to grow. Max size would be Height and Width.
DownLocal: Can grow down if needed, and will push nearby objects out of the way so that there is no overlap.
DownGlobal: Can grow down, and will push down all objects on the sheet that are below it. Mostly used when drawing grids.
FillRightDown: Used with dynamic grids to grow the grid to fill to the right and bottom of the parent control, does not check for overlap.
FillDown: Used with dynamic grids to grow the grid to fill to the bottom of the parent control, does not check for overlap.
FillRight: Used with dynamic grids to grow the grid to fill to the right of the parent control, does not check for overlap.
FillDownFitColumns: Used with dynamic grids to grow the grid to fill vertical space in parent control and fit grid width to include all columns. Primarily for ProgressNotes grid in Chart Module.
13 RadioButtonValue varchar(255) This is only used for checkboxes that you want to behave like radiobuttons. Set the FieldName the same for each Checkbox in the group. The FieldValue will likely be X for one of them and empty string for the others. Each of them will have a different RadioButtonValue. Whichever box has X, the RadioButtonValue for that box will be used when importing. This field is not used for "misc" radiobutton groups.
14 RadioButtonGroup varchar(255) Only used for radiobuttons with FieldName set to "misc". Name which identifies the group within which the radio button belongs.
15 IsRequired tinyint(4) Set to true if this field is required to have a value before the sheet is closed.
16 TabOrder int(11) Tab stop order for all fields. Only checkboxes and input fields can have values other than 0.
17 ReportableName varchar(255) Allows reporting on misc fields using queries. This is also used in Exam Sheet replacement fields as the value to show for checkboxes and radiobuttons. See summary of this table for explanation of how they can be used in Exam Sheet replacement fields.
18 TextAlign tinyint(4) Text Alignment for text fields.
19 ItemColor int(11) Text color, line color, rectangle color. -16777216 is Black. 0 means Empty, which we attempt to treat as black if it happens.
20 DateTimeSig datetime DateTime that a sheet was signed.
21 IsLocked tinyint(4) Only used in Output and Static fields. Gets locked in the setup and cannot be edited at all once it is in the SheetFillEdit window. Example might be for text of a consent form.
22 TabOrderMobile int(11) Tab stop order for all fields of a mobile sheet. One-based. Only mobile fields can have values other than 0. If all SheetFieldDefs for a given SheetField are 0 then assume that this sheet has no mobile-specific view.
23 UiLabelMobile text Each input field for a mobile will need a corresponding UI label. This is what the user sees as the label describing what this input is for. EG "First Name:, Last Name:, Address, etc." For check boxes, this field should be blank otherwise a group box will be displayed to the user with this text. For radio buttons, this field should be set to the text of the group caption.
24 UiLabelMobileRadioButton text Human-readable label that will be displayed for radio button or checkbox item. Cannot use UiLabelMobile for this purpose as it is already dedicated to the radio group header that groups radio button items together.
25 SheetFieldDefNum bigint(20) FK to sheetfielddef.SheetFieldDefNum. Only used in the Patient Forms window when the Prefill button is clicked.
26 CanElectronicallySign tinyint(4) When true, allows a user to sign a signature box electronically. ESign/DigitallySign means clicking instead of using a stylus to write out the sig. If IsSigProvRestricted, then the E button for digitally signing won't be visible unless a provider is signed in. There is a completely separate Pref.SignatureAllowDigital which only applies to signing procedures etc., not sheets.
27 IsSigProvRestricted tinyint(4) When true, only allows the signature box to be signed by a provider. There is a completely separate Pref.NotesProviderSignatureOnly for doing the same thing in procedures etc., not sheets.
28 UserSigned bigint(20) FK to userod.UserNum. Only for sig boxes. Stores the OD user that signed. Only stores it if the user.ProvNum > 0. Only needed when user clicks to change user before signing. Will have a value of 0 for sheets with sigboxes which have "Allow Electronic Signatures" or "Restrict Signature to Providers" left unchecked (ex. MedicalHistory sheet sigbox). In the richtextbox for drawing SigBoxes in FormSheetFillEdit.cs: "By: " will not show with the username if UserSigned value is 0. This is only used in sheets because other places like FormProcEdit can store in procnote.UserNum. Sheets is also the only places where the change user button shows within the sig box.

sheetfielddef
One field on a sheetDef. Language translations are handled by the LanguagePat table. See SheetField. How Exam Sheet replacement fields work: Fields can be placed in a static text field on a PatientLetter, ReferralSlip, or ReferralLetter. 1. For fields with FieldName (not misc), format is [ExamSheet:ExamSheetName;FieldName]. 2. For misc radiobuttons, format is [ExamSheet:ExamSheetName;RadioButtonGroupName]. 3. For other fields, format is [ExamSheet:ExamSheetName;ReportableName].
Order Name Type Summary
0 SheetFieldDefNum bigint(20) Primary key.
1 SheetDefNum bigint(20) FK to sheetdef.SheetDefNum.
2 FieldType int(11) Enum:SheetFieldType OutputText, InputField, StaticText,Parameter(only used for SheetField, not SheetFieldDef),Image,Drawing,Line,Rectangle,CheckBox,SigBox,PatImage,Grid, etc.
OutputText: 0-Pulled from the database to be printed on the sheet. Or also possibly just generated at runtime even though not pulled from the database. User still allowed to change the output text as they are filling out the sheet so that it can different from what was initially generated.
InputField: 1-A blank box that the user is supposed to fill in.
StaticText: 2-This is text that is defined as part of the sheet and will never change from sheet to sheet.
Parameter: 3-Stores a parameter other than the PatNum. Not meant to be seen on the sheet. Only used for SheetField, not SheetFieldDef.
Image: 4-Any image of any size, typically a background image for a form.
Drawing: 5-One sequence of dots that makes a line. Continuous without any breaks. Each time the pen is picked up, it creates a new field row in the database.
Line: 6-A simple line drawn from x,y to x+width,y+height. So for these types, we must allow width and height to be negative or zero.
Rectangle: 7-A simple rectangle outline.
CheckBox: 8-A clickable area on the screen. It's a form of input, so treated similarly to an InputField. The X will go from corner to corner of the rectangle specified. It can also behave like a radio button
SigBox: 9-A signature box, either Topaz pad or directly on the screen with stylus/mouse. The signature is encrypted based an a hash of all other field values in the entire sheet, excluding other SigBoxes. The order is critical.
PatImage: 10-An image specific to one patient.
Special: 11-Special: Used for ToothChart, ToothChartLegend, and 3 more chart module items.
Grid: 12-Grid: Placeable grids similar to ODGrids. Used primarily in statements.
ComboBox: 13-ComboBox: Placeable combo box for selecting filled options.
ScreenChart: 14-ScreenChart: A tooth chart that is desiged for screenings.
MobileHeader: 15-MobileHeader: The parent field of a group of fields. All fields in between this field and the next MobileHeader will be grouped toghether in the mobile view. EG... "Personal", "Address and Home Phone", "Insurance". A mobile header will always have XPos,YPos,Width, and Height=0 to not show in non-mobile.
SigBoxPractice: 16-A signature box, either Topaz pad or directly on the screen with stylus/mouse. The signature is encrypted based an a hash of all other field values in the entire sheet, excluding other SigBoxes. The order is critical.
MobileStaticText: Used when we want alternate text to show for mobile. The non-mobile version would have TabOrderMobile=0 by checking the box. A mobile header will always have XPos,YPos,Width, and Height=0 to not show in non-mobile.
3 FieldName varchar(255) FieldName is used differently for different FieldTypes. For OutputText, each sheet typically has a main datatable type. For example statements correspond to the statment table. See SheetFieldsAvailable.GetList() for available values.     If the output field exactly matches a column from the main table this will be the <ColumnName>. For example, "FName" on patient Forms.     If the output field exactly matches a column from a different table this will be the <tablename>.<ColumnName>. For example, appt.Note on Routing Slips.     If the output field is not a database column it must start with a lowercase letter. For example, "statementReceiptInvoice" on Statements.For InputField, these are hardcoded to correspond to DB fields, for example "FName" corresponsds to patient.FName. See SheetFieldsAvailable.GetList() for available values.For Image, this file name with extention, for example "image1.jpg". Some image names are handled specially, for example "Patient Info.gif". Images are stored in <imagefolder>\SheetImages\image1.jpg.For CheckBox, this groups checkboxes together so that only one per group can be checked.For PatImage, this is the name of the DocCategory.For Special, identifies the type of special field. Currently only ToothChart and ToothChartLegend.For Grid, this is the specific type of grid. See SheetUtil.GetDataTableForGridType() for values. For example "StatementPayPlan". Column names use hard coded display fields that can be found in SheetUtil.GetGridColumnAvailable().For all other fieldtypes, FieldName is blank or irrelevant.
4 FieldValue text For StaticText, this text can include bracketed fields, like [nameLF]. For OutputText and InputField, this will be blank. If an InputField has an AutoNote attached, then this field will be AutoNoteNum:'value'. Example AutoNoteNum:268.For CheckBoxes, either X or blank. Even if the checkbox is set to behave like a radio button. For Pat Images, this is blank. The filename of a PatImage will later be stored in SheetField.FieldValue.For ComboBoxes, the chosen option, semicolon, then a pipe delimited list of options such as: March;January|February|March|AprilFor ScreenCharts, a semicolon delimited list of comma separated surfaces. It may look like S,P,N;S,S,S;... etc.For Grid, not used. All grid content is generated on the fly rather than preserved in the database. In the future, we should serialize grid content into here. But we probably have to overhaul the language translation for grids first.
5 FontSize float The fontSize for this field regardless of the default for the sheet. The actual font must be saved with each sheetField.
6 FontName varchar(255) The fontName for this field regardless of the default for the sheet. The actual font must be saved with each sheetField.
7 FontIsBold tinyint(4) .
8 XPos int(11) In pixels.
9 YPos int(11) In pixels.
10 Width int(11) The field will be constrained horizontally to this size. Not allowed to be zero. When SheetType is associated to a dynamic layout def and GrowthBehavior is set to a dynamic value this value represents the corresponding controls minimum width.
11 Height int(11) The field will be constrained vertically to this size. Not allowed to be 0. It's not allowed to be zero so that it will be visible on the designer. When SheetType is associated to a dynamic layout def and GrowthBehavior is set to a dynamic value this value represents the corresponding controls minimum height.
12 GrowthBehavior int(11) Enum:GrowthBehaviorEnum
None: Not allowed to grow. Max size would be Height and Width.
DownLocal: Can grow down if needed, and will push nearby objects out of the way so that there is no overlap.
DownGlobal: Can grow down, and will push down all objects on the sheet that are below it. Mostly used when drawing grids.
FillRightDown: Used with dynamic grids to grow the grid to fill to the right and bottom of the parent control, does not check for overlap.
FillDown: Used with dynamic grids to grow the grid to fill to the bottom of the parent control, does not check for overlap.
FillRight: Used with dynamic grids to grow the grid to fill to the right of the parent control, does not check for overlap.
FillDownFitColumns: Used with dynamic grids to grow the grid to fill vertical space in parent control and fit grid width to include all columns. Primarily for ProgressNotes grid in Chart Module.
13 RadioButtonValue varchar(255) This is only used for checkboxes that you want to behave like radiobuttons. Set the FieldName the same for each Checkbox in the group. The FieldValue will likely be X for one of them and empty string for the others. Each of them will have a different RadioButtonValue. Whichever box has X, the RadioButtonValue for that box will be used when importing. This field is not used for "misc" radiobutton groups.
14 RadioButtonGroup varchar(255) Only used for radiobuttons with FieldName set to "misc". Name which identifies the group within which the radio button belongs.
15 IsRequired tinyint(4) Set to true if this field is required to have a value before the sheet is closed.
16 TabOrder int(11) The Bitmap should be converted to Base64 using POut.Bitmap() before placing in this field. Not stored in the database. Only used when uploading SheetDefs to the web server.
17 ReportableName varchar(255) Allows reporting on misc fields using queries. See summary of this table for explanation of how they can be used in Exam Sheet replacement fields.
18 TextAlign tinyint(4) Text Alignment for text fields.
19 IsPaymentOption tinyint(4) Used to determine if the field should be hidden when printing statements.
20 ItemColor int(11) Text color, line color, rectangle color.
21 IsLocked tinyint(4) Only used in Output and Static fields. Gets locked in the setup and cannot be edited at all once it is in the SheetFillEdit window. Example might be for text of a consent form.
22 TabOrderMobile int(11) Tab stop order for all fields of a mobile sheet. One-based. Only mobile fields can have values other than 0. If all SheetFieldDefs for a given SheetField are 0 then assume that this sheet has no mobile-specific view.
23 UiLabelMobile text Each input field for a mobile will need a corresponding UI label. This is what the user sees as the label describing what this input is for. EG "First Name:, Last Name:, Address, etc." For check boxes, this field should be blank otherwise a group box will be displayed to the user with this text. For radio buttons, this field should be set to the text of the group caption.
24 UiLabelMobileRadioButton text Human-readable label that will be displayed for radio button or checkbox item. Cannot use UiLabelMobile for this purpose as it is already dedicated to the radio group header that groups radio button items together. This is also used in Exam Sheet replacement fields as the value to show for checkboxes and radiobuttons.
25 LayoutMode tinyint(4) Enum:SheetFieldLayoutMode Just used in Chart module for ecw or medical. Otherwise, use SheetFieldLayoutMode.Default. TP mode in Chart module is no longer included here.
Default: Valid for every SheetTypeEnum. When SheetTypeEnum is associated to a dynamic layout this is the way the layout will show by default.
TreatPlan: Deprecated. Chart module dynamic layout when we are viewing the SheetFieldLayoutMode.Default and the Treatment Plans checkbox is checked.
Ecw: Chart module dynamic layout when ECW is enabled.
EcwTreatPlan: Deprecated. Chart module dynamic layout when ECW is enabled and the Treatment Plans checkbox is checked.
Orion: Deprecated. Chart module dynamic layout when Orion is enabled.
OrionTreatPlan: Deprecated. Chart module dynamic layout when Orion is enabled and the Treatment Plans checkbox is checked.
MedicalPractice: Chart module dynamic layout when current clinic is associated to a medical clinic or practice.
MedicalPracticeTreatPlan: Deprecated. Chart module dynamic layout when current clinic is associated to a medical clinic or practice and the Treatment Plans checkbox is checked.
26 Language varchar(255) Blank by default. When set, patient.Language will attempt to match to SheetFieldDefs with a matching Language value.
27 CanElectronicallySign tinyint(4) When true, allows a user to sign a signature box electronically which means clicking instead of using a stylus to write out the sig. If IsSigProvRestricted, then the E button for digitally signing won't be visible unless a provider is signed in. There is a completely separate Pref.SignatureAllowDigital which only applies to signing procedures etc., not sheets.
28 IsSigProvRestricted tinyint(4) When true, only allows the signature box to be signed by a provider. There is a completely separate Pref.NotesProviderSignatureOnly for doing the same thing in procedures etc., not sheets.

sigbutdef
This defines the light buttons on the left of the main screen.
Order Name Type Summary
0 SigButDefNum bigint(20) Primary key.
1 ButtonText varchar(255) The text on the button
2 ButtonIndex smallint(6) 0-based index defines the order of the buttons.
3 SynchIcon tinyint 0=none, or 1-9. The cell in the 3x3 tic-tac-toe main program icon that is to be synched with this button. It will light up or clear whenever this button lights or clears.
4 ComputerName varchar(255) Blank for the default buttons. Or contains the computer name for the buttons that override the defaults.
5 SigElementDefNumUser bigint(20) FK to sigelementdef.SigElementDefNum
6 SigElementDefNumExtra bigint(20) FK to sigelementdef.SigElementDefNum
7 SigElementDefNumMsg bigint(20) FK to sigelementdef.SigElementDefNum

sigelementdef
This defines the items that will be available for clicking when composing a manual message. Also, these are referred to in the button definitions as a sequence of elements.
Order Name Type Summary
0 SigElementDefNum bigint(20) Primary key.
1 LightRow tinyint If this element should cause a button to light up, this would be the row. 0 means none.
2 LightColor int(11) If a light row is set, this is the color it will turn when triggered. Ack sets it back to white. Note that color and row can be in two separate elements of the same signal.
3 SigElementType tinyint Enum:SignalElementType 0=User,1=Extra,2=Message.
User: 0-To and From lists. Not tied in any way to the users that are part of security.
Extra: Typically used to insert "family" before "phone" signals.
Message: Elements of this type show in the last column and trigger the message to be sent.
4 SigText varchar(255) The text that shows for the element, like the user name or the two word message. No long text is stored here.
5 Sound mediumtext The sound to play for this element. Wav file stored in the database in string format until "played". If empty string, then no sound.
6 ItemOrder smallint(6) The order of this element within the list of the same type.

sigmessage
These are messages sent and received in the Manage module. Affects the main icon with the 9 boxes. Also causes a recorded sound to play so that everyone knows who the message is for.
Order Name Type Summary
0 SigMessageNum bigint(20) Primary key.
1 ButtonText varchar(255) The text on the button
2 ButtonIndex int(11) 0-based index defines the order of the buttons.
3 SynchIcon tinyint 0=none, or 1-9. The cell in the 3x3 tic-tac-toe main program icon that is to be synched with this button. It will light up or clear whenever this button lights or clears.
4 FromUser varchar(255) Text version of 'user' this message was sent from, which can actually be any description of a group or individual.
5 ToUser varchar(255) Text version of 'user' this message was sent to, which can actually be any description of a group or individual.
6 MessageDateTime datetime Automatically set to the date and time upon insert. Uses server time.
7 AckDateTime datetime This date time will get set as soon as this message has been acknowledged. How lights get turned off.
8 SigText varchar(255) The text that shows for the element, like the user name or the two word message. No long text is stored here.
9 SigElementDefNumUser bigint(20) FK to sigelementdef.SigElementDefNum
10 SigElementDefNumExtra bigint(20) FK to sigelementdef.SigElementDefNum
11 SigElementDefNumMsg bigint(20) FK to sigelementdef.SigElementDefNum

signalod
Open Dental uses a memory cache for many common small tables that don't change very often. If one computer makes a change to a cache table, then they insert a row in this table to indicate to all other computers that they need to update their cache for the given table. Certain entries in this table can also trigger the Appointments module to refresh if that date is currently showing for any computer. To add a row here, use DataValid.SetInvalid. See the discussion in Cache.cs. It seems like the rows that use KeyType and FKey seem to be treated very differently from the rows that use InvalidType for the cache.
Order Name Type Summary
0 SignalNum bigint(20) Primary key.
1 DateViewing date If IType=Date, then this is the affected date in the Appointments module.
2 SigDateTime datetime The exact server time when this signal was entered into db. This does not need to be set by sender since it's handled automatically.
3 FKey bigint(20) Usually identifies the object that was edited to cause the signal to be created. Can be used for special scenarios based on the FKeyType. E.g. for SmsMsgUnreadCount, this represents a count, not an FK. FK to tasklist.TaskListNum AND FKeyType=0, FK to webchatsession.WebChatSessionNum AND FKeyType=0 AND IType=89, FK to job.JobNum AND FKeyType=2, FK to operatory.OperatoryNum AND FKeyType=3, FK to provider.ProvNum AND FKeyType=5, FK to sigmessage.SigMessageNum AND FKeyType=6, FK to task.TaskNum AND FKeyType=8, FK to patient.PatNum AND FKeyType=11, FK to emailaddress.EmailAddressNum AND FKeyType=13, FK to computer.ComputerNum AND FKeyType=15, FK to clinic.ClinicNum AND FKeyType=16.
4 FKeyType varchar(255) Enum:KeyType Describes the type of object referenced by the FKey.
Undefined: Probably represented by empty string, but possibly by "Undefined". For this type, FKey is tasklist.TaskListNum and webchatsession.WebChatSessionNum.
FeeSched:
Job: For this type, FKey is job.JobNum.
Operatory: For this type, FKey is operatory.OperatoryNum.
PhoneExtension: HQ only. FKey will be the extension of the corresponding phone that is invalid. Specifically used to talk to the PhoneTrackingServer in order to let it know that an extension has changed (e.g. queue change).
Provider: For this type, FKey is provider.ProvNum.
SigMessage: For this type, FKey is sigmessage.SigMessageNum.
SmsMsgUnreadCount: Special KeyType that does not use a FK but instead will set FKey to a count of unread messages. Used along side the SmsTextMsgReceivedUnreadCount InvalidType.
Task: For this type, FKey is task.TaskNum.
ProcessId: Used to identify which signals a form can ignore. If the FKey==Process.GetCurrentProcess().Id then this process sent it so ignore it. Used in FormTerminal, FormTerminalManager, and FormSheetFillEdit (for forms being filled at a kiosk).
ConfKick: Used to notify the phone tracking server to kick all users out of a conference room.
PatNum: Used in AccModule, TPModule, and PerioExams. For this type, FKey is patient.PatNum.
UserOd: Deprecated. Indicates Signalod pertains to a specific UserOd.
EmailAddress: Used to indicate that this specific email address is what this signal is for. For this type, FKey is emailaddress.EmailAddressNum.
ChanSpy: This is HQ specific and will be used to listen in on live calls
Computer: Used to specify that the passed-in computerNum is what the signal is for. For this type, FKey is computer.ComputerNum.
5 IType tinyint(4) Enum:InvalidType Indicates what cache or entity has been changed.
None: 0
Date: 1 Deprecated. Not used with any other flags
AllLocal: 2 Deprecated. Inefficient. All flags combined except Date and Tasks.
Task: 3 Not used with any other flags. Used to just indicate added tasks, but now it indicates any change at all except those where a popup is needed. If we also want a popup, then use TaskPopup.
ProcCodes: 4
Prefs: 5
Views: 6 ApptViews, ApptViewItems, AppointmentRules, ProcApptColors.
AutoCodes: 7
Carriers: 8
ClearHouses: 9
Computers: 10
InsCats: 11
Employees: 12- Also includes payperiods.
StartupOld: 13- Deprecated.
Defs: 14- Defs
Email: 15. Templates and addresses, but not messages.
Fees: 16. Obsolete
Letters: 17
QuickPaste: 18- Invalidates quick paste notes and cats.
Security: 19- Userods, UserGroups, UserGroupAttaches, and GroupPermissions
Programs: 20 - Also includes program properties.
ToolButsAndMounts: 21- Also includes MountDefs and ImagingDevices
Providers: 22- Also includes clinics.
ClaimForms: 23- Also includes ClaimFormItems.
ZipCodes: 24
LetterMerge: 25
DentalSchools: 26- Includes SchoolClass, SchoolCourse, SchoolCourseDef, SchoolCourseSched, and ReqNeeded.
Operatories: 27
TaskPopup: 28
Sites: 29
Pharmacies: 30
Sheets: 31 - Also include EForms.
RecallTypes: 32
FeeScheds: 33
PhoneNumbers: 34. This is used internally by OD, Inc with the phonenumber table and the phone server.
Signals: 35. Deprecated, use SigMessages instead. Old summary: Signal/message defs
DisplayFields: 36. And ChartViews.
PatFields: 37. And ApptFields and PatFieldPickItems.
AccountingAutoPays: 38
ProcButtons: 39
Diseases: 40. Includes ICD9s.
Languages: 41. Includes LanguagePats
AutoNotes: 42
ElectIDs: 43
Employers: 44
ProviderIdents: 45
ShutDownNow: 46
InsFilingCodes: 47
ReplicationServers: 48
Automation: 49
PhoneAsteriskReload: 50. This is used internally by OD, Inc with the phone server to trigger the phone system to reload after changing which call groups users are in. Also used when sending a signal to the phone tracking server to kick users in conference rooms. This will be used additionally to listen in on live calls.
TimeCardRules: 51
Vaccines: 52. Includes DrugManufacturers and DrugUnits.
HL7Defs: 53. Includes all 4 HL7Def tables.
DictCustoms: 54
Wiki: 55. Caches the wiki master page and the wikiListHeaderWidths
Sops: 56. SourceOfPayment
EhrCodes: 57. In-Memory table used for hard-coded codes and CQMs
AppointmentTypes: 58. Used to override appointment color. Might be used for other appointment attributes in the future.
Medications: 59. Caches the medication list to stop from over-refreshing and causing slowness.
SmsTextMsgReceivedUnreadCount: 60. This is a special InvalidType which indicates a refresh, but also includes the data to be refreshed inside of the signalod.FKey field.
ProviderErxs: 61
Jobs: 62. This is used internally by OD, refreshes the jobs windows in the Job Manager.
JobPermission: 63. This is used internally by OD, refreshes the jobRoles
StateAbbrs: 64. Caches the StateAbbrs used for helping prefill state fields and for state validations.
RequiredFields: 65
Ebills: 66
UserClinics: 67. Not used.
Appointment: 68. Replaces the deprecated "Date" invalid type for more granularity on invalid signals.
OrthoChartTabs: 69 Also includes OrthoHardwareSpecs.
SigMessages: 70. A user either acknowledged or added to the messaging buttons system.
AlertSubs: 71. Deprecated.
AlertItems: 72. THIS IS NOT CACHED. But is used to make server run the alert logic in OpenDentalService.
VoiceMails: 73. This is used internally by OD HQ, refreshes the voice mails.
Kiosk: 74. Used to refresh the active kiosk grid in FormTerminalManager and loaded patient with list of forms in FormTerminal.
ClinicPrefs: 75
EmailMessages: 76. Not addresses or templates, but inbox and sent messages.
WebSchedRecallReminders: 77. The eConnector has finished sending web sched recall reminders.
SmsBlockPhones: 78.
AlertCategories: 79.
AlertCategoryLinks: 80.
UnfinalizedPayMenuUpdate: 81. Used in updating menu item in report menu.
ClinicErxs: 82. Used for validating clinics for eRx.
DisplayReports: 83.
UserQueries: 84.
Schedules: 85. Schedules are not cached, but alerts other workstations if the schedules were changed
PhoneComps: 86. This is used internally by OD, refreshes the computer / extension linker table.
PhoneMap: 87. Used internally by OD, refreshes call center map associated with tables MapArea and MapAreaContainer.
SmsPhones: 88.
WebChatSessions: 89. Chat support through our website at http://opendental.com/contact.html. Used to indicate a new session has been created, an existing session has been destroyed, or messages inside the session have changed. For this type, FKey is webchatsession.WebChatSessionNum.
TaskList: 90. Used for tracking refreshes on tabs 'for [User]', 'New for [User]', 'Main', 'Reminders'.
TaskAuthor: 91. Used for tracking refreshes on tab 'Open Tasks'.
TaskPatient: 92. Used for tracking refreshes on tab 'Patient Tasks'.
Referral: 93. Used for refreshing the Referral cache.
ProcMultiVisits: 94. Used for refreshing "In Process" pseudo procedure statuses.
ProviderClinicLink: 95. Used for refreshing the ProviderClinicLink cache.
EClipboard: 96. Used for refreshing the KioskManager with eClipboard information.
TPModule: 97. Used for refreshing the TP module for a specific patient. PatNum used in FKey.
ActiveInstance: 98. Used for closing Cloud sessions. ActiveInstanceNum is the Fkey.
PhoneEmpDefaults: 99. Used internally by OD HQ.
UserOdPrefs: 100. Not used.
JobTeams: 101. Used internally by OD HQ.
AccModule: 102. Used to refresh the Account Module for a specific patient. PatNum used in FKey.
LimitedBetaFeature: 103. Used for limitedBetaFeature Cache.
PerioExams: 104. Used to refresh Perio Chart. patient.PatNum used in FKey.
EmailInboxRetrieve: 105.
ApiSubscriptions: 106. Table in db is apisubscriptions. Small and changes rarely, but all workstations must know about the change.
ERoutingDef: 107. Used as template for Patient eRouting
FlowActionDef: 108. Used as template for Patient eRouting Actions
FlowDefLink: 109. Used to link PatientFlowDefs with other objects: appointments, appt types, billing types, etc.
CodeGroups: 110. Group of codes used with frequency limitations.
BillingList: 111. Used to refresh the billing list when it's open and a patient's account was adjusted. Works immediately on the current computer and at the signal interval of about 10 seconds on other computers.
ConnectionStoreClear: 112. Indicates that database connection settings have changed and the cached connections should be reinitialized.
Children: 113. Used to keep the daycare map and parent check in/out window synced. Has nothing to do with the cache.
Print: 114. Instructs a specific computer to print the RemotePrintRequest that is attached as json. This signal is generated by eConnector in response to a print request from ODTouch or possibly others.
WebChatAiAssistants: 115. This is used internally by OD, refreshes the AI assistant list. Fkey is not used.
MassEmail: 116. Used to refresh the mass email upload form.
6 RemoteRole tinyint(4) Enum:MiddleTierRole The MiddleTierRole of the instance that created this signal.
ClientDirect: This dll is on a local workstation, and this workstation has successfully connected directly to the database with no Middle Tier layer.
ClientMT: Workstation that is getting its data from the Middle Tier web service on the server.
ServerMT: This dll is part of the Middle Tier web server that is providing data via web services.
7 MsgValue text Message value of the signal.

site
Generally used by mobile clinics to track the temporary locations where treatment is performed, such as schools, nursing homes, and community centers. Replaces the old school table.
Order Name Type Summary
0 SiteNum bigint(20) Primary key.
1 Description varchar(255) .
2 Note text Notes could include phone, contacts, etc.
3 Address varchar(100)
4 Address2 varchar(100) Optional second address line.
5 City varchar(100)
6 State varchar(100) 2 Char in USA. Used to store province for Canadian users.
7 Zip varchar(100) Postal code.
8 ProvNum bigint(20) FK to provider.ProvNum. Default provider for the site.
9 PlaceService tinyint(4) Enum:PlaceOfService Describes where the site is located.
Office: 0. Code 11
PatientsHome: 1. Code 12
InpatHospital: 2. Code 21
OutpatHospital: 3. Code 22
SkilledNursFac: 4. Code 31
CustodialCareFacility: 5. Code 33. In X12, a similar code AdultLivCareFac 35 is mentioned.
OtherLocation: 6. Code 99. We use 11 for office.
MobileUnit: 7. Code 15
School: 8. Code 03
MilitaryTreatFac: 9. Code 26
FederalHealthCenter: 10. Code 50
PublicHealthClinic: 11. Code 71
RuralHealthClinic: 12. Code 72
EmergencyRoomHospital: 13. Code 23
AmbulatorySurgicalCenter: 14. Code 24
TelehealthOutsideHome: 15. Code 02.
TelehealthInHome: 16. Code 10
OutreachSiteOrStreet: 17. Code 27

smsblockphone
If a number is entered in this table, then any incoming text message will not be entered into the database.
Order Name Type Summary
0 SmsBlockPhoneNum bigint(20) Primary key.
1 BlockWirelessNumber varchar(255) The phone number to be blocked.

smsfrommobile
A Mobile Originating SMS bound for the office. Will usually be a re-constructed message.
Order Name Type Summary
0 SmsFromMobileNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum. Not sent from HQ.
2 ClinicNum bigint(20) FK to clinic.ClinicNum.
3 CommlogNum bigint(20) FK to commlog.CommlogNum. Not sent from HQ.
4 MsgText text Contents of the message.
5 DateTimeReceived datetime Date and time message was inserted into the DB. Not sent from HQ.
6 SmsPhoneNumber varchar(255) This is the Phone Number of the office that the mobile device sent a message to.
7 MobilePhoneNumber varchar(255) This is the PhoneNumber that this message was sent from.
8 MsgPart int(11) Message part sequence number. For single part messages this should always be 1. For messages that exist as multiple parts, due to staggered delivery of the parts, this will be a number between 1 and MsgTotal.
9 MsgTotal int(11) Total count of message parts for this single message identified by MsgRefID. For single part messages this should always be 1.
10 MsgRefID varchar(255) Each part of a multipart message will have the same MsgRefID.
11 SmsStatus tinyint(4) Enum:SmsFromStatus .
ReceivedUnread: 0
ReceivedRead: 1
12 Flags varchar(255) Words surrounded by spaces, flags should be all lower case. This allows simple querrying. Example: " junk recall " allows you to write "WHERE Flags like "% junk %" without having to worry about commas. Also, adding and removing tags is easier. Example: Flags=Flags.Replace(" junk ","");
13 IsHidden tinyint(4) Messages are not deleted, they can only be hidden.
14 MatchCount int(11)
15 GuidMessage varchar(255) FK to confirmationrequest.GuidMessageFromMobile. Generated at HQ when the confirmation pending is terminated with confirmation text message.
16 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.

smsphone
A phone number used to send and receive SMS. When clinics is enabled all SmsPhones with clinic num 0 should be updated to have clinic num of the lowest numbered clinic. When clinics are disabled, all SmsPhones with the lowest numbered clinic num should be re-associated to clinic number 0.
Order Name Type Summary
0 SmsPhoneNum bigint(20) Primary key.
1 ClinicNum bigint(20) FK to clinic.ClinicNum.
2 PhoneNumber varchar(255) String representation of the phone number in international format. Ex: 15035551234 This field should not contain any formatting characters.
3 DateTimeActive datetime Date and time this phone number became active.
4 DateTimeInactive datetime Date and time this phone number became inactive. Once inactive, the phone is dead and cannot be reactivated. A new number will have to be purchased.
5 InactiveCode varchar(255) Used to indicate why this phone number was made inactive.
6 CountryCode varchar(255) Country linked to this phone's clinic at the instant that this phone is created. Based on ISO31661.

smstomobile
Messages are only inserted into this table after they are accepted by ODHQ.
Order Name Type Summary
0 SmsToMobileNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum
2 GuidMessage varchar(255) GUID. Uniquely identifies this message and is used for tracking message status.
3 GuidBatch varchar(255) GUID. When sending batch messages, all messages will have the same batch GUID that should be the GUID of the first message within the batch.
4 SmsPhoneNumber varchar(255) This is the sending phone number in international format. Each office may have several different numbers that they use.
5 MobilePhoneNumber varchar(255) The phone number that this message was sent to. Must be kept in addition to the PatNum.
6 IsTimeSensitive tinyint(4) Set to true if this message should "jump the queue" and be sent asap.
7 MsgType tinyint(4) Enum:SmsMessageSource This is used to identify where in the program this message originated from.
Undefined: 0. Should not be used. Short Code Supported: NO
DirectSms: 1. This should be used for one-off messages that might be sent as direct communication with patient. Short Code Supported: NO
Recall: 2. Used when sending single or batch recall SMS from the Open Dental program. Short Code Supported: YES
Reminder: 3. Used when sending single or batch reminder SMS. Short Code Supported: YES
TestNoCharge: 4. Used when sending a test message from HQ. Customer will not be charged for this message. Short Code Supported: NO
Confirmation: 5. Used when sending confirmations. Short Code Supported: YES
ConfirmationRequest: 6. Used when sending confirmation requests. Will be the subject of automated response processing. Short Code Supported: YES
RecallAuto: 7. Used when sending batch recall SMS from the eConnector. Short Code Supported: YES
AsapManual: 8. Used when sending single or batch SMS from the clicking the Text button on the ASAP window. Short Code Supported: YES
WebSchedASAP: 9. Sending an SMS for the Web Sched ASAP feature. Short Code Supported: YES
Verify: 10. Sending an SMS for the Web Sched verify feature. Short Code Supported: YES
Statements: 11. Sending an SMS to let the patient know that a statement is available. Short Code Supported: YES
VerifyWSNP: 12. Sending an SMS to let the patient know that a statement is available. Short Code Supported: YES
Headmaster: 13. Sent from the Headmaster app. Short Code Supported: NO
NoReply: 14. Used with Short Codes to send an AutoReply message (not a monitored line). Short Code Supported: N/A
ODMobile: 15. Send from ODMobile app. Short Code Supported: NO
ApptThankYou: 16. Used when sending appointment/schedule Thank You's. Short Code Supported: YES
ConfirmationAutoReply: 17. Used when the patient responds positively to an eConfirmation. Short Code Supported: YES
OptInPrompt: 18. Used with Short Codes to send a message prompting the patient to opt in to receiving Short Code sms. Short Code Supported: YES
StopReply: 19. Used with Short Codes to send a message confirming the patient has opted out of receiving Short Code sms. Short Code Supported: YES
HelpReply: 20. Used with Short Codes to send a message detailing help options for the patient. Short Code Supported: YES
OptInReply: 21. Used with Short Codes to send a message confirming the patient has opted in to receiving Short Code sms. Short Code Supported: YES
Arrival: 22. Used to texting patients about appointment arrival instructions.
ByodToken: 23. Used for 2 factor authentication in mobile apps.
GeneralMessage: 24. Used when sending appointment general messages.
ApptNewPatThankYou: 25. Used when sending webforms for new patients on appointment schedule.
VerifyPaymentPortal: 26. Used when sending verification codes for the Payment Portal web app. Short Code Supported: NO
MsgToPay: 27. Used for Payment Portal Msg-To-Pay messages. Short Code Supported: NO
OptOutReply: 28. Used when the office checks NO for the patient to receive texts in the patient edit form. Short Code Supported: NO
EClipboardWeb: 29. Used when sending eClipboard Web URLs to patients. Short Code Supported: NO
8 MsgText text The contents of the message.
9 SmsStatus tinyint(4) Enum:SmsDeliveryStatus Set by the Listener, tracks status of SMS.
None: 0. Should not be used.
Pending: 1. After a message has been accepted at ODHQ. Before any feedback.
DeliveryConf: 2. Delivered to customer, carrier replied with confirmation.
DeliveryUnconf: 3. Delivered to customer, no confirmation of failure or delivery sent back from carrier.
FailWithCharge: 4. Attempted delivery, failure message return after arriving at handset.
FailNoCharge: 5. Attempted delivery, immediate failure confirmation received from carrier.
10 MsgParts int(11) The count of parts that this message will be broken into when sent. A single long message will be broken into several smaller 153 utf8 or 70 unicode character messages.
11 MsgChargeUSD float The amount charged to the customer. Total cost for this message always stored in US Dollars.
12 ClinicNum bigint(20) FK to clinic.ClinicNum. 0 when not using clinics.
13 CustErrorText varchar(255) Only used when SmsDeliveryStatus==Failed.
14 DateTimeSent datetime The date and time that this message was sent from the office. Stored in the timezone of the server running the eConnector.
15 DateTimeTerminated datetime The date and time that this message was handled by HQ. Not intended to be shown in the UI. Stored in HQ's timezone.
16 IsHidden tinyint(4) Messages are hidden, not deleted.
17 MsgDiscountUSD float Any discount applied to this message. If a particular messages has a MsgDiscountUSD > 0 then the MsgChargeUSD will reflect the charge to the customer after the discount has already been applied. Multi-part messages will still be charged the wholesale rate for all parts after the first part. To calculate the typical charge that this customer would pay without the discount use MsgChargeUSD + MsgDiscountUSD. To calculate the percentage discounted off standard charges use (MsgDiscountUSD / (MsgChargeUSD + MsgDiscountUSD)).
18 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
19 SecUserNumEntry bigint(20) FK to userod.UserNum, represents the currently logged in user.

snomed
We do not import synonyms, only "Fully Specified Name records". Snomed for holding a large list of codes. Codes in use are copied into the DiseaseDef table. SNOMED CT maintained, owned and copyright International Health Terminology Standards Development Organisation (IHTSDO).
Order Name Type Summary
0 SnomedNum bigint(20) Primary key.
1 SnomedCode varchar(255) Used as FK by other tables. Also called the Concept ID. Not allowed to edit this column once saved in the database.
2 Description varchar(255) Also called "Term", "Name", or "Fully Specified Name". Not editable and doesn't change.

sop
Order Name Type Summary
0 SopNum bigint(20)
1 SopCode varchar(255)
2 Description varchar(255)

stateabbr
State abbreviations are always copied to patient records rather than linked. Items in this list can be freely altered or deleted without harming patient data.
Order Name Type Summary
0 StateAbbrNum bigint(20) Primary key.
1 Description varchar(50) Full state name
2 Abbr varchar(50) Short state abbreviation (usually 2 digit)
3 MedicaidIDLength int(11) The length that the Medicaid ID should be for this state. If 0, then the Medicaid length is not enforced for this state

statement
Represents one statement for one family. Usually already sent, but could still be waiting to send. Once sent, nearly all of these fields become read-only. For limited statements,
Order Name Type Summary
0 StatementNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum. Typically the guarantor. Can also be the patient for walkout statements.
2 DateSent date This will always be a valid and reasonable date regardless of whether it's actually been sent yet.
3 DateRangeFrom date Typically 45 days before dateSent
4 DateRangeTo date Any date >= year 2200 is considered max val. We generally try to automate this value to be the same date as the statement rather than the max val. This is so that when payment plans are displayed, we can add approximately 10 days to effectively show the charge that will soon be due. Adding the 10 days is not done until display time.
5 Note text Can include line breaks. This ordinary note will be in the standard font.
6 NoteBold text More important notes may go here. Font will be bold. Color and size of text will be customizable in setup.
7 Mode_ tinyint Enum:StatementMode Mail, InPerson, Email, Electronic.
Mail: 0
InPerson: 1
Email: 2
Electronic: 3-Send the statement over the internet to an API. That company then sends the actual statement, usually by paper.
API: 4-The statement was generated by a third-party API developer. Optionally associated with a DocNum.
8 HidePayment tinyint(1) Set true to hide the credit card section, and the please pay box.
9 SinglePatient tinyint(1) One patient on statement instead of entire family.
10 Intermingled tinyint(1) If entire family, then this determines whether they are all intermingled into one big grid, or whether they are all listed in separate grids. If SuperFamily is set, this must be false.
11 IsSent tinyint(1) True
12 DocNum bigint(20) FK to document.DocNum when a pdf has been archived.
13 DateTStamp timestamp Date/time last altered.
14 IsReceipt tinyint(4) This flag changes the text at the top of a statement from "statement" to "receipt". In regular view this will only include today's payments. In service date view, this will include all of today's payments along with the procedures they are tied to, regardless of the procedure's date.
15 IsInvoice tinyint(4) This flag is for marking a statement as Invoice. The statement will contain procedures, adjustments, and/or payplan charges. When creating an invoice, if no rows in the Account module are selected then the statement will be automatically made with things from today. If there are other rows selected, regardless of date, it will be made with those.
16 IsInvoiceCopy tinyint(4) Only used if IsInvoice=true. The first printout will not be a copy. Subsequent printouts will show "copy" on them.
17 EmailSubject varchar(255) Empty string by default. Only used to override BillingEmailSubject pref when emailing statements. Only set when statements are created from the Billing Options window. No UI for editing.
18 EmailBody mediumtext Empty string by default. Only used to override BillingEmailBodyText pref when emailing statements. Only set when statements are created from the Billing Options window. No UI for editing. Limit in db: 16M char.
19 SuperFamily bigint(20) FK to patient.PatNum. Typically zero unless a super family statement is desired. Will be non-zero if the patient is associated with a super family and a super family statement is desired. When adding procedures to a limited custom statement, if any of the procs are from other superfamily members, then this gets set to that superfam FK. Also can be set for invoice and more options statements. If this is not zero, Intermingled must be false.
20 IsBalValid tinyint(4) True for statements generated in version 16.1 or greater, except those created via Open Dental API. Older statements did not store InsEst or BalTotal. Statements generated via Open Dental API do not use InsEst or BalTotal.
21 InsEst double Insurance Estimate for entire family, taken from guarantor at time of statement being sent/saved. For invoices, this field contains the total adjustment amount instead.
22 BalTotal double Total balance for entire family before insurance estimate. Not the same as the sum of the 4 aging balances because this can be negative.
23 StatementType varchar(50) Enum:StmtType NotSet, LimitedStatement, Walkout. This field probably should have originally been an int instead of string, but we're stuck with it. Since we don't query it, it's not a big deal.
NotSet: Regular statement. Stored in db as "NotSet".
LimitedStatement: Contains information about specific procedures, patient payments, insurance payments, or adjustments. User can select specific things.
Walkout: Marks statement as walkout. Statements of this type will have all of the information from what happened today (procedures, payments, adjustments, etc.) In service date view, some extra effort goes into deciding what to show. In regular view, it's simpler to just show things for today.
24 ShortGUID varchar(30) A short alphanumeric string used to uniquely identify this statement.
25 StatementShortURL varchar(50) A short URL that can be visited to view this statement. Useful to include in text messages.
26 StatementURL varchar(255) A URL that can be visited to view this statement.
27 SmsSendStatus tinyint(4) Enum:AutoCommStatus Stores what should be done or was done in regards to SMS messaging for this statement.
Undefined: 0 - Should not be in the database but can be used in the program.
DoNotSend: 1 - Do not send a reminder.
SendNotAttempted: 2 - We will send, but send has not been attempted yet.
SendSuccessful: 3 - Has been sent successfully.
SendFailed: 4 - Attempted to send but not successful.
SentAwaitingReceipt: 5 - Has been sent successfully, awaiting receipt.
28 LimitedCustomFamily tinyint(4) There's no such thing in our db as a limited "custom" statement. That's just a menu label. Once procs are selected, it's just like any other limited statement.
29 ShowTransSinceBalZero tinyint(4) Used for setting the "Show transactions since zero/negative balance" checkbox when opening/editing a statement. True for statements that were saved with "Show transactions since zero/negative balance" checked. For new statements, the value is set according to the BillingShowTransSinceBalZero pref (except for statements created from Billing, where the checkbox in the Billing Options window overrides this).
30 IsServiceDateView tinyint(4) When true, the statement will be made using service date view for the main grid. When false, the regular account view will be used.

statementprod
Links production items to a statement. Also tracks whether or not a late charge adjustment has been created for the production item.
Order Name Type Summary
0 StatementProdNum bigint(20) Primary key.
1 StatementNum bigint(20) FK to statement.StatementNum. The statement that the production item is on.
2 FKey bigint(20) FK to procedurelog.ProcNum AND ProdType=0, FK to adjustment.AdjNum AND ProdType=1, FK to payplancharge.PayPlanChargeNum AND ProdType=2.
3 ProdType tinyint(4) Enum:ProductionType Type of production item.
Procedure: 0 - Procedure. For this type, FKey is procedurelog.ProcNum.
Adjustment: 1 - Adjustment. For this type, FKey is adjustment.AdjNum.
PayPlanCharge: 2 - PayPlanCharge. For this type, FKey is payplancharge.PayPlanChargeNum.
4 LateChargeAdjNum bigint(20) FK to adjustment.AdjNum. The late charge adjustment made for this production item. 0 if no late charge has been made.
5 DocNum bigint(20) FK to document.DocNum. The pdf document last associated to the statement. Will be 0 for statements that are sent electronically when pdfs are not saved for electronic statements.

stmtlink
Only used for limited statements. Attaches individual rows of Procs, Adjustments, Payments, etc to a Statement object so that we can recreate the statement again later. For normal non-limited statements, we don't retain this information in the db. It's only on the pdf. For limited statements, these links are really only used prior to sending and then they don't matter. To attach PayPlanCharge to Invoice, payplancharge.StatementNum is used instead of this table. Rows are also inserted here for each MsgToPaySent, but those are not rows on a statement.
Order Name Type Summary
0 StmtLinkNum bigint(20) Primary key.
1 StatementNum bigint(20) FK to statement.StatementNum.
2 StmtLinkType tinyint(4) Enum:StmtLinkTypes Represents what object FKey corresponds to.
Proc: 0 - Procedure. For this type, FKey is procedurelog.ProcNum.
PaySplit: 1 - Pay split. For this type, FKey is paysplit.SplitNum.
Adj: 2 - Adjustment. For this type, FKey is adjustment.AdjNum.
ClaimPay: 3 - ClaimPay. For this type, FKey is claimpayment.ClaimPaymentNum.
PayPlanCharge: 4 - Pay plan charge. Not used for invoices. For this type, FKey is payplancharge.PayPlanChargeNum.
PatNum: 5 - Patient. Not used for most statements. Only used for limited and limited (custom) statements. For this type, FKey is patient.PatNum.
MsgToPaySent: 6 - MsgToPaySent. Keeps track of what was sent, but is not a row on a statement. For this type, FKey is msgtopaysent.MsgToPaySentNum.
3 FKey bigint(20) FK to procedurelog.ProcNum AND StmtLinkType=0, FK to paysplit.SplitNum AND StmtLinkType=1, FK to adjustment.AdjNum AND StmtLinkType=2, FK to claimpayment.ClaimPaymentNum AND StmtLinkType=3, FK to payplancharge.PayPlanChargeNum AND StmtLinkType=4, FK to patient.PatNum AND StmtLinkType=5, FK to msgtopaysent.MsgToPaySentNum AND StmtLinkType=6.

substitutionlink
Entries in this table will represent procedurecodes that the insurance plan wants to SKIP when considering substitution codes.
Order Name Type Summary
0 SubstitutionLinkNum bigint(20) Primary key.
1 PlanNum bigint(20) FK to insplan.PlanNum.
2 CodeNum bigint(20) FK to procedurecode.CodeNum.
3 SubstitutionCode varchar(25) FK to procedurecode.ProcCode.
4 SubstOnlyIf int(11) Enum:SubstitutionCondition
Always: 0
Molar: 1
SecondMolar: 2
Never: 3
Posterior: 4

supplier
A company that provides supplies for the office, typically dental supplies.
Order Name Type Summary
0 SupplierNum bigint(20) Primary key.
1 Name varchar(255) .
2 Phone varchar(255) .
3 CustomerId varchar(255) The customer ID that this office uses for transactions with the supplier
4 Website text Full address to website. We might make it clickable.
5 UserName varchar(255) The username used to log in to the supplier website.
6 Password varchar(255) The password to log in to the supplier website. Not encrypted or hidden in any way.
7 Note text Any note regarding supplier. Could hold address, CC info, etc.

supply
A dental supply or office supply item.
Order Name Type Summary
0 SupplyNum bigint(20) Primary key.
1 SupplierNum bigint(20) FK to supplier.SupplierNum
2 CatalogNumber varchar(255) The catalog item number that the supplier uses to identify the supply.
3 Descript varchar(255) The description can be similar to the catalog, but not required. Typically includes qty per box/case, etc.
4 Category bigint(20) FK to definition.DefNum. User can define their own categories for supplies.
5 ItemOrder int(11) The zero-based order of this supply within it's category. Hidden supplies can be included in this order.
6 LevelDesired float Aka Stock Level. The level that a fresh order should bring item back up to. Can include fractions. If this is 0, then it will be displayed as having this field blank rather than showing 0. This simply gives a cleaner look.
7 IsHidden tinyint(1) If hidden, then this supply item won't normally show in the main list.
8 Price double The price per unit that the supplier charges for this supply. If this is 0.00, then no price will be displayed.
9 BarCodeOrID varchar(255) Scanned code from a reader.
10 DispDefaultQuant float Only used for dental schools. This is the typical quantity dispensed at the window.
11 DispUnitsCount int(11) Only used in dental schools. For example, 20 capsules composite per container.
12 DispUnitDesc varchar(255) Only used in dental schools. Description of the units when dispensing for use. For example: Capsule, cartridge, carpule, glove, or needle.
13 LevelOnHand float Deprecated.
14 OrderQty int(11) The amount to order when the next SupplyOrder is created. Creating a SupplyOrder then zeroes this out, so it's just a temporary value.

supplyneeded
A supply freeform typed in by a user.
Order Name Type Summary
0 SupplyNeededNum bigint(20) Primary key.
1 Description text .
2 DateAdded date .

supplyorder
One supply order to one supplier. Contains SupplyOrderItems.
Order Name Type Summary
0 SupplyOrderNum bigint(20) Primary key.
1 SupplierNum bigint(20) FK to supplier.SupplierNum.
2 DatePlaced date A date greater than 2200 (eg 2500), is considered a max date. A max date is used for an order that was started but has not yet been placed. This puts it at the end of the list where it belongs, but it will display as blank. Only one unplaced order is allowed per supplier.
3 Note text .
4 AmountTotal double The sum of all the amounts of each item on the order. If any of the item prices are zero, then it won't auto calculate this total. This will allow the user to manually put in the total without having it get deleted.
5 UserNum bigint(20) FK to userod.UserNum. User that placed the order, is editable.
6 ShippingCharge double The order's shipping charge.
7 DateReceived date The date the order was received. If the SupplyOrder existed before updating to version 19.4, then this value will be set to the date the office updated to 19.4.

supplyorderitem
One item on one supply order. This table links supplies to orders as well as storing a small amount of additional info.
Order Name Type Summary
0 SupplyOrderItemNum bigint(20) Primary key.
1 SupplyOrderNum bigint(20) FK to supplyorder.supplyOrderNum.
2 SupplyNum bigint(20) FK to supply.SupplyNum.
3 Qty int(11) How many were ordered.
4 Price double Price per unit on this order.
5 DateReceived date Optional. The order itself already has this field. But if a partial order comes in, and if the user wants to track item dates separately, then they can do it here.

task
A task is a single todo item. Also see taskhist, which keeps a historical record.
Order Name Type Summary
0 TaskNum bigint(20) Primary key.
1 TaskListNum bigint(20) FK to tasklist.TaskListNum. If 0, then it will show in the trunk of a section. This is temporarily -1 to indicate that a task is not assigned to a tasklist yet, but -1 never gets saved to the db.
2 DateTask date Only used if this task is assigned to a dated category. Children are NOT dated. Only dated if they should show in the trunk for a date category. They can also have a parent if they are in the main list as well.
3 KeyNum bigint(20) FK to patient.PatNum AND ObjectType=1, FK to appointment.AptNum AND ObjectType=2. Only used when ObjectType is not 0.
4 Descript text The description of this task. Might be very long.
5 TaskStatus tinyint Enum:TaskStatusEnum New,Viewed,Done. We may want to put an index on this column someday.
New: 0
Viewed: 1
Done: 2
6 IsRepeating tinyint True if it is to show in the repeating section. There should be no date. All children and parents should also be set to IsRepeating=true.
7 DateType tinyint Enum:TaskDateType None, Day, Week, Month. If IsRepeating, then setting to None effectively disables the repeating feature.
None: 0
Day: 1
Week: 2
Month: 3
8 FromNum bigint(20) FK to task.TaskNum If this is derived from a repeating task, then this will hold the TaskNum of that task. It helps automate the adding and deleting of tasks. It might be deleted automatically if not are marked complete.
9 ObjectType tinyint Enum:TaskObjectType 0=none,1=Patient,2=Appointment. More will be added later. If a type is selected, then the KeyNum will contain the primary key of the corresponding Patient or Appointment. Does not really have anything to do with the ObjectType of the parent tasklist, although they tend to match.
None: 0
Patient: 1. For this type, FKey is patient.PatNum.
Appointment: 2. For this type, FKey is appointment.AptNum.
10 DateTimeEntry datetime The date and time that this task was added. User editable. For reminder tasks, this field is used to indicate the date and time the reminder will take effect.
11 UserNum bigint(20) FK to userod.UserNum. The person who created the task.
12 DateTimeFinished datetime The date and time that this task was marked "done".
13 PriorityDefNum bigint(20) FK to definition.DefNum. The priority for this task which is used when filling task lists. The placement of the task in the list is dependent on the item order of the definitions.
14 ReminderGroupId varchar(20) Optional. Set to null or empty if not a reminder task. For repeating reminders, the ReminderGroupId will be the same for each task spawned from any task in the group.
15 ReminderType smallint(6) Bit field.
16 ReminderFrequency int(11)
17 DateTimeOriginal datetime The original datetime that the row was inserted. Used to sort the list by the order entered. Using taskhist.DateTimeOriginal will get the datetime that the task row was inserted, not the taskhist.
18 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed.
19 DescriptOverride varchar(255) Limited to 256 char. If present, shows only this text in task list grids instead of prepending date, aggregating notes, etc. Shows as Short Descript in the UI for space reasons.
20 IsReadOnly tinyint(1) Determines if this task can be edited by most users. Currently only used at HQ.
21 Category bigint(20) FK to definition.DefNum. Only used when pref.TaskCategoryShow is set to true.
22 TriagePosition int(11) The position in the 'Triage' tasklist that a task was in when it was claimed by a support technician. It is 1 indexed. Only used for our 'Triage' tasklist at OD HQ and is for training purposes.

taskancestor
Represents one ancestor of one task. Each task will have at least one ancestor unless it is directly on a main trunk. An ancestor is defined as a tasklist that is higher in the hierarchy for the task, regardless of how many levels up it is. This allows us to mark task lists as having "new" tasks, and it allows us to quickly check for new tasks for a user on startup.
Order Name Type Summary
0 TaskAncestorNum bigint(20) Primary key.
1 TaskNum bigint(20) FK to task.TaskNum
2 TaskListNum bigint(20) FK to tasklist.TaskListNum

taskattachment
An attachment to a task. Attachment can be a document or a string.
Order Name Type Summary
0 TaskAttachmentNum bigint(20) Primary key.
1 TaskNum bigint(20) FK to task.TaskNum.
2 DocNum bigint(20) FK to document.DocNum. If no document is attached, then this field will be 0.
3 TextValue text Used to store text that doesn't need to be visible from the main task edit window at all times.
4 Description varchar(255) A brief description of this attachment. If document is linked, used for document description as well.

taskhist
A historical copy of a task. These are generated as a result of a task being edited, so there can be multiple entries here per task. When creating for insertion it needs a passed-in Task object.
Order Name Type Summary
0 TaskHistNum bigint(20) Primary key.
1 UserNumHist bigint(20) FK to userod.UserNum Identifies the user that changed this task from this state, not the person who originally wrote it.
2 DateTStamp datetime The date and time that this task was edited and added to the Hist table. This value will not be updated by MySQL whenever the row changes.
3 IsNoteChange tinyint(4) True if the note was changed when this historical copy was created.
4 TaskNum bigint(20) FK to task.TaskNum.
5 TaskListNum bigint(20) FK to tasklist.TaskListNum. If 0, then it will show in the trunk of a section. This is temporarily -1 to indicate that a task is not assigned to a tasklist yet, but -1 never gets saved to the db.
6 DateTask date Copied from Task.
7 KeyNum bigint(20) FK to patient.PatNum AND ObjectType=1, FK to appointment.AptNum AND ObjectType=2. Only used when ObjectType is not 0.
8 Descript text Copied from Task.
9 TaskStatus tinyint(4) Copied from Task.
10 IsRepeating tinyint(4) Copied from Task.
11 DateType tinyint(4) Copied from Task.
12 FromNum bigint(20) FK to task.TaskNum. If this is derived from a repeating task, then this will hold the TaskNum of that task. It helps automate the adding and deleting of tasks. It might be deleted automatically if not marked complete.
13 ObjectType tinyint(4) Copied from Task.
14 DateTimeEntry datetime Copied from Task.
15 UserNum bigint(20) FK to userod.UserNum. The person who created the task.
16 DateTimeFinished datetime Copied from Task.
17 PriorityDefNum bigint(20) FK to definition.DefNum. The priority for this task which is used when filling task lists. The placement of the task in the list is dependent on the item order of the definitions.
18 ReminderGroupId varchar(20) Copied from Task.
19 ReminderType smallint(6) Copied from Task.
20 ReminderFrequency int(11) Copied from Task.
21 DateTimeOriginal datetime Copied from Task.
22 SecDateTEdit timestamp Not copied from Task. Automatically updated by MySQL every time a row is added or changed.
23 DescriptOverride varchar(255) Copied from Task.
24 IsReadOnly tinyint(1) Copied from Task.
25 Category bigint(20) FK to definition.DefNum. Only used when pref.TaskCategoryShow is set to true.
26 TriagePosition int(11) Copied from Task.

tasklist
A tasklist is like a folder system, where it can have child tasklists as well as tasks.
Order Name Type Summary
0 TaskListNum bigint(20) Primary key.
1 Descript varchar(255) The description of this tasklist. Might be very long, but not usually.
2 Parent bigint(20) FK to tasklist.TaskListNum The parent task list to which this task list is assigned. If zero, then this task list is on the main trunk of one of the sections.
3 DateTL date Optional. Set to 0001-01-01 for no date. If a date is assigned, then this list will also be available from the date section.
4 IsRepeating tinyint True if it is to show in the repeating section. There should be no date. All children should also be set to IsRepeating=true.
5 DateType tinyint Enum:TaskDateType None, Day, Week, Month. If IsRepeating, then setting to None effectively disables the repeating feature.
None: 0
Day: 1
Week: 2
Month: 3
6 FromNum bigint(20) FK to tasklist.TaskListNum If this is derived from a repeating list, then this will hold the TaskListNum of that list. It helps automate the adding and deleting of lists. It might be deleted automatically if no tasks are marked complete.
7 ObjectType tinyint Enum:TaskObjectType 0=none, 1=Patient, 2=Appointment. More will be added later. If a type is selected, then this list will be visible in the appropriate places for attaching the correct type of object. The type is not copied to a task when created. Tasks in this list do not have to be of the same type. You can only attach an object to a task, not a tasklist.
None: 0
Patient: 1. For this type, FKey is patient.PatNum.
Appointment: 2. For this type, FKey is appointment.AptNum.
8 DateTimeEntry datetime The date and time that this list was added. Used to sort the list by the order entered.
9 GlobalTaskFilterType tinyint(4) Enum:GlobalTaskFilterType 0=Disabled, 1=Default, 2=None, 3=Clinic, 4=Region. If a type is selected, then tasks in this tasklist will be filtered by default such that only tasks that match the tasklist's GlobalFilterType will show in the view. Disabled is not valid for tasklists and will be treated as Default if applied to a tasklist; it is only valid on the TasksGlobalFilterType preference.
10 TaskListStatus tinyint(4) Enum:TaskListStatusEnum 0=Active, 1=Archived. Archived task lists are hidden from the Task Window's User, Main, and Reminder tabs by default.
Active: 0 - Active.
Archived: 1 - Archived.

tasknote
A tasknote is a note that may be added to a task. Many notes may be attached to a task. A user may only edit their own tasknotes within a task.
Order Name Type Summary
0 TaskNoteNum bigint(20) Primary key.
1 TaskNum bigint(20) FK to task.TaskNum. The task this tasknote is attached to.
2 UserNum bigint(20) FK to userod.UserNum. The user who created this tasknote.
3 DateTimeNote datetime Date and time the note was created or last modified (editable).
4 Note text Note. Text that the user wishes to show on the task.

tasksubscription
A subscription of one user to either a tasklist or to a task.
Order Name Type Summary
0 TaskSubscriptionNum bigint(20) Primary key.
1 UserNum bigint(20) FK to userod.UserNum
2 TaskListNum bigint(20) FK to tasklist.TaskListNum When this is not 0 then TaskNum will be 0.
3 TaskNum bigint(20) FK to task.TaskNum. When this is not 0 then TaskListNum will be 0.

taskunread
When a task is created or a comment made, a series of these taskunread objects are created, one for each user who is subscribed to the tasklist. Duplicates are intelligently avoided. Rows are deleted once user reads the task.
Order Name Type Summary
0 TaskUnreadNum bigint(20) Primary key.
1 TaskNum bigint(20) FK to task.TaskNum.
2 UserNum bigint(20) FK to userod.UserNum.

terminalactive
Each row is 1 computer, or if in RDP session, 1 connection from 1 computer, currently acting as a terminal for patient input.
Order Name Type Summary
0 TerminalActiveNum bigint(20) Primary key.
1 ComputerName varchar(255) The name of the computer where the terminal is active. On RDP, this is client name.
2 TerminalStatus tinyint Enum:TerminalStatusEnum No longer used. Instead, the PatNum field is used. Used to indicates at what point the patient was in the sequence. 0=standby, 1=PatientInfo, 2=Medical, 3=UpdateOnly. If status is 1, then nobody else on the network could open the patient edit window for that patient.
Standby: 0
PatientInfo: 1
Medical: 2
UpdateOnly: 3. Only the patient info tab will be visible. This is just to let patient up date their address and phone number.
3 PatNum bigint(20) FK to patient.PatNum. The patient currently showing in the terminal. If 0, then terminal is in standby mode.
4 SessionId int(11) The ID of the session from which this terminal instance was started. The session ID is unique per computer login, so if this is a terminal server every remote connection will have a unique session ID. A kiosk is identified by ComputerName+SessionId+ProcessId.
5 ProcessId int(11) The ID of the process that initiated this kiosk instance. This is unique per active computer process, so if a row exists with a ProcessId that matches the instance we're about to start, we know it is safe to delete it, it must be left over and needs cleaned up.
6 SessionName varchar(255) The name of the computer used to make the remote connection to the app server when enabling kiosk mode. Could also be a name manually entered by the user if there's already a connection to the app server from the same computer session. This serves as a human-readable name for the ComputerName+SessionId+ProcessId to uniquely identify a kiosk. We will display the ComputerName and SessionName to the user in the kiosk manager, but we will use the ComputerName+SessionId+ProcessId when the kiosk checks for available forms to display.

timeadjust
Used on employee timecards to make adjustments. Used to make the end-of-the week OT entries. Can be used instead of a clock event by admin so that a clock event doesn't have to be created.
Order Name Type Summary
0 TimeAdjustNum bigint(20) Primary key.
1 EmployeeNum bigint(20) FK to employee.EmployeeNum
2 TimeEntry datetime The date and time that this entry will show on timecard.
3 RegHours time The number of regular hours to adjust timecard by. Can be + or -.
4 OTimeHours time Overtime hours. Usually +. Automatically combined with a - adj to RegHours. Another option is clockevent.OTimeHours.
5 Note text .
6 IsAuto tinyint(4) Set to true if this adjustment was automatically made by the system. When the calc weekly OT tool is run, these types of adjustments are fair game for deletion. Other adjustments are preserved.
7 ClinicNum bigint(20) FK to clinic.ClinicNum. The clinic the TimeAdjust was entered at.
8 PtoDefNum bigint(20) FK to definition.DefNum. Defaults to 0. Is set to 0 for general adjustments. When not 0, points to a definition in the TimeCardAdjTypes category.
9 PtoHours time PTO Hours. The number of PTO hours applied to a specific day. Ignored if PtoDefNum is 0.
10 IsUnpaidProtectedLeave tinyint(4) Defaults to false. True when this TimeAdjust is for unpaid protected leave. Hours from unpaid protected leave adjustments contribute to hours worked, but not to payable hours.
11 SecuUserNumEntry bigint(20) FK to userod.UserNum. The user that created this TimeAdjust.

timecardrule
A rule for automation of timecard overtime. Can apply to one employee or all.
Order Name Type Summary
0 TimeCardRuleNum bigint(20) Primary key.
1 EmployeeNum bigint(20) FK to employee.EmployeeNum. If zero, then this rule applies to all employees.
2 OverHoursPerDay time Typical example is 8:00. In California, any work after the first 8 hours is overtime.
3 AfterTimeOfDay time Typical example is 16:00 to indicate that all time worked after 4pm for specific employees is at Rate2 rate.
4 BeforeTimeOfDay time Typical example is 6:00 to indicate that all time worked before 6am for specific employees is at Rate2 rate.
5 IsOvertimeExempt tinyint(4) Indicates if the employee should have overtime calculated for their hours worked in a pay period.
6 MinClockInTime time When set this is the earliest an employee can clock in. Otherwise minimum dateTime represents not set.
7 HasWeekendRate3 tinyint(4) Indicates if the employee is eligible to earn Rate3 rate for weekend hours.

toolbutitem
Each row represents one toolbar button to be placed on a toolbar and linked to a program.
Order Name Type Summary
0 ToolButItemNum bigint(20) Primary key.
1 ProgramNum bigint(20) FK to program.ProgramNum.
2 ToolBar smallint Enum:EnumToolBar The toolbar to show the button on.
AccountModule: 0
ApptModule: 1
ChartModule: 2
ImagingModule: 3
FamilyModule: 4
TreatmentPlanModule: 5
ClaimsSend: 6
MainToolbar: 7 Shows in the toolbar at the top that is common to all modules.
ReportsMenu: 8 Shows in the main menu Reports submenu.
3 ButtonText varchar(255) The text to show on the toolbar button.

toothgridcell
Holds one recorded cell value for a tooth grid, which is a special kind of sheet field type that shows a grid with 32 rows and configurable columns. The entire grid is a single large sheet field.
Order Name Type Summary
0 ToothGridCellNum bigint(20) Primary key.
1 SheetFieldNum bigint(20) FK to sheetfield.SheetFieldNum. Required.
2 ToothGridColNum bigint(20) FK to toothgridcol.ToothGridColNum. This tells which column it belongs in. Can't use the column name here because multiple columns could have the same name.
3 ValueEntered varchar(255) Cannot be empty. For a tooth-level cell, the only allowed value is X. If the cell is unchecked, then it won't even have a row in this table. For a surface level column, only valid surfaces can be entered:MOIDBFLV Enforced. FreeText columns can have any text up to 255 char.
4 ToothNum varchar(10) Corresponds exactly to procedurelog.ToothNum. May be blank, otherwise 1-32, 51-82, A-T, or AS-TS, 1 or 2 char. Gets internationalized as being displayed.

toothgridcol
Defines the columns present in a single completed tooth grid, which is a special kind of sheet field that shows a grid with 32 rows and configurable columns. The entire grid is a single large sheet field. This table defines how the grid is layed out on an actual sheet, pulled initially from a ToothGridDef. The data itself is recorded in ToothGridCell.
Order Name Type Summary
0 ToothGridColNum bigint(20) Primary key.
1 SheetFieldNum bigint(20) FK to sheetfield.SheetFieldNum. Required.
2 NameItem varchar(255) Pulled from the ToothGridDef. This can be a NameInternal , or it can be a NameShowing if it's a user-defined column.
3 CellType tinyint(4) Enum:ToothGridCellType 0=HardCoded, 1=Tooth, 2=Surface, 3=FreeText.
HardCoded: 0
Tooth: 1
Surface: 2
FreeText: 3
4 ItemOrder smallint(6) Order of the column to display. Every entry must have a unique itemorder.
5 ColumnWidth smallint(6) .
6 CodeNum bigint(20) FK to procedurecode.CodeNum. This allows data entered to flow into main program as actual completed or tp procedures.
7 ProcStatus tinyint(4) Enum:ProcStat If these flow into main program, then this is the status that the new procs will have.
None: 0 - Not used.
TP: 1- Treatment Plan.
C: 2- Complete.
EC: 3- Existing Current Provider.
EO: 4- Existing Other Provider.
R: 5- Referred Out.
D: 6- Deleted.
Cn: 7- Condition.
TPi: 8- Treatment Plan inactive.

toothgriddef
Defines the columns present in a tooth grid, which is a special kind of sheet field def that shows a grid with 32 rows and configurable columns. Can be edited without damaging any completed sheets.
Order Name Type Summary
0 ToothGridDefNum bigint(20) Primary key.
1 NameInternal varchar(255) This is the internal name that OD uses to identify the column. Blank if this is a user-defined column. We will keep a hard-coded list of available NameInternals in the code to pick from.
2 NameShowing varchar(255) The user may override the internal name for display purposes. If this is a user-defined column, this is the only name, since there is no NameInternal.
3 CellType tinyint(4) Enum:ToothGridCellType 0=HardCoded, 1=Tooth, 2=Surface, 3=FreeText.
HardCoded: 0
Tooth: 1
Surface: 2
FreeText: 3
4 ItemOrder smallint(6) Order of the column to display. Every entry must have a unique itemorder.
5 ColumnWidth smallint(6) .
6 CodeNum bigint(20) FK to procedurecode.CodeNum. This allows data entered to flow into main program as actual completed or tp procedures.
7 ProcStatus tinyint(4) Enum:ProcStat If these flow into main program, then this is the status that the new procs will have.
None: 0 - Not used.
TP: 1- Treatment Plan.
C: 2- Complete.
EC: 3- Existing Current Provider.
EO: 4- Existing Other Provider.
R: 5- Referred Out.
D: 6- Deleted.
Cn: 7- Condition.
TPi: 8- Treatment Plan inactive.
8 SheetFieldDefNum bigint(20) FK to sheetfielddef.SheetFieldDefNum

toothinitial
Used to track missing teeth, primary teeth, movements, and drawings.
Order Name Type Summary
0 ToothInitialNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum
2 ToothNum varchar(2) 1-32 or A-Z. Supernumeraries not supported here yet.
3 InitialType tinyint Enum:ToothInitialType
Missing: 0
Hidden: 1 - Also hides the number. Number can be primary or permanent.
Primary: 2 - Only used with 1-32. "sets" this tooth as a primary tooth. The result is that the primary tooth shows in addition to the perm, and that the letter shows in addition to the number. It also does a Shift0 -12 and some other handy movements. Even if this is set to true, there can be a separate entry for a missing primary tooth; this would be almost equivalent to not even setting the tooth as primary, but would also allow user to select the letter.
ShiftM: 3 - Mesial mm
ShiftO: 4 - Occlusal/incisal mm
ShiftB: 5 - Buccal aka Labial mm
Rotate: 6 - Clockwise as viewed from occlusal/incisal.
TipM: 7 - Mesial degrees
TipB: 8 - Buccal degrees
Drawing: 9 - One segment of a drawing.
Text: 10 - Location and string, combined
4 Movement float Shift in mm, or rotation / tipping in degrees.
5 DrawingSegment text Point data for a drawing segment. The format would look similar to this: 45,68;48,70;49,72;0,0;55,88;etc. It's simply a sequence of points, separated by semicolons. Only positive numbers are used. 0,0 is the upper left of the tooth chart, and the lower right is at 410,307. This scale of 410,307 is always used, regardless of how the tooth chart control is scaled for viewing. Floats with tenths can be included. If the pen is picked up, it becomes a new segment, so a new row in the database.
6 ColorDraw int(11) .
7 SecDateTEntry datetime Timestamp automatically generated and user not allowed to change. The actual date of entry.
8 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
9 DrawText varchar(255) For text not associated with any tooth. The location of the text within 410,307 is incorporated into this string. Example: 25.3,123.8;This shows. Carriage returns etc are not supported. ColorDraw is used.

transaction
Used in the accounting section of the program. Each row is one transaction in the ledger, and must always have at least two JournalEntries (splits). All JournalEntries must always add up to zero.
Order Name Type Summary
0 TransactionNum bigint(20) Primary key.
1 DateTimeEntry datetime Not user editable. Server time.
2 UserNum bigint(20) FK to userod.UserNum. The user that entered this transaction.
3 DepositNum bigint(20) FK to deposit.DepositNum. Will eventually be replaced by a source document table, and deposits will just be one of many types.
4 PayNum bigint(20) FK to payment.PayNum. Like DepositNum, it will eventually be replaced by a source document table, and payments will just be one of many types.
5 SecUserNumEdit bigint(20) FK to userod.UserNum. The user who last edited this transaction.
6 SecDateTEdit timestamp The last time this transaction was edited.
7 TransactionInvoiceNum bigint(20) FK to transactioninvoice.TransactionInvoiceNum. A document that can be attached to the transaction.
8 NeedsReview tinyint(4) Deprecated

transactioninvoice
Used in the accounting section of the program. Each row contains a document that is attached to a transaction.
Order Name Type Summary
0 TransactionInvoiceNum bigint(20) Primary key.
1 FileName varchar(255) File name including the extension.
2 InvoiceData mediumtext The raw file data converted to base64. Will be blank when using FilePath.
3 FilePath varchar(255) Full file path (to the local disk or root storage server) that includes the file name and extension. Will be blank when using InvoiceData, when the preference AccountingInvoiceAttachmentsSaveInDatabase is turned on.

treatplan
Stores all treatment plans, including Active, Inactive, and Saved treatment plans. Active and Inactive treatment plans use treatplanattaches to reference attached procedures. As procedures are set complete, they get removed from active and inactive treatment plans. Saved treatment plans use proctps, which are copies of the procedure, and will not change after being saved.
Order Name Type Summary
0 TreatPlanNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 DateTP date The date of the treatment plan
3 Heading varchar(255) The heading that shows at the top of the treatment plan. Usually 'Proposed Treatment Plan'
4 Note text A note specific to this treatment plan that shows at the bottom.
5 Signature text The encrypted and bound signature in base64 format. The signature is bound to the concatenation of the tp Note, DateTP, and to each proctp Descript and PatAmt.
6 SigIsTopaz tinyint(1) True if the signature is in Topaz format rather than OD format.
7 ResponsParty bigint(20) FK to patient.PatNum. Can be 0. The patient responsible for approving the treatment. Public health field not visible to everyone else.
8 DocNum bigint(20) FK to document.DocNum. Can be 0. If signed, this is the pdf document of the TP at time of signing. See PrefName.TreatPlanSaveSignedToPdf
9 TPStatus tinyint(4) Enum:TreatPlanStatus Determines the type of treatment plan this is. 0 - Saved, 1 - Active, 2 - Inactive.
Saved: 0 - Saved treatment plans. Prior to version 15.4.1 all treatment plans were considered archived. Archived TPs are linked to ProcTPs.
Active: 1 - Current active TP. There should be only one Active TP per patient. This is a TP linked directly to procedures via the TreatPlanAttach table.
Inactive: 2 - Current inactive TP. This is a TP linked directly to procedures via the TreatPlanAttach table.
10 SecUserNumEntry bigint(20) FK to userod.UserNum. Set to the user logged in when the row was inserted at SecDateEntry date and time.
11 SecDateEntry date Timestamp automatically generated and user not allowed to change. The actual date of entry.
12 SecDateTEdit timestamp Automatically updated by MySQL every time a row is added or changed. Could be changed due to user editing, custom queries or program updates. Not user editable with the UI.
13 UserNumPresenter bigint(20) FK to userod.UserNum. The user that will present the treatment plan. Defaults to the user that entered the treatment plan, but can be changed with the TreatPlanPresenterEdit permission.
14 TPType tinyint(4) Enum:TreatPlanType Determines the type of insurance this treatment plan was saved with. Used for displaying proper information when loading.
Insurance: 0 - Treatment plan saved for regular insurance.
Discount: 1 - Treatment plan saved for discount plan.
15 SignaturePractice text The encrypted and bound signature in base64 format. The signature is bound to the concatenation of the tp Note, DateTP, and to each proctp Descript and PatAmt.
16 DateTSigned datetime The date of the treatment plan is signed.
17 DateTPracticeSigned datetime The date of the treatment plan is signed by the office.
18 SignatureText varchar(255) The typed name of the person who signed the treatplan.
19 SignaturePracticeText varchar(255) The typed name of the person who signed the practice signature.
20 MobileAppDeviceNum bigint(20) FK to mobileappdevice.MobileAppDeviceNum.

treatplanattach
Links active and inactive treatment plans to procedurelog rows. When the treatment plan or chart modules are selected, any treatplanattach rows that are linked to completed or deleted procedures will be deleted.
Order Name Type Summary
0 TreatPlanAttachNum bigint(20) Primary key.
1 TreatPlanNum bigint(20) FK to treatplan.TreatPlanNum.
2 ProcNum bigint(20) FK to procedurelog.ProcNum.
3 Priority bigint(20) FK to definition.DefNum, which contains the text of the priority. Identical to Procedure.Priority but used to allow different priorities for the same procedure depending on which TP it is a part of.

treatplanparam
Stores check box information for each treatment plan, so that when a signed treatment plan PDF needs to be saved from eClipboard, it can correctly save and generate the PDF.
Order Name Type Summary
0 TreatPlanParamNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 TreatPlanNum bigint(20) FK to treatplan.TreatPlanNum.
3 ShowDiscount tinyint(4) Value is set by the Discount check box in the Tx Module.
4 ShowMaxDed tinyint(4) Value is set by the Use Ins Max and Deduct check box in the Tx Module.
5 ShowSubTotals tinyint(4) Value is set by the Subtotals check box in the Tx Module.
6 ShowTotals tinyint(4) Value is set by the Totals check box in the Tx Module.
7 ShowCompleted tinyint(4) Value is set by the Graphical Completed Tx check box in the Tx Module.
8 ShowFees tinyint(4) Value is set by the Fees check box in the Tx Module.
9 ShowIns tinyint(4) Value is set by the Insurances Estimates check box in the Tx Module.

tsitranslog
Transworld Systems Inc (TSI) transaction log. Logs communication between the Open Dental program and TSI. Entries contain information about accounts placed with TSI, payments or adjustments to accounts placed, or transactions to Suspend, Reinstate or Cancel accounts.
Order Name Type Summary
0 TsiTransLogNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum for the guarantor of the account sent to TSI for collection services. TSI refers to this as the Debtor Reference or Responsible Party Account Number.
2 UserNum bigint(20) FK to userod.UserNum. The user who sent the account for placement with TSI or who suspended, reinstated or cancelled collection services for an account placed with TSI or who created the payment/adjustment for an account placed with TSI.
3 TransType tinyint(4) Enum:TsiTransType - Identifies the transaction message sent to TSI. Can be a message for placing/cancelling/suspending/reinstating collection services for an account or to notify TSI of a payment/writeoff/adjustment entered into OD.
None: -1 - None: Used for marking trans that represent account items NOT sent to Transworld. The TsiTransLogs with this trans type are used to prevent the ODService from sending the trans to Transworld. Example: Transworld collects a payment from a patient and deduct their fee and send the practice the remaining amt. Office staff will enter the payment in the patient's account and then enter an adjustment to account for Transworld's fee. TsiTransLogs will be inserted for the paysplits and adjustment so that we don't send those trans to Transworld and cause an infinite loop of sorts. Logs with this type will be update by the ODService if the ledger trans amt is updated.
CN: 0 - Cancel: cancel collection services for an account. Collection services can be restarted but will incur another TSI fee.
CR: 1 - Credit Adjustment: negative adjustment to reduce balance. Example: a discount given or portion of the debt written off.
DB: 2 - Debit Adjustment: positive adjustment to increase balance. Offices are supposed to stop all finance charges once placed with TSI, but there may be other transactions that require increasing the amount owed.
PF: 3 - Paid in Full: payment entered that pays off account balance. Closes account with TSI and stops collection activity.
PL: 4 - Placement: account sent to TSI for Accelerator/Profit Recovery/Collection services.
PP: 5 - Partial Payment: payment by either patient or ins payment/writeoff that pays a portion of the balance.
PT: 6 - Paid in Full, Thank You: payment entered that pays off account balance. Closes account with TSI and stops collection activity. TSI will send a Thank You letter to the patient free of charge.
RI: 7 - Reinstate: an account that has been suspended can be reinstated within 50 days and the collection services will resume where it left off. After 50 days the account is automatically cancelled and in order to restart collection services the office would have to initiate a new placement, which will incur another TSI fee.
SS: 8 - Suspend: places collection services for the account on hold for up to 50 days. Example: After an account is placed with TSI, the customer comes into the office and agrees to a payment plan. The account can be suspended and if the patient fails to make a payment within 50 days the account can be reinstated and the collection process will resume where it left off and TSI will not charge an additional fee. After 50 days the account is automatically cancelled by TSI and in order to restart the collection process, the office would have to initiate a new placement which starts the collection process over and will result in an additional TSI fee.
Agg: 9 - To differentiate aggregate rows from rows linked to transactions in the OD db.
Excluded: 10 - Used for adjustments entered with the SyncExcludePosAdjType or SyncExcludeNegAdjType set in the Transworld program link. Excluded from syncing with TSI and from the amount due calculation used in future msgs or to determine if the acct is paid in full.
4 TransDateTime datetime Timestamp at which this row was created. Auto generated on insert. Identifies exactly when the action happened in OD to cause the message to be sent to TSI.
5 ServiceType tinyint(4) Enum:TsiServiceType - for placements, this is the type of collection activity that will start on the account being placed.
Accelerator: 0 - Accelerator
ProfitRecovery: 1 - Profit Recovery
ProfessionalCollections: 2 - Professional Collections
6 ServiceCode tinyint(4) Enum:TsiServiceCode - for placements, intensity of first letter sent to guarantor. Will usually be 0 - Diplomatic.
Diplomatic: 0 - Diplomatic: most commonly used service code.
Intensive: 1 - Intensive: More intense first letter.
BadCheck: 3 - Bad Check: in a conference call with TSI one of the reps said this is rarely used.
7 TransAmt double Used for payments/writeoffs/adjustments, amount applied to the debt.
8 AccountBalance double Total balance due on the account by the patient, i.e. BalTotal-InsPayEst-WoEst. If this is a placement, this is the debt amount TSI is going to attempt to collect. If this is a payment/writeoff/adjustment, this is the new balance after the transaction amount is applied to the debt.
9 FKeyType tinyint(4) Enum:TsiFKeyType - Used in conjunction with FKey to point to the item that this log row represents.
None: -1 - None. For place, suspend, cancel, agg.
Adjustment: 0 - adjustment.AdjNum. Can be a positive (Debit) or negative (Credit) adjustment to the amount owed. The resulting message TsiTransType is DB (Debit) for positive adjustments or CR (Credit) for negative adjustments.
Claimproc: 1 - claimproc.ClaimProcNum. For ins payments and/or writeoffs entered after the account has been placed with TSI. The resulting message TsiTransType is PP (Partial Payment), PF (Paid in Full), or PT (Paid in Full, Thank You).
PayPlan: 2 - payplan.PayPlanNum. In payplan version 1 the entire CompletedAmt is aged, so it will be negative (credit) and decrease the amount owed. The resulting message TsiTransType is CR (Credit).
PayPlanCharge: 3 - payplancharge.PayPlanChargeNum. Depends on payplan version, could be negative (credit - decrease amount owed) or positive (debit - increase amount owed). The resulting message TsiTransType is DB (Debit) if positive or CR (Credit) if negative.
PaySplit: 4 - paysplit.SplitNum. Patient payment on an account placed with TSI. The resulting message TsiTransType is PP (Partial Payment), PF (Paid in Full), or PT (Paid in Full, Thank You).
Procedure: 5 - procedurelog.ProcNum. Positive (debit, increases the amount owed). The resulting message TsiTransType is DB (Debit).
PayPlanLink: 6 - payplanlink.PayPlanLinkNum. Negative(credit, decreases the amount owed). The resulting message TsiTransType is CR (Credit).
10 FKey bigint(20) FK to adjustment.AdjNum AND FKeyType=0, FK to claimproc.ClaimProcNum AND FKeyType=1, FK to payplan.PayPlanNum AND FKeyType=2, FK to payplancharge.PayPlanChargeNum AND FKeyType=3, FK to paysplit.SplitNum AND FKeyType=4, FK to procedurelog.ProcNum AND FKeyType=5, FK to payplanlink.PayPlanLinkNum AND FKeyType=6.
11 RawMsgText varchar(1000) Raw pipe-delimited message sent to TSI.
12 ClientId varchar(25) If ServiceType for the placement is TsiDemandType.AcceleratorPr, this will be the Accelerator/Profit Recovery client ID. If TsiServiceType.Collection it will be the Collection client ID. Will always match the first field, Client Number, in the RawMsgText.
13 TransJson mediumtext Json serialized string representation of the TsiTrans list used to calculate the account balance for this guarantor at the time of placement with Transworld. Used to update Transworld if any of the transactions are modified after placement.
14 ClinicNum bigint(20) FK to clinic.ClinicNum. This will be 0 if clinics are not enabled. This will be 0 for logs prior to version 18.4.
15 AggTransLogNum bigint(20) FK to tsitranslog.TsiTransLogNum. Will be 0 if not part of an aggregate group. Will be 0 for logs prior to version 18.4.

ucum
Unified Code for Units of Measure. UCUM is not a stricly defined list of codes but is instead a language definition that allows for all units and derived units to be named. Examples: g (grams), g/L (grams per liter), g/L/s (grams per liter per second), g/L/s/s (grams per liter per second per second), etc... are all allowed units meaning there is an infinite number of units that can be defined using UCUM conventions. The codes stored in this table are merely a common subset that was readily available and premade.
Order Name Type Summary
0 UcumNum bigint(20) Primary key.
1 UcumCode varchar(255) Indexed. Also called concept code. Example: mol/mL
2 Description varchar(255) Also called Concept Name. Human readable form of the UCUM code. Example: Moles Per MilliLiter [Substance Concentration Units]
3 IsInUse tinyint(4) True if this unit of measure is or has ever been in use. Useful for assisting users to select common units.

updatehistory
Makes an entry every time Open Dental has successfully updated to a newer version. New entries will always be for the newest version being used so that users can see a "history" of how long they used previous versions. This will also help EHR customers when attesting or when they get audited.
Order Name Type Summary
0 UpdateHistoryNum bigint(20) Primary key.
1 DateTimeUpdated datetime DateTime that OD was updated to the Version.
2 ProgramVersion varchar(255) The version that OD was updated to.
3 Signature text Obfuscated string containing when and who accepted the license agreement.

userclinic
This creates a many-to-many relationship between users and clinics. An entry in this table means that the user has access to the clinic. Not used unless userod.ClinicIsRestricted is turned on for a user. Userod.Clinic is also used separately, regardless of whether this table is used. Provider access is derived from this by using the userod.ProvNum.
Order Name Type Summary
0 UserClinicNum bigint(20) Primary key.
1 UserNum bigint(20) FK to userod.UserNum
2 ClinicNum bigint(20) FK to clinic.ClinicNum

usergroup
A group of users. Security permissions are determined by the usergroup of a user.
Order Name Type Summary
0 UserGroupNum bigint(20) Primary key.
1 Description varchar(255) .
2 UserGroupNumCEMT bigint(20) FK to usergroup.UserGroupNum. The user group num within the Central Manager database. Only editable via CEMT. Can change when CEMT syncs.

usergroupattach
Allows multiple groups to be attached to a user. Security permissions are determined by the usergroups of a user.
Order Name Type Summary
0 UserGroupAttachNum bigint(20) Primary key.
1 UserNum bigint(20) FK to userod.UserNum.
2 UserGroupNum bigint(20) FK to usergroup.UserGroupNum.

userod
(User OD since "user" is a reserved word) Users are a completely separate entity from Providers and Employees even though they can be linked. A usernumber can never be changed, ensuring a permanent way to record database entries and leave an audit trail. A user can be a provider, employee, or neither.
Order Name Type Summary
0 UserNum bigint(20) Primary key.
1 UserName varchar(255) .
2 Password varchar(255) The password details in a "HashType$Salt$Hash" format, separating the different fields by '$'. This is NOT the actual password but the encoded password hash. If the contents of this variable are not in the aforementioned format, it is assumed to be a legacy password hash (MD5).
3 UserGroupNum bigint(20) Deprecated. Use UserGroupAttaches to link Userods to UserGroups.
4 EmployeeNum bigint(20) FK to employee.EmployeeNum. Used for timecards to block access by other users.
5 ClinicNum bigint(20) FK to clinic.ClinicNum. Default clinic for this user. It causes new patients to default to this clinic when entered by this user. If 0, then user has no default clinic or default clinic is HQ if clinics are enabled. Also see userod.ClinicIsRestricted and userclinic table.
6 ProvNum bigint(20) FK to provider.ProvNum. It is possible to have multiple userods attached to a single provider.
7 IsHidden tinyint(1) Set true to hide user from login list.
8 TaskListInBox bigint(20) FK to tasklist.TaskListNum. 0 if no inbox setup yet. It is assumed that the TaskList is in the main trunk, but this is not strictly enforced. User can't delete an attached TaskList, but they could move it.
9 AnesthProvType int(2) Defaults to 3 (regular user) unless specified. Helps populates the Anesthetist, Surgeon, Assistant and Circulator dropdowns properly on FormAnestheticRecord///
10 DefaultHidePopups tinyint(4) If set to true, the BlockSubsc button will start out pressed for this user.
11 PasswordIsStrong tinyint(4) Gets set to true if strong passwords are turned on, and this user changes their password to a strong password. We don't store actual passwords, so this flag is the only way to tell.
12 ClinicIsRestricted tinyint(4) When true, prevents user from having access to clinics that are not in the corresponding userclinic table. Many places throughout the program will optionally remove the 'All' option from this user when true. Also see userod.ClinicNum and userclinic table. This field handles the double negative issue because the default must be no restriction.
13 InboxHidePopups tinyint(4) If set to true, the BlockInbox button will start out pressed for this user.
14 UserNumCEMT bigint(20) FK to userod.UserNum. The user num within the Central Manager database. Only editable via CEMT. Can change when CEMT syncs.
15 DateTFail datetime The date and time of the most recent log in failure for this user. Set to MinValue after user logs in successfully.
16 FailedAttempts tinyint The number of times this user has failed to log into their account. Set to 0 after user logs in successfully.
17 DomainUser varchar(255) The username for the ActiveDirectory user to link the account to. Consists of the Pref DomainObjectGuid followed by the domain user name. Example:634dd357-3902-48e2-b6d3-9b84dada6bd2\KyleG.
18 IsPasswordResetRequired tinyint(4) Boolean. If true, the user's password needs to be reset on next login.
19 MobileWebPin varchar(255) A hashed pin that is used for mobile web validation on eClipboard. Not used in OD proper.
20 MobileWebPinFailedAttempts tinyint The number of attempts the mobile web pin has failed. Reset on successful attempt.
21 DateTLastLogin datetime Minimum date if last login date and time is unknown. Otherwise contians the last date and time this user successfully logged in.
22 EClipboardClinicalPin varchar(128) Pin for ODT. This is the hashed value of the pin. Not used in OD proper.
23 BadgeId varchar(255) A unique number that corresponds to the number on an employee badge. The last numbers on an employee badge. Will be 1 to 4 digits. These numbers are assigned to the badges by the factory. We order a specific range of badges, such as 1801-2000, which are assigned in order and not reused to avoid duplicates. The first four digits on the badges are not used by the Lenel OnGuard software, so we do not use them here either.

userodapptview
Keeps track of the last appointment view used on a per user basis. Users can have multiple rows in this table when using clinics.
Order Name Type Summary
0 UserodApptViewNum bigint(20) Primary key.
1 UserNum bigint(20) FK to userod.UserNum.
2 ClinicNum bigint(20) FK to clinic.ClinicNum. 0 if clinics is not being used or if the user has not been assigned a clinic.
3 ApptViewNum bigint(20) FK to apptview.ApptViewNum.

userodpref
This is a specific preference for a unique Userod. Typically just a few for each user. These all could have all been columns in the userod table. Most of these just hold a ValueString of some sort.
Order Name Type Summary
0 UserOdPrefNum bigint(20) Primary key.
1 UserNum bigint(20) FK to userod.UserNum.
2 Fkey bigint(20) FK to definition.DefNum AND FkeyType=0, FK to clinic.ClinicNum AND FkeyType=1, FK to tasklist.TaskListNum AND FKeyType=10, FK to program.ProgramNum AND FkeyType IN(11,14,15), FK to sheetdef.SheetDefNum AND FkeyType IN(16,18), FK to mapareacontainer.MapAreaContainerNum AND FkeyType=28.
3 FkeyType tinyint(4) Enum:UserOdFkeyType This is the field that tells us which kind of row this is. It's badly named because in most cases, Fkey is just 0, and the row is just storing a ValueString.
ImageCategoryExpanded: 0 - Imaging module expanded categories. Presence of a row means expanded. Absence means collapsed. No valuestring needed. For this type, FKey is definition.DefNum.
ClinicLast: 1 - FKey to clinic.ClinicNum Used to track the last opened clinic for the user.
WikiHomePage: 2 - Wiki home pages use ValueString to store the name of the wiki page instead of Fkey due to how FormWiki loads pages.
AutoNoteExpandedCats: 3 - ValueString will be a comma delimited list of DefNums for the last expanded categories for the user. When FormAutoNotes loads, these categories will be expanded again.
TaskCollapse: 4 - Controls whether tasks will be collapsed or not by default
CommlogPersistClearNote: 5 - When FormCommItem is in Persistent mode, clear the note text box after the user creates a commlog.
CommlogPersistClearEndDate: 6 - When FormCommItem is in Persistent mode, clear the End text box after the user creates a commlog.
CommlogPersistUpdateDateTimeWithNewPatient: 7 - When FormCommItem is in Persistent mode, update the Date / Time text box with NOW() whenver the patient changes.
PerioCurrentExamOnly: 8 - Whether or not to display just the currently selected exam in the Perio Chart. When true, this shows values, both probing and non-probing, from the current exam only.
SmsGroupBy: 9 - Text message grouping preference. 0 - None; 1 - By Patient;
TaskListBlock: 10 - Stores a TaskListNum that the corresponding user wants to block all pop ups from. For this type, FKey is tasklist.TaskListNum.
Program: 11 - FKey to program.ProgramNum. Also used in DoseSpot for the DoseSpot User ID, stored in ValueString.
SuppressLogOffMessage: 12
AcctProcBreakdown: 13 - Sets the default state of the Account Module "Show Proc Breakdowns" checkbox.
ProgramUserName: 14 - Stores user specific username for programs, generally used for Oryx.ProgNum. For this type, FKey is program.ProgramNum.
ProgramPassword: 15 - Stores user specific password for programs. For this type, FKey is program.ProgramNum.
Dashboard: 16 - Stores user specific dashboard to open on load. FKey points to the sheetdef.SheetDefNum that the user last had open.
UserTheme: 17 - Deprecated.
DynamicChartLayout: 18 - Stores the Dynamic Chart Layout SheetDef.SheetDefNum selected by a user, FKey points to sheetdef.SheetDefNum.
PerioAutoAdvanceFacialsFirst: 19 - Whether or not to set the perio auto advance to custom.
LogOffTimerOverride: 20 - Stores the value (in minutes) of when the user should be auto logged off.
ReceivedSupplyOrders: 21 - Whether or not we check the "Show received" checkbox when loading the supply order history.
ToothChartUsesDiffColorByProv: 22 - Color defs can be used for different proc statuses when the user's provider doesn't match the procedure's provider.
ShowAutomatedCommlog: 23 - Whether to show automated commlogs in the account module, chart module, and appointment edit window.
QueryMonitorHasStackTraces: 24 - Preference that indicates whether stack traces are to be logged by the query monitor or not. If exists 0 or 1 is stored in ValueString
WikiSearchIncludeContent: 25 - Preference only applies to the wiki search. Set and unset only in the wiki search window. Box defaults to checked if this preference is not set.
TaskBlockedMakeSound: 26 - Sets whether tasks popups that are blocked still play the sound notification. If true, sound will play. If false, sound will be blocked as well.
ImageSelectorWidth: 27 - Stores the width of the left Image Selector (tree) of the Imaging module in the ValueString. Does not store expanded/collapsed, so this width would be the expanded width. There is no limit. Does not use FKey.
DefaultMapSetting: 28 HQ only. This is used for storing the default map to open up on a customers DB for a specific user. Examples include Engineers, Daycare , Conv/Techs. The Fkey points to the mapareacontainer.MapAreaContainerNum table.
DefaultTestingTeamJM: 29 HQ only. Stores the default testing team that is selected when opening the Testing tab in the Job Manager.
PerioShowCurrentProbingOnly: 31 - Whether or not to display probing values for only the currently selected exam in the Perio Chart. When true, this shows only probing values from the current exam.
4 ValueString text Used to hold the value relating to the flag. FKey=0 in this case. This can be a simple primitive value, a comma separated list, or a complex document in xml.
5 ClinicNum bigint(20) FK to clinic.ClinicNum, The default clinic for a User. This is duplicate info that's already available in userod.ClinicNum, but having it here might allow simpler queries or linq.

userquery
A list of query favorites that users can run.
Order Name Type Summary
0 QueryNum bigint(20) Primary key.
1 Description varchar(255) Description.
2 FileName varchar(255) The name of the file to export to.
3 QueryText mediumtext The text of the query.
4 IsReleased tinyint(4) Determines whether the query is safe for users with lower permissions. Also causes this user query to be available in the Main Menu, Reports, Query Favorites Filtered.
5 IsPromptSetup tinyint(4) Determines whether the Query Favorites window should prompt for query values via FormQueryParser/'SET Fields' popup when running query.
6 DefaultFormatRaw tinyint(4) Determines whether the UserQuery window loads with the 'Raw' format radio button pre-selected. For a new userquery, this is set based on pref.UserQueryDefaultRaw.

userweb
Holds credentials for web applications. Each userweb entry should be linked to a table type or entity of sorts. E.g. Patient Portal credentials will have an FKey to patient.PatNum and an FKeyType linked to "UserWebFKeyType.PatientPortal".
Order Name Type Summary
0 UserWebNum bigint(20) Primary key.
1 FKey bigint(20) FK to patient.PatNum AND FKeyType=1.
2 FKeyType tinyint(4) Enum:UserWebFKeyType The type of row that identifies which table FKey links to.
Undefined: This is a default value that should never be saved into the table.
PatientPortal: FK to patient.PatNum
3 UserName varchar(255)
4 Password varchar(255) The password details in a "HashType$Salt$Hash" format, separating the different fields by '$'. This is NOT the actual password but the encoded password hash. If the contents of this variable are not in the aforementioned format, it is assumed to be a legacy password hash (MD5).
5 PasswordResetCode varchar(255) A randomly generated code that can be used to reset the password.
6 RequireUserNameChange tinyint(4) Set to true to require a user to change their UserName.
7 DateTimeLastLogin datetime The last time when the user used their credentials to log in.
8 RequirePasswordChange tinyint(4) Set to true to require a user to change their Password.

utm
A UTM (urchin tracking module) code is a simple string that you can add to the end of a URL to track the performance of campaigns and content.
Order Name Type Summary
0 UtmNum bigint(20) Primary key.
1 CampaignName varchar(500) Text that identifies a specific campaign or promotion identifying why traffic is being directed to the users website.
2 MediumInfo varchar(500) Text that tracks how traffic is getting to the users website, such as email or social media.
3 SourceInfo varchar(500) Text that identifies where traffic is originating from.

vaccinedef
A vaccine definition. Should not be altered once linked to VaccinePat.
Order Name Type Summary
0 VaccineDefNum bigint(20) Primary key.
1 CVXCode varchar(255) RXA-5-1.
2 VaccineName varchar(255) Name of vaccine. RXA-5-2.
3 DrugManufacturerNum bigint(20) FK to drugmanufacturer.DrugManufacturerNum.

vaccineobs
Vaccine observation. There may be multiple vaccine observations for each vaccine.
Order Name Type Summary
0 VaccineObsNum bigint(20) Primary key.
1 VaccinePatNum bigint(20) FK to vaccinepat.VaccinePatNum.
2 ValType tinyint(4) Enum:VaccineObsType Coded, Dated, Numeric, Text, DateAndTime. Used in HL7 OBX-2.
Coded: 0 - Code CE. Coded entry. (default)
Dated: 1 - Code DT. Date (no time).
Numeric: 2 - Code NM. Numeric.
Text: 3 - Code ST. String.
DateAndTime: 4 - Code TS. Date and time.
3 IdentifyingCode tinyint(4) Enum:VaccineObsIdentifier Identifies the observation question. Used in HL7 OBX-3.
DatePublished: 0 - LOINC code 29768-9. Date vaccine information statement published:TmStp:Pt:Patient:Qn: (default)
DatePresented: 1 - LOINC code 29769-7. Date vaccine information statement presented:TmStp:Pt:Patient:Qn:
DatePrecautionExpiration: 2 - LOINC code 30944-3. Date of vaccination temporary contraindication and or precaution expiration:TmStp:Pt:Patient:Qn:
Precaution: 3 - LOINC code 30945-0. Vaccination contraindication and or precaution:Find:Pt:Patient:Nom:
DatePrecautionEffective: 4 - LOINC code 30946-8. Date vaccination contraindication and or precaution effective:TmStp:Pt:Patient:Qn:
TypeOf: 5 - LOINC code 30956-7. Type:ID:Pt:Vaccine:Nom:
FundsPurchasedWith: 6 - LOINC code 30963-3. Funds vaccine purchased with:Find:Pt:Patient:Nom:
DoseNumber: 7 - LOINC code 30973-2. Dose number:Num:Pt:Patient:Qn:
NextDue: 8 - LOINC code 30979-9. Vaccines due next:Cmplx:Pt:Patient:Set:
DateDue: 9 - LOINC code 30980-7. Date vaccine due:TmStp:Pt:Patient:Qn:
DateEarliestAdminister: 10 - LOINC code 30981-5. Earliest date to give:TmStp:Pt:Patient:Qn:
ReasonForcast: 11 - LOINC code 30982-3. Reason applied by forcast logic to project this vaccine:Find:Pt:Patient:Nom:
Reaction: 12 - LOINC code 31044-1. Reaction:Find:Pt:Patient:Nom:
ComponentType: 13 - LOINC code 38890-0. Vaccine component type:ID:Pt:Vaccine:Nom:
TakeResponseType: 14 - LOINC code 46249-9. Vaccination take-response type:Prid:Pt:Patient:Nom:
DateTakeResponse: 15 - LOINC code 46250-7. Vaccination take-response date:TmStp:Pt:Patient:Qn:
ScheduleUsed: 16 - LOINC code 59779-9. Immunization schedule used:Find:Pt:Patient:Nom:
Series: 17 - LOINC code 59780-7. Immunization series:Find:Pt:Patient:Nom:
DoseValidity: 18 - LOINC code 59781-5. Dose validity:Find:Pt:Patient:Ord:
NumDosesPrimary: 19 - LOINC code 59782-3. Number of doses in primary immunization series:Num:Pt:Patient:Qn:
StatusInSeries: 20 - LOINC code 59783-1. Status in immunization series:Find:Pt:Patient:Nom:
DiseaseWithImmunity: 21 - LOINC code 59784-9. Disease with presumed immunity:Find:Pt:Patient:Nom:
Indication: 22 - LOINC code 59785-6. Indication for Immunization:Find:Pt:Patient:Nom:
FundPgmEligCat: 23 - LOINC code 64994-7. Vaccine fund pgm elig cat
DocumentType: 24 - LOINC code 69764-9. Document type
4 ValReported varchar(255) The observation value. The type of the value depends on the ValType. Used in HL7 OBX-5.
5 ValCodeSystem tinyint(4) Enum:VaccineObsValCodeSystem CVX, HL70064. The observation value code system when ValType is Coded. Used in HL7 OBX-5.
CVX: 0 (default)
HL70064: 1
SCT: 2
6 VaccineObsNumGroup bigint(20) FK to vaccineobs.VaccineObsNum. All vaccineobs records with matching GroupId are in the same group. Set to 0 if this vaccine observation is not part of a group. Used in HL7 OBX-4.
7 UcumCode varchar(255) Used in HL7 OBX-6.
8 DateObs date Date of observation. Used in HL7 OBX-14.
9 MethodCode varchar(255) Code from code set CDCPHINVS (this code system is not yet fully defined, so user has to enter manually). Used in HL7 OBX-17. Only required when IdentifyingCode is FundPgmEligCat.

vaccinepat
A vaccine given to a patient on a date.
Order Name Type Summary
0 VaccinePatNum bigint(20) Primary key.
1 VaccineDefNum bigint(20) FK to vaccinedef.VaccineDefNum. Can be 0 if and only if CompletionStatus=NotAdministered, in which case CVX code is assumed to be 998 (not administered) and there is no manufacturer.
2 DateTimeStart datetime The datetime that the vaccine was administered.
3 DateTimeEnd datetime Typically set to the same as DateTimeStart. User can change.
4 AdministeredAmt float Size of the dose of the vaccine. 0 indicates unknown and gets converted to 999 on HL7 output.
5 DrugUnitNum bigint(20) FK to drugunit.DrugUnitNum. Unit of measurement of the AdministeredAmt. 0 represents null. When going out in HL7 RXA-7, the units must be valid UCUM or the export will be blocked. Sometime in the future, we may want to convert this column to a string and name it "UcumCode". For now left alone for backwards compatibility.
6 LotNumber varchar(255) Optional. Used in HL7 RXA-9.1.
7 PatNum bigint(20) FK to patient.PatNum.
8 Note text Documentation sometimes required.
9 FilledCity varchar(255) The city where the vaccine was filled. This can be different than the practice office city for historical vaccine information. Exported in HL7 ORC-3.
10 FilledST varchar(255) The state where the vaccine was filled. This can be different than the practice office state for historical vaccine infromation. Exported in HL7 ORC-3.
11 CompletionStatus tinyint(4) Enum:VaccineCompletionStatus Exported in HL7 RXA-20. Corresponds to HL7 table 0322 (guide page 225).
Complete: 0 - Code CP. Default.
Refused: 1 - Code RE
NotAdministered: 2 - Code NA
PartiallyAdministered: 3 - Code PA
12 AdministrationNoteCode tinyint(4) Enum:VaccineAdministrationNote Exported in HL7 RXA-9. Corresponds to CDC code set NIP001 (http://hl7v2-iz-testing.nist.gov/mu-immunization/).
NewRecord: 0 - Code 00. Default.
HistoricalSourceUnknown: 1 - Code 01
HistoricalOtherProvider: 2 - Code 02
HistoricalParentsWrittenRecord: 3 - Code 03
HistoricalParentsRecall: 4 - Code 04
HistoricalOtherRegistry: 5 - Code 05
HistoricalBirthCertificate: 6 - Code 06
HistoricalSchoolRecord: 7 - Code 07
HistoricalPublicAgency: 8 - Code 08
13 UserNum bigint(20) FK to userod.UserNum. The user that the vaccine was entered by. May be 0 for vaccines added before this column was created. Exported in HL7 ORD-10.
14 ProvNumOrdering bigint(20) FK to provider.ProvNum. The provider who ordered the vaccine. Exported in HL7 ORD-12.
15 ProvNumAdminister bigint(20) FK to provider.ProvNum. The provider who administered the vaccine. Exported in HL7 RXA-10.
16 DateExpire date The date that the vaccine expires. Exported in HL7 RXA-16.
17 RefusalReason tinyint(4) Enum:VaccineRefusalReason Exported in HL7 RXA-18. Corresponds to CDC code set NIP002 (http://hl7v2-iz-testing.nist.gov/mu-immunization/).
None: 0 - No code. Default. Not sent in HL7 messages. Only used in UI.
ParentalDecision: 1 - Code 00
ReligiousExemption: 2 - Code 01
Other: 3 - Code 02
PatientDecision: 4 - Code 03
18 ActionCode tinyint(4) Enum:VaccineAction Exported in HL7 RXA-21. Corresponds to HL7 table 0323 (guide page 225).
Add: 0 - Code A. Default.
Delete: 1 - Code D
Update: 2 - Code U
19 AdministrationRoute tinyint(4) Enum:VaccineAdministrationRoute Exported in HL7 RXR-1. Corresponds to HL7 table 0162 (guide page 200).
None: 0 - No code. Default. Not sent in HL7 messages. Used in UI only.
Intradermal: 1 - Code ID.
Intramuscular: 2 - Code IM.
Nasal: 3 - Code NS.
Intravenous: 4 - Code IV.
Oral: 5 - Code PO.
Other: 6 - Code OTH.
Subcutaneous: 7 - Code SC.
Transdermal: 8 - Code TD.
20 AdministrationSite tinyint(4) Enum:VaccineAdministrationSite Exported in HL7 RXR-2. Corresponds to HL7 table 0163 (guide page 201).
None: 0 - No code. Default. Not sent in HL7 messages. Used in UI only.
LeftThigh: 1- Code LT
LeftArm: 2 - Code LA
LeftDeltoid: 3 - Code LD
LeftGluteousMedius: 4 - Code LG
LeftVastusLateralis: 5 - Code LVL
LeftLowerForearm: 6 - Code LLFA
RightArm: 7 - Code RA
RightThigh: 8 - Code RT
RightVastusLateralis: 9 - Code RVL
RightGluteousMedius: 10 - Code RG
RightDeltoid: 11 - Code RD
RightLowerForearm: 12 - Code RLFA

vitalsign
For EHR module, one dated vital sign entry. BMI is calulated on demand based on height and weight and may be one of 4 ALOINC codes. 39156-5 "Body mass index (BMI) [Ratio]" is most applicable.
Order Name Type Summary
0 VitalsignNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 Height float Height of patient in inches. Fractions might be needed some day. Allowed to be 0. Six possible LOINC codes, most applicable is 8302-2, "Body height".
3 Weight float Lbs. Allowed to be 0. Six possible LOINC codes, most applicable is 29463-7, "Body weight".
4 BpSystolic smallint(6) Units are mmHg (millimeters of mercury). Allowed to be 0. LOINC code 8480-6.
5 BpDiastolic smallint(6) Units are mmHg (millimeters of mercury). Allowed to be 0. LOINC code 8462-4.
6 DateTaken date The date that the vitalsigns were taken.
7 HasFollowupPlan tinyint(4) For an abnormal BMI measurement this must be true in order to meet quality measurement.
8 IsIneligible tinyint(4) If a BMI was not recorded, this must be true in order to meet quality measurement. For children, this is used as an IsPregnant flag, the only valid reason for not taking BMI on children.
9 Documentation text A general note inside the VS window.
10 ChildGotNutrition tinyint(4) .
11 ChildGotPhysCouns tinyint(4) .
12 WeightCode varchar(255) Used for CQMs. SNOMED CT code either Normal="", Overweight="238131007", or Underweight="248342006". Set when BMI is found to be "out of range", based on age groups. Should be calculated when vital sign is saved. Calculate based on age as of Jan 1 of the year vitals were taken. Not currently displayed to user.
13 HeightExamCode varchar(30) FK to ehrcode.CodeValue. Also FK to LOINC.LoincCode. Used for CQMs. LOINC code used to describe the height exam performed. Examples: Body Height Measured=3137-7, Body Height Stated=3138-5, Body Height --pre surgery=8307-1. We will default to Body Height=8302-2, but user can choose another from the list of 6 allowed. Can be blank if BP only.
14 WeightExamCode varchar(30) FK to ehrcode.CodeValue. Also FK to LOINC.LoincCode. Used for CQMs. LOINC code used to describe the weight exam performed. Examples: Body Weight Measured=3141-9, Body Weight Stated=3142-7, Body Weight --with clothes=8350-1. We will default to Body Weight=29463-7, but user can choose another from the list of 6 allowed. Can be blank if BP only.
15 BMIExamCode varchar(30) FK to ehrcode.CodeValue. Also FK to LOINC.LoincCode. Used for CQMs. LOINC code used to describe the BMI percentile calculated. We will use LOINC 59576-9 - BMI Percentile Per age and gender. Can be blank if BP only.
16 EhrNotPerformedNum bigint(20) FK to ehrnotperformed.EhrNotPerformedNum. This will link a vitalsign to the EhrNotPerformed object where the reason not performed will be stored. The linking will allow us to display the not performed reason directly in the vital sign window and will make CQM queries easier. Will be 0 if not linked to an EhrNotPerformed object.
17 PregDiseaseNum bigint(20) FK to disease.DiseaseNum. This will link this vitalsign object to a pregnancy diagnosis for this patient. It will be 0 for non pregnant patients. The disease it is linked to will be inserted automatically based on the default value set. In order to change this code for this specific exam it will have to be changed in the problems list.
18 BMIPercentile int(11) BMI percentile of patient, based on gender and age and the calculated BMI. We will use the CDC numbers to calculate percentile found here: (http://www.cdc.gov/nchs/data/series/sr_11/sr11_246.pdf).
19 Pulse int(11) Recorded pulse of the patient. Stored in beats per minute.

webschedcarrierrule
Order Name Type Summary
0 WebSchedCarrierRuleNum bigint(20) Primary key.
1 ClinicNum bigint(20) FK to clinic.ClinicNum.
2 CarrierName varchar(255) Name of the carrier.
3 DisplayName varchar(255) Set by the user. This is what is shown as a selection for the patient in the WebSched UI.
4 Message text Return message sent back to patients through WebSched. Set by the office after a patient has made a carrier selection.
5 Rule tinyint(4) Enum:RuleType Allow, AllowWithInput, AllowWithMessage, Block.
Allow: 0
AllowWithInput: 1
AllowWithMessage: 2
BlockWithMessage: 3

webschedrecall
Web Sched recall reminders that may have been sent via EConnector to HQ.
Order Name Type Summary
0 WebSchedRecallNum bigint(20) PK. Generated by HQ.
1 ClinicNum bigint(20) FK to clinic.ClinicNum for the corresponding appointment.
2 PatNum bigint(20) FK to patient.PatNum for the corresponding patient.
3 RecallNum bigint(20) FK to recall.RecallNum. Generated by OD.
4 DateTimeEntry datetime Generated by OD. Timestamp when row is created.
5 DateDue datetime The date that the recall is due.
6 ReminderCount int(11) The number of reminders that have been sent for this recall.
7 DateTimeSent datetime DateTime the message was sent.
8 DateTimeSendFailed datetime The most recent time that sending a reminder failed. Will be 01/01/0001 if a reminder has never been attempted.
9 SendStatus tinyint(4) Enum:AutoCommStatus The status of the email or text being sent for this recall.
Undefined: 0 - Should not be in the database but can be used in the program.
DoNotSend: 1 - Do not send a reminder.
SendNotAttempted: 2 - We will send, but send has not been attempted yet.
SendSuccessful: 3 - Has been sent successfully.
SendFailed: 4 - Attempted to send but not successful.
SentAwaitingReceipt: 5 - Has been sent successfully, awaiting receipt.
10 ShortGUID varchar(255) Generated by HQ. Identifies this AutoCommGuid in future transactions between HQ and OD.
11 ResponseDescript text Generated by OD in some cases and HQ in others. Any human readable error message generated by either HQ or EConnector. Used for debugging.
12 Source tinyint(4) Enum:WebSchedRecallSource Where this row came from.
Undefined: 0 - Should not be in the database.
FormRecallList: 1 - Originated from a user clicking the Web Sched button in the Recall List.
EConnectorAutoComm: 2 - The eConnector created this row in the Auto Comm Web Sched thread.
13 CommlogNum bigint(20) FK to commlog.CommlogNum associated to this WebSchedRecall.
14 MessageType tinyint(4) Enum:CommType The type of message being sent for this recall.
Invalid: -1 - Do not use.
Preferred: 0 - Use text OR email based on patient preference.
Text: 1 - Attempt to send text message, if successful do not send via email. (Unless, a SendAll bool is used, which usually negates the need for this enumeration.)
Email: 2 - Attempt to send email message, if successful do not send via text. (Unless, a SendAll bool is used, which usually negates the need for this enumeration.)
SecureEmail: 3 - Attempt to send secure email message.
15 MessageFk bigint(20) FK to smstomobile.SmsToMobileNum AND MessageType=1, FK to emailmessage.EmailMessageNum AND MessageType=2.
16 ApptReminderRuleNum bigint(20) FK to apptreminderrule.ApptReminderRuleNum. Allows us to look up the rules to determine how to send this apptcomm out.

wikilistheaderwidth
Keeps track of column widths in Wiki Lists.
Order Name Type Summary
0 WikiListHeaderWidthNum bigint(20) Primary key.
1 ListName varchar(255) Name of the list that this header belongs to. Tablename without the prefix.
2 ColName varchar(255) Name of the column that this header belongs to.
3 ColWidth int(11) Width in pixels of column.
4 PickList text Newline delimited list of options for the user to select from when adding or editing a wiki list item.
5 IsHidden tinyint(4) Hide or show this column in the UI.

wikilisthist
Rows never edited, just added. Contains all historical versions of each list.
Order Name Type Summary
0 WikiListHistNum bigint(20) Primary key.
1 UserNum bigint(20) FK to userod.UserNum.
2 ListName varchar(255) Will not be unique because there are multiple revisions per page.
3 ListHeaders text The contents of the corresponding WikiListHeaderWidths row converted to a string in format ColName1,ColWidth1;ColName2,ColWidth2;... Database type text/varChar2(4000) (65K/4K)
4 ListContent mediumtext The entire contents of the revision are stored as XML. Database type mediumtext/clob (16M,4G)
5 DateTimeSaved datetime The DateTime from the original WikiPage object.

wikipage
Rows never edited, just added, unless the wiki page is a draft. Contains only newest versions of each page and all drafts.
Order Name Type Summary
0 WikiPageNum bigint(20) Primary key.
1 UserNum bigint(20) FK to userod.UserNum.
2 PageTitle varchar(255) Must be unique. Any character is allowed except: \r, \n, and ". Needs to be tested, especially with apostrophes.
3 KeyWords varchar(255) Automatically filled from the [[Keywords:]] tab in the PageContent field as page is being saved.
4 PageContent mediumtext Content of page stored in "wiki markup language". This should never be updated, unless it is a draft. Medtext (16M)
5 DateTimeSaved datetime The DateTime that the page was saved to the DB. User can't directly edit.
6 IsDraft tinyint(4) Signifies that the wiki page is a draft, and will only show in the Wiki Drafts form.
7 IsLocked tinyint(4) Records if a wiki page is locked. If it is locked, only user swith the WikiAdmin permission are allowed to edit the page
8 IsDeleted tinyint(4) This flag will be set when the user archives the WikiPage.
9 PageContentPlainText mediumtext Content of page stored without any HTML markup or wiki page links. This plain text allows for easier searching.

wikipagehist
Rows never edited, just added. Contains all historical versions of each page as well.
Order Name Type Summary
0 WikiPageNum bigint(20) Primary key.
1 UserNum bigint(20) FK to userod.UserNum.
2 PageTitle varchar(255) Will not be unique because there are multiple revisions per page.
3 PageContent mediumtext The entire contents of the revision are stored in "wiki markup language". This should never be updated. Medtext (16M)
4 DateTimeSaved datetime The DateTime from the original WikiPage object.
5 IsDeleted tinyint(4) This flag will only be set for the revision where the user marked it deleted, not the ones prior.

xchargetransaction
XCharge transactions that have been imported into OD. Used by reconcile tool. Keeps a history, but no references to these rows from other tables.
Order Name Type Summary
0 XChargeTransactionNum bigint(20) Primary key.
1 TransType varchar(255) Usually "CCPurchase."
2 Amount double Amount.
3 CCEntry varchar(255) Credit card entry method. Usually "Keyed".
4 PatNum bigint(20) FK to patient.PatNum.
5 Result varchar(255) Result: AP for approved, DECLINE for declined.
6 ClerkID varchar(255) ClerkID. Open Dental username with a possible " R" at the end to indicate a recurring charge.
7 ResultCode varchar(255) ResultCode: 000 for approved, 005 for declined.
8 Expiration varchar(255) Expiration is shown as a four digit number (string since it may contain leading zeros).
9 CCType varchar(255) VISA, AMEX, MC, DISC etc.
10 CreditCardNum varchar(255) Usually looks like 123456XXXXXX7890.
11 BatchNum varchar(255) BatchNum.
12 ItemNum varchar(255) ItemNum. Starts at 0001 for each batch.
13 ApprCode varchar(255) Approval code. 6 characters. 72142Z for example.
14 TransactionDateTime datetime TransactionDateTime. Is taken from the Date and Time columns in X-Charge.
15 BatchTotal double BatchTotal. Stores the BatchTotal from XCharge. This is a cumulative value for all transactions up to this row in the same batch. BatchTotal from the last transaction in a batch should match the sum of all the Amount fields for the same batch

xwebresponse
Received as XML output from XWeb gateway. Not all fields are available for all method calls. This is a combination of all possible output fields. The fields that are available are dependent on which method was called and the given result. HPF (XWeb Hosted Payment Form) Payments and HPF CC Alias creations will each enter a row in this table. That row will be monitored by the eConnector and updated when the XWebResponseCode changes from Pending. -- 1) Create the row and indicate the HPF/OTK. -- 2) Poll the OTK (one-time key) until an XWebResponseCode is available. Update the row with information about the transaction. DTG (XWeb Direct To Gateway) Will enter 1 row in this table. -- 1) Make the DTG payment using a pre-authorized CC alias. Create row with information about the transaction. Any fields prefixed with 'Gateaway output' come directly as XML output from the XWeb Gateway. All other fields are derived by OD. The class instance will created by eConnector by deserializing an XML string as received from XWeb Gateway. The fields names MUST NOT CHANGE for this reason. XML will not deserialize if the names do not match EXACTLY.
Order Name Type Summary
0 XWebResponseNum bigint(20) Primary key.
1 PatNum bigint(20) FK to patient.PatNum.
2 ProvNum bigint(20) FK to provider.ProvNum.
3 ClinicNum bigint(20) FK to clinic.ClinicNum.
4 PaymentNum bigint(20) FK to payment.PayNum.
5 DateTEntry datetime Timestamp at which this row was created. Auto generated on insert.
6 DateTUpdate datetime Timestamp at which this row was last updated. Will be updated each time the OTK status is polled and one final time when XWebResponseCode changes from Pending.
7 TransactionStatus tinyint(4) Inidicates which phase of the XWeb process this transaction is in. See class summary for details.
8 ResponseCode int(11) Gateaway output. Pre-defined responses generated by XWeb. Will be converted to strongly typed enum XWebResponseCode.
9 XWebResponseCode varchar(255) Enum:XWebResponseCodes Strongly typed representation of ResponseCode. Initialized by XWebInputAbs.CreateGatewayResponse().
Undefined: 1000
OtkSuccess: 100
Approval: 000
Declined: 001
AliasSuccess: 005
PartialApproval: 007
AutoDecline: 009
InvalidExpirationDate: 010
ZeroDollarAuthApproval: 032 - Used when creating a card alias.
ExpiredWithoutApproval: 101 - Expired Without Approval. Hosted Form timed out without Approval, OTK was never launched, or Invalid OTK
Pending: 102 - Pending (neither of the above events has occurred yet)
ParsingError: 800 Parsing Error Unable to parse the XML request sent.
MaxRequestDataExceededError: 801 Maximum Request Data Exceeded Error - The XML request exceeds the 2048-byte maximum size.
DuplicateFieldError: 802 Duplicate Field Error - The XML request had more than one copy of a particular field. The field causing the error may be specified.
ImproperDLLError: 803 Improper DLL Error - Unrecognized DLL name. This can be caused by a wrong URL entered into the "Server Location" setting under XCharge Server Setup, Credit Cards, Connection.
SpecificationVersionError: 804 Specification Version Error - XML error, the Specification Version field is set incorrectly.
AuthenticationError: 805 Authentication Error - The XWeb ID, Auth Key or Terminal ID fields are incorrect (check for leading and trailing spaces if they appear to match those on file). The field causing the error may be specified.
ProductionMerchantSetUpError: 806 Production Merchant Set Up Error - The Mode was incorrectly sent. This can happen when trying to process on theProduction server with a Development or Test Mode Processing Account.
TestMerchantSetUpError: 807 Test Merchant Set Up Error - The Mode was incorrectly sent. This can happen when trying to process on the Testserver with a Development or Production Mode Processing Account.
DevelopmentMerchantSetUpError: 808 Development Merchant Set Up Error - The Mode was incorrectly sent. This can happen when trying to process on theDevelopment server with a Production or Test Mode Processing Account.
RequiredFieldNotSentError: 809 Required Field Not Sent Error - A field that is required for this transaction type was not sent. The field causing theerror may be specified.
InconsistentConditionalFieldError: 810 Inconsistent Conditional Field Error - A field that does not have to be sent was sent in the wrong context. The field causing the error may be specified.
ImproperFieldDataError: 811 Improper Field Data Error - A field sent to the EdgeExpress Gateway was not formatted correctly. This could pertain to Processing Account Information configured in XCharge or BMS, or card information. The field causing the error may be specified.
UnrecognizedNameTagError: 812 Unrecognized Name / Tag Error - The XML tag sent is not in the API
DuplicateTransactionError: 813 Duplicate Transaction Error - A transaction was run for the same amount on the same card within a certain time limit. The duplicate checking time is set on the EdgeExpress Gateway, usuallybetween 1 and 60 minutes.
InvalidReferenceError: 814 Invalid Reference Error - The Transaction ID used for a Void, Return, etc. is invalid.
TransactionAlreadyVoided: 815 Transaction Already Voided - The Transaction ID used for a Void was already voided.
TransactionAlreadyCaptured: 816 Transaction Already Captured - The Transaction ID used for a Capture of an Authorized charge was already used and the transaction has been Captured.
EmptyBatch: 817 Empty Batch - The batch is empty and cannot settle. You cannot settle an empty batch.
MerchantLockedForSettlement: 818 Merchant Locked For Settlement - The Processing Account is in the process of being settled/batched. Wait a moment and try again.
MerchantLockedForMaintenance: 819 Merchant Locked for Maintenance - The Processing Account is locked for database or server maintenance. Wait amoment and try again.
TemporaryServiceOutage: 820 Temporary Service Outage - Retry Transaction - The EdgeExpress Gateway itself may be down. Wait a moment and try again.
ProcessingHostUnavailable: 821 Processing Host Unavailable - Certain back end account parameters may not be set correctly. Have the account settings checked. Specifically, check the TSYS Vital Hierarchy Values.
InvalidAccountData: 823 Invalid Account Data - A field sent to the EdgeExpress Gateway appears invalid (correctly formatted but not on file). This could pertain to Processing Account Information configured in XCharge or BMS, or card information. The field causing the response may be specified.
IndustryMismatchError: 824 Industry Mismatch Error - The Processing Account is configured with the incorrect Market Type. This can occur if XCharge or BMS is not configured with the same Market Type as the EdgeExpress Gateway.
RejectedInternalSupportOnly: 825 Rejected Internal support only - Reserved for Fraud, Not currently implemented.
InvalidCardType: 827 Invalid Card Type - The account number entered is not valid for the card type entered. If Card Type is Visa, then the account number must be for a Visa account.
CardTypeNotSupported: 828 Card Type Not Supported - The card type (Visa, Mastercard, American Express, etc.) for the attempted transaction is not enabled at the EdgeExpress Gateway.
CardCodeRequired: 829 Card Code Required - The Card Security Code (CSC, also known as the CVV, CVC or CID) is set to "required" for keyed transactions at the EdgeExpress Gateway, but was not sent.
AddressRequired: 830 Address Required - The address (house number, part of the Address Verification System) is set to "required" for keyed transactions at the EdgeExpress Gateway, but was not sent.
ZipCodeRequired: 831 ZIP Code Required - The ZIP code (part of the Address Verification System) is set to "required" for keyed transactions at the EdgeExpress Gateway, but was not sent.
EncodedDataFormatError: 832 Encoded Data Format Error - Encoded format of check image file could not be read or was not submitted when expected.
CheckServicesImageErrorMICRAndAmout: 833 Check Services Image Error - MICR and Amount cannot be read The attempted paper check scan failed. When this occurs you should have the option to manually enter the check information or rescan the check.
CheckServicesImageErrorMICROnly: 834 Check Services Image Error - MICR cannot be read The attempted paper check scan failed. When this occurs you should have the option to manually enter the check information or rescan the check.
CheckServicesImageErrorAmountOnly: 835 Check Services Image Error - Amount cannot be read The attempted paper check scan failed. When this occurs you should have the option to manually enter the check information or rescan the check.
EmailServiceError: 838 Email Service Error - The EdgeExpress Gateway attempted to send an email, possibly for a password reset request, but the attempt failed.
InvalidReferenceErrorResponseCodeMisMatch: 842 Invalid Reference Error - Response code returned when the referenced transaction type does not match.
TSYSError: 900 TSYS Error - Error thrown by Processor TSYS: the EdgeExpress Gateway is setup correctly, but the card or other value submitted is incorrect. SERV NOT ALLOWED usually indicates a Decline, Failure CV indicates the Card Type is not supported (e.g. AMEX needs to be enabled), and Failure HV indicates an error on the account setup in the EdgeExpress Gateway.
ProcessorError: 901 Processor Error Can be Global or TSYS errors (900 Global Payments Error: or 900 TSYS Error:) are returned on transactions if a processor setting is not configured correctly. This can occur if the card or transaction type is not enabled on the Processing Account at the processor end.
10 ResponseDescription varchar(255) Gateaway output. Gives a more detailed description on the ResponseCode.
11 OTK varchar(255) Gateaway output. This is the One Time Key that is used to launch the Hosted Payment Form. The status of the OTK can be polled to determine if the end user has completed the HPF or if it has expired.
12 HpfUrl text This URL will be generated as a result of the OTK. The URL can be browsed in an IFRAME to create a secure portal between a browser and the XWeb server. It is used with EdgeExpress now that HPF is deprecated.
13 HpfExpiration datetime Timestamp at which this HPF will expire. The end user will only be able to access the HPF before it has expired. This expiration is set explicitly when creating the HPF.
14 TransactionID varchar(255) Gateaway output. Each transaction is given a reference for future use. This can be used to void the transaction.
15 TransactionType varchar(255) Gateaway output. The type of transaction that was processed. Must be a string data type because it comes from the Gateway as a string.
16 Alias varchar(255) Gateaway output. A credit transaction will return an alias which is now linked to the credit card which was used. This alias can be used in the future to make DTG payments and circumvent the need for the secure HPF. Only applies when Credit (not Debit) data is submitted on the HPF. CreditCard.XChargeToken is often set to this value.
17 CardType varchar(255) Gateaway output. The card type used for this transaction. "Credit" - for cards that support signature only. "Debit/Credit" - for cards that support either PIN-entry or signature. "Debit/ATM" - for cards that support PIN-entry only. "FSA" - for Flexible Spending Accounts
18 CardBrand varchar(255) Gateaway output. The card brand used for this transaction. Possible values include "Visa", "MasterCard", "Discover", "American Express", "Diners Club", "JCB", "PayPal".
19 CardBrandShort varchar(255) Gateaway output. The industry standard abbreviation of the card brand. Possible values include "VS", "MC", "DS", "AX", "DCIDISC", "JCB-DISC", "PP" (order respective to CardBrand above).
20 MaskedAcctNum varchar(255) Gateaway output. Provides a masked format of the account number. The format will show the last 4 digits, the remainder will masked out with an asterisk character. End user will be presented with a list of previously generated MaskedAcctNum(s) when making a payment. These are linked to an alias which can be used to make a DTG payment. This ciccumvents the need to use the HPF.
21 Amount double Gateaway output. Amount of credit card and check transactions.
22 ApprovalCode varchar(255) Gateaway output. A 6 digit authorization approval code.
23 CardCodeResponse varchar(255) Gateaway output. Response from the Card Security Code lookup. Only applies when Credit(not Debit) data is submitted on the HPF.
24 ReceiptID int(11) Gateaway output. An identification number assigned by the OpenEdge Gateway to the receipt.
25 ExpDate varchar(255) Gateaway output. Provides the Expiration Date of the account being accessed. Format is yyMM from XWeb gateway. Will be converted to ExpirationDate.
26 EntryMethod varchar(255) Gateaway output. Indicates how the account number was entered by the end user. Always 'KEYED' in our case.
27 ProcessorResponse varchar(255) Gateaway output. The response from the processor. It is only returned on transactions that are processed by the processor (Auth, Sales and Settlements).
28 BatchNum int(11) Gateaway output. This indicates the current open batch number.
29 BatchAmount double Gateaway output. Net amount of Credit and Debit Card transactions in batch.
30 AccountExpirationDate date The expiration date of the credit card that was referenced in this transaction. DateTime representation of ExpDate. Initialized by XWebInputAbs.CreateGatewayResponse().
31 DebugError text Debug information regarding this response. Can only be set by XWebResponses.ProcessOutstandingTransactions().
32 PayNote text Will be entered as Payment.PayNote once payment transaction has completed.
33 CCSource tinyint(4) Enum:CreditCardSource The source of where this transaction originated from.
None: 0 - This is used when the payment is not a Credit Card. If CC, then this means we are storing the actual credit card number. Not recommended.
XServer: 1 - Local installation of X-Charge
XWeb: 2 - Credit card created via X-Web (an eService)
PayConnect: 3 - PayConnect web service (from within OD).
XServerPayConnect: 4 - Credit card has been added through the local installation of X-Charge and the PayConnect web service.
XWebPortalLogin: 5 - Made from the login screen of the Patient Portal.
PaySimple: 6 - PaySimple web service (from within OD).
PaySimpleACH: 7 - PaySimple ACH web service (from within OD).
PayConnectPortal: 8 - PayConnect credit card (made from Patient Portal)
PayConnectPortalLogin: 9 - PayConnect credit card (made from Patient Portal Login screen).
CareCredit: 10 - CareCredit.
EdgeExpressRCM: 11 - Global Payments V1 Cloud (formerly EdgeExpress/GlobalPayments) when calling the RCM program.
EdgeExpressCNP: 12 - Global Payments V1 Card Not Present API (formerly EdgeExpress/GlobalPayments).
API: 13 - Payment taken through Open Dental API.
EdgeExpressPaymentPortal: 14 - Global Payments V1 (formerly EdgeExpress/GlobalPayments) payment taken through the Payment Portal.
EdgeExpressPaymentPortalGuest: 15 - Global Payments V1 (formerly EdgeExpress/GlobalPayments) payment taken through the Payment Portal as a guest.
PayConnectPaymentPortal: 16 - PayConnect payment taken through the Payment Portal.
PayConnectPaymentPortalGuest: 17 - PayConnect payment taken through the Payment Portal as a guest.
PaySimplePaymentPortal: 18 - PaySimple payment taken through the Payment Portal.
PaySimplePaymentPortalGuest: 19 - PaySimple payment taken through the Payment Portal as a guest.
PaySimplePaymentPortalACH: 20 - PaySimple ACH Payment taken through the Payment Portal.
XWebPaymentPortal: 21 - XWeb payment taken through the Payment Portal.
XWebPaymentPortalGuest: 22 - XWeb payment taken through the Payment Portal as a guest.
MeetInTheCloudTerminal: 23 - MeetInTheCloud (UI: Global Payments V2) payment via terminal.
MeetInTheCloudPaymentPortal: 25 - MeetInTheCloud payment taken through the Payment Portal.
MeetInTheCloudPaymentPortalGuest: 26 - MeetInTheCloud payment taken through the Payment Portal as a guest.
34 OrderId varchar(255) Generated by us but necessary for Card Not Present API calls. Used to link transactions together (e.g. for returns).
35 EmailResponse varchar(255) Email address used for a requested receipt provided by the user when making a payment via the patient portal.
36 LogGuid varchar(36) The GUID used in EserviceLogs related to this response. May be blank.

zipcode
Zipcodes are also known as postal codes. Zipcodes are always copied to patient records rather than linked. So items in this list can be freely altered or deleted without harming patient data.
Order Name Type Summary
0 ZipCodeNum bigint(20) Primary key.
1 ZipCodeDigits varchar(20) The actual zipcode.
2 City varchar(100) .
3 State varchar(20) .
4 IsFrequent tinyint If true, then it will show in the dropdown list in the patient edit window.