Online Documentation (2.2)

Complete

This is the top level page for the on-line documentation for OpenVPMS version 2.2.

Whilst most of these pages have been created to provide help when you press Alt-F1, the information can also be browsed like a book.  The structure basically follows that of the OpenVPMS menu system.  However, there are also Introduction, Concepts, How To, ReferenceInstalling OpenVPMS sections, as well as information on new features and troubleshooting.

New users should browse the Introduction and Concepts sections.

Note also that if you scroll these pages down to the bottom you will find a navigation section that you can use to jump to any other page.

Screen shot veracity: As new features and facilities are added some screen shots in this documentation may not exactly reflect the current version. To save work, we may not update screen shots in cases where the changes are not relevant to the topic being documented.

Introduction

Complete

This section contains basic information to help you use the system.

Common Buttons

Complete

The following table shows the buttons that appear on many screens.

Button Meaning
Apply
 
update the record with the changes made, but allow further editing to continue
Cancel
 
close the window without updating the record (note that any changes made by pressing the Apply button will be preserved)
Delete
 
delete the selected item. Note that this is normally a bad idea - it is better to Deactivate the item. Also in many cases, you will not be able to delete the item because it is referred to by others. If this is the case you will be offered the option of deactivating it.
Edit
 
edit the selected item. You can also normally edit an item by clicking again on the selected item.
New create a new item
Next go forward to the next record. If you have been editing, you will be asked if the changes are to be saved or discarded.
OK update the record and close the window
Previous go back to the previous record. If you have been editing, you will be asked if the changes are to be saved or discarded.
Print print the selected item
View view the selected item
(Alt-V) on screens where there is a Print button and no View button, you can use the Alt-V keyboard shortcut to preview the print without calling up the Print screen.

Common Screens

Complete

The system has a number of screens that are very similar - such as the various select, email and print screens. Rather than document each in detail, one of each set is documented here and the pages for the individual screens are referred on to these.

Edit

Complete

The system has numerous edit screens which all work the same way as the following example (the Customer Information edit screen).

The screen consists of three areas:
(1) basic information - this area contains the things that there is only one of for the item being edited

(2) the bottom buttons as follows: (there may be others as well but these are the standard ones)
Apply - update the item with the changes made but do not close the screen
OK - apply the changes made and close the screen
Cancel - close the screen losing any changes made. Note that if you have previously used Apply, then the 'applied' changes will not be lost.

(3) the tab area - this area contains the tabs for the sub-items of which there are usually more than one - in the above example there are 7. The tab area consists of three or more sub-areas as follows:

(4) the tab buttons as follows:
Add - add a sub-item - you will be able to enter it's details, and if you then click Add a second time, those will be accepted and cleared to allow you to enter another sub-item. Note that the tab button line will sometimes contain pull-downs that allow you to select the type of sub-item being added - in the above example you can see that there is a pull-down to select the type of contact.  If so, you will need to select the type before clicking the Add button.
Delete - delete the current sub-item
Previous and Next - these are used to navigate backwards and forwards though the sub-items changing the currently selected one. The buttons will be disabled (greyed out) when you are at the beginning/end of the sub-items.

(5) sub-item table - this displays the sub-items - click on one to select it

(6) sub-item details - here you can enter/view the details of the current sub-item

(7) sub-item tabs - if needed there will be tabs here to allow the editing of part of the sub-item. In the above example you can see there is a Purpose tab to allow the purpose of the contact to be set.

Email

Complete

All the Write Email screens look like the following:

(1) At the top there are a set of buttons:
Send - sends the email
Template - fills the email subject and text with content from a template
Attach - allows you to attach a relevant document (a select window will open allowing you to  find the required document from those belonging to the current customer/supplier/etc)
Attach File - allows you attach any file (a browse window will open allowing you to select any file on your computer)
Cancel - cancels the write email operation

(2) the From/To/CC/BCC/Subject block:
From - will display the preferred email address for the current Practice Location, but if you have multiple email addresses defined, then you can use the pull-down to select another. For example:

Note that in the pull-down, the name of the Practice Location is shown in brackets - but this is removed when the address is selected.
You cannot enter an arbitary From email address - you must use one of the practice location's email addresses selected from the pull-down.

To/CC/BCC - you can either use the pull-downs to select an address, or enter addresses directly.
If you use the pull-downs then the selected address in the pull-down will replace any existing address(es).  All relevant addresses will be shown. For example:

In the above case, the email was invoked from the Patient screen and hence includes the referring vet addresses. If this was invoked from the Customer screen, then the vets would not be shown. So use the pull-downs for quick and easy selection of the relevant addresses.
Note that in the pull-down, the name of the entity is shown in brackets so that you can see where the address is coming from. Hence the 2nd line shows Bill Bourke, but we know that this must be an email address listed for the customer Bourke,Johanna.  Again, the name in brackets is not included when the line is selected from the pull-down.  The last two lines appear as shown because the veteast.com.au email contact has the email name 'Email Address', whereas the veteast[at]gmail[dot]com contact has the email name 'Veteast'.

For more flexibility, you can also either enter an email address (eg bloggs[at]gmail[dot]com) or enter all or part of a name (eg bloggs,fred or bloggs, or blo, or %,fred) and then press the Enter key.  If there is a single match this will be filled in. Otherwise the Address Book screen will be displayed showing the matches.  Note that as indicated by the last example, you can use % as a wildcard; %,fred will find all who have Fred (or Frederick) as a first name, whereas %fred would also find names (like Alfred,John) containing 'fred'. If you press the Enter key with the cursor positioned on an empty line, the Address Book will open showing all email addresses in the system.
You can use multiple addressees separated by semi-colons (;).
You must have at least one To addressee, the CC and BCC addressees are optional.

Subject - enter an appropriate subject. Note that this is a mandatory field.

(3) the Text area - enter the text of the email. To enter macros, use:

  • Ctrl-M to insert the text of a macro (assuming you know its code)
  • Alt-M to display available macros, and insert the text of the selected macro

Note that the text coming in from the macro expansion retains its formatting so that long lines will not be wrapped at the margin, and any spaces at the start of the line(s) or within the line(s) will be retained. Thus columns and indents are preserved.

(4) the formatting controls - each of the icons has a top tip, so hovering the mouse over an icon will tell you what it does. The three boxes with pull-downs above the icons allow you to select the style, font and size respectively.

(5) the attachments area - as you add documents and files, they will be shown here. Note that if you want to delete one on them, click on the attachment to select it and then press the Delete key. Actually it's a little more tricky than this.  When the item is first attached it looks 'white' like the following: . If you click it in the middle (or anywhere except the icon at the left end), then the attachment becomes selected and the background goes cream like: . You can now press delete to delete it.

If you click on the icon at the left end, then the item will be downloaded to your browser (and displayed if possible).

 

Address Book

Below is an example of the Address Book screen.  The user has entered just 'sm' as the email address - the system checked and found more than one matching name and displayed them

Click on the required line to select the addressee. Alternatively enter a new search string and press Find.

If the Type is left at the default 'All', the address book shows all types.  You can use the pull-down to select just say Users (if you were looking for a staff member).

Note that the search is done on the name of the contact, not the email address or the email address name.

If the contact has an email address name, then this will be shown in brackets.  In the above, all the matching contacts have an email address name except the Supplier(Person) on the second line.  We can also see that Mrs Kay Smith is in fact a second email contact for the customer Smith,Michael. Note that the user SM has been included because his user name is SM, although he is Dr Sam Michaels.

Template

The Template button displays a list of the available templates that may be used to fill emails with content.

If a template has parameters, these will be prompted for.

Attach Document

Complete

This is a typical document select screen displayed when you click the Attach button on the Email write screen. (This one is for selecting customer documents.)

The fields are:
Type - a pull-down to select the type of document (eg for customer documents, this contains All, Attachment, Form, and Letter)
Status - a pull-down to select the document status (All, Completed, Finalised, or In Progress)
All - uncheck this box to enable selection by date
From and To - the from and to dates if you are using date selection

Click the Find button to perform the search, and on the list of those found, click the desired document to attach it to the email.

Attach File

Complete

This is the attach file screen displayed when you click the Attach File button on the Email write screen.
Press the Browse button to browse the files on your machine and select one. Then press Send to attach the file to the email.

.

Print

Complete

When you press the Print button on a screen, a window will appear as follows:

The fields are:
Printer - shows the default printer for your current location - if this is defined (see Administration|Organisation|Practice Location), otherwise the first available printer. Use the pull-down to select the required printer.
Copies - set the number of copies required

Press OK to print on the selected printer. Press Cancel if printing is not required.

The Preview button will generate and display a copy of the document in your browser. Note that on most screens that have a Print button that invokes this screen, you can use the shortcut Alt-V to immediately preview the output without calling up this screen.

The Mail button will generate a copy of the document and bring up an email window so that you can email the document.

Select

Complete

The Product Select screen below is a typical select screen - all the select screens work the same way and have a similar appearance. But see the Mode discussion at the botton of this page.

First - this is the screen in its 'empty' state - ie before the Find button has been pressed.

If you press Find with nothing in the search field then it will return everything and we get the screen below.

The components are as follows:
(1) The Select area - this is where you define what you are looking for - it is not exactly the same on each select screen, but all have the same components:

  • a pull-down list of what to search (this is not always present) - in this case you can select the type of product to search
  • one or more boxes in which to enter the search value - this this case there is only one since you can only search by product name. In these you enter the search term: you can enter nothing (will return all items), or the first few characters of what you are looking for. Note that the case does not matter, ie 'b' or 'B' will both find items starting with 'B' or 'b'. You can also use wildcards.
    Note that if you press the Enter key immediately after keying something into the search box, the system will react as though you had clicked the Find button and perform the search.
  • a 'Search Identities' checkbox - checking this searches the item's Identities rather than their names
  • an 'Active' pulldown list - this can be set to Yes (active items only), No (Deactivated items only) and Both. The latter setting causes the Active column to be included indicating whether or not the item is Active.
  • a Find button - click this (or press Alt-F) to perform the search

(2) The Page navigation area - this appears whenever there are more than 20 items found. Click the First or Last icons to jump to the first or last pages; click the Previous  or Next icons to go to the previous or next pages; use the page number pull-down to go to a specific page. The 'of at least N' comment will initially display the full number of pages if less than 4 (ie less than a total of 60 items), but if there are more, then it will not display the full number of pages until you go to the last one.

You can also use the PgUp and PgDn keys to move to the previous/next page - but for these keys to work you must have an item in the item display area (see below) selected.

(3) The item display area. This is arranged in columns. In many cases you can click a column header to sort the items by that heading. Clicking it again will reverse the sort order. A small up or down arrow will show that the column is sorted and in which order. In this case the items are sorted in ascending order by Name. Note that not all columns will be sortable. If you click the column heading and nothing happens, then you can't sort by that column.

You select an item by clicking anywhere in its row or you can move the blue highlighting using the up & down arrows. See also the Mode discussion below.

(4) The Button area. Here you can see that there is one button, Cancel, but sometimes there are more. See also Common Buttons.

Mode
The select screens operate in two modes, 'select an item', and 'display'. You can tell which by the buttons at the bottom of the screen - if there is a Cancel button then you are in 'select an item' mode, and you will have got to this select screen from the previous screen by pressing the select button, or a binoculars icon.  If there is no Cancel button, then the screen is in 'display' mode, and you will have to got to this screen via the menu, for example you clicked Products on the top line, or Workflow|Messaging, or Administration|Templates, etc.

In 'select an item' mode, clicking on an item will select the item and return you to the previous screen. Pressing the Enter key selects the blue highlighted item (and you can move this with the up/down arrow keys) and returns you to the previous screen

In 'display' mode, clicking an item selects it. If there is an Edit button, then a second click opens it for editing. Similarly, with the keyboard you can use the up/down arrows and then press Enter to select the item, and if there is an Edit button, pressing Enter a second time opens it for editing.

Upload File

Complete

This window is displayed when you need to upload a file.

Press the Browse button to browse for a file, then Send to upload it.

Getting Around

Complete

OpenVPMS provides links and keyboard shortcuts to help you efficiently navigate around the system.

If you look at the typical screen below, you will see the following:

  1. Certain items on the screen are shown in blue with an underline (ie Bourke,Johanna, bourke[at]foo.com[dot]au, and Muffett). This indicates that you can click these and jump to the appropriate screen.  Note that if you try the first, you will find that it does not appear to do anything. This is because it takes you to the Customer Information screen and we are already there. If you click on Charges, and then on the customer name, you will be returned to the information screen.
  2. Many of the menu and button names have a single letter underlined (eg the t in Patients, the S in Suppliers, the l in Select). This indicates that holding down the Alt key on the keyboard and pressing the underlined letter is the equivalent of clicking the menu item or button.
  3. All the items that can be clicked change colour/background when you hover the mouse over them. You can see that 'Charges' in the left panel has changed.

NOTE: Don't try to use your browser's Back button to get to a previous screen - you will immediately be logged out.

Screen Layout

Complete

The screen below (actually the screen displayed immediately after you log in) shows the standard layout used by OpenVPMS. Note that because of the customisation that is possible, your screen may look different - see below for an example.

The various areas are as follows:

(1) The top menu allows you select the 'workspace' that you require, ie Customers, Patients, etc. You select by clicking the required item, or by keying Alt-x where x is the underlined letter (eg C for Customers, T for Patients).  Note that this Alt-x shortcut is also available with the various buttons, Alt-L for the Select button, Alt-N for the New button.

(2) The left menu (which is different for each workspace) lets you select the sub-component. There are no Alt-x shortcuts here, you click on the required item.

(3) The blue title (in this case 'Patient- Information') shows the workspace/component that you have selected.

(4) The lower left part of the screen is used to display summary information. In this case, it displays the summaries of the selected customer and patient. In this example, the customer's account information is displayed. It is possible to suppress this information via the user Preferences.

(5) This is the main working area of the screen. 

(6) The upper right of the screen contains the following:

       

These items are as follows:
(1) Location: this shows the current Practice Location.  Depending on what your administrator has set up, you may or may not be able to select another location.

(2) User: this shows the User Id that you have logged on with.

(3) Button to change user Preferences.

(4) Clicking the envelope icon will take you to the messages screen. The envelope will have a small red indicator in its top right corner if you have unread messages. (This is showing in the above.)

(5) Clicking the new screen icon will open another window. This is useful if you want to keep the current screen as is, but lookup or do something else. When you are finished with the other window you just close it or leave it open and switch back to the other one. When you log off, you will be warned if you have other windows open.  If you are getting synchronisation errors, see here.

(6) Clicking 'My Recent' (or using the Alt-Y shortcut) opens a window displaying the customer/patient pairs that you have been working with so that you can quickly re-select them. A maximum of 25 will be stored and remembered across sessions. These are stored for each user, so that if user 'Nurse' is logged in on three workstations, all three share a common 'My Recent' list.

(7) Clicking Logout will log you out.

Customised display example

The following display has been customised to adjust its background colour, the menu font size, adding a location branding, right adjusting the labels, and changing the 'unread mail' icon.

Clicks and Keys

Complete

Clicks
OpenVPMS, because it runs in a web browser, does not recognise double clicks. So if you are a windows person used to double clicking on things then you may get confused.

Always use single clicks - or if you like to think of it this way, a slow double click.

So for example, on the schedule screen, to create a new appointment, don't double click the time slot, click it once (to make the New... appear) and then again to create the appointment.

Similarly, on the products (or any other select) screen, click the item of interest to select it, and then click again to open it for editing.

Keys
The following keys are really useful:

Alt-F - Holding down Alt and then pressing the F key is equivalent to clicking the Find button. Hence on the Schedule or Work List (or any other select) screen, you can use Alt-F to cause a refresh of what you are looking at.

Alt-V - On most screens that have a Print button, you can hold down the Alt key and then press the V key to immediately preview the output without calling up the Print screen.

Enter - Pressing the Enter key means ‘do want you can with the stuff I have entered’.  On a select screen,  with the cursor in a search field, it is equivalent to pressing the Find button; on a data entry window, with the cursor in any data field, it will expand any macros, do any propercasing and look up any search fields.

Note however, that pressing the Enter key is not equivalent to pressing the Apply button because the record will not be saved until you press either Apply or OK.

Tab - Pressing the Tab key will jump you to the next field on the screen, Shift-Tab to the previous one.

PgUp/PgDn - where information is being presented in pages (like on the Products|Information screen), pressing the Page Up and Down keys will display the previous/next page of data - provided that you currently have one of the data items selected.  (That is, if you have the cursor positioned in one of the select fields, then the Page Up and Down keys will have no effect.)

Data Entry

Complete

Below are various things that need to be understood when entering data into OpenVPMS.

The headings in this section are Data Validation, Data Search, Macros, Spelling, Dates, The Enter Key, Propercase, Note Fields, Tab Edits, and Conflicting Updates.

Data Validation
For various data fields (eg species, breed), you cannot enter any value, you must select a value from a pull-down list. Click the field or its down-arrow and then click on the required value, or type the first letter to display the allowed values starting with that letter. You can also use the up and down arrow keys, the page up and down keys, and the home and end keys to navigate up and down the list of items.

Your administrator can add new values using the Administration|Lookups facility.

Data Search
Where you see the binoculars icon after a field like the following
this means that the data search facility is available. This makes it easy to find things (in this case a product). You proceed as follows:

  1. Type in as much as you want (using wildcards if needed), and then either click the binoculars, or press Enter. 'b' will find all the items starting with 'b'; 'bon' those starting with 'bon', 'b%pl' those starting with a 'b' and with 'pl' somewhere in the name. Note that the case does not matter, ie 'b' or 'B' will both find items starting with 'B' or 'b'. Although in most cases the search is done on a 'starts with' basis, for some items it is done on a 'contains' basis.  This occurs only for items where there is a limited set and using 'contains' does not impose a performance penalty - specifically for visit reasons, alert types, diagnosis and presenting complaints. Hence entering 'x' for the reason on the appointment create/edit screen might return Desexing, Discuss X-Ray, and X-Ray. If needed you can also force a 'contains' search by prefixing the % wildcard. Hence entering %surgery for a product will find all products containing 'surgery'.
  2. If there is more than one matching item, then a select screen will be displayed showing the matches. If what you want is not there, you can adjust the selection parameters on the select screen and press its Find button.
    You then click the required item and you will be returned to the data entry screen with the item filled in.
  3. If there is only one matching item, then the select screen will not be displayed, and the name of the matching item will be filled in. For example, if only 'Bone Plate 6 Hole' matches 'b%pl', then 'Bone Plate 6 Hole' will immediately replace the 'b%pl' you typed.
  4. If there are no matching items, the select screen will be displayed with what you entered showing in its Search field. Adjust what you typed, eg 'bonr' to 'bone' or 'bon' and press Enter to do the search.

In fact, you don't need to press the Enter key or click the binoculars. When you complete your data entry by using the Apply or OK buttons, the system will check for any incomplete entries and process them. For example, on the New Appointments screen there are three fields with binoculars. You can fill in each with an abbreviated form of the entry and then press OK or Apply.  If your abbreviations match only single items, then the three entries will be automatically completed. As an illustration, on the system used to create these examples, there is only one customer with a name starting 'bo', and she has only one pet with a name starting with 'm', and there is only one appointment type starting with 'l'. Hence, entering bo, m, and l in the three fields and then using Apply resulted immediately in the following:

If any of your entries do not match single items (eg Johanna had another pet called Molly), then a select screen will be presented for each non-unique entry.

Macros
The Macro facility enables you quickly enter common phrases and paragraphs.

Spelling
Because you are using a web browser, what you enter in a text field is checked by the browser's spelling checker.  If this is enabled, then spelling errors will be shown with a wavy red underline, eg . If you right-click on the word, corrections will be suggested (in this case Please or Passel). You also have the option to turn off the spelling checker.

Dates
When entering a date you can do any of the following:

  • enter the date as say 15/3/13 (you can't just enter the day or day and month)
  • click the pull-down icon or press the down-arrow key - this will display a date-picker calendar to use
  • enter a 'relative date' using formats like
    • -10w3d meaning 10 weeks and 3 days ago
    • 5y3m meaning 5 years and 3 months from today
    • 1m meaning one month from today
    • -14d meaning 14 days ago
    • you can also use the suffix s (meaning start) or e (meaning end), and hence -1ys means 1 Jan of the previous year and -1ye meand 31 Dec of the previous year
    • 0 as the count means 'current' - hence 0me means the last day of the current month
    • you can use q (quarter).  If you do not use the s or e suffixes, the q means 3 months, ie -2q is exactly the same as -6m. However, if you use the s or e suffix then q means financial quarter, so -1qs means the start of the previous financial quarter.
    • you can go back then forward, ie -1y+3ms means back one year, add 3 months and use the start date of that month

The Enter Key
Pressing the Enter key means ‘do what you can with the stuff I have entered’.  On a Select window,  with the cursor in a search field, it is equivalent to pressing the Find button; on a data entry window, with the cursor in any data field, it will do any required calculations, expand any macros, do any propercasing and look up any search fields.

Note however, that pressing the Enter key is not equivalent to pressing the Apply button because the record will not be saved until you press either Apply or OK.

 

Propercase
When you enter data in 'name' fields, OpenVPMS will apply 'propercasing', Thus if you enter SMITH or smith or smITH, this will be corrected to Smith.  In most cases the adjusted casing will be correct, but in some cases (eg with a company name like 'ABC Industries', ABC will be changed to Abc).  When this happens just edit it back to ABC and your correction will 'stick'.

Your administrator or integrator can adjust the propercase facility so that specific words, abbreviations and acronyms are handled correctly. See Reference|Setup.

 

Note Fields
In a number of screens there are Notes fields.  These hold lots of text, and you may want to expand the size of the field so you can see all your text.  As you can see below, the bottom right corner appears to be stippled - if you put your mouse on this you will find you can drag the corner to expand (or contract) the size of the notes window.

 

Tab Edits
If you need to edit a number of items, where the data to be updated is located in a tab (for example the Type of a number of products), then because the system remembers the current tab, it is most efficient to proceed as follows:

  1. select the items as tightly as possible (eg Merchandise, name starts RC)
  2. press the Edit button with the first item selected
  3. click the required tab (eg Type)
  4. make the required change
  5. press Alt-Y to apply
  6. press Alt-X to select the next item
  7. if this one needs no update, just press Alt-X again
  8. go to 4 unless finished

Conflicting Updates
In general, OpenVPMS uses a technique called optimistic locking to ensure that multiple users editing the same object don't overwrite each other's changes. If two users edit the same object, the first user to save wins, and the second user's changes are rolled back.  When this happens the second user will see a message like (here both users were editing a merchandise product at the same time):

However, invoices, counter sales and customer credits are automatically saved when the Add button is pressed to add a new item if:

  • the charge is valid; and
  • has been saved previously; and
  • is not Finalised

This limits data entry loss if two users happen to edit the same charge simultaneously. The second user to save will see an error message like:

and (when the OK button is clicked) the second user will see the updated items and can re-enter just the last item that they added.

Wildcards

Complete

OpenVPMS allows the use of the 'wildcards' *, % and _ (underscore). Both * and % mean any number of characters, while _ means one character.

Thus a*b and a%b will find everything starting with 'a' following by zero or more characters, then a 'b'.  There is also an implicit * added at the end of what you enter.

Hence a*b will find Abbie, Abe, Amber, and Annabelle. Note that the case you use does not matter, ie A*B will find the same names.

Using sm_th will find Smith and Smyth but not Smooth.

Note that since an implicit * is added to what you enter, leaving the Search field empty is equivalent to entering * and this will find all records.

Reporting

Complete

As a user you need not really be concerned with how the reporting system works, that is, you don't need to worry about how an invoice, drug label, stock list, etc is generated, only how to ask for it.

It is worth noting that when printing things, it is normally possible to preview the document before actually printing it, and also to email the document without printing it.  When running reports, it is also possible to 'export' the data in CSV format so that it can be used in spreadsheet and other programs. See also Concepts|Printing.

All printing in OpenVPMS is customisable. If you don't like the way the invoices look, this can be changed. Similarly, if you need a report listing all dogs by name, it is possible to make this.

Skip the remainder unless you are an administrator or want to know "what's under the hood".

All documents and reports are controlled by 'Document Templates' which specify how and what to do to generate the document or report.  Two facilities are used to form up the content: JasperReports and OpenOffice.

OpenOffice is used for simple documents (like patient certificates). You use an OpenOffice document template to specify the document content. Since OpenOffice can also handle Microsoft Word documents, you can also use these. They are held in files with the extension .odt (or for Word, .doc). Anyone with normal word processing skills should be able to create and modify these templates. Note that OpenOffice cannot handle the default .docx format used by Word 2007 and beyond. If you are using Word, you need save documents to be used by OpenVPMS/OpenOffce in .doc (ie Word 97-2003) format.

JasperReports is used for more complex documents such as invoices, statements, reports etc as these typically have multiple rows of data and require groupings and other data processing functions not available in OpenOffice.  The iReports program is used to design, test and maintain these reports. They are held in files with the extension .jrxml. Using iReports requires a reasonable skill level, but anyone with some programming experience should have no trouble. As always, it is easier to proceed by cloning an existing report than building one from scratch.

If you do need to create and modify reports and documents, see Reference|Reports and Forms.

Press Alt-F1 for Help

Complete

You can press Alt Function Key 1 on any screen to get help with that screen.

If you are reading this, you are probably new to the system. You should look at the Introduction and Concepts sections.

Note also that if you scroll these help pages down to the bottom you will find a navigation section that you can use to jump to any other page.

Concepts

Complete

This section contains information on various concepts used in OpenVPMS. It is also functionally a glossary of terms used in the system.

The sub-sections are ordered aphabetically.

Accounting

Complete

OpenVPMS includes only enough financial processing as is necessary.  Whilst it keeps track of invoices, payments etc for the veterinary side of the business, it does not keep full track of your bank accounts. Hence you will almost certainly need to run a separate accounting system.

However, since it does handle all the customer and supplier invoicing and payments, there is no need to export the detailed invoice and payment information to your accounting system.  Your accountant should be quite content with the data from the Bank Deposit Report. (This shows the total of the cash and all the detail of the EFT, credit card, and cheque payments.)

On the supplier side, since you need to make payments to the suppliers, you will need to enter the individual supplier invoices into your accounting system so that they can be paid and it can track the payments. However, you can omit the line item detail because OpenVPMS will handle this as it tracks the orders and deliveries.

The Accounting Cycle
Typically this proceeds as follows:

  • at the end of each day the till is balanced using the Reporting|Till Balancing screen and the appropriate amount of cash and all the cheques, credit card slips etc removed from the till - note that you do not actually have to stop the business - you can do a till balance and still continue operating
  • when appropriate (maybe immediately after the till is balanced, maybe every couple of days) use the Reporting|Bank Deposits screen to generate the Deposit Report, and then take this and all the money to the bank and deposit it
  • when desired use the Reporting|Work In Progress screen to check that things are moving along and that no invoices have been stalled for some reason
  • when desired use the Reporting|Debtors screen to check on overdue customer accounts
  • at the end of the month (or whatever your accounting period is), use the Reporting|Debtors screen to do the Period End processing and then generate and print or email statements

Note that the system does not support multiple accounting periods.  That is, you cannot have a group of customers with monthly accounts and another with quarterly accounts.

Period End Processing & Statement Generation
These two facilities (invoked using the Reporting|Debtors screen) look at all or selected customer accounts and do as follows:

  • period end: process all accounts. For any account with an overdue balance (see  Administration|Customer Account Type), check whether accounting fees should be applied, and if so generate the required Debit Adjustment transaction. For any account with transactions since the previous Opening Balance transaction (if any), generate both a Closing Balance and an Opening Balance transaction for the current account balance.
  • statement generation: process the selected accounts. Statements will be generated for accounts:
    • which match the selection conditions (which allow selection by customer account type, name and overdue status)
    • with transactions in the period between the statement date and the previous Opening Balance transaction (if any),
    • if there is an outstanding balance
    • if the statement has not been already printed - however a 'Reprint Statements' option allows this to be overridden. This can be used for example to first print the statements of accounts overdue for more than 60 days so that you can include in the envelope a note suggesting that the account should be settled - and then printing the statements for all customers with no selection conditions.  The 60 day overdue customer statements will not be printed again on the second run.
       

Payments and Invoices
Since the system allows you to receive payment for an invoice after it is finalised, there is a tendency to think that the system marks indivual invoices as being paid.  This is not the case: payments are applied to all outstanding invoices, starting with the oldest and allocating the payment to each one until all of the payment amount has been allocated. This follows standard accounting practice.

Thus consider a customer with an invoice for $100 and an account balance of $100. If we now create a new invoice for $150 and the customer pays $150, then when the $150 invoice is printed, it will show the Amount Paid as $50 (because $100 got used to pay the older $100 invoice) and the account balance will now be $100 (ie $100+$150-$150).

Error Correction
The system has a concept of 'finalising' transactions so that they cannot be altered.  To correct a finalised transaction (for example to change the payment type on a payment), you have to Reverse the erroneous transaction (which creates a reversing transaction match the reversed one) and then enter a new one containing the correct data. This reversal facility is only available to users who are categorised as Administrators.

Hidden Transactions
In many cases the above correction procedure can be safely hidden from the customer.  That is rather than the statement showing the original erroneous transaction, its reversal and the new correct transaction, the system allows the first two to be hidden so that the statement shows only the correct transaction.

This hiding of the erroneous transaction and its reversal is only possible when correcting a transaction in the current accounting period (ie since the last Opening Balance transaction). If you reverse an earlier transaction then the hide flag will not be set for either of the reversed and reversing transactions.

For administrators, the Customers|Account screen has a Hide and Unhide button so that, if necessary one can adjust the hide flag for individual transactions.  This needs to be used with care so the statement appear correct in the sum of all the amount shown matches the outstanding balance, ie that all the hidden transactions balance one another out.

Transaction Dates
When a transaction is created, it is timestamped with the current date (and time). When it is finalised, the timestamp is updated. This ensures that the account's finalised transactions are in the proper order for statements and balance calculations. Note that transactions that have line items (such as invoices) then the line item timestamps are not updated at finalisation time and will retain their initial value.

Active/Deactivated

Complete

We need to keep old items (customers, patients, products etc) in the system, but we want to be able to ignore these most of the time.

For example, if a given product is no longer used, we can't just delete it, because there will be other references to this product recording its use. In fact, a good working rule is 'NEVER DELETE ANYTHING'. Essentially the only time you should be deleting things is immediately after you created them and you made an error creating them. [A good example is creating a new product with the wrong type, ie you set it as merchandise rather than medication. You can't change the type, so you have to delete and re-create the product.]

To suppress unwanted items you deactivate them by un-ticking their 'Active' checkbox.

If you need to find deactivated items, just set the 'Active' pull-down to 'No' or 'Both' on the search screen.

Addresses

Complete

The system is designed to handle location addresses in a structured manner, ie one or more address lines, a suburb, a postcode, and a state. Note however that you do not explicitly set the country - although this is implicit in the state (since each is associated with a country).

If you have to hold addresses in different countries, there are two possible approaches:

  1. put the whole address in the address lines, and leave the suburb, postcode, and state fields empty
  2. create the states and suburbs for each 'foreign' country

The second approach will potentially result in a long list of states (since it will include those from all countries). Hence the best approach is probably the first.

Alerts

Complete

Alerts can be set for both customers and patients.  A common usage of alerts is to flag important customers, bad debtors, aggressive patients, and patient allergies.

Alerts can be given a reason, an end date and notes.

Alerts can also be displayed for all customers of a given Account Type.
 

Customer alerts display in the left panel when the customer is displayed, and similarly for the patient alerts.

Once the end date of an alert has passed, the alert is no longer displayed in the left panel.
 

On the Workflow - Scheduling and Worklist screens, if you select an appointment or task the customer & patient's summary information is shown in the left panel and this shows the alerts as in the snippet shown on the left.

The administrator creates the available alerts with different ones for customers and patients. (Hence if you want an Aggressive alert that can be shown for both patients and customers, then the administrator needs to create one for customers and and one for patients.)

 

 

Mandatory Alerts

Alerts can be flagged as being Mandatory Alerts. These require users to acknowledge them if a customer or patient is selected that has the alert.
Mandatory alerts will be displayed:

  • when a customer or patient workspace is displayed
  • when a customer or patient is selected during editing (e.g. for an invoice or appointment)
  • on Check-In, Consult, or Check-Out

Mandatory alerts only require acknowledgement once in a 24 hour period.
Note that acknowledgement is managed at a user level, so if a practice uses shared logins, mandatory alerts are less effective. This is because the first user session sees the mandatory alert, and subsequent sessions don't.

See Also

 

Barcodes

Complete

The system supports the use of barcodes so that you can use a barcode scanner to quickly and accurately enter product identification.

That is, instead of entering 'Advantix X Large Dog 3 Pack (25Kg+)' (probably by keying 'adv' then pressing Enter and then selecting from the long list of Advantix products), you can use the scanner to enter its barcode, and this will be used to find the product.

To get this to work, you need to enter the barcodes as product identities for each of the products that you want to be able to scan, and the scanner will be really useful when you enter this data as it saves keying the 12 digit number.

What is actually happening is as follows: if you enter a product (say on an invoice) as a number, then the system does an identity search of the products for that number, and if it finds only one, then it uses that product, otherwise it displays the select screen.

Note that there is no reason why you should not 'barcode' your own products and services. There are free programs available that will generate the required graphics, and you could print up a page listing these and keep it near the work station so that scanning calls up 'Consultation (9pm-Midnight)'.

A final warning: if you do use your own barcodes, make them long. As explained in identities, the IDs are also searched, so a barcode of 123 will find any IDs starting 123.

Categories and Classifications

Complete

OpenVPMS allows you to categorise and classify products, customers and suppliers. You don't have to use these, and the system does not require them to be set up. They are simply to enable you to report on breakdowns of categories and classifications.

For each, the available values are set via the Administration|Lookups facility. The following table gives the name of the lookup for each classification and category.

Classification/Category Lookup
Product Classification Product Group
Product Income Type
Customer Category Customer Type
Supplier - Organisation Category Supplier Type
Supplier Account Type
Supplier - Person Category Supplier Type
Supplier - Veterinary Practice Category Practice Type
Supplier - Veterinarian Category Veterinary Specialty
User Category User Type

 

 

 

 

 

 

 

 

Contacts

Complete

Customers, Suppliers, Users, Practice Locations, and the Practice itself all can all have 'Contacts' defined.

The screen shots below are taken from the Customer Edit screen (and hence the other tabs).

There are three types: Email, Location, and Phone. See also Fax Contacts. The entity can have zero, one or more of each type of contact. Each contact can be set as the default contact for each type, and each can be given 'purposes'.

The available purposes are set via Administration|Lookups|Contact Purpose. Each contact can have zero, one or more purposes. In general these are just for information purposes. However, in two cases they are very important. As discussed in Reporting|Reminders, the system looks for a contact with the purpose 'Reminder' in order to decide how to send out reminders. Similarly, as discussed in Reporting|Debtors, the system looks for an email contact with the purpose 'Billing', and if found emails the customer's statement rather than printing it.
To set the purpose(s) use the arrows to move the selected item from the Available list to the Selected list and vice versa.

 

For Email contacts:


The fields are as follows:
Name - this is the 'name' of the contact - by default it is set as per the following table. However, you can set it to anything useful - for example 'Eastside Vets (Accounts Dept)'. Note that email addresses created in versions prior to 1.8 will have 'Email Address' as the default name - but when the email address is used 'Email Address' will be replaced by the default shown in the table below.

Entity Default Email Contact Name
Customer Company Name if set; else
firstName lastName if both set (eg Joe Bloggs); else
lastName
Supplier (Organisation) Company Name
Supplier (Person) firstName lastName  (eg Joe Bloggs)
Veterinarian firstName lastName  (eg Joe Bloggs)
Veterinary Practice Practice Name
User user’s Full Name
Practice Practice Name
Practice Location Location Name

Email Address - the email address - note that this is checked to have a valid format, but not to see if it exists - if it does not exist then you won't know until an email that you send to the address results in a failure message to the sender
Preferred - check this box if this is the preferred email address. See also below.

 

For Location contacts:


The fields are as follows:
Name - this is the 'name' of the contact - by default it is set to 'Location' but you can modify it to anything more useful
Address - as discussed in Concepts|Addresses this can either be the address lines (not including the suburb etc) or a complete address including the country
Suburb - choose the suburb from the pull-down list - those available are set via Administration|Lookups|Suburb. For international addresses, use 'None'.
Postcode - enter the postcode/zip code
State - choose the state from the pull-down list - those available are set via Administration|Lookups|State. For international addresses, use 'None'.
Preferred - check this box if this is the preferred location. See also below.

 

For Phone contacts:


The fields are as follows:
Name - this is the 'name' of the contact - by default it is set to 'Phone Number' but you can modify it to anything more useful
Area Code - the area code part of the phone number
Telephone Number - the phone number
Preferred - check this box if this is the preferred phone number. See also below.
Allow SMS - check this box if SMS is possible via this number. Note that if you flag multiple numbers as SMS capable, then when you send a SMS, there will be a pull-down list to select the required number.

 

For Fax contacts:
Note that the system cannot send faxes - this information is just for documentation purposes.
As from release 1.8, fax contacts are held as Phone Contacts with purpose Fax.

Note also that there are service providers who allow you to send them an email which will be sent on to a fax number.  Typically you send the email to 98765432[at]efaxes[dot]com and they send a fax to the number 98765432.  If you will be using a service like this, you will need to set the 'fax contact' as an Email Contact.
 

Preferred Contacts
The first contact of given type that is created will be set as Preferred.  When you add another contact of the same type, then by default its Preferred box will not be ticked. However, if you do set this as the new Preferred contact of this type, then the previous contact that was the preferred one will become un-preferred - ie there can only ever be one preferred contact of each type.

Deposit Accounts

Complete

The Deposit Accounts represent the actual bank accounts that you deposit money into. Each location can have its own account(s) or the accounts can be shared between locations.

Note that these Deposit Accounts are not like the bank accounts in your accounting system - ie they do not hold all the account transactions and you don't reconcile them.  The Deposit Account record simply holds sufficient information to print deposit slips.

The only time you need the deposit account is when you use the Reporting|Deposit screen after having cleared the till.

The deposit accounts are set up by your administrator using Administration|Organisation|Deposit Account

Discounts

Complete

There is an extensive discount system.  Discounts can be provided at the customer, patient, and product level. You can also give a discount at payment time, and disable discounts entirely.

Discount Types
The Administrator defines the various Discount Types using Administration|Types|Discount. For each (eg Staff Discount, Valued Customer, ...) they define  the type (percentage or fixed or at-cost), the rate, and whether the discount applies to the fixed component of the product price as well as the unit component.

One or more discount types can be included in a Discount Type Group (see Administration|Types|Discount Group) in which a start & end date can be specified for each Discount Type. 

Customers and Patients
For each customer and each patient you can define what discount types and/or discount type groups they have, and their start/end dates.

Products
For each product you can define what discount types apply to the product and their start/end dates.  However, since you can specify discounts for each product type (see Administration|Types|Product Type), it is normal to set the discounts at the type level rather than for each individual product.  If there are discounts on both the product and type, then they will be merged. If a discount appears on both a product and its type, it will only be applied once.

Calculation
When the charge is calculated, the only discounts that apply are those that are common to both product and customer/patient.

Hence if the customer has a staff discount, but the product they are buying has no staff discount, then they don't get the discount.

If the same discount has been set for both the customer and the patient, then the discount is only applied once.

However, if there are different discounts set (eg Valued Client for the customer, and Blood Donor for the patient) then both apply (provided that the product has both set).

If there are multiple At-cost discounts, then the one with the lowest rate is selected, as that gives the greatest discount. If there are other discounts as well, these will also be applied.

If the discount resulting from all the applicable discounts exceeds the maximum discount set for the product, then the maximum discount is used. If you want to use At-cost discounts for your staff (say 5%), you must be careful to set the product's maximum discount to allow this. The formula
     D = (M-R)/(100+M)
gives the discount percentage D where M is the Markup percentage and R the At-Cost discount percentage.  Hence for M=100 and R=5, then D=47.5.

Hence setting the product's maximum discount to less than this, say 30% will result in the staff paying more than cost+5%. For them to pay cost+5%, you need to set the maximum discount to 47.5% or more.

If the calculated discount is such as to reduce the price below the cost price, then unless:
a) there is both a fixed and unit price, and both have a 100% maximum discount
or b) there is only a fixed or unit price, and it has a 100% maximum discount
the following warning will be displayed:

Clicking Yes will set the discount amount to 0.

Note that all the above logic simply calculates and displays the applicable discount.  The user creating the invoice/charge can override the calculated discount.

Quantity Breaks
These are not currently supported by the system. There is a proposed design for them, but it's not a currently funded project.

Payment Discounts
You can give a discount at payment time. When the payment is being entered, select a payment type of 'Discount' and enter the discount amount. Thus if the customer is paying $1234, this can be 'paid' by a $1000 cheque and a $234 discount.  The Till Balance report will show these discount payments and their total.
 

Disabling Discounts

Discounts can be disabled by selecting the Disable Discounts flag on the Practice Location.

 

Documents

Complete

See Reports, Forms, Letters and Documents for background. See Reference|Reports and Documents if you need to build reports and documents.

The system has the ability to store documents for patients, customers and suppliers.

Products and emails can also have documents attached - see here and here respectively.

First a word on 'document templates' - as described here, these control things like what the document contains, and how and where to print it. Each template has a 'type' and this defines how information is provided when the document itself is generated using the template.  Thus a 'Patient Form' is provided with information about the current patient, a 'Customer Form' is provided with information about the current customer, etc.

For patients, customers and suppliers, there are three types of documents as follows:

Attachments - these can be uploaded from any file that you have access to. They can be pdf files, word processing documents or spreadsheets, or plain text document - anything. They can also be image files - so you can keep a photo of each of your customers etc if you want. Note however, that for patients, there is a specific image facility to add images.

Forms - these are things that are based on document templates of type Patient Form, Customer Form, or Supplier Form depending on whether you are attaching the form to a patient, customer or supplier. As part of the process of creating the attached form, the template will be used to generate the form with the appropriate patient/customer/supplier details inserted, and this is stored. 

Letters - these are things that are normally based on document templates of type Patient Letter, Customer Letter, or Supplier Letter depending on whether you are attaching the letter to a patient, customer or supplier. As part of the process of creating the attached letter, the template will be used to generate the letter with the appropriate patient/customer/supplier details inserted, and this is stored. However, the template used is also stored. For both the generated letter and template, the system stores the actual word processing document and a pdf that can be used to print it.  Hence for letters, you can either print another copy of the letter, or download the word processing document and edit this to make changes to the letter.
However, you can also bypass the use of the document template, and upload any file just as you can with an attachment. The downside is that you are bypassing the template's ability to insert the customer's/patient's/supplier's details into the document. The upside is that anything you upload is classed as a letter - even if it is the scanned image of something that you typed up and signed, or even hand wrote.

Note that for all three types:

  • the document is stored in the database, ie the actual document is stored, not the name of the file in which the document may be found
  • except for forms, you can have multiple versions of the document  - these could be real 'versions' of the document, ie revisions 1, 2 and 3, or they could be say multiple x-rays taken at the same session which you wish to group together
  • since it the document is being stored, rather than a link to it, there is no problem in uploading what are in fact different documents from files of the same name - ie it does not matter if your scanned images are always scanned into a file scan001.jpg
  • each document record has the following fields:
    • the date and description
    • a printed flag indicating whether or not it has been printed
    • the status which can be In Progress, Completed, or Finalised.  In Progress implies that you are still working on it; Completed implies that you have finished - but the entry can still be edited; and Finalised means that it is really complete and can no longer be changed.
    • for patient documents, the clinician - note however, that there is no facility for 'signing' the document.

Patient documents also include Images and Investigations. Images work in exactly the same way as Attachments (and in fact you can happily add a text or pdf file as an 'image'). Images are simply there to allow you to logically separate them from other sorts of attachments.

Investigations are also like Attachments in the sense that any sort of file can be attached as the Investigation 'Report'. However, as discussed in Concepts|Investigations, there is built-in support for tracking the status of the investigation and automatically attaching the report files to the Investigation record.

Document Editing

OpenOffice and Microsoft Word documents stored in OpenVPMS can be edited. An External Edit button is provided to launch OpenOffice for the selected document in:

  • Customers - Documents
  • Patients - Medical Records
    • Summary
    • Problems
    • Documents
  • Suppliers - Documents
  • Administration - Templates

Products

You can attach documents to a product. Here you are not attaching an attachment, form or letter, but instead a document template. When you use the product (ie call it up in an invoice) then the required document will be generated from the template and can be printed etc.  The obvious use is to attach a vaccination certificate to a vaccination product. Note that because what you have attached is the template (and not the actual certificate) the generated certificate can include the patient and product details.

 

Emails
You can attach two sorts of things to emails: files and documents. Files are any files that you can access on your workstation, documents are customer, patient and supplier documents stored for the current customer/patient/supplier.
 

ESCI

Complete

ESCI stands for e-Supply Chain Interface - it is a facility for automating the orders/deliveries/invoices dialog between the practice and its suppliers.

You don't have to use it, and it requires setting up at both the OpenVPMS and supplier ends. Both Lyppards and Provet in Australia have implemented their parts.

To quote from the documentation:

The OpenVPMS ESCI (e-Supply Chain Interface) is a standards-based API to enable OpenVPMS to electronically place orders on suppliers and to receive order responses and invoices from suppliers . It is based on the exchange of Universal Business Language (UBL) 2.0 documents via web services.

ESCI defines a number of web services which are implemented by the supplier, namely:

  • Order – enables clients to submit orders to the supplier
  • Inbox – enables clients to receive documents posted by the supplier
  • Registry - provides a simple lookup mechanism to resolve the other supplier web services

It works as follows:

  • OpenVPMS creates UBL Order documents and submits these to the supplier via the supplier’s Order web service.
  • Orders are processed asynchronously by the supplier.
  • A UBL OrderResponseSimple document is placed in practice’s Inbox, indicating success or failure.
  • When an order has been shipped, the supplier invoices the practice by placing an UBL Invoice document in its Inbox.
  • OpenVPMS checks the Inbox web service regularly to process any incoming Order Response and/or Invoice documents.

 

If you are going to set up ESCI, then this link provides useful information.

Error Handling

Complete

If you make an error entering data you will get an error screen like the one below. (Here we have omitted to enter the product - a mandatory entry.)  You will see at times, that you could have suggested a better message like 'Please select the product - you must have one'. The messages are generated automatically and are not all individually created.  However, you will always be able to understand what the problem is. Simply click OK and try again.

If an internal error occurs you will get screen like the one below. Note the extra 'Report Error' button. This indicates that the problem should not have occurred and perhaps should be reported to OpenVPMS. If you do not want to report it, simply click OK.

If you click the Report Error button, then the screen below will appear.

The email address defaults to that for the Practice. If desired you can change this - say to that of a technical staff person. You are encourgaged to provide an email address, but if you really want to send in an anonymous report, then you can untick the 'Include my email' checkbox.

Press  the Send Error Report button to send the report, otherwise use Don't Send. If you click the blue 'click here' link a screen like the one below will appear. If you are not a programmer, it's gobbledygook, if you are it's useful.

Note:

  • the error sender uses the email setup for the current location. If this is not set up (ie you cannot send email to customers) then the error report will not be sent (and you won't be informed that it could not be sent).
  • there is no site specific information (such as your practice name, etc) included apart from the version and revision information you can see below

Estimates

Complete

An 'estimate' is a quotation for work to be done and/or goods to be provided. You create and manage estimates using the Customer|Estimates screen. You can also access the estimates for the current patient on the Estimates Tab of the Visit Editor.

On the estimate you can provide, for each line item, an estimate of the fixed price and low and high limits for the unit prices and quantities.

The estimate can be printed and given to the customer. It can also be used to create the invoice for the services and goods quoted for.

By default, estimates expire after 30 days. This can be changed via the Estimate Expiry interval for the practice using Administration|Organisation|Practice.

HL7

Complete

Health Level Seven (HL7) is a set of standards for Healthcare Data Interchange and Interoperability.

OpenVPMS can send and receive HL7 2.5 messages for select events as follows, using the MLLP protocol.

Patient Administration Messages

Patient admission, discharge and update messages are can be sent to registered Patient Event Services and Pharmacies.

See HL7 Patient Administration Messages  for a list of messages sent and the events that trigger them.

Pharmacy Orders and Dispenses

Pharmacy orders can be be placed with external pharmacies during invoicing, using the HL7 RDE O11 message type.

Orders are placed for products or product types that specify a Pharmacy or Pharmacy Group.

Pharmacy dispense messages (i.e. HL7 RDS O13 messages) can be received from external pharmacies. These are used to create Pharmacy Orders or Pharmacy Returns, which may be automatically invoiced during charging, or via Workflow - Customer Orders.

See HL7 Pharmacy Messages for the supported messages, and the events that trigger them.

For instructions on configuring OpenVPMS to interface with a pharmacy, see How To - HL7 Pharmacies

Laboratory Orders and Cancellations

Laboratory orders can be be placed with external laboratories during invoicing, using the HL7 ORM O01 message type.

Orders are placed for investigations with Investigation Types that specify a Universal Service Identifier and a Laboratory or Laboratory Group

Order cancellation messages (i.e. HL7 ORM O01 messages with CA for ORC-1 - Order Control) can be received from external laboratories. These are used to create Laboratory Returns, which may be automatically invoiced during charging, or via Workflow - Customer Orders.

See HL7 Laboratory Messages for the supported messages, and the events that trigger them.

For instructions on configuring OpenVPMS to interface with a laboratory, see How To - HL7 Laboratories

IDs

Complete

Almost everything in OpenVPMS has an 'ID'.  This is simply a number and it is unique - ie if there is a customer with ID 1234, then there cannot be a patient with ID 1234. Most of the time you don't need the ID. However, it can be useful in identifying the exact patient, customer etc, and hence it is normally printed on things like invoices.  Thus if there are two Mr Smith's each with a dog called Rover, the ID will identify which Mr Smith and which Rover.

An Identity search includes a search of IDs.  Thus, when you search for say a customer with an Identity 1234, those found will include those with ID's starting 1234.

Although almost everything has an ID, the ID is normally not displayed unless there is a mechanism to search for it.  Thus it is displayed on the on the customer, patient and supplier information screens, but not on the Workflow|Scheduling screen - although each appointment does have an ID.

Identities

Complete

A number of things such as customers, patients and products can be given 'identities'.  There are a number of different types of identities such as Alias, Microchip, Barcode, etc.  These are essentially just different ways of identifying the item.

The select screens, where applicable, allow you to search by identity.  Note that when doing so you are not able to search a specific type of identity, the search is done across all identities as well as the IDs.

Hence searching patients for the identity '123' will return any that have microchips, pet tags, aliases, or IDs starting 123.

Insurance

Incomplete document

OpenVPMS can:

Policy and Claims

  • Policies and insurance claims are managed via the Patient - Medical Records - Insurance window.
  • If a patient has an insurance policy, it will be displayed in the patient summary.
  • The status of all claims can be monitored via Reporting - Insurance.
  • If a patient has a policy, the user will be prompted to make a claim against that policy at Check Out

PetSure VetHub

PetSure VetHub provides online claims support.

This:

  • enables the status of claims to be automatically updated
  • provides gap claim support

See Online insurance claims with PetSure VetHub for more details.

Email Claims

Claims can be submitted via email. The email will contain:

  • the claim summary i.e. customer and patient information, and the policy number
  • invoices being claimed
  • the patient history

Print Claims

Claims can be printed, for insurers that don't support online submission.

 

Insurer Claim Forms

For insurers that receive claim via email or post, OpenVPMS includes a default insurance claim form.

For insurers that have specific form requirements, the Insurer has a Claim Form field. This should be assigned a Document Template with Type set to  Insurance Claim - Custom.

For an example template, see the default claim form at: <OPENVPMS_HOME>/reports/Patient/Insurance/A4/Insurance Claim.jrxml

 

 

 

 

 

 

 

 

Investigations

Incomplete document

Investigations are any internal or external clinical test or procedure. The facilities to support these are as follows:

  • as many different types of investigations as you want each with its own request form and supplier (ie the lab or organisation that does the test or procedure)
  • the request forms are defined by document templates which enable the generation and printing of customisable forms including the automatically merged customer/patient/clinician details
  • investigations can be initiated either manually or automatically when a product is added to an invoice
  • investigations can be ordered via online laboratories
  • the investigations and any attached results are displayed in the Patient's Medical record as part of the visit details
  • the request forms can be reprinted
  • investigations are assigned a unique Request Id
  • the Document Loader Job can be used to automatically attach result files (ie reports and images) to the appropriate investigation - this is done via the request id. This can be used for laboratories that don't support online ordering
  • there can be multiple revisions of results files
  • the result files can be of any type (eg .jpg, .png, .doc, .odt, .csv, .xls, .txt, .pdf)
  • the ability to list all investigations by status and/or date range.  This displays date, patient, supplier, investigation type, request Id, status and any attached results.  This is ideal for monitoring both internal and external investigation requests.

The tools to set up and use investigations are:

 

Each investigation has a Status - one of:

  • In Progress - the initial status
  • Cancelled - the investigation has been cancelled. This is set automatically when the invoice item that created the investigation is deleted
  • Finalised - the investigation has been finalised and may no longer be edited. This is set automatically when Medical Record Locking is enabled.

Each investigation has an Order Status - one of:

  • Pending - the order is yet to be sent. This is the default.
  • Confirm Order - the order is awaiting confirmation. This is used by Laboratories that require additional information when submitting an order
  • Sent - the order has been set
  • Waiting for Sample - the laboratory is waiting for a sample
  • Error - there is an unrecoverable error with the order
  • Partial Results - partial results are available
  • Received - results have been received
  • Reviewed - results have been reviewed

For online orders, the Order Status is set by the laboratory.
For manual orders, they can be set by the user.

Local Procedures

Complete

The information presented here is generally applicable but does not include conventions and procedures used in your own local practice. 

If your practice does have specific ways of doing things, your administrator may have created local documentation that can be accessed via a bookmark or other mechanism such as the Help item in the top menu of the OpenVPMS screen. (See here for how to set this up.)

Macros

Complete

Macros are similar to the "auto correct" facility in Microsoft Word where a small string of text can be expanded into a sentence or even paragraphs of text. The macros can also be set up to use the prefixed number, eg so that 5@w expands to 'for 5 weeks'. They can also be set up to include relevant data like the customer's name so that @dear expands to 'Dear Joanna' (assuming that the current customer's first name is Joanna). Finally it is possible to call a report to generate text for things like a referral email that includes the patient's medical history.

Macros can be used in any text field.  Note however that certain macros will be context dependent. For example, the @bid macro is designed for use when creating a Dispensing Label and uses information from the product record. If you use @bid when there is no current product, then the macro simply will not expand and the '3@bid' that you typed will be left unaltered.

You don't need to remember the macros, pressing Alt-M will display a Macro Select screen like that shown below. You can simply click on the macro you want to invoke it.

Note that the search facility searches both the code of the macros and their names. Hence entering say 'dg' will find all macros with code starting 'dg' and all macros whose name starts 'dg'.

The macros are set up by your administrator using the Administration|Lookups|Macro and Administration|Lookups|Report Macro facilities.

Macros can include {__} tokens that indicate text that needs to be replaced by the user.  Pressing:

  • Ctrl - Right Arrow - jumps to the next token, and selects it
  • Ctrl - Left Arrow - jumps to the previous token, and selects it

This allows users to progressively fill in text. E.g. a macro could generate:

Reason:  {__}
History: {__}

Current medications: {__}

What Preventative health cover is being used and do you need to purchase any today? {__}
Vaccination: {__}
Worming: {__}
Flea control: {__}
Heartworm Prevention: {__} 

Examine: {__}
Mentation: {__}
Body condition score: {__}
MM: {__}              CRT: {__}
HR: {__}               RR: {__}
LN: {__}
Temperature: {__}

NOTE: this facility is not supported in the Mail editor.

Medical Record Locking

Complete

Patient medical records are automatically locked to prevent them being edited, after a period of time. 

Once locked, a record may not be not edited nor deleted except in specific circumstances - see Exceptions below.

The following records support locking:

  • Note
  • Addendum
  • Weight
  • Medication
  • Attachment
  • Form
  • Image
  • Letter
  • Investigation

Medical record locking is enabled by the practice level configuration option Record Lock Period. This defaults to 24 hours. If set to zero, locking is disabled.
 

Medical records are locked by setting their status to Finalised. This is done automatically by a background task that runs periodically to set the status on all In Progress or Completed  medical records with:

Start Time < now - period

where:

  • Start Time = the date/time when the record was created
  • now = the current date/time
  • period = the Record Lock Period

Exceptions

There are a number of exceptions to the locking rule:

  • Medication, investigation and document records linked to an invoice may be edited or removed via the invoice, until the invoice is finalised
  • Investigation, Attachment, Image and Letter records can be updated via the Document Loader
  • Medication, Investigation,  and document records can be unlinked from the patient history if the invoice is reversed.
  • Investigation records can have:
    • results attached
    • their Order Status changed

Addendum Record

To support changes to Notes and Medication records that have been locked, an Addendum record can be added. This is displayed after the record in the history that it annotates

A record can have multiple Addendum records. They are displayed in increasing chronological order e.g.

20/10/2015 - Consultation - J Smith [Completed] (8 years)
  20/10/2015 Note      J Smith    S: P presents for a 5-6 day history of rear limb weakness and crying out in pain in the mornings. 
                                  O: PE unremarkable.  
                                  A: Differentials: IVDD, vascular event, etc
                                  P:  Treat symptomatically for now with prednisone and methocarbamol.
  23/10/2015 Addendum   A Bern    Above note was saved incomplete: O has tramadol at home and told o to continue to give tramadol 
                                  for the next 5-7 days.  Recheck in 7-10 days if does not resolve.
  24/10/2015 Addendum   A Bern    Another addendum to the note
  20/10/2015 Medication J Smith   Amoxil Tablets 200mg Qty: 1

An Addendum may only be created if the selected record is a Note or Medication. Adding an Addendum to another Addendum is not supported as it may make the chronology unclear.

Auditing

The ability to enable or disable locking is available to administrators. A new Audit Message will be logged to Workflow - Messaging when locking is changed. e.g.

1/10/2015 10:00 - Medical Record Locking Interval set to 1 week by admin

or:

1/10/2015 10:32 - Medical Record Locking was disabled by admin

This message may be read, but not deleted.

Post Locking updates

Investigations need to support some updates after they have been locked:

  • Reports need to be able to be added. Adding a report creates a new version, if a report has already been attached.
  • The Order Status is editable

All other fields are read-only.

Editing Records

Prior to editing an In Progress medical record, a check is performed to ensure that it may still be edited based on the locking criteria. This is required as the background task may not have got round to change its status to Finalised.

 

Messages

Complete

The system includes a simple messaging system that enables messages to be sent to other users and user-groups. You can reply to and forward messages. When initially received, the message is flagged as pending. After it's read by the addressee it is flagged as read.  When a message is finished with, you can either delete it completely or flag it as complete.

There are two types of messages, user and system. System messages are those used by scheduled processes to notify of status updates or errors. (Currently only the ESCI system generates system messages.)

Note that the messaging system is very simple. Specifically:

  • messages have only To addressees and no CC and BCC addressees
  • a message to a user group generates copies to each individual user
  • a user looking at a message sent to a group cannot see that it was in fact sent to the group rather than him/herself (unless of course the sender puts in the text "To all Reception staff" or similar)
  • messages are not private, that is a message to one user can be read (and responded to or deleted) by another
  • there is no 'sent tray', ie you cannot see the list of messages that you have sent, only those that you have received.  But since you can look at the messages sent to anyone, you see those that you sent.
  • the message status only changes from pending to read when it is read by the addressee. The status stays as pending if it read by anyone else.
  • quick 'subject only' messages with no next are allowed

 

Global ToDo list: Because messages are not private, you can set up a global todo list.  The administrator creates a user called ToDo (with a password known only to the administrator so that nobody can login as ToDo). Messages sent to ToDo can be seen by everyone, and individuals can respond to and delete these messages. Thus we have a public todo notice board. You could also create a Work List for this 'todo' function but there is the benefit of being able to easily reply to or forward the messages.

 

Administrators note: since Message Delete is a specific 'authority' it is possible to block the deletion of message by specific users if you want them to only be able to set complete status when a message is finished with, rather than deleting it.

Names

Complete

Almost everthing (ie customers, patients, products, reports, etc) has a name. The names do not have to be unique - this is obvious for things like patients (where there are likely to be many Rovers, Busters and Scruffys) but less obvious with things like reports.

Everything has an ID and this is unique. Hence the system can quite happily handle two products named 'Best Dog Biscuits', or two reports named 'Stock Listing', but users will get confused.

Hence it is best to use unique names where appropriate.

OTC - Over The Counter

Complete

Over The Counter (OTC) transactions are used to perform sales where no customer and no patient is to be recorded. There is an OTC button on both the Workflow|Scheduling and Workflow|Work Lists screens.  This allows reception staff to quickly make OTC sales.

There is normally one OTC account per Practice Location - though it is possible for multiple locations to share the same OTC account. They are set up using the Administration|Organisation|OTC facility.

The OTC account is effectively a special customer account where the customer is anonymous.

Note that there is also a concept of a 'Counter Sale' to a given customer (accessed via Customer|Charges|New|Counter Sale) where the customer is recorded but there is no patient recorded. If you need the patient recorded, then you use Customer|Charges|New|Invoice.

As indicated above, the OTC account is a special customer account. If you call up the Customers|Charges or Customers|Account screen and then press the Select button, you will find that there is a Type pull-down - see below. Choosing OTC will allow you to access the account.

The Customer|Account screen - see below - is the most useful. Most of the time, the only OTC transaction you need is the sale - accessed using the OTC button of the Scheduling and Work List screens. However, if you need to reverse the transaction or print the payment receipt again, this is where you come.  It works in exactly the same way as the Customers|Account screen for a normal customer.

Payment Types

Complete

The system allows for customer payments by the following methods:

  • cash - with support for rounding (ie cases where the amount is $12.33 and the smallest coin is 5 cents) and change calculation
  • credit card
  • EFT - with support for 'cash out'
  • cheque

You can also include a discount at payment time. ie the amount payable is $100 and this is paid by $80 credit card payment plus a $20 discount.

One payment can also consist of multiple types, ie $100.75 can be paid by a $100 cheque and 0.75 cents cash.

The system also supports a payment type of 'Other', and Administration|Lookups|Custom Payment Type is used to define these.

The system also support payments by BPAY (an Australian payment portal) in that a facility is provided to generate the required Customer Reference Number to be shown on the invoice.

Practice and Locations

Complete

OpenVPMS structures the business as consisting of a single 'practice' with one or more 'practice locations'.  These locations may represent branches at different addresses, or another component of the business (eg the after hours clinic) that operates at the same address.

It is normal (but not mandatory) to have different tills, bank and OTC accounts, and stock locations for each practice location.

The currently selected Practice Location (shown at the top right of the screen) is used as follows:

  • it determines which worklist and schedule views are available (as well as the till, bank, OTC account and stock location)
  • it sets the default for the customer’s Practice Location (see below)
  • it can select the document templates to be used (so that locations A and B use different invoice etc templates)
  • it sets the Practice Location recorded for the various customer transactions when they are created - and this allows reporting of things like sales by location
  • for the charge transactions (invoices, credits and counter sales) the recorded location determines any special pricing that has been set via the service ratio and/or pricing group facilities

There is no concept of customers (and their patients) 'belonging' to a practice location.  That is, a patient can 'visit' any practice location. However, it is possible to set a preferred Practice Location for each customer. This is used as follows:

  • in various reports to select a set of customers
  • to select those customers for whom statements and reminders  are processed
  • potentially to change the content in documents as a function of the customer's preferred practice location (this requires tailoring of the various document templates)

By default all products are available at all locations. However, it is possible to limit what products are available at each location - see here.

Prescriptions

Complete

OpenVPMS provides support for managing and using prescriptions. The features are as follows:

  • the prescription information includes the:
    • medication to dispense
    • quantity to be dispensed
    • number of repeats
    • expiry date of the prescription
    • label text; and
    • clinician who created the prescription
  • the system tracks the times dispensed and will not allow dispensing if:
    • it has been fully dispensed; or
    • the prescription expiry date has passed
  • a default prescription expiry interval is set for the Practice
  • prescriptions are managed via:
    • the Prescriptions tab on the Patients|Medical Records screen
    • the Prescriptions tab on the Visit Editor screen, used in the Check In and Consult workflows 
  • prescriptions can be printed
  • prescriptions that have been dispensed cannot be deleted - this prevents the loss of the information about when and by whom the prescription was originally created
  • when invoice line items are being added, the system checks to see whether there is a valid current prescription for the selected product - if so the user is prompted  to see if they want to dispense using the selected prescription or not.  If not the standard medication dispensing process is used.

As indicated above, you do need to set the Prescription Expiry interval for the practice using Administration|Organisation|Practice.

Pricing

Complete

OpenVPMS has a powerful and flexible product pricing system.

Price makeup

Products have two components to their price:

Fixed - this is the fixed component - it is effectively the 'flag fall'
Unit - this is the 'per item' component

Hence if something has a fixed price of $10 and a unit price of $1, then the total price for 4 is $14.

In general things that have no overhead such as cans of food will have no fixed price, and only a unit price. Things that have an overhead - such as tablets where you want to charge a dispensing fee as well as the per-tablet price, will have a fixed price representing the dispensing fee and a unit price for the tablet. You can also use this approach for services, where you might want to set a fixed price for some surgery, and a unit price that represents the per-hour charge for the theatre time. [Note that an alterative to this appoach is to have mutiple fixed prices - see below - so that you have different prices for different length operations.]

Tax

Fixed and unit prices may be entered both exclusive and inclusive of tax.
The exclusive tax price is stored, whilst the inclusive tax price is calculated from the tax-exclusive price and the tax rates associated with the product, product type or practice.

The practice Show Prices Tax Inclusive option determines if fixed and unit prices in Products - Information and during product selection should be displayed inclusive or exclusive of tax.

Price Entry

When setting the price, you can provide:

  • a tax-exclusive Cost price and a Markup percentage, and the system will calculate the:
    • tax-exclusive Price using:
      Cost * (1 + Markup / 100)
    • the Tax-inclusive Price using:
      Price * (1 + tax / 100)
  • a tax-exclusive Price. The Tax-inclusive Price and Markup will be calculated.
  • a Tax-inclusive Price. The tax-exclusive Price and Markup will be calculated.

 

The Cost and tax-exclusive Price can be expressed to 3 decimal places; the tax-inclusive price is rounded according to Price Rounding below.

Dates

Prices also have from/to applicability dates.  This allows you to keep previous prices for reference purposes. It also allows you to set future prices, ie one that will take effect on some future date.

Templates

A product can have its price set from a 'price template'.  This allows the Fixed price component of a number of products to be set from a standard value.

Multiple Prices

It is possible to set multiple fixed prices for a product, each with its own name. When the product is called up when generating an invoice, the fixed price field will have a pull-down which can be used to show the available prices (with their names) as follows. Note that here the 150/medium price has been set as the default and so is initially displayed.

Service Ratios

Service Ratios can be used to apply a multiplier to prices for products of a given product type at a given Practice Location. They can also have a calendar, to determine when the multiplier applies.
The multiplier is used when generating charges or estimates. This facility is designed to enable:

  • different Locations (such as those used for over-night emergency or house-call operations) to charge more for products of certain types
  • surcharges or discounts to be applied on particular product types at certain times.

Examples

1. Out of hours surgery

To charge surgery services at 150% outside of 7am and 7pm, and on weekends, at Clinic A:

  • add a Service Ratio of 1.5 between the surgery Product Type(s) and Clinic A
  • attach a calendar with the following repeating slots:
    • Start Time: 00:00, End Time: 07:00, Repeats: Daily, 365 times
    • Start Time: 19:00, End Time: 24:00, Repeats: Daily, 365 times
    • Start Time: 00:00, End Time: 24:00, Repeats: Every Saturday and Sunday, 52 times

2. Regular promotions

Promotions are typically handled via product discounts, but if you wish to promote a product or service on a particular day or time, a service ratio might be simpler. 

E.g. to charge grooming services at 50% on Wednesdays between 10am and 2pm in August at Clinic A:

  • add a Service Ratio of 0.5 between the grooming Product Type(s) and Clinic A
  • attach a calendar with the following repeating slots:
    • Start Time: 02/08/18 10:00, End Time: 02/08/18 14:00, Repeats: Every Wednesday, until 01/09/18

Pricing Groups

Prices can be assigned Pricing Groups to enable different pricing for a product at different Practice Locations. If a Practice Location is assigned a Pricing Group, it only sees the Prices that have:

  • the same Pricing Group
  • no Pricing Group

To use Pricing Groups:

  • create a Pricing Group for each demographic that needs to be represented.
  • configure Practice Locations to use those Pricing Groups. One Pricing Group may be shared by multiple locations.
  • assign Pricing Groups to Prices.

Pricing Groups are similar to Service Ratios in that they both support different prices for a product at different Practice Locations. Whilst Service Ratios are simpler to set up, Pricing Groups enable:

  • different pricing of individual products, rather than just types of products
  • the ability to enter a rounded price
  • product price history
  • prices to be exported and imported, per Practice Location

Price Rounding

Tax-inclusive prices are rounded to the default number of decimal places for the currency.

This can be changed by specifying a Minimum Price on the practice Currency.

The practice currency can be selected in Adminstration>Organisation>Practice.

The currency is a lookup, the rounding can be changed by editing the lookup in Administration>Lookups

E.g., to round prices to the nearest 5 cents, specify 0.05 for the Minimum Price.

Tax-inclusive prices will be rounded to the Minimum Price:

  • when editing a product, and the Cost, Markup, or Price is changed
  • after a Service Ratio is applied during charges or estimates
  • a delivery is finalised that triggers an update to a unit price

Note that the Markup and Max Discount may be recalculated after the price is rounded.

Tax-inclusive prices will not be rounded to the Minimum Price:

  • if the price is manually entered during charging or estimating
  • if they are imported

Negative Prices

You can set as price as a negative amount - although this is not really kosher. Negative prices are used with a product that is in fact a discount. This enables you to have a discount line item on the invoice. For the standard way to apply discounts, see Concepts|Discounts.

 

Pricing Updates

Complete

Prices in OpenVPMS can be updated:

To update a large set of prices, the latter is the preferred approach. The process is as follows:

  1. on the Products|Information screen, press the Export button to display the Export Prices screen
  2. fill in the parameters to select the products to export and press the Export button
  3. this will export the data in CSV format in a file named 'products-yyyy-mm-dd.csv' (where yyyy-mm-dd gives the current date)
  4. use a spreadsheet program to make the required changes and save the new data in CSV format.
  5. on the Products|Information screen, press the Import button to display the Upload window and upload the new data file
  6. the Import Prices screen will then be displayed showing the products be updated and any errors.  If there are no errors, press the OK button to apply the updates. If there are any errors, these must be corrected in the spreadsheet before re-importing it.

Note that the format of the CSV file being imported must match that exported. You cannot have extra columns (such as 'Old Fixed Price') and the column headers must match.

A relatively simple way to achieve this is to copy all the data to a second sheet (called say Sheet1). On the top sheet you can then replace the original data by formulas where you want to do updates.  Thus inserting the formula:

=IF(Sheet1!E2>0,ROUND(Sheet1!E2*1.2,2),"")

in cell E2 of the top sheet and then copying this to all cells below it in the E column will:

  • increase all fixed prices by 20%; and
  • round them to 2 decimal places

where there is an existing fixed price.

You then save the top sheet in CSV format and import that.

This technique can be used to both create and update prices. To maintain a price history, it is recommended to create new prices.

Creating new Fixed Prices

To create new fixed prices:

1. Clear the Fixed Price Id column contents

Clear the D column, starting in cell D2. This ensures that new fixed prices are created rather than updating existing fixed prices.

2. Change the Fixed Price column

E.g. to increase fixed prices by 50%, add the following to the E2 cell, and copy to the remaining E column cells:

 =IF(Sheet1!E2>0,ROUND(Sheet1!E2*1.5,2),"")

3. Change the Fixed Price Start Date column

The prices should be given a new start date, so that they don't overlap existing fixed prices. The existing fixed prices will have their To Date set to the Fixed Start Date with time 00:00:00. Thus if the new start date is 2/May/17, the old price will apply until midnight on 1/May/17, and the new price will apply from 00:00:00 on 2/May/17.

E.g. to date the prices 30 days from the existing prices. add the following to the H2 cell, and copy to the remaining H column cells.

 =IF(Sheet1!H2>0,Sheet1!H2+30,"") 

The Default Fixed Price column can be used to specify if a fixed price is the default price. This only applies if multiple fixed prices are active for a product at a given time. Valid values are false and true.

Updating Fixed Prices

To update fixed prices, retain the Fixed Price Id column contents, and change the Fixed Price, Fixed Cost, Fixed Price Start Date, Fixed Price End Date and Default Fixed Price columns as required.

Creating new Unit Prices

To create new unit prices:

1. Clear the Unit Price Id column contents

Clear the L column, starting in cell L2. This ensures that new unit prices are created rather than updating existing unit prices.

2. Change the Unit Price column

E.g. to increase unit prices by 50%, add the following to the M2 cell, and copy to the remaining M column cells:

=IF(Sheet1!M2>0,ROUND(Sheet1!M2*1.2,2),"")

3. Change the Unit Price Start Date column

The prices should be given a new start date, so that they don't overlap existing fixed prices. The existing unit prices will have their To Date set to the Fixed Start Date with time 00:00:00. Thus if the new start date is 2/May/17, the old price will apply until midnight on 1/May/17, and the new price will apply from 00:00:00 on 2/May/17.

E.g. to date the prices 30 days from the existing prices. add the following to the P2 cell, and copy to the remaining P column cells.

=IF(Sheet1!P2>0,Sheet1!P2+30,"")

Updating Unit Prices

To update unit prices, retain the Unit Price Id column contents, and change the Unit Price, Unit Cost, Unit Price Start Date, and Unit Price End Date columns as required.

Updating Product Printed Names

To change the Printed Name of a product, enter a value in the appropriate Product Printed Name cell.

Product Price Templates

Exported fixed prices can include prices linked from Product Price Templates if the "Include Linked Prices" option is selected when exporting prices.

Where this occurs, a warning will be displayed in the Notes column. E.g.:

Warning: fixed price is linked from Basic Surgery Fee (1047)

Linked prices cannot be updated via the product that links them; the Product Price Template must be updated instead.

 

Price Groups

If you are changing the price group or adding new prices with a price group, remember that the Price Group is specified by its code, not its actual name.  For example, if its name is say 'Price Group 3' then its code will be PRICE_GROUP_3, and if you edit the price group to change its name to say 'Group 3', its code will remain unchanged.  For this reason it is best to use the Export facility to export some prices with the relevant prices groups so that you can ascertain what the actual codes are.

 

Printing

Complete

The system is quite flexible when it comes to printing.  The standard print request window enables you to print to any available printer, but also to email and preview the document. If you request a preview, the pdf file will be downloaded to your browser from where you can save it or print it.

For many documents, ie invoices, receipts, etc, the system maintains a 'Printed' flag. If set it means that someone has printed the item. However, note that previewing or emailing it does not count as printing.

The administrator can set a default printer for each practice location using Administration|Organisation|Practice Location.

It is also possible to set a default printer for each type of document.  More correctly, you can specify the default printer for each document template - see Administration|Templates. You can also set the document to print to a specific printer without displaying the print request window. This is useful with dispensing labels where you always want these printed on the label printer rather than on a standard printer.

These templates also allow flexible control of when documents are printed - see the above link.

Note that these printers are the printers that are available to the server running the database and application. Unless you are running everything on your own machine, the server's printers may be different from your own.  If the server has no printers then you can still print - a pdf will be generated and downloaded just as though you pressed the Preview button.

 

If you have a situation in which your office is split over two floors and you want different default label and standard printers for each floor, then you can accomplish this as follows:

  • Clone the primary practice location (say Main) to define a second location, Main-Upstairs.  This is a clone of Main (ie same Shedule & Worklist Views, same Stock Location etc) but with a different default printer set.
  • For any templates for which you want to specify the printer to be used, edit the template to set the printer for each location.  Normally this will only necessary for the Drug Label template.
  • If you wish, change the name of the Main location to say Main-Downstairs.
  • If there is a standard printer for Upstairs, set this as the default for the Main-Upstairs location.
  • For users who work upstairs, set their default location set to Main-Upstairs.

Note that if you are using reports that report stuff by practice location, you will need to combine the the information for Main-Upstairs and Main-Downstairs in order to get the totals for the Main location.

Problems

Complete

The system provides the clinician with the ability to create a "Problem" in a patient's medical records, and then enter notes and medication against that problem.

The Problem can have a lifetime that spans multiple visits and provides a way of looking at the notes and medication related to the problem. When looking at the the Medical Records summary, the items belong to the problem will be spread throughout the medical history, however, by using the Problems tab, one can see all the items associated with the one problem gathered together.

Note however, that caution should be exercised if medication entries are made against the problem because these will not be charged for, ie no invoice line item will be created for the medication.

The problem has a status which is set to either Un-Resolved or Resolved.

Product Batches

Complete

Products that have limited lifetimes or warrant explicit usage tracking typically have batch identification and expiry dates.

Product batches can be tracked during charging and dispensing.

This can be used to:

  • auto-fill the expiration date of medication, based on the batch of a product at the current stock location
  • record rabies vaccination details given to a patient
  • determine who has been sold a particular product batch being recalled
  • report on stock about to expire

Batches are created via the Product|Batches screen, or by finalising a delivery that contains batch information.

Products

Complete

OpenVPMS has a number of ways of grouping or classifying products as follows:

Type of Product
There are five types of product as follows:

Service

 

These just have a name (and other optional attributes like prices, discounts, taxes etc etc).  They are not stocked items and you cannot run out of them.  Example: Consultation
Merchandise
 
Things that are sold and hence also have a Selling Unit (eg Box, Vial, Unit etc) and associated supplier details.  Example: Dog Collar
Medication
 
In addition to the details held for Merchandise items, these can have drug labels, dispensing notes, a drug schedule and list of active ingredients.  Example: Baytril Otic
Product Price Template

 

These just have a name and a price and are used to set common pricing for a number of products (by linking the fixed price of the product to this template rather than setting its own).  Example: Dispensing Fee - Standard
Template
 

These are used to group a number of products together.  They are commonly used for procedures. When you use the template product when creating an invoice, it will be expanded into its component items. The template can include a note to be put on the invoice, and a note to be added to the patient's medical record. Hence, sometimes it is useful to have a template that includes only one product - because of this ability to automatically generate these notes.

Product Templates:

  • can include other templates
  • included products can have an applicable weight range specified - so for example a cremation template could include a number of cremation services, each for a different weight range, and the system would automatically include only the one appropriate to the patient's weight
  • included products can be flagged as 'zero priced' so that they are not charged for but are counted as used for stock control purposes

Example: Cat Spay

Note that some things that are logically services - eg cremations (and in fact any services that you offer which are in fact drawn from an outside supplier) need to be set as Merchandise so that you can record the supplier of that service.

   
Product Type
(Note that ‘Product Type’ is not the same as ‘Type of Product’.)

Each Service, Merchandise and Medication product can be set to be one of a number of Product Types. Examples might be: Administration, Anaesthesia, Consultation, Consumables, Desexing, Dental, etc. As well as enabling reporting by the sort of product, discounts can be set by product type. Also one can determine the appearance of invoices by the order in which items are shown and whether or not items of the same type are combined into one line item.

 

Product Classification
This is another method for grouping or selecting products for reporting purposes. Your administrator can set up Product Groups and Product Income Types, and you can set a product to belong to one or more of the classifications.

Reminders

Complete

OpenVPMS has a powerful and flexible system for sending out reminders to clients that their animals are due for a vaccination, dental check, annual check, etc. Its features include:

  • as many different types of reminders as you want, each with its own settings and formats of reminder notifications
  • automatic generation of a reminder when a product is used or service provided (ie recording that a vaccination was done can generate the reminder for the repeat due in 12 months time)
  • support for sending out reminders by post, email, SMS, or generating a list of customers to contact, or a set of address labels. The data can also be exported to CSV format for processing by a 3rd party.
  • the ability to select either one specific method to send out a given type of reminder, or select the method depending on the customer's available contacts (eg use SMS if the customer has provided an SMS capable phone number).
  • the ability to send out the same reminder to one customer by multiple methods (ie both email and SMS)
  • a group flag that enables optional grouping of reminders so that a customer having multiple animals each with multiple reminders receives only one reminder document listing all the individual reminders
  • the ability to define when a given reminder is due, eg 12 months for this product/service, 3 years for another, together with the facility to override this
  • flexible definition of when reminders become overdue and what to send out on the first, second, third etc reminders
  • automatic cancellation of old reminders
  • automatic completion of one reminder by another by making them members of the same Reminder Group. For example you may set a puppy vaccination and an annual canine vaccination as two different reminder types, but belonging to the same reminder group (eg Vaccination), so that when generating a subsequent invoice for a canine annual vaccination, the Canine Annual reminder will automatically "complete" any previous Canine Puppy or Annual reminder.
  • highlighting of reminder status on the Patient screens
  • colour coding of whether the reminder is not yet due, currently due, or overdue (as green, yellow and red respectively) with the ability to set the length of the 'currently due' window

Note that if you are interested in Appointment Reminders rather than Patient Reminders, see How To: Appointment Reminders

The tools to set up and use reminders are:

To send reminders via SMS:

 

A reminder can be in one of 3 states as follows:

  • In Progress - is active, i.e. neither completed nor cancelled
  • Completed - what should have happened has (e.g. the next vaccination)
  • Cancelled - the reminder either became too old and was automatically cancelled or it was manually cancelled

Each reminder will have one or more 'items', one for each method by which it will be sent out. For these, their states can be as follows:

  • Dequeued - the item is no longer queued to be sent - most commonly because it was not processed in time
  • Error - an error occurred sending the item
  • Queued - the item is queued ready to be sent
  • Sent - the item has been sent

 

For a full discussion of how reminders are processed, see Reporting|Reminders

 

Reports, Forms, Letters and Documents

Complete

There are various sorts of things that the system can generate for printing. They are as follows:

Reports - these are invoked for the Reporting|Reports screen. Typically a report has some input parameters (eg the from and to dates, the product type, etc). As well as printing the report, you can also generate a PDF file (which can bve previewed and sved, or emailed), or export the data for use in a spreadsheet. Reports can be give a 'level', and only users with a 'level' equal to above that will be able to run the report.  A number of standard reports are included with the system distribution, more are available from the community resource. If you want/need to modify or create reports, this is possible but needs technical skills - see here.

Forms - these are what they sound like - forms that the system can generate that can include merged-in information about the current patient, customer or supplier. You can modify or create these with a standard word processor. See here for further information.

Letters - these are not quite what they sound like - in fact, they are just forms with input parameters. They are thus used where it is necessary to show information that is not available from the system.  For example, if we have a 'Health Check for Purchase' form, then although the system can automatically fill in the patient details, comments on items like Eyes, Ears, Teeth & Mouth, Chest Auscultation, etc need to be provided by the vet.  Rather than printing the form and then filling these in, the system can prompt for this information and enter it on the form. Since you can use macros when entering the prompted-for data, you can quickly enter standard information.

System Documents & Reports - these are the things like invoices, receipts, orders, statements etc that the system generates. The system distribution includes these, and in general you should not need to modify them because the Letterhead & Document Control facility should enable you to customise these documents for your practice.  However, if you do need further customising then see here.

 

See also Documents and Printing.

SMS

Complete

OpenVPMS supports sending SMS messages. The SMS messages are sent using plugins or via 'email to SMS' gateways provided by various companies.

SMS messages can be sent to any customer or supplier who has a Phone Number Contact with "Allow SMS" ticked.

SMS messages can be sent by clicking the SMS button:

  • in the Customer Summary panel on the left of the screen
  • in the Customer's Phone Number contact display (on the Customers|Information screen)
  • in the Supplier's Phone Number contact display (on the Suppliers|Information screen)

SMS can also be used for both Appointment Reminders and Patient Reminders.

The message length is limited to the Maximum Parts setting on the SMS Configuration. By default this is 1, which allows for 160 GSM characters*, or 70 unicode characters. If a message contains a character that cannot be represented using GSM, it will be sent as unicode.  

If the SMS provider supports multi-part messages, this can be increased. E.g.

Parts GSM characters Unicode characters
1 160 70
2 306 134
3 459 201
4 612 268
5 765 335

* GSM characters are 7 bit, so 160 characters usually fit into a single SMS. In practice, a few GSM characters need to be escaped and take 14 bits, so the actual length may be less.

Note that providers will charge each part in a message as a single SMS.

Two companies are supported via tailored configuration screens, SMS Global and Clickatell. Other companies can be accomodated via a general configuration screen.

See also Reference|Setup|SMS, Customers|SMS and HowTo|Appointment Reminders.

 

 

Schedules, Work Lists and Workflow

Complete

Schedules, Work Lists and Workflow - these are the things that make OpenVPMS easy to use. Reception staff and clinicians can almost carry out all their work starting from the Scheduling and Work List screens. The system has a concept called 'workflow' which automates many of the necessary steps to get from an appointment being made to having the visit and invoicing all completed and the patient happily checked out.

Note that you do not have to used either schedules or work lists - you can check a patient in from their Patients|Information screen.  But it really does make life easier - the schedule(s) allow you set up an orderly system to enable customers to be serviced with minimum delay, and the work lists allow you to see the queue of things to be done and monitor what is happening.

This page contains the following headings: Schedules, Work Lists, Workflow, Check-In, Consult, Check-Out, Transfer, Follow-Up, Appointment status, Task status, Status Updates, Multi-Day Resource Bookings, Staff Availability, and Tools.

Schedules
A schedule is a simply a diary of appointments. The following features are provided:

  • as many schedules as you need - you will probably want one per clinician (or perhaps per on-duty clinician) and one for 'any clinician'
  • you can define 'schedule views' to allows groups of schedules to be displayed at the same time
  • schedules can belong to more than one view
  • schedules can also represent resources, ie consulting rooms and surgeries
  • each schedule can have its own minimum time slot size (eg 5 minutes, 15 minutes)
  • schedules with different minimum time slot sizes can be combined on the same schedule view
  • you can tailor the check-in process for each schedule by defining the available worklists, documents, and whether or not there will be a weigh-in step
  • schedule views can be assigned to one or more practice locations and configured to be the default when the location is changed
  • schedules can have multiple appointment types (with a default) and each appointment type can be assigned a default appointment duration
  • appointment types can be colour coded
  • scheduling dates can navigated by day, week, calendar selection and also by entering abbreviations eg 6w to jump 6 weeks ahead
  • a clinician can be assigned to an appointment
  • schedules can highlight appointments by appointment type, clinician or appointment status colour
  • appointments can be easily moved between dates and schedules
  • schedule views can be filtered to show specific times (Morning, Afternoon, Evening, AM, PM) as well as filtered by clinician
  • when the appointment is created any relevant customer and patient alerts are displayed
  • when an appointment is selected, the customer and patient details are shown in the left panel
  • the appointment details include a 255 character notes area, and a set of user defined list of reasons
  • the way the appointment is displayed in the schedule is customisable, and the presence of notes is indicated by a bubble icon display to save space

Work Lists
A work list is at its simplest, a queue or list of things to be done. However, it can also be used to manage hospital occupancy, boarding kennels and other resources. While schedules contain appointments, work lists contain 'tasks'. The following features are provided:

  • as many work lists as you need - you will probably want one per reception area/waiting room, one per resource (eg hospital, boarding kennels), and perhaps a general 'to do' list
  • you can define 'work list views' to allows groups of work lists to be displayed at the same time
  • work lists can belong to more than one view
  • for resource work lists, you can set the number of slots in the list to corresponds with the number of kennels etc that the resource has.  For queues and lists, the number of slots is set high - normally 100.
  • work lists can be combined on the same work list view
  • work lists views can be assigned to one or more practice locations and configured to be the default when the location is changed
  • work lists can have multiple task types (with a default) and each task type can be colour coded
  • each worklist can be tailored to control the list of documents presented for use at check-in time and also whether or no a weigh-in screen is presented
  • for a given date, only those tasks whose start & end dates span the selected date are shown - thus it is possible to 'book' a resource for some future period of time, and it is also possible to look at an earlier date to see what was happening on that date
  • the dates can navigated by day, week, calendar selection and also by entering abbreviations eg 6w to jump 6 weeks ahead
  • a clinician can be assigned to a task
  • work lists can highlight tasks by type, clinician or task status colour
  • tasks can be easily transferred between work lists
  • work lists views can be filtered display tasks by status (incomplete or complete) and to highlight tasks for a selected clinician
  • when a task is selected, the customer and patient details are shown in the left panel
  • the task details include a 255 character notes area
  • the way the task is displayed in the work list is customisable

 

Workflow
Buttons on the Scheduling and Work Lists screens enable you to proceed through the steps necessary to process a job from start to finish. These buttons are:

  • New - create a new appointment or task
  • Check-In - checks in the patient
  • Consult - displays the Visit Editor (which enables you to enter all the visit details , ie medical records, invoice items, reminders & alerts, and documents from one screen)
  • Check-Out - checks out the patient

The normal division of labour is that the Reception staff create the appointments and check the patient in. The vet(s) then use the Consult button to enter all the visit related data using the Visit Editor, and then press it's Completed button when they are done. Reception then takes over and does the Check-out.

Check-In
The Check-In button is available on Scheduling and Patient Information screens.  Pressing it does the following things:

  • displays a window to:
    • enter or update the patient
    • enter or update the clinician
    • enter the patient weight
    • enter a work list and task type
      A default work list can be selected for the schedule.
    • print documents
      These are a list of patient letters and forms (for example admission forms).
      The list of documents is determined by the Templates of the appointment schedule and the selected work list.
      If any letters are selected and these have fill-ins, then these will be prompted for. Depending on the document template setup, the forms may be printed immediately or held until check-out time.
  • a task is created in the selected work list.
    The task type is set to the default for the work list, the notes field is set to the appointment reason with any appointment notes concatenated to it so it comes out like 'Checkup - owner worried about weight gain'. The task status is set to Pending.
  • creates a Visit entry in the patient's medical record with reason set to the appointment reason, and the status 'In Progress'. Note that in some cases an existing visit is re-used - see Concepts/Visits.
  • if no open invoice exists, a new one is created
  • presents the Visit Editor screen. The appropriate visit information could be entered immediately, but normally (since the Reception staff are probably doing the check-ins and not the clinicians) this is exited using the OK button without entering further information.
  • updates visit status to In Progress, the appointment status to Checked-In, and the task status to In Progress

Consult
The consult activity is much simpler. Pressing the Consult button (on either the Scheduling or Work List screens) displays a clinician prompt if required, and then brings up the Visit Editor screen. This is used to:

  • add to and edit the medical record
  • add items to the invoice
  • manage reminders and alerts
  • add any required documents to the medical record

The Visit Editor can be exited using one of the following buttons:

  • Cancel - discards any pending updates (ie those for which the Apply button has button not been used)
  • OK - applies any pending updates but does not update any status
  • In Progress - applies any pending updates, and if the invoice status was previously Completed, sets it back to In Progress
  • Completed - applies any pending updates and sets the invoice status to Completed, and the activity and task status to Billed

Note that the In Progress and Completed buttons are only available on the Invoice tab of the Visit Editor.

Check-Out
Pressing the Check-Out button (on either the Scheduling or Work List screens) does the following:

  • presents a Select Boarding Appointments screen, if a boarding appointment is being checked out. This allows other boarding appointments for the customer to be checked out at the same time.
  • presents the Invoice Edit screen to:
    • automatically charge boarding fees
    • allow any last minute changes to the invoice
  • presents the Finalise Invoice? window so that you can finalise the invoice. If you say Yes, then its status will be set to Finalised.
  • if the invoice is now finalised then the Pay Account? window is displayed. If you say Yes, then the New Payment window is displayed so that the payment can be made.
  • if there are documents to be printed (eg the invoice and any patient documents), then the Print window will be displayed allowing you to print either all or selected documents
  • the activity and task status are set to Completed

Transfer
The Transfer Transfer button on the Scheduling screens is designed for use after a consultation in which it decided to admit the patient to hospital or for surgery. It does the following:

  • presents a work list select screen to allow the appropriate work list to be selected
  • displays a Print window if the target work list has templates or Use All Templates is ticked, listing the available templates to print
  • adds a new work list task for the selected work list, for the appointment patient. The task will be given the same status as appointment if they have a status in common. If not, it will be set to In Progress.
  • updates the appointment status to Admitted, provided it is not Billed or Completed

Pressing the Transfer button on the Work List screens simply allows you to transfer the selected entry from one worklist to another.

Follow-Up
The Follow-Up Task facility allows you to quickly add a task to a worklist that has been defined as usable for follow-up tasks. These can be any worklist, but it is normal to create specific worklists such as 'Reception to follow up' and 'Dr Bloggs To Do'. You can create a follow-up task either from the Patients workspace by clicking the icon next to the patient's ID in the left panel, or if the 'Follow Up At Check Out' option is set for the Practice, then the New Follow-Up Task window will be automatically displayed at checkout time.

You can define one or more follow-up worklists (in order of preference) for each user and each practice location. When the New Follow-Up Task window is displayed, the default worlist is set from those set the current clinician, or if they have none, then the current user, and if they have none, the current location.

Appointment status
The appointment status can be as follows:

  • Pending - the initial status when the appointment is created
  • Checked-In - has been checked-in
  • In-Progress - activity is in progress
  • Billed - the associated invoice is complete
  • Admitted - can be set manually
  • Cancelled - appointment cancelled - set manually by editing the appointment
  • Complete - has been checked-out

Task status
The task status can be as follows:

  • Pending - the initial status when the appointment is created
  • In-Progress - activity is in progress
  • Billed - the associated invoice is complete
  • Cancelled - task cancelled - set manually by editing the task
  • Complete - has been checked-out

 

Status Updates

The following table shows the change in status of the appointment (in the schedule), the task (in the work list), and the invoice as things progress from a new appointment to all being completed. The actions are the buttons that are pressed on the various screens. Where the same action is shown for both the Schedule and the Work List, this simply means that the button is shown on both screens and you can use either one.

Schedule Work List Invoice Visit
Button Status Button Status Button Status Status
New Pending   -   - -
Check-In Checked In   Pending   - In Progress
Consult In Progress Consult In Progress   In Progress (unaltered)
        OK (unaltered) (unaltered)
        In Progress In Progress (unaltered)
  Billed   Billed Complete Completed Completed
Check-Out Completed Check-Out Completed Finalise=Y
Finalise=N
Finalised
Completed
Completed
             

You can of course manually alter the status, but in general you should not need to do, the workflow will take care of setting the appropriate status resulting from each action. The exceptions are: placing an invoice on hold, and cancelling an appointment or task  - you need to do these manually - but you won't need to do this often.

Note also that because the appointment and task are linked, changing the status of one will generally change the status of the other. Thus if you have an appointment checked in (and thus the task has been created and has status Pending), then the customer walks out, then you can simply change the status of either the task or the appointment to Cancelled and this will also update the other one automatically.

 

Multi-day Resource Bookings
This section discusses how to handle multi-day resource bookings. 

The scheduler can handle appointments that span the midnight boundary, so you can make an appointment for a 7-day stay in a boarding kennel. However, this does not give you the optimum resource control. The trick is to use work lists (rather than the appointment schedule) and do things is as follows:

  • set up a work list that represents the kennels (or hospital), and set the number of slots to match the number of runs/kennels/cages
  • when you get a booking for the boarding kennel, create a task in the kennels work list, with the start and completed date/times set for the expected stay - the status will be Pending
  • when the patient arrives use the Consult button to move the status to In Progress and if necessary open an invoice and add notes etc to the visit record
  • when the patient leaves, use the Check-Out button to do the discharge processing

Because we have limited the number of slots in the work list, the system will tell you if you are trying to book boarding between dates where the number of cages/runs available on any day between those dates exceeds the maximum.

 

Staff Availability
It is useful to be able to show on the schedule periods when staff are not available. This can be accomplished as follows:

  1. create a dummy customer with the Name "--Do Not Use--", First Name "Dummy 'No Customer' customer", and Company Name "-" - this provides us with a customer to be used where there is none [necessary since when creating an appointment, one must specify the customer]
  2. create an Appointment Type "Block Out", and Appointment Reasons such as "~Off Duty~", "~Meeting~", and "~Lunch~" - the use of the tilde ~ groups these reasons together at the bottom of the reasons list

You can now create 'appointments' which indicate staff unavailability for various reasons.

 

Tools
The tools to set up the above facilities are:

Stock Control

Complete

OpenVPMS has a very capable stock control system. Its facilities include:

  • stock control can be enabled or disabled for each Practice Location
  • stock can be held in multiple locations - these are called Stock Locations and represent storerooms, warehouses, etc
  • a Stock Location can be shared between Practice Locations, but a Practice Location cannot use multiple Stock Locations
  • by default all products are available at all locations. However, it is possible to limit what products are available at each location - see here.
  • when a customer invoice (or credit note) is processed, the associated stock updates are automatic
  • each product can have stock levels (ideal and critical) set for each Stock Location together with always order and never order options
  • each product can have one or more suppliers defined - one of which can be set as the preferred supplier, and for each supplier you can set the ordering information for that supplier
  • orders can be generated either manually, or automatically
  • the automatic order generation process allows the generation of orders for either a specific supplier and stock location, all suppliers and a specific stock location, or all suppliers and all stock locations. You can also specify whether to order only items at or below their critical stock level, or all those below their ideal stock level.
  • to assist with the manual creation of orders, there is a Stock Reorder report
  • the ESCI facility provides automation of the processing of orders, deliveries and invoices for suppliers who have implemented the required interface
  • the manual handling of deliveries is well streamlined - you select what is being delivered from a list of outstanding orders and their line items, check these off, and after the deliveries are finalised, the supplier invoice can be automatically created. A given order can have multiple deliveries - ie if you place an order for 20, the system can handle this being delivered in say 5 and then another 15 some time later. Supplier invoices can be created for each delivery or you can manually create them.
  • when receiving items stock levels are updated automatically, and it is also possible to have the product's cost price updated
  • the stock adjustment transaction allows the update of the stock levels of one of more products
  • the stock transfer transaction allows the transfer of products between stock locations
  • the stocktaking process is facilitated by the ability to export and import stock quantity information for specified stock locations and product sets
  • one can have a stock location not attached to a practice location. This can be used as a mechanism to keep a record of written-off stock, ie create a stock location called Write-offs unlinked to any practice location, and transfer written-off stock to it.  Similarly, to support conversion of one product into another, you could create a Conversion-out and a Conversion-in location, and transfer 10 cartons of pet food to Conversion-out and then transfer 10x12=120 cans of pet-food in from Conversion-in.
  • reports available include Stock Take by stock location, Stock Value by stock location, Stock purchases, and Stock sales

To track the progress of orders and deliveries, both these have a status, and the order also has a delivery status.

The order status can be one of the following:

Order Status Meaning
In Progress the initial status when the order is created
Finalised has been finalised, no more changes can be made
Accepted order has been accepted by the supplier
Rejected order has been rejected by the supplier
Completed order is complete - no more items to be delivered
Cancelled Order has been cancelled

The order's delivery status can be one of the following:

Delivery Status Meaning
Pending no items have deen delivered yet
Part some items have been delivered
Delivered all items have been delivered

The status of the actual delivery can be one of the following:

Status Meaning
In Progress items are being delivered
Posted delivery is finalised, either because all items  have been delivered (in which case the Delivery Status or the order will be 'Delivered') or they have not (in which case the Delivery Status or the order will be 'Part')
Cancelled the delivery is cancelled

Suppliers

Complete

In OpenVPMS the term 'supplier' includes all the entities that supply things:

  • Supplier Organisations - ie companies that you purchase from
  • Supplier Personnel - ie the representatives & sales staff within the above companies
  • Veterinary Practices - ie the other practices that you use to refer patients to or purchase services from
  • Veterinarians - ie the vet staff within the above practices
  • Manufacturers - the manufacturer recorded against Product Batches
  • Insurers - the providers of patient insurance

Note that the use of this split into organisations and staff is not mandatory, and you could just use Supplier Personnel and Veterinarians.  However, since staff change, it is probably best to set up the Supplier Organisations and Practices, and then add the appropriate staff entries.

On the accounting side, the supplier transaction set is not nearly as rich as the customer transaction set. Specifically there are no initial balance or adjustment transactions, nor a Check Balance facility.  As indicated elsewhere, OpenVPMS does not attempt to provide a complete accounting system for the business. Hence on the supplier side, it provides just enough to handle orders and deliveries.

If you are setting up the system and do want to bring in the current balances for your existing supplier accounts, then the work around would be to create a product say zz-prior-supplies with Printed Name say 'Prior Supplies' and create supplier invoices or credits using this product. Then deactive the product so that it will not be available for normal use.

Taxes

Complete

OpenVPMS provides support for item level tax systems where each invoice item is individually taxed, ie the GST used in Australia, the VAT system used in the UK, and the State taxes used in the USA. 

Also it can be configured (via Administration|Organisation|Practice ) to display amounts as either 'tax-included' or a 'without tax' or 'ex-tax' basis. The standard invoice etc document templates are sensitive to the current locale (ie country) and inc/ex tax setting and are formatted appropriately. Hence in Australia with inc-tax we have:

and in the US with ex-tax we have:

Where relevant, the standard reports provided with the system have options to show either inc-tax or ex-tax amounts.

Tax Settings
Taxes can be set at the product, product type, and practice levels.  One can also define multiple taxes.

In a simple 'same for everything' situation, it is only necessary to set the tax for the practice.

If different types of products are taxed differently, then the taxes can be set at the type level. Note also that the tax percentage can be set to zero. Thus in a situation where everything is taxed at 10% but one type of product is not taxed, then the simplest way to handle this is to set a 10% tax for the practice, and a 0% tax for the tax free product type. Similarly, if one type of product attracts an extra tax, the standard tax can be set for the practice, and the 'extra tax' product type set as having both the standard and the extra tax.

If there are only a few products with different tax rates, then it may be easier to set the taxes for the individual products.

Customers with special tax status can be accomodated since it is possible to set excluded taxes for any customer.

The system does not support location dependent taxes.  That is, it is not possible to have different practice locations with different taxes.

Product Pricing
Product prices can be entered as either inc- or ex-tax amounts. They are displayed on the product screens as either inc- or ex-tax depending on the setting for the Practice.

For each product, a cost price and a markup can be entered, and the system will calculate the tax-included price as follows:

      price = (cost * (1 + markup/100) ) * (1 + tax/100)

The tax rate to use is selected as follows:

  • if taxes are set for the product, use these
  • if the product has a product type, and if that type has taxes set, use these
  • else use the taxes set for the practice

Alternatively, if desired, the tax included price can be entered directly without any cost or markup.

Customer Transactions
When a product is entered on an invoice (or credit-note etc) the system first uses the logic above to decide the applicable taxes.  It then checks if the customer has any tax exclusions, and if so removes these.

The amounts displayed on the invoice (or credit-note etc) screen are always inc-tax irrespective of the Practice inc-/ex-tax setting.

The tax included amount and the tax amount are calculated and stored for each line item. The invoice (or credit-note etc) record holds the total tax-included amount and the total tax amount.

Note that the line-item record also holds the cost and tax-inc amounts of the fixed component of the price, and the quantity and the cost and tax-inc amounts of the unit component. (See also Concepts|Pricing) Hence it possible to construct reports on the achieved sales margins by product, product type, customer, patient breed and so on.

Tills

Complete

The tills represent the actual tills that the practice uses to hold money. They track not only the cash payments that you receive, but all the other types of payment types (such as cheques, credit cards, EFT, etc) and also any refunds. There will normally be one till for each location but there can be more, and multiple locations can share a till.

At suitable intervals, normally at the end of the day, you will want to check what's in the till, and take out what should be deposited in the bank. This is done using the Reporting|Till Balancing screen. Using this you can print a report of what the system thinks is in the till; you can adjust the cash amount if there have been counting errors; and you can 'clear' the till to remove everything that should go to the bank. It is normal to leave a small cash 'float' in the till so that you have money on hand for change (and cash refunds) at the start of the next day.

Note that the system allows you to balance the till without stopping/pausing the business. Hence practices that operate around the clock are supported.

So the process is print, check and if necessary adjust, then clear.

After you have cleared the till, the money can only be deposited in the bank - it is not available for any refunds.  The deposit operation is done using the Reporting|Deposit screen.

The tills are setup by your administrator using Administration|Organisation|Tills.

Users

Complete

Users are set up and maintained via Administration - Users.

Each user has:

These determine what the user can do. See User Requirements for the requirements of particular users.
 

User Groups can also be created via Administration - Groups. These are used only to allow messages to be sent to multiple users and cannot be used to set categories and roles for groups of users.

Login

All users have a Login Name and a Password. Note that:

  1. Only administrators can set passwords
     
  2. There is no block in the system against multiple people logging on to the system at the same time with the same Login Name - that is if you choose to operate with logins that reflect functions (such as reception, pharmacy, and nurse) rather than names, then there will be no problem with multiple people logging on as 'reception' at the same time. However, in this environment there will be less tracking of who did what since a number of different individuals will be using the same login name.

Names and Descriptions

All users have a name and a description. The name can be anything, e.g. GB, George Brown, or Dr George Brown.  However, there is benefit in using short names (like GB), particularly for clinicians, because it makes it easier to quickly enter the clinician. This is particularly easy if each clinician's name starts with a different letter. If you are using short names, then the user's description should be set to the full name, eg Dr George Brown or even Dr George Brown BSc(Vetbiol), BVMS(Hons). This can then be displayed on forms and certificates.

Colours

All users have a 'colour' which determines how their names are highlighted on certain screens - notably the Scheduling, Work List, and Rostering screens.
 

Categories

The system comes with four categories:

  • Administrator
  • Clinician
  • Nurse
  • Reception

Additional categories can be added using Administration - Lookups - User Types. A user can belong to more that one category e.g. a user could be both a Clinician and an Administrator.

Administrators get:

  • an extra 'Administration' entry in the top menu line which allows access to the various administration functions.
  • additional functionality in:
    • Customers - Accounts
      • Check
    • Customers - Information
      • Merge
    • Patients - Information
      • Merge
    • Products - Information
      • Edit
      • Delete
      • Copy
      • Export
      • Import

Only users with Clinician category displayed in the 'Clinician' pull-down list shown on various screens.

Roles

  • Roles define what users can do. A user can have multiple roles.
  • Each role has a list of authorities.
  • Authorities define the operations that may be performed to an archetype or set of archetypes.
    There are typically create, save, and remove authorities defined e.g.:
    • Appointment Create - enables the user to create appointments
    • Appointment Save - enables the user to save (i.e. modify) appointments
    • Appointment Remove - enables the user to delete appointments
  • Additional roles can be defined using Administration - Roles
  • Additional authorities can be define using Administration - Authorities.

User Roles

The following roles are included for web application users:

Role Authorities

Administrator

Perform all operations.

  • All

Base Role

The base role for all web application users.
With the exception of the Administrator and Online Booking roles, all users should be granted this role.

  • Limited set of authorities required  by all users

Account Manager

Manage customer accounts

  • Customer Balance Create
  • Customer Balance Save
  • Customer Charges Remove
  • Customer Order Act Remove
  • Customer Payments Remove
  • Customer Refund Create
  • Customer Refund Remove
  • Customer Refund Save
  • Customer Return Act Remove
  • Till Balance Adjustment Create
  • Till Balance Adjustment Save
  • Till Balance Remove

Account Administrator

Administer customer accounts

 

If a user is granted this role, they should also be granted Account Manager

  • Bank Deposit Remove
  • Customer Account Act Create
  • Customer Account Act Remove
  • Till Balance Adjustment Remove

Clinician

Create and remove Prescriptions

  • Patient Prescription Create
  • Patient Prescription Remove

Insurance Claims

Create and remove Insurance Claims

  • Patient Insurance Claim Create
  • Patient Insurance Claim Remove
  • Patient Insurance Claim Save
  • Patient Insurance Claim Attachment Create
  • Patient Insurance Claim Attachment Remove
  • Patient Insurance Claim Attachment Save
  • Patient Insurance Claim Condition Create
  • Patient Insurance Claim Condition Remove
  • Patient Insurance Claim Condition Save

Practice Manager

Manage all customer and patient information

  • Customer All Acts Create
  • Customer All Acts Remove
  • Customer All Acts Save
  • Patient All Acts Create
  • Patient All Acts Remove
  • Patient All Acts Save

Schedule Manager

Create and update Calendar Blocks and Shifts
 

  • Calendar Block Create
  • Calendar Block Save
  • Shift Create
  • Shift Save

Schedule Administrator

Remove Calendar Blocks and Shifts

 

If a user is granted this role, they should also be granted Schedule Manager.

  • Calendar Block Remove
  • Shift Remove

Stock Manager

Manage Product Batches, Adjustments, Transfers, Orders and Deliveries, create and update Suppliers.

  • Product Batches Create
  • Product Batches Remove
  • Product Batches Save
  • Product Doses Save
  • Product Prices Save
  • Stock Transaction Create
  • Stock Transaction Remove
  • Stock Transaction Save
  • Supplier All Acts Create
  • Supplier All Acts Save
  • Suppliers Create
  • Suppliers Save

Stock Administrator

Manage Products, remove Supplier Orders and Deliveries, remove Suppliers
 

 

If a user is granted this role, they should also be granted Stock Manager.

  • Product Doses Create
  • Product Doses Remove
  • Product Prices Create
  • Product Prices Remove
  • Products Create
  • Products Remove
  • Supplier All Acts Remove
  • Suppliers Remove

System Roles

The following roles are defined for system users, such as plugins or web services.

Role Authorities

Online Booking

Make appointments

 

This is a restricted role for users created to enable external services to make online bookings (e.g. PetYeti, Vetstoria).
For the purposes of online booking services, only this role is required.

  • Authority to Create Appointment
  • Authority to Save Appointment
  • Authority to Create Act Relationships
  • Authority to Save Act Relationships
  • Authority to Create Participations
  • Authority to Save Participations

Levels

Each user has a 'level' from 0 to 9. Reports also have a level. A user cannot run a report with a level higher than their own.

 

User Requirements

Different sorts of users have different Category and Role requirements.
 

User Categories Roles
Account Administrators  
  • Account Administrator
  • Account Manager
  • Base Role
Account Managers  
  • Account Manager
  • Base Role
Administrators Administrator
  • Administrator
Clinicians Clinician
  • Clinician
  • Insurance Claims
  • Base Role
Nurses Nurse
  • Insurance Claims
  • Base Role
Practice Managers  
  • Practice Manager
  • Base Role
Receptionists Reception
  • Base Role
Schedule Administrators  
  • Schedule Administrator
  • Schedule Manager
  • Base Role
Schedule Managers  
  • Schedule Manager
  • Base Role
Stock Administrators  
  • Stock Administrator
  • Stock Manager
  • Base Role
Stock Managers  
  • Stock Manager
  • Base Role

 

 

 

 

Visits

Complete

A 'visit' is what it sounds like - a meeting between the vet and the patient. The visit entry in the medical records acts as a heading to group together all the items associated with the visit.  Thus under a visit one can have notes, documents, problems, medication and charged items.

The Medical Records Summary is displayed in visit order with the latest visit at the top. Within the visit itself, the items can be displayed in either ascending or descending date/time order.

There is no concept of 'finalising' a visit so that it cannot have entries added to it, or the existing entries deleted or edited. However, you cannot delete or add charges to a past visit.

The visit is normally created when you check-in the patient - but see also below. You then use the visit editor to add items to the visit. See also Schedules, Work Lists and Workflow.

The 'visit' will normally be a real vet-to-pet meeting, but could also be a phone call to the owner (and thus on the Medical Records screen there is an 'Add Visit & Note' button to allow this call to be easily recorded).

Visit Creation

Visits are created in the patient's medical record:

  • as part of the appointment Check-In process
  • if you create a task on the Work Flow|Work Lists screen, and then use the Consult button to open the Visit Editor
  • if you use Customers|Payments to create or edit an invoice and the line item specifies the patient (and if the invoice involves multiple patients, then a visit will be generated for each one)
  • if you use the 'Add Visit & Note' button on the medical records screen
  • if you use the New button on the medical records screen to add a new visit

In the first three cases, and existing visit may be added to rather than creating a new one.  This occurs in the following circumstances (note that 'event date' means the appointment or task date or the date of the invoice line item):

  • if an IN_PROGRESS visit exists and it is less than a week old, it will be added to
  • If a COMPLETED visit exists starting on the same date as the event, it will be added to
  • If a COMPLETED visit exists with both the start and and end dates set, and the event date is between visit start and end dates, it will be added to
  • If a COMPLETED visit exists starting on a prior day but has no end date set, then it won't be used and a new visit will be created

Notes:

  1. If the visit is being created as a result of checking-in an appointment, then the visit reason will be set to the appointment reason, otherwise the reason will not be set and the medical records will show 'No Reason'.
  2. When a visit is completed as a result of the check-out process, the end date of the visit is not set automatically. The end date will be set if you edit the visit record manually and either change the visit status from In-Progress to Completed or set the Completed Date.

Workspaces

Complete

As indicated in Introduction|Screen Layout, the system provides a number of different (Customers, Patients, Suppliers, ...) 'workspaces'.

These are so called because the system preserves their contents as you switch between them.  Thus if you call up a customer in the Customer workspace, then go to say the Workflow workspace (by clicking on Workflow in the top menu line, or typing Alt-W), and then go back to Customers, your customer display will be unaltered.

Similar 'remember what was displayed' behaviour occurs within a workspace. For example, in the Workflow workspace there are four topics: Scheduling, Work Lists, Messaging, and Investigations. The displays for each of these is remembered separately so that you can switch between the screens without losing anything.

There is one problem with this 'remember what was displayed' behaviour - what happens if something has changed - ie another user entered a new appointment.  When you return to the Workflow|Scheduling screen, it will be as you left it.  In order to get an up-to-date view, you need to click the Find button or press the Alt-F key.

Customers

The Customer workspace is used to handle customers.

Information

Complete

This screen displays information about the current customer - or if there is no current customer, a Select button allowing you to select a customer, and a New button to create one. It is also the first screen displayed after you log in - if you are new to OpenVPMS you might want to check out Introduction and Concepts.

With a current customer, the screen is as follows:

The screen areas are as follows:

(1) the information panel - the fields here are as follows:
name - this provides a link back to this customer information screen, ie pressing it on the Account screen, brings you back here
ID - the customer's ID number
phone - the phone number displayed here is the customer's preferred one. If the name of the phone number contact is other than the default 'Phone Number' then the name will also be shown - eg 9876 1234 (Home).
email - the customer's email address, clicking this brings up the Send Email window
Balance - the current account balance - ie what the customer owes us
Overdue - the part of the balance that is overdue, ie is overdue for payment
Current Amount - the part of the balance that is due to activity in the current accounting period
Unbilled - the total of any transactions that have not yet been finalised
Projected Amount - the sum of Balance+Unbilled - ie what the balance will be after the unbilled transactions are finalised
Alerts - shows any current alerts for the customer - you can click on the alert to display its details, or if there are more than 4 and 'More...' is displayed, press the View All button to display all the alerts
SMS Button - this will be displayed if the customer has an SMS enabled phone number - press it to send an SMS message

(2) the select area - this shows the customers name and address (which will be the billing address if there is one, else the preferred if is there is one, else the first found) and phone number (which will be the Home number if one has been recorded), and two buttons:
Select - pressing this brings up the Select screen to let you select another customer
Select Again - pressing this brings up the same screen but with you previous selection settings. This allows yoiu to quickly select another customer from the list when the one you chose previously was not the correct one, ie it was the wrong Jennifer Chan

(3) the header area - for the descriptions of these fields, click here

(4) the tabs area - for the descriptions of the fields in the Account Type and Appointments tabs, see below, for the others, click here

(5) the bottom buttons - these are as follows:
New - create a new customer
Edit - edit the current customer - note that you will be editing the compete customer record and all the tab items
Delete - delete the current customer - a confirmation window will appear
Merge - merge this customer with another - a select screen will appear to let you select the customer to be merged in. After you have selected the customer, a confirmation window will be displayed. Note that header information (name, title, etc) of the current customer is retained, but the tab items (patients, contacts, etc) are simply combined, ie there will be two addresses, two phone, numbers, etc etc, and you will need to edit the resulting customer record to delete the unwanted parts.
Note that the Merge button will not be displayed unless the user is a member of the Administrator category - see Concepts|Users.

 

Account Type tab
This shows the Account Type and its parameters as follows:


For an expanation of the fields see Administration|Lookups|Customer Account Type

 

Appointments tab
This tab is used to display the customers appointments as follows:

You can see that this operates as a select screen. By default the Status is set to 'Pending' which will thus show just the customer's current and future appointments. However, you can select either All or one of the other Appointment statuses to display historical data.

If you click on the patient name that will take you to the patient's Medical Records screen. If you click elsewhere on the line this will take you to the Workflow|Scheduling screen.

Create/Edit

Complete

This is the screen used to create and edit the customer record.

Note that if you are adding a new customer & patient, the easiest way is to use the New button on the Customers|Information screen, fill in the customer details, and before pressing OK to complete the customer add, click the Add button on the Patients tab, and then click the binoculars icon following the Patient name field - this will give you the Patient Select screen on which there is a New button so that you can add the new patient for this new customer.

The fields in the header section are as follows:
Id - the customer's ID
Last Name - the customer's last name - note that you need to provide this even if the customer is a company
Title - the customer's title - select from those allowed - these are controlled by Administration|Lookups|Person Title
Initials - the customer's initials -these are best entered as 'J T' or 'J.T.' rather that 'JT' - the last will be propercased to 'Jt'.
First Name - the customer's given name(s)
Company Name - enter the company name if applicable
Referred By - if applicable, select the appropriate value from the list - these are controlled by Administration|Lookups|Customer Referral
Preferred Vet - if applicable, select the appropriate value from the list - these are controlled by Administration|Lookups|Customer Vet. Note that this is a documentation field - it does not set the default clinician for this customer.
Insurance Plan - if applicable, select the appropriate value from the list- these are controlled by Administration|Lookups|Customer Insurance. As of OpenVPMS 2.0, insurance should be managed per patient, via Patient|Medical Records|Insurance.
Travel - if applicable, enter appropriate information such as 'charge 100km for visit'
Active - untick this to deactivate the customer
Account Type - select the account type from the pull-down list. Initially the system has the following Account Types available: Normal (the default), Valued Customer, and Bad Debt.  More can be added using the Administration|Lookups|Customer Account Type.
The Account Type can be used for reporting purposes (eg list all customer of type xxx), but more importantly it allows discounts to be applied (eg all valued customers get a 15% discount), and it allows customer alerts to be displayed (eg all Bad Debtor customers show with a red alert).
Practice Location - used to indicate the preferred practice of a customer, in multi-location practices. This is used as follows:

  • in various reports to select a set of customers
  • to select those customers for whom statements and reminders  are processed
  • potentially to change the content in documents as a function of the customer's preferred practice location (this requires tailoring of the varios document templates)

 

See also Local Procedures.

The 6 tabs Patients, Contacts, Identities, Discounts, Tax Exemptions, and Categories are documented below.

Note that in some cases, the tabs have a Hide Inactive xxxxx checkbox. This is present when the item being attached to the customer (ie the patient-owner, the patient-location, or the discount) can be deactivated (either by unsetting its Active flag, or if its To Date is in the past). In this case the item will remain attached to the customer, but the item will not be displayed and the customer will act as though the item was not attached. You can have these inactive items displayed by unchecking the Hide Inactive xxxxx box.

Patients tab
This tab is used to add/delete/edit a) 'Patient Owner' records and b) 'Patient Location' records.

Patient Owner - A patient can have multiple owners either at the same time (because the ownership is shared) or sequentially (because the patient passes from one owner to another).

The screen is as follows:

The fields are:
Patient - the name of the patient - if you use the binoculars to search you will be able (by ticking the All Patients option) to select a patient who has another owner and thus set up multiple ownership
From Date - the date from which the ownership started
To Date - the date on which it ended

Notes:

  1. If you do want to change the ownership of a patient, the easiest was to do it is to edit the patient record (rather than the customer record) since with the patient record, adding another owner automatically terminates the previous ownership.
  2. if you are simply adding patients to a customer, the easiest way to do this is to first call up the Customer|Information screen for the customer, and the click 'Patients' entry in the top menu line to switch to the Patients workspace and then simply press the New button to add the new patient to the current customer.

 

Patient Location - patient locations cope with the situation where the patient is owned by Dr Smith but lives at the Happy Horses stables. To cope with this, we have both Dr Smith and Happy Horses as customers. First we set up Dr Smith and his horse Ballantyne as normal. Then we set up Happy Horses as a customer, and add Ballantyne as a Patient Location record.

For the vast majority of cases, where the patients live with their owners, we don't need Patient Location Records.

The screen is as follows:


The fields are:
Patient - the name of the patient - note that the name search is done across all owners so that 'bal' will find Ballantyne
From Date - the date from which the location started
To Date - the date on which it ended

Note that given the above set up, if we go look at Ballantyne's information we see:

Note also that since a patient can only be in one place at a time, if you simply add a new Patient Location record to the patient, then the previous location will be automatically terminated.

Contacts tab
The Contacts tab (because contacts are used for customers, suppliers, etc) is documented in Concepts|Contacts.

Note that for good reminder control you should have one and only one contact (phone, email, or location) set with the purpose 'Reminder'. If you have multiple contacts with the purpose Reminder, then the first found will be used by the Reminder system.  Similarly if you have no contacts set with the purpose Reminder, then the first contact found will be used for notifying reminders.

Identities tab
The Identities tab is used to set the customer's identities. Note that contrast with patients and products, customers only have one type of identity 'Code', however the customer can have multiple Code identities.

 The fields are:
Code - the code - this can be anything appropriate
Description - an optional description of what the code represents (in the above case 54678 was the client number in the RxWorks system that this data was converted from)

Discounts tab
This tab is used to set the discounts that apply to the customer - see Concepts|Discounts for background.

The fields are:
Discount - the discount - note that this can either be a discount, or a discount group
From Date - the date from which the discount applies
To Date - the date on which the discount ends

Taxes Exemptions tab
This is used to exempt the customer from taxes. See Concepts|Taxes for backround information.

Use the arrows to move the selected item from the Available list to the Selected list and vice versa.

Categories tab
This is used to set the categories (zero, one, or more) to which the customer belongs. See Concepts|Categories for background information.

 

Confirm Delete

Complete

When you press the Delete button on the Customers|Information screen, a confirmation window will appear.

If the customer is not in use and can be deleted, the window will simply ask you to confirm the delete. Press OK to confirm or Cancel to abort.

If it cannot be deleted because it is in use, the text will be "xxxx has relationships and cannot be deleted. Do you want to deactivate it instead?"(where xxx is the name of the customer you are trying to delete). Pressing OK will unset its Active flag, Cancel will abort.

Confirm Merge

Complete

After you have pressed the Merge button on the Customers|Information screen and selected the customer to merge, a confirmation window like the following will appear.

Press OK to merge the customers, or Cancel to abort.

Customer Alerts

Complete

This screen is displayed if you press the View All button on the customer information panel to display the customer's current alerts.

The left hand side of the window displays the alert names.
Selecting an alert displays its details on the right.

For an explanation of the alert fields, see Create/Edit Alerts.

Click:

  • Close to close the window
  • Edit to edit the selected alert

Documents

Complete

This screen displays the documents for the current customer - or if there is no current customer, a Select button allowing you to select a customer.

This screen shows the details of the customer's documents. As you can see below, there are three different types: Attachments, Letters  and Forms. The first two support 'versions', ie previous revisions of the document. See Concepts|Documents for background.

The top half of this screen functions like a standard select screen. As well as by date, you can select by:
Type - this can be set to All (ie all document types), or Attachment, Form or Letter
Status - this can be set to All, In Progress, Completed, or Finalised

The table shows the documents that match the selection criteria. The column headings are self explanatory. Clicking on the entry in the Document column will cause the document to be downloaded and displayed.  Note that for Letters the Document column shows two icons like . If you click on the right-hand one, the pdf file containing the letter will be downloaded and displayed. If you click on the left-hand one (or the name of the document) then the word processing document will be downloaded and you can open it in your word processor and save it and then edit it. (You need to save it as it is opened read-only.) After editing the file, you can then use the Edit button to edit the letter and upload the revised file.

The bottom part of the screen shows the details of the selected document.

The buttons are:
New - create a new document - a window will open allowing you to select the type
Edit - edit the selected document record (not the document itself - though see above). If the document has status Finalised you will not be able to edit the record.
Delete - delete the selected document - a confirmation window will be displayed. If the document has status Finalised you will not be able to delete it.
Print - print or preview the selected document
Mail - email the selected document
Refresh - this button only appears when you have a non-finalised letter selected. Pressing it will (if the letter was generated from a template) refresh the letter by regenerating it from the template. This is useful if you have modified the template. A confirm window will be displayed.
External Edit - this button appears if the selected document can be edited in OpenOffice. Clicking this will launch the OpenOffice editor to edit the document directly, avoiding the need to download, edit and re-upload the document.

Create/Edit Attachment

Complete

This is the screen used to create or edit an attachment document in the customer's Documents list. See Concepts|Documents for background.

The fields are as follows:
Start Time - the date on which the entry was created - defaults to today
Description - any pertinent description
Status - this can be In Progress, Completed, or Finalised.  In Progress implies that you are still working on this; Completed implies that you have finished - but the entry can still be editied; and Finalised means that it is really complete and can no longer be edited.
Printed - this box will be checked when the form has been printed
Attachment - press the Select button to attach the file - after the file is attached its name (notes.txt in this case) is shown here.

The Versions tab shows the previous versions. Note that you can use the Add button to add another, but you can also use the Select button.  If you use the Select button to attach another file, then the previous 'top' version will just be pushed onto the version list.

Create/Edit Form

Complete

This is the screen used to create or edit a form document in the customer's Documents list. See Concepts|Documents for background.

The fields are as follows:
Start Time - the date on which the entry was created - defaults to today
Description - any pertinent description
Status - this can be In Progress, Completed, or Finalised.  In Progress implies that you are still working on this; Completed implies that you have finished - but the entry can still be editied; and Finalised means that it is really complete and can no longer be edited.
Printed - this box will be checked when the form has been printed
Form - select the form to print - these are the document templates that are of Type 'Customer Form'
 

Create/Edit Letter

Complete

This is the screen used to create or edit a letter document in the customer's Documents records. See Concepts|Documents for background. As discussed there, you can either generate a letter from a template, or upload any file.

First let's look at the screen shot for a new letter:

The fields are as follows:
Start Time - the date on which the entry was created - defaults to today
Description - any pertinent description
Status - this can be In Progress, Completed, or Finalised.  In Progress implies that you are still working on this; Completed implies that you have finished - but the entry can still be editied; and Finalised means that it is really complete and can no longer be edited.
Printed - this box will be checked when the letter has been printed
Template - if you want to generate the letter from a template, enter the template here - these are the document templates that are of Type 'Customer Letter' - the generated document will be an editable word processing file
Document - if you want to simply upload a file as a letter, press the Select button. A document select window will open allowing you to select the required file.  If you upload a word processing file (rather than say a pdf or scanned image of a letter) then you will be able to edit it if needed.

 

Now the edit screen. The senario is as follows: you created an editable letter as above.  Then you decided that you needed to modify it, so on the Customers|Documents screen, you selected the letter and then clicked on the actual letter to download it and open it in your word processor. You then saved a copy (as say Survey Letter-2), edited in the required changes and then saved it.

On the Customers|Documents screen you now press the Edit button to get the Edit Letter screen. You then press the Document Select button - this will open a browse window to allow you to select your 'Survey Letter-2' and upload it. The screen will then appear as below. The initial version has been saved as the previous version, and your new one as the new current version.

As intimated above, the Versions tab shows the previous versions. Note that you can use the Add button to add another, but you can also use the Select button.  If you use the Select button to attach another file, then the previous 'top' version will just be pushed onto the version list.

Parameters

If a template containing parameters is selected (i.e. Fill-In fields in Microsoft Word, or Input Fields in OpenOffice Writer), a window will be displayed prompting for the values of those parameters. On OK, these will be merged with the document.

Confirm Delete

Complete

When you press the Delete button on the Customers|Documents screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

Confirm New

Complete

This window allows you to select the type of customer document to be created. Select the required one and press OK, else Cancel to abort.

Confirm Refresh

Complete

If you press the Refresh button on the Customer|Documents screen, then the window below will be displayed. Clicking OK will regenerate the letter from the template.  If you leave the 'Version current document' box checked, then the previous version of the letter will be saved as the previous version, otherwise it will not be.
Pressing the Cancel button will abort the operation.

Estimates

Complete

This screen displays the estimates for the current customer - or if there is no current customer, a Select button is allowing you to select a customer. See Concepts|Estimates for background.

 

The top half of this screen functions like a standard select screen. As well as by date, you can select by:
Status - this can be set to All, Cancelled, Completed, Finalised, In Progress or Invoiced

The item area displays the matching estimates. The column headers are self explanatory. Note that the Description column is always blank. You can click on any column header to sort by that column.

The bottom half of the screen displays the selected estimate, its line items, and the details of the selected line item.

Click here if you need information on the Items fields or Customer Notes tab.

The buttons are as follows:

New - create a new estimate
Edit - edit the selected estimate
Delete - delete the selected estimate - a confirmation window will appear
Finalise - change the status of the selected estimate to Finalised - a confirmation window will appear. Finalising the estimate locks it from any further changes. If you confirm the Finalise, then a print window will open allowing you to print or email the estimate.
Print - print the selected estimate
Mail - email the selected estimate
Copy - copy this estimate to create another one
Invoice - generate an invoice from this estimate - the values used to create the invoice will be the 'high' estimate values.
To ensure that the that the correct clinician is recorded when an estimate is invoiced, the clinician is prompted for unless:

Create/Edit Estimate

Complete

This is the window used to create and edit estimates.

The fields in the header are as follows:
Date - the date of the estimate - defaults to today
Title - enter a short useful description
Expiry Date - the date until which the estimate is valid
Notes - any pertinent notes - this will appear on the printed estimate
Low Total, High Total - the low and high total amounts for the estimate
Printed - this box will be checked after the estimate has been printed
Status - can be set to Cancelled, Completed, Finalised, In Progress or Invoiced. The initial setting is Completed. See the table below.
Clinician - set to the appropriate person

The fields in the Items tab are as follows:
Patient - this is a mandatory field
Product - this is also mandatory
Low & High Qty - the low and high quantities of the product. If the product has doses for the patient weight and species, these will be automatically calculated and highlighted in blue until changed, or the editor closed
Fixed Price - the product's fixed price
Low & High Unit Price - the low and high unit prices
Low & High Discount - the low and high discount amounts
Service Ratio - displayed if there is a service ratio for the product's type at the current practice Location. If the service ratio has been applied, the check box will be ticked. Untick the check box to remove the service ratio. See Service Ratios for more details.
Print - this box is displayed if an item can be suppressed in the printed Estimate. This only applies to items with a zero Low and High Total
Low & High Total
- these show the low and high totals

The Show Templates and Show Product Types check boxes add columns to display the Product Templates and Product Types of associated products, if any. 

For details of the Customer Notes tab, see here.

Status Meanings

Status Meaning Set by
Cancelled has been cancelled manually
Completed no further changes expected initial default
Finalised no further changes allowed press Finalise
In Progress still being worked on manually
Invoiced an invoice has been created from this press Invoice

Confirm Delete

Complete

When you press the Delete button on the Customers|Estimates screen, a confirmation window will appear.

Press OK to confirm or Cancel to abort.

Confirm Finalise

Complete

When you press the Finalise button on the Customers|Estimates screen, a confirmation window will appear.

Press OK to confirm or Cancel to abort.

Confirm Invoice

Complete

When you press the Invoice button on the Customers|Estimates screen, a confirmation window will appear.

Press OK to confirm or Cancel to abort.

Charges

Complete

This screen displays the charges for the current customer - or if there is no current customer, a Select button allowing you to select a customer.

Note that 'charges' are the invoices (or credits or counter-sales) that are currently active, ie not yet Finalised. If you need to look at previously Finalised invoices etc, then you use the Customer|Account screen.

This screen functions like a standard select screen. As well as by date, you can select by:
Type - this can be set to All, Counter Sale, Credit, or Invoice
Status - this can be set to All, Completed, In Progress or On Hold

The item area displays the matching transactions. The column headers are self explanatory. Note that the Description column is always blank. You can click on any column header to sort by that column.

The Items tab displays the line items of the selected transaction, and the details for the selected line item. You can click on any of the column headers except Discount to sort the line items by that column. Click here if you need information on the item fields.

The buttons are as follows:

New - create a new Invoice, Credit or Counter Sale - a confirmation window will appear
Edit - edit the selected transaction
Delete - delete the selected transaction - a confirmation window will appear
Finalise - change the status of the selected transaction to Finalised - a confirmation window will appear. Finalising the transaction locks it from any further changes and moves it the the Customers|Account area
Print - print the selected transaction
Mail - email the selected transaction

Counter Sale

Complete

The screen below is that for a new counter sale, but the same screen is used to edit counter sales.

The screen is a subset of the customer invoice screen and you should consult that for the field  details.

Credit

Complete

This screen is used to create and edit customer credit notes. It works in exactly the same way as the invoice screen with the following exceptions:

  • the Credit check box is always checked
  • the Patient field is optional, not mandatory
  • the item price cannot be negative

Invoice

Complete

This screen is used to create and edit customer invoices.

As well as the standard Apply, OK and Cancel buttons, there are two others:
Completed - pressing this is the same as pressing OK but it also changes the status to 'Completed'
In Progress - pressing this is the same as pressing OK but also setting the status to 'In Progress'

Note that you can still edit and add items to a 'Completed' invoice. In fact the only difference between the two states is that Completed invoices can be automatically finalised by the Reporting|Debtors|End Period processing.

The screen consists of a header section, an item area, a dispensing tab, an investigations tab, and an optional reminders tab.

The header area contains the following fields:
Date - the date on which the invoice was created
Amount - the total (tax-included) amount of the invoice
Tax - the total tax amount
Status - this can be one of In Progress, On Hold, Completed, and Finalised. Note that the normal way to complete or finalise an invoice is by using the Complete and Finalise buttons - but you can can just change the status here.
Notes - any appropriate not text - this will appear on the invoice when it is printed
Reference - any appropriate reference code
Credit - this box will be checked if this is actually a credit - it is never checked for an invoice
Printed - this box indicates whether or not the invoice has been printed
Clinician - the appropriate clinician
Location - this displays the location under which the invoice was created

In the line item area, use the Add button to add a new line item, Delete to delete one.

The line item area table column headings are documented below. Note that all columns except Discount are sortable - for example clicking on the Total column will sort by the line item total amount. Click again to reverse the order.

Selcting a line item (normally by clicking it but also by using the Next and Previous buttons) displays the details of that line item. The are as follows:

The Show Batches, Show Templates and Show Product Types check boxes add columns to display the Batches, Product Templates and Product Types of associated products, if any. If both Show Templates and Show Product Types are displayed, then selecting the Template column will sort on Template, then Product Type, then Date. This is the default behaviour if both columns are displayed. If only one of these two is displayed, then the default sort will be the column and then Date.

Date - the date appropriate to the line item - normally this will be the current date but you could set a earlier date indicating the date of the sale or on which the service was performed
Patient - the name of the patient (this is a mandatory field). The button displays the patient summary.
Product - the product - you can use a barcode or the product ID here. If the selected product:

  • is a template, it will be expanded to generate an invoice item for each included product
  • specifies a Patient Identity, a corresponding Microchip, Pet or Rabies Tag will be displayed and added to the patient

Quantity - the quantity of the item. If the product has doses for the patient weight and species, this will be automatically calculated and highlighted in blue until the quantity is changed, or the editor closed.
You can enter 1, 1.2, 1.23, 1.234 etc but it will be reformatted to show two digits after the decimal point
On Hand - displays the stock on hand for the product. If the selected product has no stock, or the entered Quantity exceeds the available stock, the On Hand quantity will be highlighted red.
If a template is expanded with one or more products that have no stock, or exceed the available stock,  a warning message will be displayed.
Fixed Price - this will be set from the fixed price for the product, but you can overide this. If the product has multiple fixed prices (for say Simple, Standard, Complicated) there will be a pull-down so you can select the appropriate one. See also Concepts|Pricing.
Unit Price - this will be set from the unit price for the product, but you can override this
Discount - this will be set from the applicable discounts but you can override this
Service Ratio - displayed if there is a service ratio for the product's type at the invoice Location. If the service ratio has been applied, the check box will be ticked. Untick the check box to remove the service ratio. See Service Ratios for more details.
Print - this box is displayed if an item can be suppressed in the printed Invoice. This only applies to items with a zero Total.
Tax - the line item tax amount
Total - the line item amount (including tax)

Below is the Customer Notes tab. This is used to add/delete and display patient-specific notes.

The fields are as follows:
Patient - the patient name - this is a mandatory field
Note - the note text
Clinician - the clinician - this is optional

 

Below is the Dispensing tab. This is present for any medication products that have a dispensing label.

The fields are as follows:
Date - the date the invoice item was created
Expiry Date - if a Batch has been selected, this represents the Batch expiry date. If not, you can enter the expiry date of the medication. Note that you can enter a relative date (e.g. 2m for 2 months from today).
Quantity - the quantity. Identical to the invoiced quantity. If the quantity was automatically calculated from a product dose, it will be highlighted in blue, until the quantity is changed, or the editor closed.
Label - the dispensing label - you can use the Print Label button to print this
Clinician - the clinician
Batch - the product batch. If selected, this determines the Expiry Date. The Batch dropdown displays all active batches of the medication at the current stock location. The batch with the earliest expiry date is shown first.

Below is the Investigations tab. This is always shown so that you can manually initiate an investigation. Normally investigations are linked to a product, so that when you enter the invoice line item 'XYZ Test' the associated investigation is automatically started. Investigations are normally managed (and initiated) via the Patients|Medical Records screen. See Patients|Medical Records|Investigation for details on the working of this tab.

Below is the Reminders tab. This is shown if the product being charged has reminders.

Invoice Orders and Returns

Complete

The Invoice Orders and Returns window allows orders and returns to be selected for invoicing.

Table

The table displays the customer orders and returns, and their corresponding line items. The columns are as follows:

Tick If selected, indicates to invoice the order/return
Type The type of the order/return
Status The order/return status
Date The date that the order/return was created
Clinician The clinician responsible for the order/return, if any
Patient The order/return patient
Product The order/return product
Quantity The order/return quantity
Invoice Quantity The quantity of the original invoice item, if the order/return is related to an existing invoice.

 

Actions

The following actions may be performed:

OK Invoices all rows selected with a tick.
Edit Edits the selected order or return. Double clicking a row also edits it.
Cancel Closes the window without invoicing any orders or returns.

 

Confirm Delete

Complete

When you press the Delete button on the Customers|Charges screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

Confirm Finalise

Complete

When you press the Finalise button on the Customers|Charges screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

Confirm New

Complete

This window allows you to select the type of transaction to be created. Select the required one and press OK, else Cancel to abort. Note that since Invoice is the default selection, and OK the default button, you can simply press the Enter key to create a new invoice.

Confirm Payment

Complete

This screen is displayed after you finalise an invoice.  If the account is to be paid now, click Yes, if not click No.  Clicking Cancel aborts the operation - the invoice will stay as finalised, but if you were doing a Check-Out, the check-ot operation will be aborted.

Payments

Complete

This screen displays the payments for the current customer - or if there is no current customer, a Select button allowing you to select a customer.

Note that 'payments' are the payments (or refunds) that are currently currently active, ie not yet Finalised. If you need to look at previously Finalised payments etc, then you use the Customer|Account screen.

It is unusual for this screen to display any transactions because both Payments and Refunds are by default created with status Finalised and thus are moved immediately to the Account screen.

This screen functions like a standard select screen. As well as by date, you can select by:
Type - this can be set to All, Payment or Refund

The item area displays the matching transactions. The column headers are self explanatory. Note that the Description column is always blank. You can click on any column header to sort by that column.

The Items tab displays the line items of the selected transaction, and the details for the selected line item. You can click on any of the column headers except Discount to sort the line items by that column. If you need information on the item fields click here for payments and here for refunds.

The buttons are as follows:

New - create a new Payment or Refund - a confirmation window will appear
Edit - edit the selected transaction
Delete - delete the selected transaction - a confirmation window will appear
Finalise - change the status of the selected transaction to Finalised - a confirmation window will appear. Finalising the transaction locks it from any further changes and moves it the the Customers|Account area
Print - print the selected transaction
Mail - mail the selected transaction

Create/Edit Payment

Complete

This is the screen used to create and edit customer payments.

The header fields are as follows:
Current Invoice - the amount of the current invoice, if any
Overdue - the customer's current overdue balance
Date - the date on which the payment was created
Amount - the amount of the payment - this is the sum of the line item amounts
Printed - this checkbox will be checked when the payment is printed
Status - is initially set to Finalised, and can also be set to In Progress or On Hold
Previous Balance - the customers balance at the end of the last accounting cycle
Total Balance - the total balance owed by the customer
Notes - any relevant notes
Reference - any appropriate reference number/code
Till - the till into which the money is to be paid
Author - the user that created the payment
Location - the practice location where the payment was created

The Items tab allows you to add, delete, view and edit the item items. The pull-down allows you to select the payment type to be one of Cash, Cheque, Credit Card, EFT, Other, or Discount. Note that the last is a 'negative' payment - you can use this payment type to include a discount for the customer.

The table shows the line items - normally there will be only one.

The item detail area changes depend on the payment type. The picture above shows EFT. Its fields are:
Amount - this will default to the amount owed
Cash Out - enter any cash out amount

 

For Cash it is as follows:

The fields are as follows:
Amount - this will default to the amount owed
Rounded Amount - this is the rounded equivalent of Amount using the minimum cash denomination and rounding mode set for the currency - see Administration|Lookups|Currency
Tendered - the amount tendered
Change - this will be Tendered less Rounded Amount

 

For Cheque it is as follows:

The fields are as follows:
Amount - this will default to the amount owed
Drawer - the name of the drawer of the cheque
Branch - something that identifies the branch of the bank. For Australian usage this is the BSB (Bank State Branch) number.
Bank - select the bank using the pull-down. The values allowed are set via Administration|Lookups|Bank.

 

For Credit Card it is as follows:

The fields are as follows:
Amount - this will default to the amount owed
Credit Card - select the credit card using the pull-down. The values allowed are set via Administration|Lookups|Credit Card.

 

For Other it is as follows:

The fields are as follows:
Amount - this will default to the amount owed
Payment Type - select the payment type using the pull-down. The values allowed are set via Administration|Lookups|Custom Payment Type.
 

For Discount it is as follows:

The fields are as follows:
Amount - the discount amount being given

Payment Allocation

If a payment covers charges being claimed in a current gap Insurance Claim, an Allocate Payment window will be displayed.
This allows the user to allocate the payment to different charges; if a gap insurance claim is paid by the customer, they cannot claim the benefit amount.

The window displays:

  • the allocation order
The order in which the payment will be allocated to charges
  • Id
The charge identifier
  • Type
The charge type
  • Date
The charge date
  • Amount
The total charge amount. An insurance claim may claim part of this total.
  • Paid
The amount of the charge that has been paid already.
  • To Pay
The amount of the charge still to pay
  • Allocation
How much of the payment is being allocated to the charge
  • Notes
Any charge notes
  • Clinician
The clinician responsible for the charge, if any.
  • Claimed
Ticked if part or all of the charge is being claimed.

The payment will be allocated to the first charge. If there any remaining funds, it will be allocated to the second, and so on.
The allocation order can be changed by selecting one of the charges, and using the Move Up or Move Down buttons.

Any Insurance Claim that claims the selected charge will be summarised beneath the allocation table.

If OK is clicked, and the payment is:

  • allocated to one or more charges being claimed, a Pay Claim window will be displayed.
  • not allocated to any claimed charges, the payment window will close

Pay Claim

The Pay Claim window is displayed if a payment is allocated to a charge being claimed in a current gap Insurance Claim.

The window displays:

  • Patient
The patient that the claim is for
  • Insurer
The insurer that is handling the claim
  • Claim Total
The total claim amount
  • Agreed Benefit
The amount the insurer has agreed to pay
  • Gap
The total amount the customer must pay
  • Paid
The amount the customer has already paid
  • Current Payment
The current allocation towards paying the claim

Clicking OK confirms payment towards the claim.
Clicking Cancel returns to the Allocate Payment window.

Create/Edit Refund

Complete

This is the screen used to create and edit customer refunds.

The header fields are as follows:
Current Invoice - the amount of the current invoice (in the above screen shot, there isn't one)
Overdue - the customer's current overdue balance
Date - the date on which the payment was created
Amount - the amount of the payment - this is the sum of the line item amounts
Printed - this checkbox will be checked when the payment is printed
Status - is initially set to Finalised, and can also be set to In Progress or On Hold
Previous Balance - the customers balance at the end of the last accounting cycle
Total Balance - the total balance owed by the customer
Notes - any relevant notes
Reference - any appropriate reference number/code
Till - the till into which the money is to be paid

The Items tab allows you to add, delete, view and edit the item items. The pull-down allows you to select the payment type to be one of Cash, Cheque, Credit Card, or EFT.

The table shows the line items - normally there will be only one.

The item detail area changes depend on the payment type. The picture above shows EFT. Its fields are:
Amount - this will default to the amount owed to the customer or 0.00 if nothing is owing
 

 

For Cash it is as follows:

The fields are as follows:
Amount - this will default to the amount owed to the customer or 0.00 if nothing is owing
Rounded Amount - this is the rounded equivalent of Amount using the minimum cash denomination and rounding mode set for the currency - see Administration|Lookups|Currency
 

For Cheque it is as follows:

The fields are as follows:
Amount - this will default to the amount owed to the customer or 0.00 if nothing is owing
Drawer - the name of the drawer of the cheque
Branch - something that identifies the branch of the bank. For Australian usage this is the BSB (Bank State Branch) number.
Bank - select the bank using the pull-down. The values allowed are set via Administration|Lookups|Bank.

For Credit Card it is as follows:

The fields are as follows:
Amount - this will default to the amount owed to the customer or 0.00 if nothing is owing
Credit Card - select the credit card using the pull-down. The values allowed are set via Administration|Lookups|Credit Card.

 

For Other it is as follows:

The fields are as follows:
Amount - this will default to the amount owed to the customer or 0.00 if nothing is owing
Payment Type - select the payment type using the pull-down. The values allowed are set via Administration|Lookups|Custom Payment Type.

 

For Discount it is as follows:

The fields are as follows:
Amount - the discount amount being refunded

Confirm Delete

Complete

When you press the Delete button on the Customers|Payments screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

Confirm Finalise

Complete

When you press the Finalise button on the Customers|Payments screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

Confirm New

Complete

This window allows you to select the type of transaction to be created. Select the required one and press OK, else Cancel to abort. Note that since Payment is the default selection, and OK the default button, you can simply press the Enter key to create a new payment.

Account

Complete

This screen displays the account for the current customer - or if there is no current customer, a Select button allowing you to select a customer.

Note this screen displays the completed financial transactions (ie invoices, payments, etc etc). If you need to look at invoices and payments that are in progress, then you need to use the Customers|Charges or Customers|Payments screens. See also Concepts|Accounting for background information.

The top half of this screen functions like a standard select screen. As well as by date, you can select by:
Type - this can be set to All (ie all transaction types), or one of the various transaction types (just that type)
 

The bottom half of the screen shows the selected transaction (in the above example a Counter Sale), as well as any line items in the transaction.

The display data will change for each transaction type. If you need help with the meaning of the fields, consult the Charges, Payments and Adjustments documentation.

The Buttons are as follows:
Edit - administratively change the payment types for finalised payments. 
This can be used to correct payment types.
If a payment type is changed (e.g., an EFT replaced with Cash), this will be displayed in an Audit field on the payment, including the time and user name of the person who made the change.
Statement - print, preview, or email a statement for the customer.
Adjust - this allows you to create an adjustment transaction. A confirmation window will open to allow you to select the transaction type.
Reverse - this will generate a transction that will reverse the effects of the selected one. A confirmation window will appear, and if you OK this, the appropriate transaction will be created. This will have its Notes field set to identify the reversed transaction - eg "Reversal of Invoice 123456". Note that you cannot reverse a transaction that has previously been reversed - if you do attempt to do this a message will be displayed giving the Id of the reversing transaction.
By default, when reversing a transaction in the current accounting period, both the reversing and reversed transactions will be flagged as hidden - this option is shown on the confirmation window. However, when reversing a transaction in a prior period, the reversing and reversed transactions will not be hidden - BUT if necessary you can use the Hide button to manually hide them (but this may/will cause 'unbalanced hidden transaction' problems when you print the statement). See also Concepts|Accounting|Hidden Transactions.
Print - prints the selected transaction.
Mail - emails the selected transaction.
Check - checks the customer's balance.
Hide - sets the 'Hide' flag of the selected transaction. The button will only be displayed if the transaction can be hidden, ie it has been reversed, or be a reversal. The transaction will be hidden in customer statements.
Unhide - unsets the 'Hide' flag of the selected transaction. The button will only be displayed if the transaction is flagged as 'Hidden'. The transaction will be displayed in customer statements.

Note that the Edit, Check, Hide, and Unhide buttons will not be displayed unless the user is a member of the Administrator category - see Concepts|Users.

 

Statement

Complete

This window can be used to print, preview and email customer statements.

The fields are:

  • Current
Print the current statement for the customer. This statement is not finalised.
  • Include Completed Charges
If selected, any Completed charges will be included when printing the current statement.
These are excluded by default, as they can still be edited.
By default, only Finalised charges are included.
  • Include Fee
If selected, include an indicative accounting fee for overdue charges when printing the current statement.
 
  • Issued
Print an issued statement. If a customer has no statements, this will not be displayed.
  • Dates
Print all transactions between the two dates inclusive.
  • Printer
Shows the default printer for the current location, if this is defined (see Administration - Organisation- Practice Location), otherwise the first available printer. Use the pull-down to select the required printer.
  • Copies
Sets the number of copies required.

 

Press:

  • OK
to print on the selected printer
  • Cancel
to cancel printing
  • Preview
to generate and display a copy of the statement as a PDF.
  • Mail
to generate a copy of the statement and bring up an email window to email it.

Adjustments

Complete

This is the upper level page for the various adjustment transactions.

Note that you can only create an Initial Balance transaction for an account that has no other tranactions.

Bad Debt Adjustment

Complete

This screen is used to create a Bad Debt Adjustment.


The fields are as follows:
Date - the date of the transaction - defaults to the current date
Amount - the tax-included amount of the bad debt adjustment
Tax - this shows the tax included in the above amount
Status - the is set to POSTED and cannot be changed
Notes - any applicable notes
Reference - any applicable reference number/code
Credit - this is always unchecked
Printed - this box will be ticked after the transaction is printed

Credit Adjustment

Complete

This screen is used to create a Credit Adjustment.


The fields are as follows:
Date - the date of the transaction - defaults to the current date
Amount - the tax-included amount of the credit adjustment
Tax - this shows the tax included in the above amount
Status - the is set to POSTED and cannot be changed
Notes - any applicable notes
Reference - any applicable reference number/code
Credit - this is always checked
Printed - this box will be ticked after the transaction is printed
 

Debit Adjustment

Complete

This screen is used to create a Debit Adjustment.


The fields are as follows:
Date - the date of the transaction - defaults to the current date
Amount - the tax-included amount of the debit adjustment
Tax - this shows the tax included in the above amount
Status - the is set to POSTED and cannot be changed
Notes - any applicable notes
Reference - any applicable reference number/code
Credit - this is always unchecked
Printed - this box will be ticked after the transaction is printed

Opening Balance

Complete

This screen is used to create an Opening Balance transaction. You only need this if, for some reason, you want to bring a new customer on board with a non-zero opening balance.


The fields are as follows:
Date - the date of the transaction - defaults to the current date
Amount - the tax-included amount of the opening balance
Tax - this shows the tax included in the above amount
Status - the is set to POSTED and cannot be changed
Notes - any applicable notes
Reference - any applicable reference number/code
Credit - this is always checked
Printed - this box will be ticked after the transaction is printed
 

Balance Check

Complete

When you press theCheck button on the Customers|Account screen, one of the following windows will be displayed:

Press OK to regenerate the balance, or Cancel to abort.

If there is no problem, then the window will be displayed as follows - press OK to close it.

Confirm Adjust

Complete

This window allows you to select the type of adjustment transaction to be created. Select the required one and press OK, else Cancel to abort.

Note that you can only create an Initial Balance transaction for an account that has no other tranactions. The 'Initial Balance' option will not be present if the customer has other accounting transactions.

Confirm Reverse

Complete

When you press the Reverse button on the Customers|Account screen to reverse a transaction, a confirmation window will appear.

The fields are as follows:

  • Notes - notes to include in the reversal. This defaults to "Reversal of <Transaction Type> <Transaction Id>"
  • Reference - the reversal reference. This defaults to the identifier of the transaction being reversed
  • Suppress transaction and reversal in customer statement - this option is displayed if the transaction being reversed is not hidden, and not from a prior statement. If selected, it enables transactions and their reversals to be hidden in customer statements.

Press OK to confirm or Cancel to abort.

Communication

Incomplete document

This screen displays the Communication with and Alerts for, the current customer - or if there is no current customer, a Select button allowing you to select a customer.

A customer can have any number of Communications and Alerts. If there are active Alerts then these are also shown in the Customer information panel.

Communication

Communications are used to log:

  • notes
  • emails
  • mail
  • SMS messages
  • phone calls 

These can be logged manually, or automatically via the Practice option Log Communication. SMS messsages are always logged, in order to manage SMS delivery.

When automatic logging is enabled:

  • ad-hoc email related to a customer will be logged.
    The patient will be included, if one is present
  • emails will be logged during reminder processing
    Reminders:
    • listed for phone calls will be logged as a Phone communication
    • printed for mailing will be logged as a Mail communication

Automatic logging does not occur during statement processing.

The Communication screen is as follows:

The top half of the screen is a select screen. In addition to the date range, you can select by:

Patient  If no patient is selected, all communication with the customer is displayed.
If a patient is selected, only communication involving that patient is displayed
Type Determines which communication types to display. Defaults to All.

The table shows the matching communications, and the bottom half of the screen, the details of the selected communication.

The buttons are:

New Create a new Note
Log Displays the New Communication Log window to log communication with a customer
Edit Edit the selected communication
Delete Delete the selected communication

New Communication Log

The Log button displays a New Communication Log window, to select the type of log to create.

Alerts

The Alerts screen is as follows:

The top half of the screen is a select screen. As well as the date, you can select by:
Alert - either all or one of the alert types as defined via Administration|Lookups|Customer Alert Type
Status - the status of the alert, either All, Completed, or In Progress

The table shows the matching alerts, and the bottom half of the screen, the details of the selected alert. For details of the fields see Create/Edit Alert.

Note that this screen shows the customer alerts - it does not show those alerts set via the Customer Account Type. As you can see in the above, this customer is a VIP customer and thus shows the mauve VIP Customer alert in the left panel. However, you can see that this is not listed as one of the current customer alerts.

Confirm Delete

Complete

When you press the Delete button on the Customers|Communication screen, a confirmation window will appear.

Press OK to confirm or Cancel to abort.

Create/Edit Alert

Complete

This screen is used to create and edit customer alerts.

The fields are as follows:
Date - the start date of the alert - defaults to the current date
End Date - the end date of the alert
Alert Type - select from those available - these are set via Administration|Lookups|Customer Alert Type
Priority - this displays the priority of the alert - see above link
Reason - a short version of the Notes text
Author - this defaults to your user name, but can be set to that of any user
Notes - the long version of the reason for the alert
Status - can be either In Progress or Completed
 

Create/Edit Email

Complete

This screen is used to create and edit customer Email communications.
Note that these are used to log emails to/from a customer, or about a customer's pets, rather than send an email. Normally (assuming that you have 'Log Communication' set for the Practice), you do not have to create these entries - the system does this automatically.

The fields are as follows:

Subject   the subject of the email
To identifies who the email was addressed to
Cc identifies who the email was Cc'ed to
Bcc identifies who the email was Bcc'ed to
Patient the patient that the note is about, if any
Reason the reason for the note. The available reasons are configured via Administration|Lookups|Customer Communication Reason
Message the email message
Note additional notes about the email
Atttachments  a list of the names of attachments that were sent with the email

Create/Edit Mail

Complete

This screen is used to create and edit customer Mail communications.
Note that these are used to log posted communications to/from a customer, or about a customer's pets, rather than actually send an mail.

The fields are as follows:

Subject   the subject of the mail
To identifies who the mail was addressed to
Patient the patient that the mail is about, if any
Reason the reason for the mail. The available reasons are configured via Administration|Lookups|Customer Communication Reason
Message the mail message
Note additional notes about the mail

Create/Edit Note

Complete

This screen is used to create and edit customer Notes.

The fields are as follows:

Subject   the subject of the note
Patient the patient that the note is about, if any
Reason the reason for the note. The available reasons are configured via Administration|Lookups|Customer Communication Reason
Note the actual note text

 

Create/Edit Phone

Complete

This screen is used to create and edit customer phone communications.
These are used to log phone calls to/from a customer, or about a customer's pets.

The fields are as follows:

Subject   the subject of the phone call
To identifies the number the phone call was made to
Patient the patient that the phone call was about, if any
Reason the reason for the phone call. The available reasons are configured via Administration|Lookups|Customer Communication Reason
Message the details of the call
Note additional notes about the call

SMS

Complete

This is the screen used to compose and send an SMS message to a customer. For background, see Concepts|SMS.

The fields are as follows:
Phone - the phone number to which the SMS will be sent. If the customer has multiple phone contact numbers that are SMS enabled, then there will be a pull-down list for you to select from.
Message - the text of the SMS message. The maximum length depends on the maximum number of parts set for your SMS provider. The counter on the top of the box (138/2 in the above sample) shows how many more characters can be entered in the current part of the message and how many parts are being used. So 138/2 indicates that this will require a 2 part message and that 138 characters remain in the 2nd part. It you use a langauge with multi-byte characters (eg "東區動物醫院溫馨提示:Ngau Ngau的預約時間為今天10:30 AM 如需更改或取消預約請致電3456 7890 謝謝") then the counter will not be accurate. However, if the message gets too long, when you attempt to send it, you will get an error message like "Failed to validate: SMS is too long: 7 parts were entered but only 3 are supported"

Press the OK button to send the SMS.

Note that you can use macros when composing the message. You may find the following expression to be useful when building the macro called say 'smsr' using Administration|Lookups|Macros

 concat($patient.name,' is now due. Pls call ",party:getTelephone($location),' for an appointment. Thanks ',$practice.name) 

You could also create suitable macros for each vaccination, eg rg6 for 'Reminder: G6 Vaccination - "

Then you can simply type rg6 smsr into the SMS message text and press Enter to expand it to generate the text:
Reminder: G6 Vaccination - Muffet is now due. Pls call 9123 4567 for an appointment. Thanks Pets-R-Us

Note however, that the above macro will fail to expand if there is no current patient.

 

If you are using a macro that expands to a large amount of text - for example:

concat('Reminder: ',$patient.name,'.
Your appointment for ',$appointment.reason,' is on ',date:format($appointment.startTime,
"EEEE dd/MM/yy 'at' h:mma"),
'
Pls call ',party:getTelephone($location),' if you cannot attend. Thanks')

there is a possibility that the resulting text is longer than the maximum allowed. If this happens, then what you entered as the macro (eg @apr - for appointment reminder) will disappear, but the SMS text will be blank. If you press OK, then you will get a message like "Failed to validate: SMS is too long: 4 parts were entered but only 2 are supported".

Select

Complete

This is the customer select screen.  The picture below shows the 'empty' screen. If you had previously done a customer selection, and had pressed the 'Select Again' button, this will show the results of your previous selection.

If the required customer is displayed, just click it to select it.

Enter the search criteria and click the Find button, or press the Enter key or Alt-F.  The search is case insensitive (ie smith, SMITH, and Smith will all find Smith), and you can enter full or partial information (see using wildcards).

To search by customer name, enter the full or partial name in the Customer field. You can include the first name of the customer using the format lastname,firstname eg 'smith,adam'. NOTE that there is no space, ie 'smith adam' will not work, nor will 'smith, adam' or 'smith , adam'.

Remember that the 'customer name' will in fact be the Company Name if one is defined.  That is, if you have a customer with Last Name Bloggs and Company Name JB Enterprises, then you will not be able to find this customer by entering bloggs in the Search field - but jb will find it.

To search by patient name, enter the full or partial name in the Patient field.

To search by customer contact (i.e. phone, address, email), enter the full or partial information in the Contact field. Note that whereas the customer and patient name searches are 'starts with' searches, the contact search is a 'contains' search so entering 'gmail' will find all customers with a gmail address.

You can use one or more of the Search, Patient, and Contact fields.  ie entering smi, rov, and 123 respectively will find all customers with a name starting 'Smi', who have a pet with a name starting 'Rov', and a phone number, location, or email address containing '123'.

To include deactivated customers, set the 'Active' pulldown to 'Both'.

To search by Identity or ID rather than name, click the 'Search Identities' checkbox.

The search results will be displayed as shown as follows:

For more information on how select screens work, click here.

Patients

The Patient workspace is used to handle patients.

Current Patient Alerts

Complete

This screen is displayed if you press the View All button on the patient information panel to display the patient's current alerts.

The left hand side of the window displays the alert names.
Selecting an alert displays its details on the right.

For an explanation of the alert fields, see Create/Edit Alerts.

Click:

  • Close to close the window
  • Edit to edit the selected alert

Information

Complete

This screen displays information about the current patient - or if there is no current patient, a Select button allowing you to select a patient, and a New button to create one.

With a current patient, the screen is as follows:

The screen areas are as follows:

(1) the patient information panel - the fields here are as follows:
name/sex - this provides a link back to the patient's medical records, ie pressing it on the Information screen, takes you to the Medical Records screen
species - the patient's species
breed - the patient's breed
Reminders - this is present if there are active reminders or estimates. See Administration|Types|Reminder for an explanation of how the colours are set
Age - the patient's age
Birth Date - the patient's date of birth
Weight - the patient's last reported weight
Microchip - this is present if the patient has a microchip. Note that this example shows a 15 digit ISO number in 99999999 9999999 format. Note also that if the patient has multiple microchips, then only the last one added will be shown. (However, the description area - see (2) below, will show all the microchips.)
Referral Vet - the referral vet and, if applicable, their practice. This display is controlled by the Show Referrals setting for the Practice.
Patient Alerts - if there are any, these are shown - you can click on the alert to display its details, or if there are more than 4 and 'More...' is displayed, press the View All button to display all the alerts

(2) the select area - this shows the patient's name, sex, colour, breed, and if there are any, the microchip numbers, and one button:
Select - pressing this brings up the Select screen to let you select another patient

(3) the header area - for the descriptions of these fields, click here

(4) the tabs area - for the descriptions of the fields, click here

(5) the bottom buttons - these are as follows:
New - create a new patient
Edit - edit the current patient - note that you will be editing the compete patient record and all the tab items
Delete - delete the current patient - a confirmation window will appear
Check In - checks the patient in - this performs the same actions as pressing the Check In button on the Workflow|Scheduling screen - ie it allows you to check in a patient who does not have an appointment
Merge - merge another patient record into this one - a confirmation window will appear, and if you proceed, a select screen to let you select the patient to be merged in. Note that header information (name, title, etc) of the current patient is retained, but the tab items (customers, identities, etc) are simply combined, and you will need to edit the resulting patient record to delete the unwanted parts. If either patient is desexed or deceased, this will be reflected in the merged patient.

Note that the Merge button will not be displayed unless the user is a member of the Administrator category - see Concepts|Users.

Confirm Delete

Complete

When you press the Delete button on the Patients|Information screen, a confirmation window will appear.

If the pet cannot be deleted because it is in use (normally because it has an owner), the text will be "xxxx has relationships and cannot be deleted. Do you want to deactivate it instead?"(where xxx is the name of the pet you are trying to delete). Pressing OK will unset its Active flag, Cancel will abort.

If it is in use but can be deleted (because it has no owner), the text will be "xxxx has relationships. Are you sure want to delete? This operation cannot be undone." (where xxx is the name of the pet you are trying to delete). Pressing OK will delete the pet as well as all references to it, Cancel will abort.

If the pet is not in use and can be deleted, the window will simply ask you to confirm the delete. Press OK to confirm or Cancel to abort. (This will only occur if the pet has no breed, taxes, discounts, etc set.)

Confirm Merge

Complete

When you press the Merge button on the Patients|Information screen, this confirmation window will appear.

Press OK to merge the patients or Cancel to abort.

Create/Edit

Complete

This screen is used to create or edit the patient record.

The fields in the header are as follows:
Id - the patient's ID
Name - the patient's name
Species - the species - choose from the ones available - this are set via Administration|Lookups|Species. This is a mandatory field.
Breed - the breed - choose from those available - these are set via Administration|Lookups|Breed. You can set this to None. Note that it is possible that a new patient is a breed that is not on the list. If you are not an administrator (and thus cannot add the new breed), you should set the breed to the special value 'New Breed' - as shown below, this will cause the New Breed field to be displayed so that you can enter the appropriate data. Note that in the example below, this system has a species 'Other' defined to allow for the case where the species is also new.

It is also suggested that after you have set the New Breed, and entered the patient's other details, that you call up Workflow|Messaging and send a message to the administrator saying 'need new species/breed Snake - Ball Python'. Note that the customer and new patient name will be automatically included in the message.
After the Administrator has set up the new breed, you can then go back and edit the patient to change the Breed from 'New Breed' to the correct one.
Colour - enter the colour
Sex - choose one of None, Female, Male, or Unspecified
Desexed - check the box if the patient has been desexed
Date of Birth - the patient's DOB
Age - this will display the patient's age in Patient Age Format set for the practice - see Administration|Organisation|Practice
Deceased - check the box if the patient is deceased - this will set the Deceased Date to today, and untick the Active box
Deceased Date - date of death - this cannot be in the future, and if set, the Deceased check box must also be checked and the Active box unticked.  If you enter a date and there was previously none, then the Deceased box will be ticked and the Active box unticked.
Active - untick this to deactivate the patient

See also Local Procedures.

The tabs are Customers, Identities, Referrals, Discounts, and perhaps Custom Fields - these are documented below.

Note that in some cases, the tabs have a Hide Inactive xxxxx checkbox. This is present when the item being attached to the patient (ie the patient-owner, the patient-location, the referral or the discount) can be deactivated (either by unsetting its Active flag, or if its To Date is in the past). In this case the item will remain attached to the patient, but the item will not be displayed and the patient will act as though the item was not attached. You can have these inactive items displayed by unchecking the Hide Inactive xxxxx box.

The Customers tab
This tab is used to add/delete/edit a) 'Patient Owner' records and b) 'Patient Location' records.

Patient Owner - A patient can have multiple owners either at the same time (because the ownership is shared) or sequentially (because the patient passes from one owner to another).

The screen is as follows:

The fields are:
Customer - the name of the customer
From Date - the date from which the ownership started
To Date - the date on which it ended

Note: Although shared ownership of a patient is allowed, you need to set this up by editing the customer's patient-owner entries to add another customer. If you edit the patient's customer-owner entries you will change the ownership of the patient, ie terminate the old ownership and start a new one.

 

Patient Location - the screen snippet is below, but see the discussion in the customer edit page.

 

The Identities tab
The Identities tab is used to set the patient's identities. Patients have three types of identities, Microchip, Pet Tag, and Alias. These are discussed in this order below.


The Microchip fields are:
Microchip - the microchip number/code
Description - an optional description of what the code represents
Implant Site - the site where the microchip is implanted. [The pull-down provides the four standard implant sites. If necessary these can be expanded by modifying the entityIdentity.microchip archetype.]
Implant Date or Scan Date - the date when the microchip was implanted, or when it was last scanned


The Pet Tag fields are:
Pet Tag - the Pet Tag number/code
Description - an optional description of what the code represents


The Alias fields are:
Alias - the alias - this can be anything appropriate
Description - an optional description of what the alias represents (in the above case 23990 was the client number in the RxWorks system that this data was converted from)

You might also was to use the Alias Identify for a real alias such as the 'kennel name'  BREEAMBERARGENTINA - no wonder they call him Bree for short ;-)

 

The Referrals tab
The Referrals tab is use to record both 'Referred To' and 'Referred From' referrals. As can be seen from the two snippets below, the fields for each are identical.


The fields are as follows:
Veterinarian - the vet - this is one of the Supplier/Vets - see Concepts|Suppliers for background. Note that if this is a new vet, then you can use the New button on the Veterinarian screen (displayed when you press the binoculars) to quickly make a new Supplier/Vet record. You can also enter the vet's practice name to get a listing of all vets in the practice.
Start Date - the start date of the referral
End Date - the end date of the referral
Reason - the reason for the referral

The Discounts tab
This tab is used to set the discounts that apply to the customer - see Concepts|Discounts for background.

The fields are:
Discount - the discount - note that this can either be a discount, or a discount group
From Date - the date from which the discount applies
To Date - the date on which the discount ends

 

The Custom Fields tab(s)
See Administation|Lookups|Species for a discussion of the custom fields facility.

The fields here will depend on the specific customer fields archetype.

Select Referral Veterinarian

Complete

The Referral Veterinarian select screen is displayed whenever you are looking for a veterinarian referral when editing a patient. It works like a standard select screen, but also allows vets to be searched for by their practice name.

Insurance

Complete

This screen displays the insurance policies and claims for the current patient.

The buttons are as follows:

  • New Policy
Create a new Insurance Policy
  • Edit
Edit the policy or claim
  • Delete

Delete the selected policy or claim.
Policies that have been claimed, or claims that have been submitted cannot be deleted.

  • Claim
Make a new claim
  • Submit
Submit a claim to the insurer. Once submitted, the claim cannot be changed.
  • Pay Claim
Pays a gap claim.
  • Cancel Claim
Cancels the selected claim.
  • Settle Claim
Mark a claim as being settled by the insurer.
  • Decline Claim
Mark a claim as being declined by the insurer.
  • Print
Print the selected claim.
  • Mail
Email the selected claim.

Gap Claim Payment

If a claim has its Gap Claim flag ticked, it is a gap claim.
When submitted to the insurer, the insurer will determine the benefit amount, and the customer can either pay the gap, or the full amount.

Gap claims can only be paid after the claim has been submitted to the insurer i.e., the the Claim Status must be Submitted or Accepted.

If the insurer hasn't yet determined a benefit amount for the claim, a Waiting for Claim Benefit window will be displayed. This will monitor the claim, until the insurer notifies of a benefit amount. When this occurs, the Gap Claim Status changes to Received.
It may take the insurer some time to determine the benefit amount. Clicking:

  • Pay Full Claim
prompts to pay the full claim amount. The insurer will reimburse the customer.
This option is only available once the insurer has accepted the claim i.e. the Claim Status is Accepted.
  • Cancel
stops monitoring the claim.
To restart monitoring, click Pay Claim again.

When a benefit amount has been determined, a Pay Claim window will be displayed. This shows the:

  • Claim Total
the total being claimed
  • Agreed Benefit
the amount the insurer has agreed to cover
  • Gap
the difference between the Claim Total and Agreed Benefit
  • Paid
the amount already paid

The following options are available, based on how much the customer has already paid towards the claim:

  • Pay Gap
Make a Gap claim.
This option is available when the amount already paid towards the claim is less than the Gap.
  1. A payment window will be displayed to collect payment up to the Gap amount.
  2. A second Payment will be created, for the Benefit Amount in the Practice Location's Gap Benefit Till.
  3. The insurer will be notified of the Gap payment
  • Refund and confirm Gap Payment

Make a Gap claim.
This option is available when the amount already p
aid towards the claim is greater than the Gap.

  1. The customer will be refunded the difference between the paid amount and the Gap.
  2. A Payment will be created, for the Benefit Amount in the Practice Location's Gap Benefit Till
  3. The insurer will be notified of the Gap payment
  • Pay Full  Claim

Make a standard claim. i.e. the customer will pay the full claim amount and be reimbursed by the insurer.

  1. A payment window will be displayed to collect payment up to the claim amount, if payment has not already been made.
  2. The insurer will be notified of the full payment
  • Confirm Gap payment

Make a Gap claim.
This option is available when the amount already paid towards the claim is greater than the Gap,  but less than the full claim amount. This should be selected when submitting multiple claims for a customer where a deposit has been collected. It doesn't 
create a Refund.

  1. A Payment will be created, for the Benefit Amount in the Practice Location's Gap Benefit Till.
  2. The insurer will be notified of the Gap payment

The insurer will be notified to enable them to reimburse the:

  • practice, if a gap payment is made
  • customer, if full payment is made

 

Create/Edit Insurance Policy

Complete

This is the screen used to create or edit an insurance policy for a patient.

The fields are as follows:

Policy Number the policy number assigned to the policy by the insurer
Start Date the date the policy starts on
End Date the date the policy ends on. Optional.
If set, the policy cannot be claimed against after the specified date.
Customer the customer the policy belongs to
Insurer the insurance provider
Author the user that created the policy

Insurance Claim

Complete

This is the screen used to create, edit or view an insurance claim for a patient.

The fields are as follows:

  • Claim Number
the number assigned to the claim by the insurer.
For claims submitted online, this will be set on submission.
  • Date
the date the when the claim was created
  • Completed Date
the date the when the claim was settled, declined or cancelled
  • Insurer
the insurer for the policy
  • Policy Number
the policy number
  • Gap Claim

indicates if the claim is a gap claim.
Only displayed for online claims, and when the insurer supports gap claims.

  • Author
the user that created the claim
  • Claim Handler
the user responsible for handling the claim. If necessary, the insurer may contact the Claim Handler with queries about the claim.
  • Location
the practice location where the claim is being made
  • Clinician
the clinician responsible for the claim
  • Amount
the total amount of the claim
  • Tax
the total tax of the claim
  • Claim Status
the current status of the claim
  • Gap Claim Status
the current gap status of the claim. Only displayed when Gap Claim is ticked, and when viewing the claim.
  • Benefit Amount
the benefit amount agreed by the insurer. Only displayed when Gap Claim is ticked, and when viewing the claim.
  • Benefit Notes
notes on the Benefit Amount, set by the insurer. Only displayed when Gap Claim is ticked, and when viewing the claim.
  • Notes
optional notes
   

Conditions

The Conditions tab lists the conditions being claimed.

The fields are as follows:

  • Claim Number
the number assigned to the claim by the insurer.
For claims submitted online, this will be set on submission.
  • Treatment Start
the date that treatment for the condition commenced
  • Treatment End
the date that treatment for the condition ceased.
If the condition is ongoing, this represents the last date when treatment for the condition was given to the patient, within the practice.
  • Amount
the total amount of charges being claimed for this condition
  • Tax
the total tax on the charges being claimed
  • Status
the status of the condition
  • Notes
a synopsis of the the condition being claimed
  • Charges
the charges being claimed for the condition

Conditions can be added using:

  • Add
Adds a Condition that requires the user to fill in all of the fields manually
  • Add Visit
Adds a Condition where the fields and the charges are filled in automatically from the selected Visit
  • Add Problem
Adds a Condition where the fields and the charges are filled in automatically from the selected Problem

Attachments

The Attachments tab lists the attachments that will be submitted as part of the claim. These are a copy of the original documents, taken when the claim is submitted.
To see what documents will be attached, click the Generate Attachments button.

The following attachments will be automatically added:

  • Patient History - the full patient history up to the time of the claim
  • Customer Invoice - an invoice will be added for each invoice referenced by the claim

History

The History tab displays the patient history, and is provided to help construct the claim.
It does not represent the history that will be attached to the claim when it is submitted.

Gap Claims

A gap claim is one where an insurance claim is submitted to the insurer, and the insurer calculates a benefit amount. The customer pays the gap, which is the difference between the total claim and the benefit amount, minus any payments the customer has already made.

Gap claims are only available for online insurers.

When Gap Claim is selected and the claim is submitted, the Gap Claim Status will be Pending, indicating that the insurer hasn't yet set the benefit amount.
When the insurer sets the benefit the:

  • Benefit Amount is updated; and
  • Gap Claim Status is updated to Received; and
  • any notes from the insurer are recorded in the Benefit Notes

The customer can elect to:

  • pay the gap, i.e. the difference between the claim Total and and the Benefit Amount.
    The insurer will reimburse the practice to the value of the Benefit Amount.
  • pay the full claim.
    Here, the insurer will reimburse the customer.

When the claim is paid, the Gap Claim Status will be set to Paid, and finally to Notified, when the insurer is notified of the payment. This last step is required to allow the insurer to reimburse:

  • the practice, if a gap payment was made
  • the customer, if full payment was made
Invoices in Gap Claims

When making a gap claim, at least one invoice in the claim must be unpaid or part paid.

  • If the amount already paid on the included invoices is less than or equal to the gap amount, the
    payment requested will be the difference between the gap and the amount already allocated on
    the invoice.
  • If the amount already paid is greater than gap amount, then the difference will be refunded to the
    customer during the claim process.

 

Medical Records

Complete

This screen displays the medical records for the current patient - or if there is no current patient, a Select button allowing you to select a patient.

Note that this screen is for viewing and editing the patient's medical records. However, if you are in the middle of a consult, you should not be using this - you should be using the Visit Editor which is accessed via the Consult button on the Workflow|Scheduling and Workflow|Work List screens.

There are eight different screen shots below, one for each of the tabs: Summary, Problems, Reminders, Alerts, Documents, Charges, Prescriptions, and Communication. For patient insurance, see Insurance.

All of these have a Select button at the top to allow you to select another patient.

All of them function as select screens. Date selection is always available, and in some you can select using the status or type.

All of them display the details of the item you have selected in the bottom part of the screen.

 

Summary

This shows the summary of the records.

If you have set the Show Clinician preference, then the display will be as follows. Note that here the practice is using 'short names' for their clinicians (see Concepts|Users) so the display shows 'SM' rather than 'Dr Sam Michaels'.

If the Show Communications preference is enabled, Communications records will be included. This makes it easier to see the flow of events for a patient, such was when reminders were sent. Communication records are for informational purposes only, so they:

  • do not appear in printed histories
  • are not submitted in insurance claims

 

Apart for the date, the selection fields are:
Type - this can be set to All or one of Addendum, Note, Problem, Weight, Medication, Investigation, Attachment, Form, Image, Letter or Communications
Include Charges - uncheck this box if you don't want to show the invoice line items. You would do this if you are setting up a medical record to send off as part of a referral and you don't want your charges to be shown. This option can also be set in Preferences.
- this button changes the sort order of items within the visit - as shown it indicates that the visit items are shown in descending order, ie newest at the top. If you press the button it will change to an up arrow head indicating that the items are in ascending order with the newest at the bottom.  Note that the visits themselves are always shown in descending order.
This option can also be set in Preferences.
Search - performs a case-insensitive search on patient records for the input text. The following fields are searched:

  • notes and addenda
  • record type
  • clinician, if the clinician is being displayed
  • batch number, if batches are being displayed
  • medication product name and label
  • invoice item product name
  • investigation type and identifier
  • document name
  • problem presenting complaint and diagnosis
  • weight
  • communications

Note that Visits will always be displayed, even if there is no match.

Product Type - searches for records with the products with the specified Product Type(s). Product Types can be selected from a list, or by entering a partial name in the text field. The following records are searched:

  • Customer Invoice Item
  • Form
  • Investigation
  • Letter
  • Medication

The items in the display are partially colour coded. As you can see above, the selected item (the checkup visit) is in blue, and the other items are coloured as shown below.

As you can see problems are pink/red, medication light brown and weight a darker green. Note that any Problem items are shown with a link and clicking this will take you to the Problems tab.

The buttons are:
New - create a new entry - a window will open allowing you to select the type of entry to be created. If it is something other than a visit (ie a note, a form, etc), then the new entry will be created under the currently selected visit. Note that the 'current visit' is the visit containing the currently selected item (which may be the visit itself or a note, form, medication etc item that is part of that visit).
With the exception of Visit and Problem records, records can be automatically locked from editing after a period of time. See Medical Record Locking below.
Edit - edit the selected item. If the Edit button is displayed, then you can edit the item - but for some things (e.g. an invoice item where the invoice has been finalised, or a Note that has been  locked) the edit button will be suppressed because you cannot edit in this case.
Delete - delete the selected item - a confirmation window will be displayed. Again, if you can't delete the item, then the Delete button will not be displayed.
Print - print what is shown on on the screen
Mail - email what is shown on on the screen
Add Visit & Note - pressing this will generate a new visit entry and open the New Visit & Note window so that you can add a new Visit and Note. This button should NOT be used to create a normal consult visit (for this you should use the Check-In button on the Workflow|Scheduling screen). It is intended for use when creating a note unrelated to another visit, say as a result of a phone call.
Log - create a Communication record for the patient. This button is only available if the Show Communications preference is enabled.
Import Flow Sheet Reports - imports Medical Records, Billing, Notes and Flow Sheet PDF reports from Smart Flow Sheet. Only displayed if Smart Flow Sheet is configured for the current Practice Location.

Problems

The Problems tab shows the details of the patient's problems. This tab mirrors the Summary tab display but shows the data grouped by problem rather than visit.  Visits are shown with a link and clicking this will return you to the Summary tab.

Problems are displayed by status, then date. That is, Unresolved problems are displayed first, in descending date order, followed by Resolved problems.

The Search field works the same as in the Summary tab, with the exception that both Problems and Visits will always be displayed, regardless of the search criteria.

The buttons are as follows:
New - create a new entry - a window will open allowing you to select the type of entry to be created. If it is something other than a problem (ie a note, a form, etc), then the new entry will be created under the currently selected problem. Note that the 'current problem' is the problem containing the currently selected item (which may be the problem itself or a note, form, medication etc item that is part of that problem).
Edit - edit the selected item. If the Edit button is displayed, then you can edit the item - but for some things (eg a invoice item where the invoice has been finalised) the edit button will be suppressed because you cannot edit in this case.
Delete - delete the selected item - a confirmation window will be displayed. Again, if you can't delete the item, then the Delete button will not be displayed.
Print - print what is shown on on the screen
Mail - email what is shown on the screen

Reminders

The Reminders tab shows the details of the patient's reminders.

For details on the Reminders field, click here.

The buttons are as follows:
New - create a new reminder
Edit - edit the selected reminder
Delete - delete the selected reminder - a confirmation window will be displayed

Alerts

The Alerts tab shows the details of the patient's alerts.

For details on the Alerts fields click here.

The buttons are as follows:
New - create a new alert
Edit - edit the selected alert
Delete - delete the selected alert - a confirmation window will be displayed

Documents

This shows the details of the patient's documents. As you can see below, there are 5 different types: Attachments, Images,Investigations, Letters  and Forms. All of these except the latter support 'versions', ie previous revisions of the document.

The buttons are:
New - create a new document - a window will open allowing you to select the type
Edit - edit the selected document record (not the document itself - though see below). If the document has status Finalised you will not be able to edit the record.
Delete - delete the selected document - a confirmation window will be displayed. If the document has status Finalised you will not be able to delete it.
Print - if the selected item has an associated document template (which can be the case with an Investigation - see Administration - Laboratory - Investigation Type) this will be presented for printing. Otherwise, if there is an attachment present, in .odt or .doc format, it will be presented for printing. If the document is other than an .odt or .doc file, it will be downloaded and can then be printed.
Mail - emails the selected item as an attachment.
Refresh - (this button only appears when the selected document is a Letter) - refresh the document by regenerating it from its template - a confirmation window will be displayed.

Clicking on the entry in the Document column will cause the document to be downloaded and displayed.  Note that for Letters the Document column shows two icons like . If you click on the right-hand one, the pdf file containing the letter will be downloaded and displayed. If you click on the left-hand one (or the name of the document) then the word processing document will be downloaded and you can open it in your word processor and save it and then edit it. (You need to save it as it is opened read-only.) After editing the file, you can then use the Edit button to edit the letter and upload the revised file.

Charges

This shows the details of the charges resulting from the patient's treatments. Note that this screen just displays information, there are no 'bottom buttons' to let you do things.  It is provided so that you can check that everything you think should be charged for has been, and to check on past charges.

Prescriptions

The Prescriptions tab is where patient prescriptions are created and dispensed.

The buttons are:

New - create a new prescription
Edit - edit the selected prescription. If the prescription has been fully dispensed or has expired, it cannot be edited.
Delete - delete the selected prescription. If the prescription has been dispensed or has expired, it cannot be deleted.
Print - prints the selected prescription.
Mail - emails the selected prescription.
Dispense - dispenses the selected prescription. This displays a medication window that allows the Date, Expiry Date and Clinician to be selected. The Label and Quantity are fixed
Cancel Prescription - cancels the selected prescription, if it hasn't been fully dispensed or expired.

Communications

The Communications tab is used to display and log communication regarding the patient. Each communication may also be viewed via the customer. See Customers - Communications & Alerts  for more details.

Medical Record Locking
 

By default, medical records are automatically locked from editing after a period of time. This is determined by the Practice setting Record Lock Period.

The following record types are automatically locked:

  • Addendum
  • Attachment
  • Attachment Version
  • Image
  • Image Version
  • Investigation
  • Investigation Version
  • Letter
  • Letter Version
  • Form
  • Medication
  • Note
  • Weight

An Addendum record can be used to annotate a Medication or Note record after it has been locked. These are displayed after the record in the history that they annotate. To do this, click on the Medication or Note record that you want to add an Addendum to and press the New button and select Addendum.

Note that the visit itself is not locked, and that if you desire, you can add a new note (or other item) to a visit whose other items have been locked. What you cannot do is modify the items that have been locked.

Investigations support some updates after they have been locked:

  • Reports can be added.
    The existing report is versioned, if one is present.
  • The Reviewed flag can be changed, on the current and prior versions
  • The Result Status can be changed

Other locking exceptions include:

  • Medication, Investigation and document records linked to an invoice may be edited or removed via the invoice, until the invoice is finalised
  • Investigation and document records can be updated via the Document Loader
  • Medication, investigation, and document records can be removed from the patient history if the invoice is reversed.

Confirm Delete

Complete

This is the delete confirm screen. Press OK to proceed, else Cancel.

Confirm New

Complete

Depending on which tab of the Medical Records or Visit Editor screen that you have open, this window allows you to select the type of medical record entry, alert/reminder, or document to be created. Select the required one and press OK, else Cancel to abort.

For the Summary tab, the window is: (the partially visible last item is 'Weight')

For the Reminders and Alerts tab, the window is:

For the Documents tab, the window is:

Confirm Refresh

Complete

This window is displayed when you press the Refresh button to refresh a letter from its template. Press OK to confirm, Cancel to abort.

If Version current document is checked, then when the letter is regenerated, the current copy will be saved as a version, otherwise it will be replaced.

Create/Edit Alert

Complete

This is the screen used to create or edit a patient Alert. See Concepts|Alerts for background.

The fields are as follows:
Date - the start date for the alert
End Date - the end date for the alert. This can be left blank if the alert has no end date.
Alert Type - select from those available - these are set via Administration|Types|Patient Alert Type
Reason - a short version of the Notes text
Product - the product that created the alert, if any
Author - the user that created the alert
Clinician - the associated clinician
Notes - the long version of the reason for the alert
Status - can be either In Progress or Completed
 

Create/Edit Attachment

Complete

This is the screen used to create or edit an attachment document in the patient's medical records. See Concepts|Documents for background. Note that although you can use this facility to attach an image file, it is probably better to use the Image facility for this.

The fields are as follows:
Start Time - the date on which the entry was created - defaults to today
Description - any pertinent description
Status - this can be In Progress, Completed, or Finalised.  In Progress implies that you are still working on this; Completed implies that you have finished - but the entry can still be editied; and Finalised means that it is really complete and can no longer be edited.
Printed - this box will be checked when the form has been printed
Clinician - the appropriate clinician
Attachment - press the Select button to attach the file - after the file is attached its name (notes.txt in this case) is shown here.

The Versions tab shows the previous versions. Note that you can use the Add button to add another, but you can also use the Select button.  If you use the Select button to attach another file, then the previous 'top' version will just be pushed onto the version list.

As you can guess from the above, there is no problem in adding the same file name twice. In fact although two notes.txt files have been attached, each in fact contains different text.

 

Create/Edit Form

Complete

This is the screen used to create or edit a form document in the patient's medical records. See Concepts|Documents for background.

The fields are as follows:
Start Time - the date on which the entry was created - defaults to today
Description - any pertinent description
Status - this can be In Progress, Completed, or Finalised.  In Progress implies that you are still working on this; Completed implies that you have finished - but the entry can still be editied; and Finalised means that it is really complete and can no longer be edited.
Printed - this box will be checked when the form has been printed
Form - select the form to print - these are the document templates that are of Type 'Patient Form'
Product - select a product if appropriate. This is here so that if the form selected is sensitive to the current product, the form can include product information.  Thus, for example, we do not have to have a vaccination certificate for each type of vaccination - we can just have a general certificate that prints the name of the current product.
Clinician - the appropriate clinician - normally the form will display the clinician's name

 

Create/Edit Image

Complete

This is the screen used to create or edit an image document in the patient's medical records. See Concepts|Documents for background.

The fields are as follows:
Start Time - the date on which the entry was created - defaults to today
Description - any pertinent description
Status - this can be In Progress, Completed, or Finalised.  In Progress implies that you are still working on this; Completed implies that you have finished - but the entry can still be editied; and Finalised means that it is really complete and can no longer be edited.
Printed - this box will be checked when the form has been printed
Clinician - the appropriate clinician
Image - press the Select button to attach the file - after the file is attached its name (Bree.jpg in this case) is shown here.

The Versions tab shows the previous versions. Note that you can use the Add button to add another, but you can also use the Select button.  If you use the Select button to attach another file, then the previous 'top' version will just be pushed onto the version list.

Note that there is no problem in adding the same file name twice. Thus if your images arrive in files called img001.jpg, there is no problem if there is already an image imported from a file named img001.jpg.

Create/Edit Investigation

Complete

This is the screen used to create/view/edit investigations.  For background see Concepts - Investigations.

 

The fields are as follows:

  • Date
the date on which the investigation was initiated
  • Investigation Type
the type of investigation - these are set up via Administration - Laboratory - Investigation Type
  • Laboratory
the laboratory that is performing the test(s) associated with the Investigation
  • Device
the Laboratory Device that the test(s) will be performed by
  • Notes
optional notes to associate with the investigation
  • Status
this will initially be 'In Progress' - for other settings see Concepts - Investigations
  • Order Status
the status of the order. This will initially be 'Pending' to indicate that the order has not been sent. For other settings see Concepts - Investigations
  • Clinician
the associated clinician
  • Report
use the Select button to add the results report to the investigation. Note that if there is an existing report, the first will be pushed down into the Versions tab.
If the investigation has been ordered via an online laboratory, (see Concepts - Investigations) there should be no requirement to manually attach the report.
  • Tests
the test(s) to perform
  • Products
the product(s) that ordered the investigation
  • Results
results of the investigation
  • Versions
used to display and manage previous versions of the reports.

 

The Print Form button is used to print the Investigation form.

 

Create/Edit Letter

Complete

This is the screen used to create or edit a letter document in the patient's medical records. See Concepts|Documents for background.

First lets look at the screen shot for a new letter:

The fields are as follows:
Start Time - the date on which the entry was created - defaults to today
Description - any pertinent description
Status - this can be In Progress, Completed, or Finalised.  In Progress implies that you are still working on this; Completed implies that you have finished - but the entry can still be editied; and Finalised means that it is really complete and can no longer be edited.
Printed - this box will be checked when the letter has been printed
Clinician - the appropriate clinician
Template - select the template to be used - these are the document templates that are of Type 'Patient Letter'
Document - you DO NOT need to press the Select button when you are creating a new letter. Simply selecting the Template will generate the letter from the template and insert the appropriate information.

 

Now the edit screen. The senario is as follows: you created the letter as above.  Then you decided that you needed to edit it, so on the Documents tab of the Medical Records screen, you selected the letter and then clicked on the actual letter to download it and open it in your word processor. You then saved a copy (as say Referral Letter-2), edited in the required changes and then saved it.

On the Medical Record screen you now press the Edit button to get the Edit Letter screen. You then press the Document Select button - this will open a browse window to allow you to select your 'Referral Letter-2' and upload it. The screen will then appear as below. The initial version has been saved as the previous version, and your new one as the new current version.

As intimated above, the Versions tab shows the previous versions. Note that you can use the Add button to add another, but you can also use the Select button.  If you use the Select button to attach another file, then the previous 'top' version will just be pushed onto the version list.

There is no problem in adding the same file name twice. In the above example the file names were different but they could have been the same.

Parameters

If a template containing parameters is selected (i.e. Fill-In fields in Microsoft Word, or Input Fields in OpenOffice Writer), a window like that below will be displayed prompting for the values of those parameters. On OK, these will be merged with the document. Note that the order of the prompts cannot be specified, ie if the template has prompte P1, P2 and P3, these may be displayed on the screen in the order P2, P1, P3.

The parameters are normally text fields and hence you can use macros to enter the information.

Create/Edit Medication

Complete

This is the screen used to create or edit a medication entry in the patient's medical records.

If the medication entry is being created as a result of invoicing the item, then this screen will only be displayed if the medication product entry has it's Dispensing Label option ticked. It is always displayed to edit the medication entry, or if the entry is being created via the New|Medication button on the Patients|Medical Records screen.

The fields are as follows:
Date - the date the medication record was created - defaults to today
Expiry Date - if a Batch has been selected, this represents the Batch expiry date. If not, you can enter the expiry date of the medication. Note that you can enter a relative date (e.g. 2m for 2 months from today).
Quantity - the quantity
Label - the label text- this will be initially set from the medication product record
Print Label - pressing this button prints the label using the template, 'Drug Label'
New Prescription - creates a new prescription from the medication, copying the Medication, Quantity and Label. The Clinican will default to the current clinician, if any.
Medication - the medication product
Batch - the product batch. If selected, this determines the Expiry Date. The Batch dropdown displays all active batches of the medication at the current stock location. The batch with the earliest expiry date is shown first.
Clinician - the clinician
Dispensing Notes - these will be displayed if there are any

Note that if it is important to you that the Dispensing Notes be displayed when the item is added to the invoice but you would not normally print a label (and hence the product's Dispensing Label option is not ticked), you should edit the product to have the Dispensing Label option ticked, but either leave it's Label Text blank, or set to say 'No label required'.

Create/Edit Note

Complete

This is the screen used to create or edit a note in the patient's medical records.
The patient history is displayed below, for reference.
 

The fields are as follows:
Date - the date of the note - defaults to today
Note - the note text goes here. If needed you can change the size of the note window using the handle at the bottom left of the text window.
Clinician - the clinician

Create/Edit Prescription

Complete

This is the screen used to create or edit a prescription. See Concepts|Prescriptions for background. In the picture below, the prescription has already been dispensed once so the 'Dispensing' tab is shown. If the prescription was being created the Dispensing tab would be absent.

The fields are as follows:
Date - the date on which the prescription was created - defaults to today
Expiry Date - the date on which the prescription expires. After this date, the prescription cannot be dispensed nor deleted. Note that this is totally separate from the Expiry Date set when you dispense the item - which is of course the expiry date of the dispensed medication. This date defaults to today plus the Prescription Expiry interval set for the practive - see Administration|Organisation|Practice. If you have not set this, then it defaults to zero and the Expiry Date will default to today.
Quantity - the quantity to be dispensed each time
Repeats - the number of repeats
Medication - the product
Label - the dispensing label text - this defaults to that set for the product. This will be the label when you actually dispense from this prescription.
Clinician - the clinician
Times Dispensed - the number of times that this prescription has been dispensed.

The Dispensing Tab shows the information for previous dispenses of this prescription.

Note that when you set up the prescription, you are functionally authorising the dispensing a total of (qty x (repeats+1)).  Hence if you set the Quantity to 2 and the Repeats to 5, the total quantity being authorised is 12.

Note also that when the prescription is dispensed neither the Quantity nor the Label text can be altered. If these do need to be altered, this must be done by editing the prescription itself.

Create/Edit Problem

Complete

This is the screen used to create or edit a problem in the patient's medical record. See Concepts|Problems for background. The following screen shows a problem being edited.

The fields are as follows:
Date - the date the problem was created - defaults to today
Presenting Complaint - the presenting complaint
Diagnosis - the problem diagnosis
Status - this can be Unresolved or Resolved
Resolved Date - the date on which the problem was resolved
Clinician - the associated clinician

Problem Presenting Complaint/Diagnosis selection

Complete

These two screens are presented if you click the appropiate binoculars icon on the Problem edit screen.  They allow you to select the Presenting Complaint or Diagnosis respectively. In both cases you can select from standardised VeNom codes or practice specific ones - the available sets are determined via the Administration|Lookups screen.

The Presenting Complaint selection screen is:

The selection fields are:
Type - this can be set to All or either 'Presenting Complaint' or 'Presenting Complaint (VeNom)'.  All selects both.
Search - enter the text top search for.  As per the example above, this does a 'contains' search rather than a 'starts with' search.

 

The Diagnosis selection screen is:

The selection fields are:
Type - this can be set to All or either 'Diagnosis' or 'Diagnosis (VeNom)'.  All selects both.
Search - enter the text top search for.  As per the example above, this does a 'contains' search rather than a 'starts with' search.

In both cases, you can click on the required item to select it and return to the Problem Edit screen or press Cancel to return without making a selection.

Create/Edit Reminder

Complete

This screen is used to create and edit reminders. Normally reminders are created automatically by the system (ie as a result of invoicing an annual vaccination, the system will create the reminder for the next one), but they can also be created manually using this screen.
Similarly, they are normally processed automatically by the Reporting - Reminders processing. However, in some circumstances you may want to cancel them or change their due date manually.

The fields are as follows:

Reminder Type - the Type of the reminder
Due Date - the date when the reminder is due
Next Reminder - the date when the reminder is next due to be sent. This is calculated as the Due Date plus the Interval for the current reminder count.
Status - this can be In Progress (ie active), Completed (ie the associated event, eg the vaccination, has occurred), or Cancelled. Normally the system will adjust the state to Completed (when the event occurs) or Cancelled (when the reminder becomes too old), but you can also change the state using this screen.
Reminders Sent - displays the number of reminder notifications generated. Note that if the same reminder was sent by say both email and SMS, this only counts as 1, not 2 reminders sent, as we sent the same reminder by two methods. However, the items display will show both of these, and they will have the same reminder count.
Last Sent - the date on when the reminder was last sent
Completed - the date on which the reminder was completed. Note that if the reminder is cancelled by the system, the date on which this happened is not shown here, is this is a Completed date, not a Cancelled or Completed date.
Product - the associated product
Clinician - the associated clinician

Items

The items tab shows the times and methods by which a reminder has or will be sent.

Create/Edit Visit

Complete

This window is used to create or edit the patient's visit record. Note that if you are using the workflow facilities, and in particular the Consult button on the Workflow|Work List screen, then the visit record will be created for you.

The fields are as follows:
Start Date - the date on which the visit started - defaults to today
Complete Date - the date on which the visit was completed
Reason - the reason for the visit
Summary - an optional summary of the visit
Clinician - the clinician
Status - you can set this to In Progress or Completed

The Print button will print the complete visit information (ie including notes, medication, weight, etc) - not just the above information.

Add Problem to Visit

Complete

This prompt is displayed when creating a new Problem:

New Problems can be added to the most recent Visit, or to a new Visit.

Click:

  • OK to add the Problem to the selected Visit
  • Cancel to cancel Problem creation

 

 

Create/Edit Addendum

Complete

This is the screen used to create or edit an Addendum in the patient's medical records.

Addendum records are used to annotate Medication or Note records after they have been locked.

The patient history is displayed below, for reference.

The fields are as follows:

  • Date - the date of the record was created
  • Note - the note text
  • Clinician - the clinician

Create/Edit Link

Complete

This is the screen used to create or edit a hyperlink in the patient's medical records.
This is typically used to reference patient data in an external system.
In PDF versions of the medical records, the hyperlink will be clickable.

The fields are as follows:

  • Description - description of the link. If supplied, this will be displayed in the summary and printed records, else the URL will be.
  • Date - the date of the record - defaults to today
  • Clinician - the clinician
  • URL - the hyperlink

 

 

 

Create/Edit Weight

Complete

This window is used to create or edit the patient's weight record.

The fields are as follows:
Date - the date on which the weight was measured - defaults to today
Weight - the weight
Units - the units - you can select Grams, Kilograms, or Pounds
Clinician - the clinician

New Medication Record prompt

Complete

The New Medication Record prompt is displayed when creating Medication records  from:

  • Patients|Medical Records|Summary
  • Patients|Medical Records|Problems

When Medication records are created this way:

  • the customer is not invoiced
  • the medication quantity selected does not change the stock level

If there is no need to invoice the customer, or change stock levels, click OK.

If the customer should be invoiced, then click Cancel, and add the medication via:

  • Customer|Charges
  • the Visit Editor

New Visit & Note

Complete

This screen is used to create both a patient Visit and a Note in the patient's medical records.

The patient history is displayed below, for reference.

This should NOT be used to create a normal consult visit (for this you should use the Check-In button on the Workflow - Scheduling screen). It is intended for use when creating a note unrelated to another visit, say as a result of a phone call.

The fields are as follows:
Date - the date of the visit and note - defaults to today
Reason - the reason for the visit
Note - the note text goes here. If needed you can change the size of the note window using the handle at the bottom left of the text window.
Clinician - the clinician to assign to the visit and note

Select

Complete

This is the patient select screen.  As shown below, if there is a current customer, the screen will show all the patients for that customer.  If there is no current customer, no patients will be displayed, and the 'All Patients' box will be ticked.

If the required patient is displayed, just click it to select it.

To search by patient name, enter the full or partial name (see using wildcards) and click the Find button, or press the Enter key or Alt-F.

To search the patients belonging to all customers (and not just the current one), click the 'All Patients' checkbox.

To include deactivated patients, set the 'Active' pulldown to 'Both'.

To search by Identity rather than name, click the 'Search Identities' checkbox.

For more information on how select screens work, click here.

Select By Customer

Complete

This is a patient select screen that supports searching by customer, patient, and customer contact. To search, fill in the known fields and click the Find button, or press the Enter key or Alt-F.

As shown below, if there is a current customer, the screen will show all the patients for that customer. 

If the required patient is displayed, just click it to select it.

To search by customer name, enter the full or partial name in the Customer field (see using wildcards). Customers are searched using the format lastname,firstname e.g. 'smith,adam'. NOTE that there is no space, i.e. 'smith adam' will not work, nor will 'smith, adam' or 'smith , adam'.

To search by patient name, enter the full or partial name in the Patient field.
To search the patients belonging to all customers, clear the Customer field.

To search by customer contact (i.e. phone, address, email), enter the full or partial information in the Contact field. Note that whereas the customer and patient name searches are 'starts with' searches, the contact search is a 'contains' search so entering 'gmail' will find all customers with a gmail address.

To include deactivated patients, set the 'Active' pulldown to 'Both'.

To search by patient Identity rather than name, click the 'Search Identities' checkbox. This can be used to search patients by microchip or pet tag, for example.

 

For more information on how select screens work, click here.

Suppliers

Complete

The Supplier workspace is used to handle suppliers.

Information

Complete

This screen displays information about the current supplier - or if there is no current supplier, a Select button allowing you to select one and a New button to create one.

Depending on the type of supplier, the details are shown in slightly different ways as follows:

For Manufacturers: (for the meanings of the fields, click here)

 

For Supplier Organisations: (for the meanings of the fields, click here)

 

For Supplier Persons: (for the meanings of the fields, click here)

 

For Vet Practices: (for the meanings of the fields, click here)

 

For Veterinarians: (for the meanings of the fields, click here)

Edit Manufacturer

Complete

This is the screen used to create and edit manufacturers. For background see Concepts|Suppliers.

The fields in the header are as follows:
Id - the ID
Company Name - the name of the manufacturer
Notes - any notes you want to add
Active - uncheck this box to deactivate the manufacturer

See Tabs for a description of the fields in Contacts tab.

The Representatives tab is used to set the Supplier-Persons that this manufacturer employs. Note that an organisation can have zero, one or more representatives defined.  As can be seen above the fields are:
Contact - the representative
From Date - the date on which the relationship started
To Date - the date on which the relationship ended

Edit Supplier (Organisation)

Complete

This is the screen used to create and edit supplier organisations. For background see Concepts|Suppliers.

The fields in the header are as follows:
Id - the ID
Company Name - the name of the supplier organisation
Notes - any notes you want to add
Active - uncheck this box to deactivate the supplier

See Tabs for a description of the fields in the common tabs, Contacts, Account Type, Categories, and Suppliers.

The Representatives tab is used to set the Supplier-Persons that this organisation employs. Note that an organisation can have zero, one or more representatives defined.  As can be seen above the fields are:
Contact - the representative
From Date - the date on which the relationship started
To Date - the date on which the relationship ended

Edit Supplier (Person)

Complete

This is the screen used to create and edit supplier persons. For background see Concepts|Suppliers.

The fields in the header are as follows:
Id - the ID
Title - the name of the supplier organisation
First Name - the first name
Initials - the initials
Last Name - the last name
Notes - any pertinant notes
Active - uncheck this box to deactivate the supplier

See Tabs for a description of the fields in the common tabs, Contacts, Account Types and Categories.

The Organisations tab is used to set the Supplier-Organisations that this person belongs to. Note that they can belong to zero, one or more organisations.  As can be seen above the fields are:
Supplier - the organisation
From Date - the date on which the relationship started
To Date - the date on which the relationship ended

Edit Practice

Complete

This is the screen used to create and edit supplier practices. For background see Concepts|Suppliers.

The fields in the header are as follows:
Id - the ID
Practice Name - the name of the supplier organisation
Notes - any notes you want to add
Active - uncheck this box to deactivate the supplier

See Tabs for a description of the fields in the common tabs, Contacts and Categories.

The Vetinarians tab is used to set the Supplier-Veterinarians that this practice employs. Note that a practice can have zero, one or more vets defined.  As can be seen above the fields are:
Veterinarian - the vet
From Date - the date on which the relationship started
To Date - the date on which the relationship ended

Edit Veterinarian

Complete

This is the screen used to create and edit supplier veterinarians. For background see Concepts|Suppliers.

The fields in the header are as follows:
Id - the ID
Title - the name of the supplier organisation
First Name - the first name
Initials - the initials
Last Name - the last name
Notes - any pertinant notes
Active - uncheck this box to deactivate the supplier

See Tabs for a description of the fields in the common tabs, Contacts and Categories.

The Practices tab is used to set the Supplier-Practices that this vet belongs to. Note that they can belong to zero, one or more practices.  As can be seen above the fields are:
Practice - the Supplier Practice
From Date - the date on which the relationship started
To Date - the date on which the relationship ended

Tabs

Complete

This page documents the various common tabs on the on the supplier edit screens.

The common tabs are: Account Type, Categories, Stock Locations, and also Contacts. (Note that since the latter is also used for customers, practice and practice locations, it is documented in Concepts|Contacts.)

 

Account Type tab
This is used to set the Supplier Account Type. Note that this is an information setting - it does not affect the way in which the system treats suppliers.

Choose the account type from the list. Those available are set via Administration|Lookups|Supplier Account Type.

 

Categories tab
This is used to set the categories (zero, one, or more) to which the supplier belongs.

Use the arrows to move the selected item from the Available list to the Selected list and vice versa.

Note that those available are drawn from differents list depending on the type of supplier you are editing - see Concepts|Categories.

 

Stock Locations tab
This is needed only if you use the ESCI facility - if you don't use this, don't bother with this tab.

The fields are:
Stock Location - the stock location
Account ID - the account number }
Service URL - the URL                 }that the ESCI facility uses to access this supplier
Username - the user name          }
Password - the password            }

Pressing the Test button checks that these settings work.

Confirm Delete

Complete

When you press the Delete button on the Suppliers|Information screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

If the selected supplier is not in use and can be deleted, the window will simply ask you to confirm the delete. Press OK to confirm or Cancel to abort.

If it cannot be deleted because it is in use, the text will be "xxxx has relationships and cannot be deleted. Do you want to deactivate it instead?" (where xxx is the name of the supplier you are trying to delete). Pressing OK will unset its Active flag, Cancel will abort.

Confirm New

Complete

This window allows you to select the type of supplier to be created. Select the required one and press OK, else Cancel to abort.

SMS

Complete

This is the screen used to compose and send an SMS message. For background, see Concepts|SMS.

The fields are as follows:
Phone - the phone number to which the SMS will be sent. If the supplier has multiple phone contact numbers that are SMS enabled, then there will be a pull-down list for you to select from.
Message - the text of the SMS message - a maximum of 160 characters. The counter on the top of the box (96 in the above sample) shows how many more characters you can enter before your text will be truncated.

Press the OK button to send the SMS.

Create/Edit Insurer

Complete

This screen is used to create an edit insurers.

NOTE: when using an Insurance Service, insurers will be created automatically.

The fields are as follows:

Id the OpenVPMS identifier for the insurer
Company Name the insurer name
Description an optional description for the insurer
Template

an optional Document Template to use when printing or mailing claims. The Type of the template must be Insurance Claim - Custom.

If not specified, the Insurance Claim template will be used.

Notes optional notes about the insurer
Active untick this box to deactivate the insurer

See Tabs for a description of the fields in Contacts tab.

The Representatives tab can be used to add representatives for the insurer.

Documents

Complete

This screen displays the documents for the current supplier - or if there is no current supplier, a Select button allowing you to select a supplier.

This screen shows the details of the supplier's Documents. As you can see below, there are three different types: Attachments, Letters  and Forms. The first two support 'versions', ie previous revisions of the document. See Concepts|Documents for background.

The top half of this screen functions like a standard select screen. As well as by date, you can select by:
Type - this can be set to All (ie all document types), or Attachment, Form or Letter
Status - this can be set to All, In Progress, Completed, or Finalised

The table shows the documents that match the selection criteria. The column headings are self explanatory. Clicking on the entry in the Document column will cause the document to be downloaded and displayed.  Note that for Letters the Document column shows two icons like . If you click on the right-hand one, the pdf file containing the letter will be downloaded and displayed. If you click on the left-hand one (or the name of the document) then the word processing document will be downloaded and you can open it in your word processor and save it and then edit it. (You need to save it as it is opened read-only.) After editing the file, you can then use the Edit button to edit the letter and upload the revised file.

The bottom part of the screen shows the details of the selected document.

The buttons are:
New - create a new documment - a window will open allowing you to select the type
Edit - edit the selected document record (not the document itself - though see above). If the document has status Finalised you will not be able to edit the record.
Delete - delete the selected document - a confirmation window will be displayed. If the document has status Finalised you will not be able to delete it.
Print - print the selected document.
Mail - email the selected document.
Refresh - this button only appears when you have a non-finalised letter selected. Pressing it will (if the letter was generated from a template) refresh the letter by regenerating it from the template. This is useful if you have modified the template. A confirm window will be displayed.
External Edit - this button appears if the selected document can be edited in OpenOffice. Clicking this will launch the OpenOffice editor to edit the document directly, avoiding the need to download, edit and re-upload the document.

Create/Edit Attachment

Complete

This is the screen used to create or edit an attachment document in the supplier's Documents list. See Concepts|Documents for background.

The fields are as follows:
Start Time - the date on which the entry was created - defaults to today
Description - any pertinent description
Status - this can be In Progress, Completed, or Finalised.  In Progress implies that you are still working on this; Completed implies that you have finished - but the entry can still be editied; and Finalised means that it is really complete and can no longer be edited.
Printed - this box will be checked when the form has been printed
Attachment - press the Select button to attach the file - after the file is attached its name (notes.txt in this case) is shown here.

The Versions tab shows the previous versions. Note that you can use the Add button to add another, but you can also use the Select button.  If you use the Select button to attach another file, then the previous 'top' version will just be pushed onto the version list.

Create/Edit Form

Complete

This is the screen used to create or edit a form document in the supplier's Documents list. See Concepts|Documents for background.

The fields are as follows:
Start Time - the date on which the entry was created - defaults to today
Description - any pertinent description
Status - this can be In Progress, Completed, or Finalised.  In Progress implies that you are still working on this; Completed implies that you have finished - but the entry can still be editied; and Finalised means that it is really complete and can no longer be edited.
Printed - this box will be checked when the form has been printed
Form - select the form to print - these are the document templates that are of Type 'Supplier Form'
 

Create/Edit Letter

Complete

This is the screen used to create or edit a letter document in the supplier's Documents records. See Concepts|Documents for background. As discussed there, you can either generate a letter from a template, or upload any file.

First let's look at the screen shot for a new letter:

The fields are as follows:
Start Time - the date on which the entry was created - defaults to today
Description - any pertinent description
Status - this can be In Progress, Completed, or Finalised.  In Progress implies that you are still working on this; Completed implies that you have finished - but the entry can still be editied; and Finalised means that it is really complete and can no longer be edited.
Printed - this box will be checked when the letter has been printed
Template - if you want to generate the letter from a template, enter the template here - these are the document templates that are of Type 'Supplier Letter' - the generated document will be an editable word processing file
Document - if you want to simply upload a file as a letter, press the Select button. A document select window will open allowing you to select the required file.  If you upload a word processing file (rather than say a pdf or scanned image of a letter) then you will be able to edit it if needed.

 

Now the edit screen. The senario is as follows: you created an editable letter as above.  Then you decided that you needed to modify it, so on the Suppliers|Documents screen, you selected the letter and then clicked on the actual letter to download it and open it in your word processor. You then saved a copy (as say Survey Letter-2), edited in the required changes and then saved it.

On the Suppliers|Documents screen you now press the Edit button to get the Edit Letter screen. You then press the Document Select button - this will open a browse window to allow you to select your 'Survey Letter-2' and upload it. The screen will then appear as below. The initial version has been saved as the previous version, and your new one as the new current version.

As intimated above, the Versions tab shows the previous versions. Note that you can use the Add button to add another, but you can also use the Select button.  If you use the Select button to attach another file, then the previous 'top' version will just be pushed onto the version list.

Parameters

If a template containing parameters is selected (i.e. Fill-In fields in Microsoft Word, or Input Fields in OpenOffice Writer), a window will be displayed prompting for the values of those parameters. On OK, these will be merged with the document.

Confirm Delete

Complete

When you press the Delete button on the Suppliers|Documents screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

Confirm New

Complete

This window allows you to select the type of supplier document to be created. Select the required one and press OK, else Cancel to abort.

Confirm Refresh

Complete

If you press the Refresh button on the Supplier|Documents screen, then the window below will be displayed. Clicking OK will regenerate the letter from the template.  If you leave the 'Version current document' box checked, then the previous version of the letter will be saved as the previous version, otherwise it will not be.
Pressing the Cancel button will abort the operation.

Orders

Complete

This screen displays the current orders. Note that when you first open this screen after logging on, no orders will be displayed, even though there are some - press the Find button to display all orders that are in progress with delivery pending for all suppliers and all stock locations.

The top part of the screen is a standard select screen. The bottom part displays the selected order and line item details.

Apart from the date, the selection fields are:
Supplier - the supplier - leave blank to select all suppliers
Stock Location - the stock location - leave blank to select all stock locations
Status - can be All or one of the allowed statuses
Delivery Status - can be All or one of the allowed delivery statuses

The fields in the order header are as follows:
Id - the ID of the order
Supplier - the supplier to whom the order is being made
Stock Location - the stock location for which the product is being ordered
Date - the date on which the order was created
Notes - any pertinant notes to the supplier - these will be displayed on the order
Amount - the amount payable to the supplier (ie the sum of the line item total amounts)
Tax - the total tax amount included in Amount
Printed - the checkbox will be ticked if the order has been printed
Status - the order status
Delivery Status - the delivery status
Supplier Response -the response (if any) from the supplier (eg 'widgets on backorder' or 'widgets no longer available')
 

The Items tab shows the line items in the order. If you select one, its details will be displayed as follows:
Product - the product being ordered - note that this is our product name, as opposed to the supplier's (given by Reorder Code and Description). This is a link and you can click on it to get to the Product|Information screen for this product.
Reorder Code & Description, Package Size & Units - see see the Suppliers tab of the Products|Information screen
Quantity - the quantity ordered
Received & Cancelled Quantity - the quantity received and cancelled
Tax - the total tax payable for this line item
Total - the total line item amount - this will equal the Quantity times the Nett Price plus the Tax.

Buttons: For an 'In Progress' order the available buttons are shown above. If there are no orders displayed, then only New, Generate Orders, and Check In-Box are displayed. For a 'Finalised' order, the Delete and Finalise buttons will not be displayed. Apart from the standard ones, the buttons are as follows:

Finalise - initiatiate the process of placing the order. A confirm window will be displayed to let you confirm the Finalise. If you press OK, the order status will be set to 'Finalised'. A print window will be displayed to let you print, preview or email the order.
Print - print the selected order.
Mail - email the selected order.
Copy - copy this order to generate another - you would probably use this to make a copy of a previously completed order so that the items on it can be re-ordered. The new order will be presented in the Order Edit screen so that you can make any adjustments necessary.
Generate Orders - run the Generate Order process to generate the orders - this will bring up a confirmation window to allow you to specify the supplier and stock location. See here for help if you are not generating the orders you expect.
Check Inbox - pressing this checks to see if there are any messages from the ESCI interface, and if so sets the red 'have messages' alert in the messages icon at the top left of the screen. If the alert comes on, then you can use Workflow|Messaging to examine the messages.

Generate Orders

Complete

This window is displayed when you press the Generate Orders button on the Suppliers|Orders screen.

The fields are as follows:
Stock Location - use the pull-down to select the required stock location or choose All to process all stock locations
Supplier - use the pull-down to select the supplier, or choose All to select all suppliers
Generate orders for stock:
 - below ideal levels - this is the default, only items whose stock is below their idea level are processed
 - at or below critical levels - choose this to only process items whose stock is at or below their critical level

The buttons are:
OK - generate the orders - after the orders are generated a window will appear saying home many orders were generated
Cancel - abort

Note that the ordering algorithm is fairly simple:

  • only the preferred supplier set for the product is considered - thus if product X is out of stock, and the supplier selected on the Generate Orders screen is NOT the preferred supplier for the product (but is one the other suppliers listed for the product) then the item will NOT be ordered.
  • the preferred supplier can be specified by the product stock location, or by the product's suppliers. If both are specified, the supplier on the product stock location takes precedence.
  • there is no fancy calculation involving usage rates and lead times
  • if the current stock quantity is negative, then it is assumed that there is zero stock (and not say -6 of them)
  • existing orders are scanned for any that are for the product for the selected stock location from any supplier and that have order status other than Cancelled, and delivery status other than Full, and the number on-order is calculated as ordered less received less cancelled since this gives the number still to come
  • the quantity ordered is (ideal-level - current-stock - on-order)
  • the supplier's package size is taken into account - ie if 14 are required, and the package size is a box of 12, then 2 boxes (ie 24 units) will be ordered

Multiple products are included on the one order, and there will be separate orders for each supplier/stock location.

Note that the orders are simply generated. You can edit them before finalising the order.

Edit Order

Complete

This is the screen used to edit orders.

The fields in the order header are as follows:
Id - the ID of the order
Supplier - the supplier to who the order is being made
Stock Location - the stock location for which the product is being ordered
Date - the date on which the order was created
Notes - any pertinant notes to the supplier - these will be displayed on the order
Amount - the amount payable to the supplier (ie the sum of the line item total amounts)
Tax - the total tax amount included in Amount
Printed - the checkbox will be ticked if the order has been printed
Status - the order status
Delivery Status - the delivery status - note that you cannot change this here
Supplier Response - the response from the supplier - note that you cannot enter this here (because if you are editing the order it has not been finalised and thus cannot have been sent to the supplier)
 

The Items tab shows the line items in the order. Use the Add and Delete buttons to add and delete items from the order.

The line item fields are as follows:
Product - the product being ordered - note that this is our product name, as opposed to the supplier's (given by Reorder Code and Description). This is a link and you can click on it to get to the Product|Information screen for this product.
A warning will be displayed if two or more items have the same product.
Reorder Code & Description, Package Size & Units - see see the Suppliers tab of the Products|Information screen - note that you edit the values for this order here, but for permanent changes you need to edit the product|supplier information
Quantity - the quantity ordered
On Hand - the current quantity held at the stock location
Received & Cancelled Quantity - the quantity received and cancelled - which you cannot set here
Nett Price & List Price - again these are taken from the Product|Supplier settings and you edit the values for this order here, but for permanent changes you need to edit the product|supplier information
Tax - the total tax payable for this line item
Total - the total line item amount - this will equal the Quantity times the Nett Price plus the Tax.

Confirm Delete

Complete

When you press the Delete button on the Suppliers|Orders screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

Confirm Finalise

Complete

When you press the Finalise button on the Suppliers|Orders screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

If you press OK the order status will be set to Finalised and you will be able to print the order.

Deliveries

Complete

This screen displays the deliveries and returns for the selected supplier and stock location. Initially the screen looks as follows:

The top part of the screen is a standard select screen.  Enter the required Supplier and Stock Location. You can select one of the following statuses: All, Cancelled, In Progress or Posted.
 

After finding orders, and selecting an order and a line item the screen looks as follows:

For details on the fields in the header and the Items tab, see Edit Delivery.
For details on the fields in the Order tab, see Edit Order.

The buttons are as follows:
New - create a new delivery or return
Edit - edit the delivery/return
Delete - delete the delivery/return - a confirm window will be displayed
Finalise - finalise the delivery/return indicating that it is ready for invoicing/crediting. A confirm window will be displayed - if you OK the finalisation, the status will be change to 'Finalised'. You will also be asked if you want to create a supplier invoice/credit note for the delivered/returned items.
Print - print the selected delivery/return.
Mail - email the selected delivery/return.
Invoice - create the invoice for this delivery. Only applies to Finalised deliveries. The delivery status will be set to Posted.  Note that you will not be able to do any more changes to this delivery, and the system will not object if you have only had a part delivery (eg 3 items delivered out of 6 ordered) - because what you are doing is creating the invoice for the part delivery. Note that the invoice is normally created as the second step of the Finalise process - see below.
Reverse - create a return note to reverse the selected delivery - a confirm window will be displayed. Only applies to Finalised deliveries.
Check Inbox - pressing this checks to see if there are any messages from the ESCI interface, and if so sets the red 'have messages' alert in the messages icon at the top left of the screen. If the alert comes on, then you can use Workflow|Messaging to examine the messages.

If you edit the delivery, you can change the supplier information (ie the Reorder Code & Description, Package Size & Units, List and Nett prices), and when the delivery is finalised, these will be updated in the product's Supplier information for this supplier. You can also enter any batch information for the delivered products. You can also add items to the delivery - you will want to do this if you ordered product X but they delivered product Y, or if what was delivered consists of two or more batches (because one line item can only contain one set of batch information).

Select

Complete

This is the screen used to select the order line items for which you want to create a delivery. The picture below shows the screen after a supplier and stock location (for which there are outstanding orders) have been entered and the Find button pressed.

The screen will show the line items for all the current finalised orders for which there have been no deliveries yet.

You can see that there are two types of rows in the table, the first shows just the order date, and the second the line item(s).  In the above picture there are two orders, each with one line item.

Check the appropriate boxes.  If all the line items in an order are being delivered, check the order date row - this will automatically select all items in that order.  If only some line items are being delivered, check those and not the order date row.

If you got a part delivery of an item (ie you ordered 20 and got 15), then tick the line - so that this line item gets included in the delivery record, which then you can edit to correct the delivered quantity from 20 to 15.

Press OK to continue, or Cancel to abort.
 

Edit Delivery

Complete

This screen is used to create and edit deliveries.

The fields in the header are as follows:
Supplier - the supplier
Stock Location - the stock location
Date - the date of the delivery
Amount - the sum of the line item amounts
Tax - the total tax included in the Amount
Printed - this box will be checked when the delivery note has been printed
Notes - any pertinent notes
Status - this initially set to In Progress, but can also be set to Cancelled or Finalised

The Items tab shows the items being delivered, and the details for the selected line. These are as follows:
Product - the product - this is our name for the product
Batch Number - the product batch number - optional
Expiry Date - the product expiry date - optional
Manufacturer - the product manufacturer - optional
Reorder Code & Description - the supplier's identification of the item
Package Size & Units - the package details
Quantity - the quantity being delivered - this defaults to the quantity ordered, but you can see in the above that we have said that only 3 of the 6 ordered have been delivered
Nett Price - the tax-excluded price from the supplier
List Price - the supplier's list price
Tax - the title tax for the line item
Total - the total tax-included amount for the line item

If you modify any of the supplier information fields (eg Reorder Code & Description, Package Size & Units, Nett & List prices), then when the delivery is finalised, this information will be updated in the product's supplier information.

If the Auto Price Update flag is set (see here), then the product's Cost and Sell prices will also be updated if you modified the Package Size and/or List price.

Note that if this delivery item is linked to an order item, then you will not be able to modify the Product (even though it is an editable field). That is, if you ordered a X but they delivered a Y, then you cannot change X to Y in the delivery line item - you have to delete the X delivery item and add a new delivery item for Y. [You will also have to edit the order to cancel the X's otherwise they will be oustanding on the order.

If you do add a delivery item, make sure that you press Enter after entering the Product name - this will call in all the supplier information so that you can check it and update if required.

Product Batches

If a delivery line item has a Batch Number or Expiry Date, a Product Batch will be created when the delivery is finalised, if no Product Batch exists for the product with those details. The Product Batch matching the details will be linked to the Stock Location of the delivery.

 

Edit Return

Complete

This screen is used to edit a supplier return.  It has the same fields as the Edit Delivery screen.

Confirm Finalise

Complete

When you press the Finalise button on the Suppliers|Deliveries screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

If you press OK the delivery note status will be set to Finalised and you will be able to print the delivery or return note.

Confirm Invoice

Complete

When you finalise a delivery on the Suppliers|Deliveries screen, you will be asked if you want to invoice the supplier. If you OK that, then this confirmation window will appear. Press OK to confirm or Cancel to abort.

Confirm New

Complete

This window allows you to select the type of delivery to be created. Select the required one and press OK, else Cancel to abort. Note that since Delivery is the default type and OK is the default button, you can just press Enter to create the delivery transaction.

Confirm Reverse

Complete

When you press the Reverse button on the Suppliers|Deliveries screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

?? need more ???

?? correct URL ???

Charges

Complete

This screen displays the charges for the current supplier - or if there is no current supplier, a Select button allowing you to select a supplier.

Note that 'charges' are the invoices (or credits) that are currently in progress. If you need to look at previously completed invoices etc, then you use the Supplier|Account screen.

The top part of the screen is a standard select screen. If you need to change the supplier, press the Select button. The bottom part displays the selected invoice and line item details.

Apart from the date, the selection fields are:
Type - you can select All, Credit, or Invoice
Status - can be All, Completed, In Progress, or On Hold

The fields in the invoice/credit note header are as follows:
Start Time - the date on which the invoice/credit note was created
Amount - the total tax-included amount of the invoice/credit note
Credit - this checkbox will be checked if this is a credit note, otherwise (for an invoice) it won't be
Printed - the checkbox will be ticked if the invoice/credit note has been printed
Status - the invoice/credit note status
 

The Items tab shows the line items in the invoice/credit note. If you select one, its details will be displayed as follows:
Date - the date on which the line item was created
Product - the product being ordered - note that this is our product name, as opposed to the supplier's (given by Reorder Code and Description)
Quantity - the quantity ordered
Unit Price - the unit nett tax-excluded price of the item
Tax - the total tax payable for this line item
Total - the total line item amount - this will equal the Quantity times the Unit Price plus the Tax.

Buttons: For an 'In Progress' transaction the available buttons are shown above. If there are no transactions displayed, then only New is displayed. Apart from the standard ones, the buttons are as follows:

Finalise - initiatiate the process of finalising the transaction. A confirm window will be displayed to let you confirm the Finalise. If you press OK, the status will be set to 'Finalised'. A print window will be displayed to let you print, preview or email the invoice.
Print - prints the selected invoice/credit note.
Mail - emails the selected invoice/credit note.
 

Edit Credit

Complete

This is the screen used to create and edit supplier credit notes.

The header fields are as follows:
Start Time - the date on which the credit note was created
Amount - the amount of the credit note - this is the sum of the line item amounts
Printed - this checkbox will be checked when the credit note is printed
Status - is initially set to In Progress, and can also be set to On Hold or Finalised

The Items tab allows you to add, delete, view and edit the line items. The fields are as follows:

Date - the date on which the line item was created
Product - the product - note that this is our product name, as opposed to the supplier's (given by Reorder Code and Description). Note also that there is no check that the product selected is in fact provided by the currently selected supplier.
Quantity - the quantity
Unit Price - the unit nett tax-excluded price of the item
Tax - the total tax payable for this line item
Total - the total line item amount - this will equal the Quantity times the Unit Price plus the Tax.

Edit Invoice

Complete

This is the screen used to create and edit supplier invoices.

The header fields are as follows:
Start Time - the date on which the invoice was created
Amount - the amount of the invoice - this is the sum of the line item amounts
Printed - this checkbox will be checked when the invoice is printed
Status - is initially set to In Progress, and can also be set to On Hold or Finalised

The Items tab allows you to add, delete, view and edit the line items. The fields are as follows:

Date - the date on which the line item was created
Product - the product - note that this is our product name, as opposed to the supplier's (given by Reorder Code and Description). Note also that there is no check that the product selected is in fact provided by the currently selected supplier.
Quantity - the quantity
Unit Price - the unit nett tax-excluded price of the item
Tax - the total tax payable for this line item
Total - the total line item amount - this will equal the Quantity times the Unit Price plus the Tax.

Confirm Delete

Complete

When you press the Delete button on the Suppliers|Charges screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

Confirm Finalise

Complete

When you press the Finalise button on the Suppliers|Charges screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

If you press OK the invoice/credit note status will be set to Finalised and you will be able to print the invoice/credit note.

Confirm New

Complete

This window allows you to select the type of charge to be created. Select the required one and press OK, else Cancel to abort.

Payments

Complete

This screen displays the payments for the current supplier - or if there is no current supplier, a Select button allowing you to select a supplier.

Note that 'payments' are the payments (or refunds) that are currently in progress. If you need to look at previously completed payments etc, then you use the Supplier|Account screen.

The top part of the screen is a standard select screen. If you need to change the supplier, press the Select button. The bottom part displays the selected transaction and line item details.

Apart from the date, you can select by:
Type - you can select All, Payment or Refund

The fields in the payment/refund header are as follows:
Date - the date on which the payment/refund was created
Amount - the total tax-included amount of the payment/refund
Printed - the checkbox will be ticked if the payment/refund has been printed
Status - the payment/refund status
 

The Items tab shows the line items in the payment/refund. If you select one, its details will be displayed.  These vary depending on the payment/refund type.  See Edit Payment and Edit Refund for details.

Buttons: For an 'In Progress' transaction the available buttons are shown above. If there are no transactions displayed, then only New is displayed. Apart from the standard ones, the buttons are as follows:

Finalise - initiatiate the process of finalising the transaction. A confirm window will be displayed to let you confirm the Finalise. If you press OK, the status will be set to 'Finalised'. A print window will be displayed to let you print, preview or email the payment/refund.
Print - prints the selected payment/refund.
Mail - emails the selected payment/refund.
 

Create/Edit Payment

Complete

This is the screen used to create and edit supplier payments.

The header fields are as follows:
Date - the date on which the payment was created
Amount - the amount of the payment - this is the sum of the line item amounts
Printed - this checkbox will be checked when the payment is printed
Status - is initially set to In Progress, and can also be set to On Hold or Finalised

The Items tab allows you to add, delete, view and edit the item items. The pull-down allows you to select the payment type to be one of Cash, Cheque, Credit Card, or EFT.

The table shows the line items - normally there will be only one.

The item detail area changes depend on the payment type. The picture above shows EFT.

For Cash it is as follows:

The fields are as follows:
Amount - this will default to the amount owed
Rounded Amount - this is the rounded equivalent of Amount using the minimum cash denomination and rounding mode set for the currency - see Administration|Lookups|Currency
Tendered - the amount tendered
Change - this will be Tendered less Rounded Amount

For Cheque it is as follows:

The fields are as follows:
Amount - this will default to the amount owed
Drawer - the name of the drawer of the cheque
Branch - something that identifies the branch of the bank. For Australian usage this is the BSB (Bank State Branch) number.
Bank - select the bank using the pull-down. The values allowed are set via Administration|Lookups|Bank.

For Credit Card it is as follows:

The fields are as follows:
Amount - this will default to the amount owed
Credit Card - select the credit card using the pull-down. The values allowed are set via Administration|Lookups|Credit Card.

Edit Refund

Complete

This is the screen used to create and edit supplier refunds.

The header fields are as follows:
Date - the date on which the refund was created
Amount - the amount of the refund- this is the sum of the line item amounts
Printed - this checkbox will be checked when the refund is printed
Status - is initially set to In Progress, and can also be set to On Hold or Finalised

The Items tab allows you to add, delete, view and edit the item items. The pull-down allows you to select the refund type to be one of Cash, Cheque, Credit Card, or EFT.

The table shows the line items - normally there will be only one.

The item detail area changes depend on the payment type. The picture above shows EFT.

For Cash it is as follows:

The onlly field is:
Amount - the amount to be refunded
 

For Cheque it is as follows:

The fields are as follows:
Amount - the amount to be refunded
Drawer - the name of the drawer of the cheque
Bsb - something that identifies the branch of the bank. For Australian usage this is the BSB (Bank State Branch) number.
Bank - select the bank using the pull-down. The values allowed are set via Administration|Lookups|Bank.

For Credit Card it is as follows:

The fields are as follows:
Amount - the amount to be refunded
Credit Card - select the credit card using the pull-down. The values allowed are set via Administration|Lookups|Credit Card.

Confirm Delete

Complete

When you press the Delete button on the Suppliers|Payments screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

Confirm Finalise

Complete

When you press the Finalise button on the Suppliers|Payments screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

If you press OK the payment/refund status will be set to Finalised and you will be able to print the payment/refund.

Confirm New

Complete

This window allows you to select the type of payment to be created. Select the required one and press OK, else Cancel to abort. Note that since Payment is the default selection, and OK the default button, you can simply press the Enter key to create a new payment.

Account

Complete

This screen displays the account for the current supplier - or if there is no current supplier, a Select button allowing you to select a supplier.

Note this screen displays the completed financial transactions (ie invoices, payments, etc etc). If you need to look at invoices and payments that are in progress, then you need to use the Supplier|Charges or Supplier|Payments screens.

The top part of the screen is a standard select screen. If you need to change the supplier, press the Select button. The bottom part displays the selected transaction and its line item details.

Apart from the date, you can select by:
Type - you can select All, Credit, Invoice, Payment or Refund

The fields in the item header are as follows:
Start Time - the date on which the transaction was created
Amount - the total tax-included amount of the transaction
Credit - this checkbox will be checked if this is a credit note or refund, otherwise (for an invoice or payment) it won't be
Printed - the checkbox will be ticked if the transaction has been printed
Status - the transaction status
 

The Items tab shows the line items in the transaction . If you select one, its details will be displayed as follows:
Date - the date on which the line item was created
Product - the product - note that this is our product name, as opposed to the supplier's (given by Reorder Code and Description)
Quantity - the quantity
Unit Price - the unit nett tax-excluded price of the item
Tax - the total tax payable for this line item
Total - the total line item amount - this will equal the Quantity times the Unit Price plus the Tax.

Buttons: The buttons are as follows:

Reverse - create a transaction to reverse the selected one. A confirm window will be displayed to let you confirm the reversal. See Confirm Reverse.
Print - prints the selected transaction.
Mail - emails the selected transaction.

Confirm Reverse

Complete

When you press the Reverse button on the Suppliers|Account screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

If you press OK the reversing transaction will be generated as follows:

Transaction Reversing Transaction Find in
Invoice Credit Charges
Credit Invoice Charges
Payment Refund Payments
Refund Payment Payments

You will then need to edit if necessary, and then finalise the created transaction.

Select

Complete

The Supplier select screen is displayed whenever you are looking for a supplier. It works like a standard select screen.

This is a standard select screen. The Type can be set to All or one of the different types of supplier - see Concepts|Supplier.

The column headings need no explanation.

Workflow

Complete

The Workflow workspace is use to handle workflow related items.  See also Concepts|Schedules, Work Lists and Workflow.

Scheduling

Complete

This screen displays two tabs:

Appointments

The appointments tab displays data in several modes:

Note that the left hand panel displays the current customer and patient. This will change as the different appointments are selected. Below the Bourke/Muffett appointment is selected (note the italic font).

First the multi-schedule display.

This is essentially a select screen. The selection fields area as follows:
View - this is used to select the Schedule View to be used
Schedule - this can be set to All or any one of the Schedules that are part of the current Schedule View.  If you select other that All, then the schedule will be displayed in single schedule mode - see below.
Clinician - this can be set to All or any one of the clinicians. If you select a clinician, then all the appointments for clinicians other that the one selected will be 'greyed out'.
Date - the date selector allows you to enter a date, go back or forth one day, or one week (the outer arrows), or, with the black square, select today.
Highlight - this can be set to Clinician, Event Type or Status and changes the colours used to display each appointment
Time - this can be set to All, Morning, Afternoon, Evening, AM or PM. This sets the part of the day for which the schedule is displayed. Note also that if there is part of the day for which the schedule is not available then there will be no slots in that part. In the picture, the Surgery starts at 8am but the main clinic not until 9am.

The display area consists of one column per schedule, each showing the events that match the selection conditions. Events may be appointments or calendar blocks; calendar blocks can be used to block out parts of a schedule to restrict appointment creation.
What is displayed for each appointment is set via the Administration|Organisation|Schedule View screen. Here you can see that this view is set to display the customer, patient and status (but not the clinician).

If a bell icon is displayed, it indicates that an SMS reminder may be sent for the appointment:

  • a grey bell indicates no reminder has been sent
  • a gold bell indicates a reminder has been sent
  • a red bell indicates a reminder could not be sent. The Reminder Error field in the appointment will display the reason.

The buttons are as follows: (see below for when the various buttons are displayed)
New - create a new appointment in the currently selected time slot. To select a time slot, click it and it will display in the slot, then press the New button (or click the slot again) and the New Appointment screen will open. The new appointment will have status Pending.
Edit - edit the selected event
Delete - delete the selected event. A confirm window will appear. Note that you cannot delete appointments that have status Completed - if you really do need to delete a completed appointment, first edit it to change the status to other than Completed.
Print - print the selected appointment.
Mail - email the selected appointment.
Check-In - initiates the check-in process      }
Consult - opens the Visit Editor window        } click here for details
Check-Out - initiates the check-out process  }
Transfer - transfers a patient to a Work List }
OTC - Over The Counter sale - opens the New Counter Sale window to allow you to make an OTC sale
New Flow Sheet - creates a Smart Flow Sheet for the patient associated with an appointment.
Remind - sends an appointment reminder SMS for the selected appointment.
Block - creates a new calendar block in the current selected time slot.

 

Moving an event

To move an appointment or calendar block to another date/time, either:

  • edit it and change the start and end times; or
  • 'cut and paste' it:
    • select the event by clicking on it
    • cut it using Ctrl-X
    • navigate to the day and schedule that you want
    • click on the new time slot so that appears
    • paste it using Ctrl-V

Cut and paste allows the event to be moved to another schedule.

Copying an event

To copy an event to another date/time, either use 'copy and paste':

  • select the event by clicking on it
  • copy it using Ctrl-C
  • navigate to the day and schedule that you want
  • click on the new time slot so that appears
  • paste it using Ctrl-V

 

The single-schedule display is as follows:

The selection fields and buttons are the same as for the multi-schedule display.

The display area columns are as follows:
Time - the slot start time
Status - the appointment status - which will be (in logical order) one of Pending, Waiting, Admitted, In-Progress, Billed, Completed, or Cancelled. Note that the status 'Checked-In' is translated here to 'Waiting' with the time since checked-in - see the 9.30 slot in the picture above.
Appointment Type - the type of appointment - those available are set via Administration|Types|Appointment Type
Customer - the customer - note that the name is a link - clicking on it will take you to the Customers|Information screen
Patient - the patient - note that the name is a link - clicking on it will take you to the Patients|Medical Records screen
Notes - the notes for the appointment
 


The multi-day display is the default display for Schedule Views that have Multiple Day View selected:

The selection fields and buttons are the same as for the multi-schedule display. It adds:

Dates - this allows the date range to be selected:

  • Month - displays a month of appointments
  • Fortnight - the default. Displays 2 weeks of appointments
  • Week - displays a week of appointments
  • Day - the same as the multi-schedule display

Show - this determines how schedules are displayed

  • All - displays all schedules as they appear in the selected View
  • Cages - displays schedules grouped by their Cage Type, with:
  • total slots by Cage Type
  • available slots by Cage Type, by day
  • Summary - similar to the Cages view, except that the appointment details are displayed as one of:
    • B - indicates that the pet is boarding, i.e. is staying overnight
    • D - indicates that the pet is in for the day only
    • > - indicates that the pet is leaving on the day
  • Check-Ins - displays all schedules that have check-ins for the selected day
  • Check-Outs - displays all schedules the have check-outs for the selected day

The display area consists of one column per day, and one row per schedule, each showing the appointments that match the selection conditions.

Appointments that start on a date before the first displayed date have an icon.

Appointments that end on a date after the last displayed date have an  icon.

 

 

Available Buttons
The following table shows when each button is displayed.

Button Displayed When
OTC Always
New Time slot selected
Edit Event selected
Delete Event selected
Print Appointment selected
Check-In status = Pending
Consult status = In-Progress, Billed, Completed
Note that if you press Consult on a Completed or Billed appointment, then the Visit Editor opens so that you can add to the visit record
Check-Out status = In-Progress, Billed, Completed
Note that if you press Check-out on a Completed appointment, a new invoice will be opened so that you can add items to it.
Transfer status = Checked-In, In Progress, Admitted, Billed, Completed
New Flow Sheet An appointment is selected and Smart Flow Sheet is configured for the Practice Location.
Remind The selected appointment has status Pending, the appointment is either for today or in the future, and the customer can receive SMS messages.
Block Time slot selected

Find Free Appointments

The Find Free Appointments tab simplifies locating free appointment slots.

The upper part of the screen displays the query critiera. The lower part, the free slots matching the criteria.

Below, the query is for free slots in the Main Appointment Schedule from the 1/7 to the 3/7 between 10:00am and 1:00pm that are at least 1 hour in length.

Four matches have been shown. Clicking on one of these will switch to the appropriate Schedule View on the Appointments tab, selecting the Schedule time.

 

View - this is used to select the Schedule View to be used.
Schedule - this can be set to All, or any one of the Schedules that are part of the current Schedule View. 
From - the date to start searching from.
To - the date to search to.
From Time - the time of day to start searching from. If not set, this defaults to the time the schedule starts at.
To Time - the time of day to search to. If not set, this defaults to the time the schedule ends at.
Duration - the minumum duration to search for. This defaults to the minumum duration of the selected Schedule(s).
Clinician - filters by clinician. The clinician must be rostered on within the date range.
Cage Type - filters by Cage Type. This is only displayed when Schedules have Cage Types.

Boarding Schedules

Find Free Appointments can be used to locate consecutive days in boarding schedules. These should be configured to either have no Start Time nor End Time set, or to start at 0:00 and end at 24:00.

 

Appointment

Complete

This window is used to create and edit an Appointment.

The fields are:
Customer - the customer - this is a mandatory field
Patient - the patient - this is an optional field
Appointment Type - the type of the appointment.
Start Time - the date and time that the appointment will start
End Time -the date and time that the appointment will end. If the practice operates on a 24 hour basis, you can create the appointment to run across the midnight boundary - ie start 23:00 on 3/7/13 and end at 00:30 on 4/7/13.  For multi-day (such as Boarding) appointments, you can enter a relative date such as 7d and this will set the end time to 7 days after the start time. (Note that using relative dates normally sets a date relative to the current date - in this case it is relative to the appointment start date.)
Duration - the appointment duration, expressed in days, hours and minutes.
Repeat - determines the appointment recurrence. See Repeating Appointments below.
Reason - the reason for the appointment - the available reasons are set using Administration|Lookups|Visit Reason and Administration|Lookups|Visit Reason (VeNom). Note that this will be placed into the Visit Reason field when the appointment is checked-in. Note that if you key in something (say x) and press enter, you will be shown all reasons containing 'x', eg Desexing, Discuss X-Ray, and X-Ray - ie the search is "contains 'x'" rather than "starts with 'x'".
Notes - any pertinent notes
Clinician - the clinician - this is an optional field
Status - the status can be one of (in logical order) Pending, Checked-In, In Progress, Admitted, Billed, Completed or Cancelled
Author - the user that created the appointment
Send Reminder - displayed if appointment reminder SMS messages can be sent to the customer. Reminders can be sent if:

  • SMS is configured
  • the customer has an SMS contact
  • the appointment Schedule has Send Reminders ticked
  • the appointment Type has Send Reminders ticked

Online Booking - if ticked, this appointment was created using the Online Booking interface.

If the first two are true, but not the last two, then an SMS Reminder can still be sent manually. If the first three are true, but not the last, Send Reminders will be displayed, but the check box will be disabled and un-ticked. Changing the Appointment Type to one that supports reminders will enable the checkbox.

Reminder Sent - displayed if a reminder has been sent for this appointment
Reminder Error - displayed if a reminder couldn't be sent, and indicates the cause of the error.

Customer & Patient Alerts - if the customer or patient has any current alerts, these are displayed.
 

Note that normally both the status and the completed date/time are updated by the system's workflow processing when you use the Consult (sets status In Progress) and Check-Out (sets status Completed and the Completed date/time) buttons on the Work List screen, and Complete/Finalise (sets status Billed) button on the Invoice screen.

The two status settings not set automatically by the workflow processing are Cancelled and Admitted. You set Cancelled to show that an appointment has been cancelled. Admitted can be used to indicate that the patient has been admitted to hospital.

Appointment Type

The Appointment Type determines the default duration of an appointment and how it is displayed.
The available types and their duration are set via Administration|Organisation|Schedule.

Repeating Appointments

Appointments can be made to repeat one or more times, to form a series of appointments. Each appointment in the series:

  • has the same details as the first appointment
  • can be edited independently of the series

This can be used to schedule a follow-up appointment, or recurring appointments e.g. Puppy Class.

Repeat Options

Appointments can be made to repeat:

  • Daily
    • Every day
    • On weekdays
    • Every N days
    • Every Sunday...Saturday
  • Weekly
    • Every Week
    • Every N weeks
  • Monthly
    • Every month
    • Every N months
    • On the first..fifth or last Sunday...Saturday every N months
    • On the 1..31 or last day(s) every N months 
  • Yearly
    • Every year
    • Every N years
    • On the 1..31 January...December every N years
    • On the first..fifth or last Sunday...Saturday of January...December every N years

Appointments repeat until a specified date, or number of times. If you use 'until date' you can use the relative date facility - eg 0ye will set the end of the current year, and 6me will set the end of the 6th month ahead.

Restrictions

  • at most only 364 recurring appointments can be scheduled (i.e. for a total of 365 in a series)
  • if an appointment is set to repeat on a day that is not available, it is skipped. E.g specifying a monthly repeat on the 31st of the month will skip all months without 31 days.

 

Calendar Block

Complete

A Calendar Block is a block of time in a schedule that can be used to:

  • limit scheduling of appointments
  • reserve the schedule for specific customers

The fields are:

Block Type - the type of the block, e.g. Public holiday, Reserved for Puppy School etc
Name - the name of the calendar block. If none is specified, the Block Type name will be displayed. E.g. the Block Type may be Public holiday, and the Name Easter.
Start Time - the date and time that the block will start
End Time -the date and time that the block will end. If the practice operates on a 24 hour basis, you can create the appointment to run across the midnight boundary - ie start 23:00 on 3/7/13 and end at 00:30 on 4/7/13.  For multi-day calendar blocks, you can enter a relative date such as 7d and this will set the end time to 7 days after the start time. (Note that using relative dates normally sets a date relative to the current date - in this case it is relative to the start date.)
Duration - the calendar block duration, expressed in days, hours and minutes.
Repeat - determines the calendar block recurrence. This has the same options as Repeating Appointments.
Notes - optional notes.
Author - the user that created the calendar block.

Block Type

The Block Type:

  • provides a default name for the calendar block, if no Name is specified
  • determines the colour of the block in the schedule
  • can be used to reserve times for customers

Reservations

By default, a Calendar Block will allow appointments to be scheduled during the block period, with a warning.

A Calendar Block may be used to reserve times in a schedule by selecting a Block Type that is specifies reservations for particular customers. An appointment will only be allowed to be created if a customer is one of the types identified by the Block Type.

Restrictions

Calendar blocks may not overlap existing appointments or other calendar blocks.

Confirm Delete

Complete

This screen is displayed when you initiate the deletion of an appointment on the Workflow|Scheduling screen.

Press OK to confirm else Cancel.

Copy Series

Complete

The Copy Series window is displayed if a repeating Appointment or Calendar Block is selected for copying and:

  • there are future events in the series; or
  • all event in the series are in the future

Selecting:

  • Only this ...
copies the current event block
  • This and all future  ...
creates a series containing the current and subsequent events
  • The entire series
copies all events in the series

For appointments, all copied appointments have Pending status.

Delete Series

Complete

The Delete Series window is displayed if a repeating appointment or calendar block is selected for deletion and:

  • there are future events in the series; or
  • all events in the series are in the future

Selecting:

  • Only this ...
deletes the current event
  • This and all future ...
deletes the current event, and all subsequent events
  • The entire series
deletes the current event and all other events in the series

Edit Series

Complete

The Edit Series window is displayed if a repeating appointment or calendar block is edited and:

  • there are future events in the series; or
  • all events in the series are in the future

Selecting:

  • Only this ...:
    • the Repeat field cannot be changed
    • changes are not propagated to other events in the series
       
  • This and all future ...:
    • the Repeat field can be changed. This does not affect prior events.
    • changes to the event are propagated to all subsequent events
       
  • The entire series
    • the first event in the series is edited
    • the Repeat field can be changed. This affects all subsequent events
    • changes to the event are propagated to all subsequent events

 

Move Series

Complete

The Move Series window is displayed if a repeating appointment or calendar block is selected for moving and:

  • there are future events in the series; or
  • all events in the series are in the future

Selecting:

  • Only this ...
moves the current event
  • This and all future ...
moves the current and subsequent events
  • The entire series
moves all events in the series

Work Lists

Complete

This screen is used to display the Work Lists - ie the list of tasks and their status. The buttons allow you to move the task through its various stages from pending to completed. For background see Concepts|Schedules, Work Lists and Workflow.

The screen displays data in two modes, multi-list and single list. Note that the left hand panel displays the current customer and patient. This will change as the different tasks are selected. Below the Casbolt/Bree task is selected (note the italic font).

First the multi-list display.

This is essentially a select screen. The selection fields area as follows:
View - this is used to select the Work List View to be used
Work List - this can be set to All or any one of the Work Lists that are part of the current Work List View.  If you select other that All, then the work list will be displayed in single list mode - see below.
Clinician - this can be set to All or any one of the clinicians. If you select a clinician, then all the tasks for clinicians other that the one selected will be 'greyed out'.
Date - the date selector allows you to enter a date, go back or forth one day, or one week (the outer arrows), or, with the black square, select today. Note that the date controls what is displayed as:
startTime <= day 23:59:59 and (endTime >= day 0:0:0 or endTime is null)
Functionally, this means that completed tasks will only be displayed if they were completed on the selected date.
Highlight - this can be set to Clinician, Event Type or Status and changes the colours used to display each task
Status - this can be set to All, Incomplete, or Complete

The display area consists of one column per work list, each showing the tasks that match the selection conditions. What is displayed for each task is set via the Administration|Organisation|Work List View screen. Here you can see that this view is set to display, the customer, patient and status (but not the clinician). The i balloon indicates that there is a note for the task - clicking the balloon will display the note. (If the task has been created as a result of checking-in a patient, then the task note will generated from the appointment reason and any appointment note.)

The buttons are as follows: (see below for when the various buttons are displayed)
New - create a new task in the currently selected work list. You may find it more obvious to click in the half slot at the bottom of the tasks in the desired work list column - this will display in the slot, then click it again (or press the New button) and the New Task screen will open.
Edit - edit the selected task.
Delete - delete the selected task.
Print - print the selected task.
Mail - email the selected task.
Consult - opens the Visit Editor window.        } click here for details
Check-Out - initiates the check-out process . }
Transfer - transfers the task to another work list. If the target work list has:

  • templates or Use All Templates is ticked, a Print window will be displayed listing the available templates to print.
  • Create Flow Sheet ticked and Smart Flow Sheet is configured and the patient has a current Visit and no Flow Sheet, one will be created.

OTC - Over The Counter sale - opens the New Counter Sale window to allow you to make an OTC sale.
New Flow Sheet - creates a Smart Flow Sheet for the patient associated with a task. 


 

The single-list display is as follows:

The selection fields and buttons are the same as for the multi-list display.

The display area columns are as follows:
Started - the time at which the task was created - not that only hours and minutes are shown even if the task was started say 3 days ago
Status - the task status - which will be (in logical order) one of Pending, In Progress, Billed, Completed, or Cancelled
Task Type - the type of task - those available are set via Administration|Types|Task Type
Customer - the customer - note that the name is a link - clicking on it will take you to the Customers|Information screen
Patient - the patient - note that the name is a link - clicking on it will take you to the Patients|Medical Records screen
Notes - the notes for the task
Time - the time (in hours and minutes) since the task was started

 

 Available Buttons
The following table shows when each button is displayed.

Button Displayed When
OTC always
New work list selected
Edit task selected
Delete task selected
Print task selected
Mail task selected
Consult status = In-Progress, Billed
Check-Out status = In-Progress, Billed
Transfer status = Pending, In-Progress, Billed
New Flow Sheet a task is selected, and Smart Flow Sheet is configured for the Practice Location

Task

Complete

This window is used to create and edit a Work List Task.

If you are creating a new Follow-Up task the screen will look like:

The fields are:
Customer - the customer - this is a mandatory field
Patient - the patient - this is an optional field
Work List - (present only when creating a new Follow-Up task) - used to select the work list to which the task is to be added. The available worklist are those set for the current clinician, current user and current practice location (via Administration|Users and Administration|Organisation|Practice Location). The initially selected one is that set as the first on the clinician's list of Follow-Up work lists; and if s/he has none, the from the user's list and if they have none then from the Practice Location's list.
Task Type - the task type - see Administration|Types|Task Type
Started - the date and time that the task was started
Completed - the date and time that the task was completed
Notes - any pertinent notes
Clinician - the clinician - this is an optional field
Status - the status can be one of (in logical order) Pending, In Progress, Billed, Completed or Cancelled

Note that normally both the status and the completed date/time are updated by the system when you use the Consult (sets status In Progress) and Check-Out (sets status Completed and the Completed date/time) buttons on the Work List screen, and Complete/Finalise (sets status Billed) button on the Invoice screen.

Confirm Delete

Complete

This screen is displayed when you initiate the deletion of a task on the Workflow|Work Lists screen.

Press OK to confirm else Cancel.

Worklist Document Print

Complete

This print window is displayed if there are documents available for printing as part of the worklist transfer process. Those available are defined by the Template settings for the Work List - see Administration|Organisation|Worklists.

Check those documents to be printed, and then press OK to process them.  Press Skip to skip printing any documents.

If a letter to be printed has parameters, a prompt will be displayed allowing them to be entered.

The documents selected will be saved, available from Patients|Medical Records|Documents.

The standard Print window will be displayed. Pressing OK on this will print the documents.  Press Cancel if you do not want them printed - the documents will be available in Patients|Medical Records|Documents.

Messaging

Complete

Messages

Complete

This is the screen used to manage messages. For background, see also Concepts - Messages.

 

The screen is in two halves, the top is a standard select screen, the bottom displays the selected message, and then there are buttons to create, process and print the messages.

In the top half:
Type - selects the type of message (All, System, or User)
Status - selects the message status (Completed, Pending or Read). Newly received messages will be Pending until read by the To addressee, then Read, and then (when the Completed button is pressed), Completed.
Dates - normally you can leave the All box checked, otherwise uncheck it and enter the required from and to dates
User - by default this will be set to your user name, but you can enter any name in order to see the messages to that user.  Note that you cannot enter a user-group name.

The column headings are as follows:
Date - shows the date and time, or if it's today then just the time
Description - the message subject
From - the user who sent the message
Reason - the message reason
Status - its status. This will be Pending, Read (ie read by the To addressee), or Completed.
Item - this field will be blank for User messages, but may contain information for System messages

In the bottom half the fields are self-explanatory, except for the following:
From & To - note that these user names are links, and clicking on them will redisplay the screen with the User set to the name you clicked. Hence you can quickly switch to see the messages for the from or to person.
Customer & Patient - similarly, these are links to take you to the customer or patient workspace

Buttons - these are as follows: (only New will be visible if no message is selected)
New - create a new message.
Reply - reply to the message.
Forward - forward the message.
Delete - delete the message.
Complete - change the message status to Completed.
Print - print the message.
Mail - email the message.

Note that you can forward and reply to completed messages - the resulting message will be 'Pending'.

New/Reply/Forward

Complete

This is the screen used to create, forward or reply to a message.

The fields are as follows:
From - this will always show your name, you cannot pretend to be someone else
To - enter the names of the User(s) or User Group(s) to whom you wish to send the message. Multiple names must be separated by semi-colons. This is in fact a search field (even though it does not have the binoculars icon) and you can enter just 'r' to select Receptionists.
If you are replying to a message, then this will be prefilled with the sender's name.
Subject - you must enter a subject. If you are replying, then original subject will be shown prefixed by "Re: "; if forwarding then by "Fwd: ".
Customer & Patient - use these to enter the customer and patient, if applicable.  If you are creating a message and do have a current customer and patient in the Customer and Patient workspaces (which will be the case most of the time), then they will be shown here.  Hence if you want to send a message unrelated to the customer and patient, you will need to clear these two fields.
If you are forwarding or replying to a message, these will be set from the original message.
Reason - select the reason from the pull down list. The system comes with two, Phone and Other, but your admisistrator can add more using Administration|Lookups|Messsage Reason.
Message - enter the message text. As with any text field, you can use macros if you want. If you are replying to a message then the original text will be shown prefixed by a line giving the date/time and sender of the original message. Similarly, if you are forwarding a message, the complete header (To/From/date,time/Subject) and text will be shown.
Note that the message text is optional - ie you can send a 'subject only' message like "Staff meeting 8am Wednesday - Be There".

Press Send to send the message, Cancel to abort.
 

Confirm Delete

Complete

This is the Message Delete Confirmation window.  Press OK to delete the message, else Cancel.

SMS

Incomplete document

The SMS workspace provides support to monitor SMS messages.

The buttons are as follows:

  • View
View the selected SMS.
  • Edit
Edit the selected SMS.
This only allows the details of the message to be set that relate to Communications logging.
  • Delete
Delete the selected SMS.
This only applies to SMSes with Pending status.
  • Mark Reviewed
Change an SMS with Error status to Error Reviewed.
  • Unmark Reviewed
Change an SMS with Error Reviewed status back to Error.

Edit SMS

Incomplete document

This screen is used to edit details associated with SMS messages, for the purposes of communications logging.

It cannot be used to send or change the text of an SMS message.

 

The fields are:

  • Author
the person who created the SMS.
  • Subject  
the subject of the SMS. This will be automatically set when the SMS is for an appointment or patient reminder.
  • Recipient
the person or organisation the SMS was sent to.
  • Phone
the phone number.
  • Customer
the customer that the SMS is about, if any.
  • Patient
the patient that the SMS is about, if any.
  • Location
the practice location the SMS was sent from.
  • Provider Id
the SMS provider's identifier for the SMS.
  • Updated
the date when the message was last updated.
  • Sent
the date when the message was sent.
  • Expiry Time
the time when the message expires. If set, and the message cannot be delivered before this time, delivery will be cancelled (this may not be supported by all SMS providers).
  • Status

the status of the SMS. One of:

  • Pending - the message has not been sent to the SMS provider
  • Sent - the message has been sent to the SMS provider
  • Expired - the message expired before it could be delivered
  • Delivered - the message was delivered to the recipient
  • Error - the message could not be delivered due to an error
  • Error Reviewed - indicates that a user has reviewed the error
  • Reason
the reason for the SMS. The available reasons are configured via Administration - Lookups - Customer Communication Reason
  • Message
the message text.
  • Note
additional notes about the SMS.

Investigations

Complete

This Investigations screen is used to display the status of investigations. For background see Concepts|Investigations.

This is a standard select screen. As well as the date range you can select by:

Search - use this to locate investigations by patient names or investigation identifier.
Status - can be set to All, Cancelled, Finalised or In Progress - see below.
Order Status - can be set to Incomplete, Pending, Confirm Order, Sent,Waiting for Sample, Partial Results, Received, Reviewed or Error. If set to Incomplete, this will match investigations that are not Reviewed. See below.
Location - filters by the practice location where the investigation was created. Restricted to the locations visible to the current user. Investigations with no location (i.e. investigations created prior to OpenVPMS 1.8) will always be displayed.
Clinician - filters by the clinician who created the investigation.
Investigation Type - filters by investigation type.

The column headings are as follows:
Date - the date on which the investigation was initiated.
Last Updated - the date when the investigation was last updated.
Investigation Type - the type of investigation - clicking on the link takes you to the Administration|Types|Investigation View screen to view the details.
Customer - the owner of the patient at the time of the investigation.
Patient - the patient - this is a link and you can click on it to go to the patient's medical records screen
Request Id - the unique number that identifies the investigation
Status - the status - see below
Order Status - the order status - see below
Product - the product that invoked the investigation, or, if the investigation was manually initiated, the product (if any) specified
Clinician - the name of the clinician (note that in this example the practice is using the convention of using 'short names' for their clinicians) - clicking on the link takes you to the Workflow|Messaging screen to display messages to this clinician.
Location - the practice location where the investigation was created. For investigations with no location (e.g. those created prior to OpenVPMS 1.8), this will display None.
Supplier - the organisation doing the test or procedure - clicking on the link takes you to the Suppliers|Information screen to display the supplier's details
Report - if results have been received, they will be shown here - clicking on the link will display or download the result image/document. Note that in the above screen shot you can see that the majority of the results files have the investigation number as the first part of the file name - this allows the automatic loading of the results file by the document loader program.

The Status will be one of the following:

  • In Progress - the initial status.
  • Cancelled - the investigation has been cancelled.
  • Finalised - the investigation has been finalised and only limited editing is supported.

The Order Status will be one of the following:

  • Pending - the initial status. The order is yet to be sent.
  • Confirm Order - the order needs to be confirmed before it can proceed.
  • Sent - the order has been sent.
  • Waiting for Sample - the laboratory service is waiting for a sample.
  • Partial Results - some results for the order have been received.
  • Received - all results have been received.
  • Reviewed - the results have been reviewed.
  • Error - the order has an unrecoverable error.

The buttons are:

  • View - view the selected investigation
  • Edit - edit the selected investigation
  • Confirm Order - confirm an order for an investigation, if the laboratory service supports it.
    This must be used when an investigation has Confirm Order order status in order to submit the order.
  • Check Results - check for results for the selected investigation, if the laboratory service supports it.
    If the investigation updates, the date displayed in the Last Update column will change, the Report column will display the results, and the Order Status should change to Partial Results or Received.
  • Mark Reviewed - mark an investigation as being reviewed.
  • Unmark Reviewed - changes the investigation status from Reviewed to Received. Use this if an investigation needs further review.
  • Cancel Investigation - cancels the selected investigation

Visit Editor

Complete

The Visit Editor allows you to do all the work of recording the activities in the visit.

It has a tabs for Summary, Invoice, Reminders/Alerts, Documents, Prescriptions and Estimates.

Although the Summary tab looks almost the same as the Patients|Medical Records screen Summary tab, it has two extra buttons at the bottom, OK and Cancel. OK means 'save any changes I have made and exit the visit editor'; Cancel means 'discard any changes I have made and exit the visit editor'.

These OK and Cancel buttons are present on all the tabs. Thus if you press OK on the Invoice tab, you will exit the Visit Editor. If you press OK but didn't intend to exit the Visit Editor, don't worry - just press the Consult button and that will return you to the Visit Editor.

Summary

Complete

This is the Summary tab of the Visit Editor. The screen shot below is taken from an active practice and hence some data has been intentionally blurred.
[Careful observers will also note that this is a screen shot from a system using a modified label for the Find button.]

The buttons are as follows:

OK - save any changes and close the Visit Editor.
Cancel - cancel any changes and close the Visit Editor.
New - add a new item to the medical record - a window will open allowing you to select the type.
Edit - edit the selected item
Delete - delete the selected record - a confirmation window will be displayed.
Print - print what is shown on on the screen.
Mail - email what is shown on the screen.
External Edit - this button appears if the selected record is a document that can be edited in OpenOffice. Clicking this will launch the OpenOffice editor to edit the document directly, avoiding the need to download, edit and re-upload the document.

This screen is very similar to the Patients|Medical Records Summary tab - see this for further information.

Confirm Delete

Complete

When you press the Delete button on the Visit Editor|Summary screen, a confirmation window will appear.

Press OK to confirm or Cancel to abort.

Confirm New

Complete

This window is displayed when you press the New button on the Visit Editor's Summary screen. It allows you to select the type of medical record entry, alert/reminder, or document to be created. Select the required one and press OK, else Cancel to abort.

Invoice

Complete

This is the Invoice tab of the Visit Editor.
[Careful observers will note that this is a screen shot from a system using a modified label for the Find button and right justified field labels.]

The buttons at the bottom are:
Apply - save any changes but do not close the Visit Editor
OK - save any changes and close the Visit Editor
Cancel - cancel any changes and close the Visit Editor
Completed - save any changes, set the Invoice Status to Completed, and close the Visit Editor
In Progress - save any changes, set the Invoice Status to In Progress, and close the Visit Editor

This screen works in a very similar manner to the Customer|Charges|Invoice edit screen - see this for more information.

Reminders

Complete

This is the Reminders tab of the Visit Editor. See Concepts - Reminders for background.
 

The buttons are as follows:
OK - save any changes and close the Visit Editor
Cancel - cancel any changes and close the Visit Editor
New - create a new reminder
Edit - edit the selected reminder
Delete - delete the selected reminder - a confirmation window will be displayed

This screen is very similar to the Patients - Medical Records - Reminders tab - see this for further information.

Confirm Delete

Complete

When you press the Delete button on the Visit Editor's Reminders tab, a confirmation window will appear.

Press OK to confirm or Cancel to abort.

Confirm Resend

Complete

When you press the Resend button on the Visit Editor's  or Patients|Medical Records' Reminders & Alerts tab screen, , the following window will appear.

From the Contacts pulldown select the contact to be used. Note that all possible contacts will be listed, and those with a purpose 'Reminder' will be shown as per the above.

The Reminder Count pulldown lists the Reminder Counts of reminders that have already been generated. This enables you to resend, for example, the second reminder. The restrictions are that the reminder count must have an associated document template and cannot have its List field checked. Select the one you wish to use.

Press the OK button to proceed, Cancel to abort.

Depending on the type of the selected contact, either an email will be generated or a reminder printed.

Alerts

Complete

This is the Alerts tab of the Visit Editor. See Concepts - Alerts for background.
 

The buttons are as follows:
OK - save any changes and close the Visit Editor
Cancel - cancel any changes and close the Visit Editor
New - create a new alert
Edit - edit the selected alert
Delete - delete the selected alert. This will display a confirmation window. Select OK to delete the alert, or Cancel to keep it.

This screen is very similar to the Patients - Medical Records - Alerts tab - see this for further information.

Documents

Complete

This is the Documents tab of the Visit Editor. See Concepts|Documents for background.
[Careful observers will note that this is a screen shot from a system using a modified label for the Find button and right justified field labels.]

The buttons are as follows:

OK - save any changes and close the Visit Editor
Cancel - cancel any changes and close the Visit Editor
New - create a new document - a window will open allowing you to select the type
Edit - edit the selected document record. If the document has status Finalised you will not be able to edit the record.
Delete - delete the selected document - a confirmation window will be displayed. If the document has status Finalised you will not be able to delete it.
Print - print the selected document.
Mail - email the selected document.
Refresh - (this button only appears when the selected document is a Letter) - refresh the document by regenerating it from its template - a confirmation window will be displayed.

This screen is very similar to the Patients|Medical Records Documents tab - see this for further information.

Confirm Delete

Complete

When you press the Delete button on the Visit Editor's Documents tab screen, a confirmation window will appear.

Press OK to confirm or Cancel to abort.

Confirm New

Complete

When you press the New button on the Visit Editor's Documents tab screen, the window below will be displayed. Select the type of document that you require and and then press the OK button.

Prescriptions

Complete

This is the Prescriptions tab of the Visit Vditor. See Concepts|Prescriptions for background.

The buttons are:

OK - save any changes and close the Visit Editor.
Cancel - cancel any changes and close the Visit Editor.
New - create a new prescription
Edit - edit the selected prescription. If the prescription has been fully dispensed or has expired, it cannot be edited.
Delete - delete the selected prescription. If the prescription has been dispensed or has expired, it cannot be deleted.
Print - prints the selected prescription.
Mail - emails the selected prescription.
Dispense - dispenses the selected prescription. This displays a medication window that allows the Date, Expiry Date and Clinician to be selected. The Label and Quantity are fixed
Cancel Prescription - cancels the selected prescription, if it hasn't been fully dispensed or expired.

For further information, see the Prescriptions Tab on the Patients|Medical Records screen.

Confirm Delete

Complete

When you press the Delete button on the Visit Editor's Prescriptions tab screen, a confirmation window will appear.

Press OK to confirm or Cancel to abort.

Estimates

Complete

This is the Estimates tab of the Visit Editor. See Concepts|Estimates for background.

It is very similar to the Customer|Estimates screen, except that entry is restricted to the current patient only. If an estimate exists for another patient, or an estimate contains multiple patients, then it will be excluded. [Careful observers will note that this is a screen shot from a system using a modified label for the Find button and right justified field labels.]

The buttons are as follows:
OK - save any changes and close the Visit Editor.
Cancel - cancel any changes and close the Visit Editor.
New - create a new estimate.
Edit - edit the selected estimate.
Delete - delete the selected estimate - a confirmation window will appear
Finalise - change the status of the selected estimate to Finalised - a confirmation window will appear. Finalising the estimate locks it from any further changes. If you confirm the Finalise, then a print window will open allowing you to print or email the estimate.
Print - print the selected estimate.
Mail - email the selected estimate.
Copy - copy this estimate to create another one.
Invoice - generate an invoice from this estimate. To ensure that the that the correct clinician is recorded when an estimate is invoiced, the clinician is prompted for unless:

Confirm Delete

Complete

When you press the Delete button on the Visit Editor's Estimates tab screen, a confirmation window will appear.

Press OK to confirm or Cancel to abort.

Confirm Finalise

Complete

When you press the Finalise button on the Visit Editor's Estimates tab screen, a confirmation window will appear.

Press OK to confirm or Cancel to abort.

Confirm Invoice

Complete

When you press the Invoice button on the Visit Editor's Estimates tab screen, a confirmation window will appear.

Press OK to confirm or Cancel to abort.

Check-Out Print

Complete

The window below is displayed at the end of the check-out process when there are documents to be printed. Thes may be invoices, certificates and forms, etc.

Ensure the ones you want printed are checked, and uncheck all the rest. The buttons are as follows:

OK - initiate the printing of the selected documents
Skip - skip the printing
Cancel - abort the check-out
Mail - bring up an email write screen so that the selected documents can be emailed
 

Customer Orders

Complete

The Customer Orders screen displays the status of customer orders and returns.

Orders and returns are created:

  • by Pharmacy Services when pharmacy products are dispensed
  • when treatments are given in Smart Flow Sheet that have billing enabled

Returns are created by Laboratory Services when laboratory orders are cancelled.

 

 

Query

Customer orders can be queried by:

Type The customer order type. Defaults to All, indicating all order types.
Status The customer order status. Defaults to In Progress.
Date Range Filters orders and returns based on their creation date. If All is selected, no filtering occurs.
Location The practice location where the order was created. Restricted to the locations visible to the current user.
Customer The customer that the order belongs to
Clinician The clinician responsible for the order

Actions

The following actions may be performed:

New Create a new order or return.
View View the selected order/return.
Edit Edit the selected order/return.
Delete Delete the selected order/return.
Invoice Where possible, OpenVPMS will automatically process orders and returns during the Check-In, Consult, and Check-Out worfklows. This button can be used to charge orders and returns outside of workflows. See Order Charging and Return Charging below
Print Print the selected order/return.
Mail Email the selected order/return.

Order Charging

If the selected order does not relate to an existing invoice, a new Invoice will be created.

If the order relates to an existing invoice, and the invoice is:

  • In Progress - the order will update the invoice. For each corresponding line item:
    • The order Quantity will be added to the Received Quantity
    • The invoice Quantity will be set to the new Received Quantity
  • Finalised - and the order quantity is:
    • equal to the invoice quantity - the order will be Finalised
    • greater than the invoice quantity - a new Invoice will be created. The new line item quantity will be the difference between the order and invoice quantity.
    • less than the invoice quantity - a new Credit will be created. The new line item quantity will be the difference between the invoice and order quantity.

Warning: if there are multiple orders or returns relating to a single invoice, and that invoice is Finalised, these will not be taken into account when determining the new Invoice/Credit quantity.

Return Charging

If the selected return relates to an existing invoice, and the invoice is:

  • In Progress - the return will update the invoice
  • Finalised - a new Credit will be created

Laboratory Returns

Laboratory Returns are different to other Returns in that their only action is to set the corresponding Investigation status to Cancelled. They don't change the Invoice Quantity, nor do they create a Credit if the Invoice is Finalised.

This is because there is not a 1:1 mapping between Invoice Items and Investigations. If a Laboratory Return is received, any Invoice amendments must be done manually.

 

Customer Pharmacy Order

Complete

A Customer Pharmacy Order is created when external services dispense a medication, merchandise or service product.

Where possible, these will be automatically invoiced during charging.

They will need to be processed manually via Customer Orders if:

  • they were initially ordered via an invoice that has been Finalised, or has been subsequently deleted
  • they are incomplete (e.g. the product in the external system doesn't match that in OpenVPMS). Incomplete orders need to be corrected before they can be invoiced.

See Order Charging for a description on how orders are invoiced.

Customer Pharmacy Return

Complete

A Customer Pharmacy Return is created when an external service:

  • amends or removes dispensing of a medication, merchandise or service product; and
  • the original dispense has already been invoiced

Where possible, these will be automatically invoiced during charging.

They will need to be processed manually via Customer Orders if:

  • the invoice that they relate to that has been Finalised, or has been subsequently deleted
  • they are incomplete (e.g. the product in the external system doesn't match that in OpenVPMS). Incomplete returns need to be corrected before they can be invoiced.

See Return Charging for a description on how returns are invoiced.

Rostering

Complete

The Rostering workspace provides support for scheduling employees in shifts.
This can be used to ensure:

  • employees are available to work on a particular day
  • clinicians can be scheduled to appointments

The screen displays two views of these shifts:

  • Areas - displays shifts by Roster Area
  • Employees - displays shifts by User

In both, new Shifts are created by clicking on an empty cell.

The buttons are as follows:

Edit Edit the selected shift
Delete Delete the selected shift

Copying a shift

To copy a shift to another date/time, either use 'copy and paste':

  • select the shift by clicking on it
  • copy it using Ctrl-C
  • navigate to the desired day
  • click on the new time slot so that appears
  • paste it using Ctrl-V

Moving a shift

To move a shift to another date/time, either:

  • edit it and change the start and end times; or
  • 'cut and paste' it:
    • select the shift by clicking on it
    • cut it using Ctrl-X
    • navigate to the desired day
    • click on the new time slot so that appears
    • paste it using Ctrl-V

Cut and paste allows the shift to be moved to another area or employee.

Shift

Complete

A Shift is used to roster an employee to an area for a period of time.

An employee can only be rostered to a single area at a time.

The fields are:

Start Time The time that the shift starts
End Time The time that the shift ends
Duration The length of the shift
Employee The rostered on user
This is restricted to users that work at the practice location.
Area The roster area

Products

Complete

The Products workspace is used to handle products.

Information

Complete

The Product Information screen is shown below. Note that this is a product selection screen - it displays limited information about the product(s) found by the selection - detailed information is displayed when you view or edit the product. When first used, it will be empty. The picture below shows it after a selection has been done.

This works as a standard select screen. 

Type - allows you to select the type of product.
Pricing Group - this is displayed if Pricing Groups have been configured and the current user is an adminstrator. It defaults to the Pricing Group of the current Practice Location. Only those prices that match the selected Pricing Group or have no Pricing Group will be displayed in the Fixed Price and Unit Price columns.

The column headings require no explanation except to note that:
Description - will be the same as Name except for Template products (where it will be blank)
Prices - are shown as tax-inclusive or tax-exclusive based on the practice Show Prices Tax Inclusive setting.

The standard buttons have their standard meanings. In addition,
Copy lets you create a new product by cloning it from the selected one. Note that EVERYTHING is copied - including any current stock holdings. Hence after the copied product is created, you will need to edit it to zero the stock quanties and make any other required adjustments.
Export initiates the Price Export process by displaying the Export Prices window. See also Concepts|Pricing Updates.
Import initiates the Price Import process by displaying an upload window to let you select the file to be imported.
Synchronise with Smart Flow Sheet sends product changes to Smart Flow Sheet. See Synchronising products for more details.

Note that the Edit, Delete, Copy, Export, Import and Synchronise with Smart Flow Sheet buttons will not be present unless the user's categories include 'Administrator'. See also Concepts|Users.

Confirm Copy

Complete

When you press the Copy button on the Products|Information screen, a window like the following will be displayed.  Pres OK to proceed, Cancel to Abort.

Confirm New

Complete

This is the New Product confirmation window. Select the type of Product to be created and then use OK to continue or Cancel to abort. Note that if you have selected a type on the Product screen, then this will already be selected in this window - thus you can normally simply click OK to proceed.

Create/Edit/View Medication

Complete

This is the create/edit/view screen for Medication products, ie items which are sold (like merchandise) but which being medication, also need drug labels, dispensing notes, a drug schedule and list of active ingredients. 

The fields are as follows:
Id - the ID of the product
Name - its name
Description - optional description
Printed Name - the name that will be displayed when the invoice etc is printed. If omitted, then the Name will be used.
Drug Schedule - the applicable drug schedule (None, or S1 through S8)
Active Ingredients - you can list the active ingredients here. The standard prescription print template will display this text with the label 'Strength'.
Concentration - the medication concentration. This is:

  • required for dose calculations, if doses are used
  • used when synchronising products with Smart Flow Sheet. For Smart Flow Sheet, medications with a Concentration must also have Dispensing Units

Selling Units - the units by which this is sold (eg Unit, Ampoule, Bottle, Box, etc). The available choices are set by the Administrator|Lookups|Units of Measure screen.
Dispensing Units - the units by which this is dispensed - the same choices as Selling Units.
Dispensing Verb - the applicable dispending verb (None, Administer, Apply, Give, Inject). This and the Dispensing Units are commonly used in macros to generate dispensing labels.
Dispensing Label - check this box if a dispensing label should be printed for this product
Label Instructions - the preset text for the label - this can be added to prior to printing
Type - this is used to set the Product Type - see Concepts|Products. If you are using product types, then you really need to set the type for every product.
Product types can be arbitrarily created by your administrator. These product types are distinct from product classes (Merchandise, Service, Medication). Instead, these can be used to group products according to discounts and tax types for instance. See Administration|Types|Product Type.
Pharmacy - this is only required if you use the HL7 facility where it is used the set a Pharmacy or Pharmacy Group for this product. Note that this can also be set via the Product Type and this may be more convenient if many products use the same pharmacy or pharmacy group.
Use only in Templates - if ticked, indicates that the product can only be use in charges and estimates via a Product Template.
Patient Identity - used to indicate that a Microchip, Pet Tag, or Rabies tag should be added to the patient when the product is charged.
Active - uncheck this box to deactivate the product
Dispensing Notes - here you can add notes (eg Dose - Dogs: 2.5mls bid, Cats: 1ml bid). These will be displayed on the Create/Edit Medication screen

See Tabs for a description of the fields in the various tabs.

Create/Edit/View Merchandise

Complete

This is the create/edit/view screen for Merchandise products.  See Concepts|Products for background information.

The fields are as follows:
Id - the ID of the product
Name - its name
Printed Name - the name that will be displayed when the invoice etc is printed. If omitted, then the Name will be used.
Selling Units - the units by which this is sold (eg Unit, Ampoule, Bottle, Box, etc). The available choices are set by the Administrator|Lookups|Units of Measure screen.
Type - this is used to set the Product Type - see Concepts|Products. If you are using product types, then you really need to set the type for every product.
Product types can be arbitrarily created by your administrator. These product types are distinct from product classes (Merchandise, Service, Medication). Instead, these can be used to group products according to discounts and tax types for instance. See Administration|Types|Product Type.
Pharmacy - this is only required if you use the HL7 facility where it is used the set a Pharmacy or Pharmacy Group for this product. Note that this can also be set via the Product Type and this may be more convenient if many products use the same pharmacy or pharmacy group.
Use only in Templates - if ticked, indicates that the product can only be use in charges and estimates via a Product Template.
Patient Identity - used to indicate that a Microchip, Pet Tag, or Rabies tag should be added to the patient when the product is charged.
Active - uncheck this box to deactivate the product

See Tabs for a description of the fields in the various tabs.

Create/Edit/View Price Template

Complete

This is the create/edit/view screen for Product Price Templates.  These are used to set standard prices that can be used by actual products.

The fields are as follows:
Id - the ID of the template
Name - its name
Active - uncheck this box to deactivate the product

See Tabs for a description of the fields in the Price tab. Note that for Product Price Templates you can only set a Fixed price, and not the Unit price.  That is, you can only use standard pricing for the fixed component of a product's price.

Create/Edit/View Product Template

Complete

This is the create/edit/view screen for product Templates. These are used to group a number of products together so that time is saved when generating invoices and estimates.  

The fields are as follows:
Id - the ID of the template
Name - its name
Description - used to clarify the name if necessary
Print Aggregate - if checked, the template will be printed as an aggregate in charges and estimates. If unchecked, each line item produced by the template will be printed.
Type - this is used to set the Product Type - see Concepts|Products. These aren't required for Templates but may be used for classification and reporting.
Use only in Templates - if ticked, indicates that the product can only be used in charges and estimates via another Product Template
Active - uncheck this box to deactivate the product
Invoice Note - if present, this is added to the invoice note of the invoice. It is added to any pre-existing text and does not replace it. If a template is used in an Estimate, the Invoice Note will be included when the Estimate is invoiced.
Visit Note - if present, this is added to the medical record as a note.
Includes are the items that the template includes. These can be either products or templates.

An included item may have a:

  • Low and High Quantity. These are used to specify the low and high quantities for the item when the template is used in a estimate. The High Quantity is used when the template is used in an invoice.
  • Weight, used to conditionally include the item based on patient's weight. There are 3 fields: the lower and upper limits and the units (which can be Kilograms, Grams, Pounds or None - if None is specified then any lower and upper limits will be ignored). To be included the patient weight must be greater than or equal to the lower limit and less than the upper limit. Note that the program will not detect over-lapping weight ranges as an error, but will use the first matching one. As indicated in the above screen shot, properly set weight data will include a set that has 0 as a lower limit, and 999 (ie large) as an upper limit. Note also that the system does not require that the weight units used here are the same as the weight units used for the patient's weight.
  • Skip If Missing, used when the Practice Use Location Products option is selected. If the product is not available at the location and it is:
    • unselected, template expansion will fail with an error message.
    • selected, it will be skipped, and no error will be displayed.
      This can be used to conditionally include location-specific products.
  • Zero Price indicator. When selected, the item will be given a zero fixed and unit price when the template is used. This can be used for items that aren't charged for, but are included for stock control purposes.
  • Print indicator. Determines if zero-priced items should be printed in charges and estimates. Only applies when Print Aggregate is unchecked.

If the template includes other templates, then when the template is used, any repeated product will have its quantities summed so that it only appears once in the invoice or estimate.

If the included template has a quantity other than 1, then this is used to multiply the quantities of the included products.  Hence if Template A includes 2 of Template B and Template B includes 3 of Product X, then the total quantity of Product X will be 2x3=6.

Note that a template cannot include itself - either directly or indirectly (ie A includes B which includes A). The first will cause an immediate error and you will not be able to save the template. The second will cause an error when the template is used.

Medications with Doses

If a template includes a Medication with doses, the calculated dose will override the Low and High Quantity, except when the Low Quantity is zero.

 

See Tabs for a description of the fields in the other various tabs.

 

Create/Edit/View Service

Complete

This is the create/edit/view screen for products that are Services.

The fields are as follows:
Id - the ID of the product
Name - its name
Printed Name - the name that will be displayed when the invoice etc is printed. If omitted, then the Name will be used.
Selling Units - the units by which this is sold (eg Unit, Hour, Day, etc). The available choices are set by the Administrator|Lookups|Units of Measure screen. Note that for most services, this can be left at the default (normally Unit), and it only needs to be set for services like Boarding and Theatre Time that will be sold in quantities other than one.
Type - this is used to set the Product Type - see Concepts|Products. If you are using product types, then you really need to set the type for every product.
Product types can be arbitrarily created by your administrator. These product types are distinct from product classes (Merchandise, Service, Medication). Instead, these can be used to group products according to discounts and tax types for instance. See Administration|Types|Product Type.
Use only in Templates - if ticked, indicates that the product can only be used in charges and estimates via a Product Template.
Patient Identity - used to indicate that a Microchip, Pet Tag, or Rabies tag should be added to the patient when the product is charged.
Active - uncheck this box to deactivate the product

See Tabs for a description of the fields in the various tabs.

Export Prices

Complete

The Export Prices window is used to export OpenVPMS product prices to a CSV (comma separated values) file.

The exported prices can be manipulated in a spreadsheet program such as Microsoft Excel or OpenOffice Calc, and imported using Price Import.

Note that prior to OpenVPMS 1.9, exported and imported prices were tax-inclusive. Now all prices are tax-exclusive.

 

Prices can be selected for export using the following criteria:

  • Type - one of Medication, Merchandise, Product Price Template, Service, or All. Note that you cannot export Templates - if you want to do some editing of these, you have to do them one by one.
  • Search - enables the products to be queried by name or identity
  • Search Identities - if selected, products are queried by identity
  • Include Deactivated - if selected, inactive products are included in the search
  • Product Type - the type of the product. E.g "Desexing", "Euthanasia".
  • Species - queries products by species
  • Income Type - queries products by income type. E.g. "Medication", "Professional"
  • Product Group - queries products by product group. E.g "Fees", "Grooming"
  • Prices - one of:
    • Current - exports the fixed and unit prices for a product that are active at the current time
    • All - exports all fixed and unit prices for a product. This may be used to export the price history
    • Range - exports all prices for a product active within the range specified by the From and To fields
  • Pricing Group - exports prices by Pricing Group. One of:
    • All - export all prices, regardless of Pricing Group
    • None - export prices with no Pricing Group
    • Group Name - export prices with the specified Pricing Group, or no Pricing Group
  • From - used to set the price From Date, when querying prices in a range
  • To - used to set the price To Date, when querying prices in a range
  • Include Linked Prices - if selected, prices linked from Product Price Templates will be included in the exported data

Export File Format

The exported data is a comma-separated-values file, containing the following columns:

Column Required Type Description
Product Id Yes Integer The product identifier.
Product Name Yes String The product name.
Product Printed Name No String The product printed name. If different to that stored, updates the product's Printed Name.
Fixed Price Id No Integer The fixed price identifier, used when updating an existing fixed price.
Fixed Price No Decimal The tax-exclusive fixed price. If unspecified, no fixed price will be created/updated.
Fixed Cost No Decimal The fixed cost. Only used if a fixed price is specified. Defaults to 0.0 if unset.
Fixed Price Max Discount No Decimal The fixed price maximum discount, expressed as a percentage. Required if a fixed price is specified, optional otherwise.
Fixed Price Start Date No Date The date the fixed price starts on. Required if a fixed price is specified, optional otherwise.
Fixed Price End Date No Date The date the fixed price ends on. If unspecified, the fixed price will have no end date.
Default Fixed Price No Boolean (true/false) Indicates if a Fixed Price is the default price for the date range. Only applicable if there are multiple fixed prices.
Fixed Price Groups No String A space separated list of Pricing Group codes that are associated with the fixed price.
Unit Price Id No Integer The unit price identifier, used when updating an existing unit price.
Unit Price No Decimal The tax-exclusive unit price. If unspecified, no unit price will be created/updated.
Unit Cost No Decimal The unit cost. Only used if a unit price is specified. Defaults to 0.0 if unset.
Unit Price Max Discount No Decimal The unit price maximum discount, expressed as a percentage. Required if a unit price is specified, optional otherwise.
Unit Price Start Date No Date The date the unit price starts on. Required if a unit price is specified, optional otherwise.
Unit Price End Date No Date The date the unit price ends on. If unspecified, the unit price will have no end date.
Unit Price Groups No String A space separated list of Pricing Group codes that are associated with the unit price.
Tax Rate No Decimal The sum of tax rates for the product, expressed as a percentage. This must be valid on import, but is otherwise ignored.
Notes No String Price notes. At present, this is used to report if a price is linked from another product.

Note that the markup and tax-inclusive prices are not exported as they can be derived.
To calculate the markup from the exported columns use:

  • Unit Price Markup = (Unit Price / Unit Cost - 1) * 100
  • Fixed Price Markup = (Fixed Price / Fixed Cost - 1) * 100

To calculate tax-inclusive prices, use:

  • Tax-inclusive Unit Price = Unit Price * (1 + Tax Rate / 100)
  • Tax-inclusive Fixed Price = Fixed Price * (1 + Tax Rate / 100)
     

See Pricing Updates for instructions on manipulating the exported data.

Import Prices

Complete

The Import Prices window is used to import product prices from a CSV (comma separated values) file in the format produced by Export Prices.

Only those prices that have changed will be displayed. Where a value has changed, both the old (as strike-through text) and new value will be displayed. In the example below, the fixed prices have been increased by 20% and their start dates set.

Click OK to save the price changes.

Click Cancel to cancel importing the prices.

Price Import Date Formats

Complete

When importing prices, a Price Import Date Format window may be displayed:

This is displayed if the dates in the import document can be interpreted in different ways.

Select the appropriate date format and click:

  • OK to import the document
  • Cancel to cancel the import

Price Import Errors

Complete

Imported prices are validated for correctness prior to being saved. If errors are detected, these are displayed. E.g.:

 

The possible errors and their causes are outlined below:

 

Error Cause
A Value for <column name> is required A mandatory value is missing. Values for Product Id and Product Name must always be provided. The Fixed Price Start Date and Unit Price Start Date need only be provided if a corresponding price is specified.
'<some value>' is not a valid value for <column name> An invalid value has been specified for an Id, Price, Cost or Date column
Expected name: <product name> The specified Product Name differs from that stored. Both the Product Id and Product Name must match that of an existing Product.
Product not found The product with the specified identifier cannot be found
Unit price dates overlap an existing unit price

A unit price has been specified that has a date range that intersects another unit price.

Price with identifier <price Id> not found A price with the specified Fixed Price Id or Unit Price Id cannot be found.
Cannot update linked price

An attempt has been made to update a fixed price linked from a Price Template.

These prices can be updated via the Price Template.

Cannot determine which end date to use to close existing price.

Multiple Fixed and/or Unit Prices have been specified for a product, and an existing price needs to have its To Date set to avoid price overlaps.

This can be corrected by specifying a To Date for the existing price.

Cannot close existing price. Its start date would be greater than its end date.

A new price has been provided that has a From Date that overlaps an existing price that has no To Date. and the calculated To Date for the existing price would be greater than its From Date.

This can be corrected by specifying a later From Date for the new price.

Duplicate fixed price Duplicate Fixed Price Id values have been specified, with different details for the other columns.
Duplicate unit price Duplicate Unit Price Id values have been specified, with different details for the other columns.

Tabs

Incomplete document

This page documents all the possible tabs on the create/edit/view windows for the various type of product.

Use the following links to jump to the required tab:

Prices Doses Linked Tests Suppliers Stock Locations Reminders Alerts Documents Discounts Species Updates Classifications Identities Equivalents Taxes Locations

Note that in many cases, the tabs have a Hide Inactive xxxxx checkbox. This is present when the item being attached to the product (ie the linked-to product, the reminder, the supplier, etc) can be deactivated. In this case the item will remain attached to the product, but the item will not be displayed and the product will act as though the item was not attached. You can have these inactive items displayed by unchecking the Hide Inactive xxxxx box.

Prices tab

This tab is used to set the product's price. See also Concepts|Pricing.

The price type selector is used to select Fixed (as shown below) or Unit when adding a new price. A product can have multiple current fixed prices, but only one unit price. As shown below, the fixed prices can be named. When entering an invoice, if the product has multiple prices, there will be a pull-down to let the appropriate one be selected. This facility is normally used for service products so that you can have one product, say Surgery, with three prices, Simple, Standard, and Complicated. The item will be shown on the invoice as 'Surgery' and with the selected price. Alternatively, if you want the invoice to show 'Surgery - Simple', 'Surgery - Standard', or 'Surgery - Complicated', then you need to have three separate products.

The buttons are as follows:

  • Copy - copy the selected price. The price must have a To Date set, or be a Fixed Price. The copy will have its From Date set to the To Date, or the current time if there is none.
  • Copy & Close - prompts to end the selected price and create a new one.
  • Add - adds a new price.
  • Delete - deletes the selected price. This option is disabled for existing prices dated prior to today for non-administrators.

The Fixed Price fields are as follows:
Name - the name of the price that will be displayed in the pull-down on the invoice entry screen
Cost - the ex-tax cost of the product. It defaults to 0.
Markup - the markup (as a percentage). It defaults to 100.
Price - the price, exclusive of tax. You can either enter the price, or set the cost and markup and the system will calculate the price.
Tax-inclusive Price - the price, inclusive of tax, and rounded according to the price rounding convention. This is calculated from the price, and any tax rates associated with the product, product type, or practice.
If the Tax-inclusive Price is entered, the tax-exclusive Price will be calculated.
Max Discount - the maximum discount allowed - see Concepts|Discounts - Calculation
Default - check the box to make this the default price. If multiple prices are set, the default is the one initially selected.
From & To Date - these set the applicable dates. An unspecified To Date means 'forever'. If/when you adjust a price, it is sensible, not to just simply edit the price, but to do as follows. Edit the entry to set its To Date, then add a new price using the same date as the From Date.  In the above, you can see that the 'Small' price was increased from $14.30 to $14.96 on 24 June 2012. Note that if you add a new price without 'closing off' the old one, then for Fixed prices, both will be available; for Unit prices, the oldest one will be used. Hence you should always 'close off' the old price.
Although you enter only the date, the system keeps full date/time. Hence, if you enter a new price at 3.15pm with its From date set tomorrow (and also set the old price's To date to tomorrow), then the price will change at 3.15pm tomorrow.
Pricing Group tab - this is used to set or unset the pricing group(s) - see below.

As you can see below, for Unit Prices the fields are the same except that there is no Name field.

Pricing Groups

If Pricing Groups have been configured, a Pricing Group filter is displayed. This has options:

  • All - display all prices, regardless of Pricing Group
  • None - display prices with no Pricing Groups. These are available to all Practice Locations
  • Group - display prices with the specified Pricing Group, or that have no group

Selecting a particular Pricing Group will display the prices that are available to a Practice Location configured with that Pricing Group.

Note that the Pricing Group column will be suppressed in the None case, otherwise it displays the Pricing Group(s) or blank if there is no Pricing Group set for that price.

Pricing Groups may be assigned using the Pricing Groups tab.

Doses tab

The doses tab is used during charging and estimating to automatically calculate the quantity of a product from the patient weight, drug concentration and rate for the patient species.
Quantities calculated from doses:

  • override any quantity specified by a template, except in the case of a Low Quantity of zero
  • are highlighted in blue to indicate they have calculated
  • override the High Quantity from an Estimate, when the Estimate is invoiced.
    This is because the quantity needs to reflect the patient weight at the time of invoicing.

The fields are:

Species - the species that the dose applies to. If unset, it applies to all species
Weight - the patient weight range the dose applies to. The lower end of the range is inclusive, the upper end, exclusive
Rate - the dose rate
Round To - the number of decimal places to round the calculated quantity to. For injections, rounding to 1 or 2 decimal places can be used. For tablets, 0 decimal places may more appropriate.

Dose Selection

Doses are selected on the basis of a patient's weight and species.

If a product has a dose for a species and weight range that matches that of the patient, this will be selected over a dose for all species and the same weight range.

Dose Calculation

For medications with doses for the patient species and weight range, the quantity is calculated as:

    quantity = weight * rate / concentration

where:

  • weight is the patient weight, converted to the same units as the dose
  • rate is the dose rate
  • concentration is the drug concentration specified on the product

Linked tab
 

This allows standard pricing to be used for the Fixed component of the price. One very common use is for dispensing fees.

First you need to set up the standard prices using Product Price Templates, then you can link 'real' products to the templates. Just as you can set multiple fixed prices for a product, you can link to multiple price templates.

Note that the linked prices do not override any fixed prices set for the product, they just add to them. Thus when invoicing, the Fixed price pull-down will show both the linked and product prices.

The fields are:
Price Template - used to select the required Product Price Template
From & To Date - these are the same as used in the Prices tab
 

Tests

This is used to set Laboratory Tests for the product - see Concepts - Investigations. A product can have zero, one, or tests linked to it.
Tests will be ordered when the product is charged.
 

Suppliers tab
This is used to define the Supplier(s) for the product, and is only needed if you use the Stock Control facility.

The fields are as follows:

Supplier - the supplier  - this can be either a supplier organisation or a supplier person. See Concepts|Suppliers.
Start Date - the date from which this supplier can be used
Active End Time - the date after which the supplier should not be used to create orders
Preferred - check this box if this is the preferred supplier for this product.
Reorder Code - the part number/product code by which the supplier knows this item - if this is omitted no part number/product code will be shown on the order
Reorder Description - the description by which the supplier knows this item - if this is omitted then the Product Name will be shown on the order. Note that in the above screen snippet, the Reorder Description is indeed different from the Product Name - in this case we sell individual cans of pet food but buy them from the supplier in packs of 24.
Reorder Bar Code - the supplier's bar code for the item - remember that if two suppliers both sell widgets then their bar codes will be different
Package Size - this field is not shown on the order.  The system uses the Package Size field to do things like "need to order 37 cans, but the package size is 24 so I will order 2".  
Package Units - this field is shown on the order to describe the quantity being ordered.  
Minimum Order Qty - the minimum order quantity that the supplier will accept. Note that this field is not currently used by the system, it is for documentation only.
Order Qty increments - the increment in order quantity. Again, this field is not currently used by the system, it is for documentation only.
Lead Time & Units - the lead time, ie the time from order until delivery. These fields are not currently used by the system, they are for documentation only.
List Price - this is your 'tax excluded' price for the item from the supplier - it is not displayed on the order.  Note that both this and the Nett price are the prices for the item being ordered - in the above example the pack of 24 cans (and not the individual can price).  
Nett Price - this is the 'tax excluded' price from the supplier, and will be displayed on the order. Note that the Nett Price is the price that the practice pays for the product. It will either be the same as the List Price, or will be lower because the practice receives a discount from the supplier. 
Auto Price Update - check this box to automatically update product Cost and Sell prices when:

  • editing a product to change the supplier's List Price or Package Size
  • a delivery containing the product is Finalised which has a modified List Price or Package Size

In order for prices to update, the product must have:

  • a Product Supplier relationship linked to an active supplier
  • Auto Price Update set true
  • a non-zero List Price
  • a non-zero Package Size

but see also Ignore Price Decreases in the Practice record.

The product's prices are updated as follows:

  • Cost Price = List Price / Package Size
  • Unit Price = (Cost Price * (1 + Markup/100) ) * (1 + Tax/100)

Notes:

  • This creates a new Unit Price, if the existing Unit Price has been saved. The existing Unit Price To Date will be set to the current time if not already set, and the new Unit Price From Date set to the same time.
  • If there are multiple prices for different pricing groups, all are updated.
  • When a delivery is finalised, any line items with updated Package Size or Units, or List or Nett Prices, will update the Product Supplier information, irrespective of the Auto Price Update setting.

 

Generating Orders
Note that the system's 'Generate Orders' function will only generate orders for a product that has low stock if:

 

  • the product has a supplier specified and the supplier's Preferred box is checked, or the stock location indicates a preferred supplier
  • the Package Size set for the preferred supplier is greater than zero
  • the Ideal and Critical quantities must be greater than zero

Stock Location tab

This tab lets you examine the stock at a stock location and to set ordering parameters.

The fields are:
Stock Location - the applicable stock location
Quantity - the current quantity in stock at this location. Note that you not normally edit this value. If you do need to adjust the stock holding, then you should use the Products|Stock Management|Adjust transaction.
Ideal Qty - the ideal stock level - the ordering system can reorder stock to get back to this level
Critical Qty - the critical stock level - the ordering system can reorder if the in-stock quantity drops below this level
Always Order - check this box if stock is to be reordered if the in-stock quantity is below the ideal level
Never Order - check this box if stock is never to be ordered
Preferred Supplier - specifies the supplier for the product, at this stock location only. Used by Generate Orders to override the default preferred supplier, specified on the Suppliers tab.

 

The algorithm used by the system to to calculate the order quantities (when the Generate button on the Suppliers|Orders screen is pressed) is as follows:

 

 Calculate predicted stock P = current stock + qty on order and not yet delivered or cancelled
Let I = ideal quantity, C = critical quantity
If P <= C, then order (I - P) 

Note that the above algorithm does not use the Always & Never order check boxes (but this is planned for a future enhancement). Also the algorithm is more complex than the above because it also takes into account the supplier's package size.

 

Reminders tab

This tab is used to set the reminder(s) to be created when the product is invoiced. See also Concepts|Reminders.

The fields are as follows:
Reminder - the required reminder type
Interactive - check this box if, when the product is added to the invoice, a window is to be displayed to allow the reminder to be skipped (ie not created) or to enable the editing of the reminder parameters. If the box is not ticked then the reminder will be created without further intervention. Note that when a reminder is added to the product, the initial setting of this flag is taken from the Reminder Type definition - see Administration|Types|Reminder Types.
Period & Period Units - these set the period of the reminder, ie the time from when it was created until it becomes due. Note that these settings override the interval set for the reminder type. Also, if Interactive is set, then these can changed when the reminder is created.

Alerts tab

This tab is used to set the types of patient alerts to be created when the product is invoiced. i.e. each Patient Alert Type will be used to create a corresponding Patient Alert when the product is charged.

Documents tab

This tab defines what documents, if any, are to be printed when the product is used (ie invoiced). The documents are defined by their Document Templates - see Administration|Templates. The Type set for the templates should be 'Patient Form' or 'Patient Letter'. Patient Letter templates may have parameters; these will be prompted for when the product is invoiced.
 

 

Discounts tab

This tab sets the discounts that apply to this product.  See Concepts|Discounts. Note that although discounts have been set for the product in the picture below, it is far more usual to set the discounts via the Product Type, rather than against the product itself.

The fields are:
Discount - select the required discount
From & To Date - set the dates for which the discount applies - a blank To Date means forever

 

Species tab

This tab is used to set the species to which the product applies. If none are set then it applies to all, else if one are more are set, then it applies to just those. This facility ensures that we don't sell fish food to a dog.  The available species are set via Administration|Lookups|Species.

 

Updates tab

This tab is used to set what updates will occur if the product is used (ie invoiced). For example if a cat is spayed, then we want to automatically set its desexed status. Similarly if there is a burial charge, then the animal can be automatically deactivated and its Date Deceased set.  The available updates are set via Administration|Lookups|Demographic Updates.

Classifications tab

The classification tab is used to indicate the product group(s) and/or product income type(s) to which this product belongs.  See Concepts|Classifications.

 

Identities tab

This tab is used to set the identities for a product. See Concepts|Identities and Concepts|Barcodes.

The pull-down is used to select the type of identity, Code or Bar Code.

The Description field is used simply to document the code or barcode if desired.

Note that if you purchase the same widget from two suppliers, then each will have its own bar code, and both bar codes should be entered here so that the system can recognise both brand A and brand B widgets.

One further possible used of identities is as follows: say you want to have a product name in a second language (to support sales of this product on a web site). Then you could set the Code to 'Cantonese' and the description to ADVANTIX小狗小型犬(0-4KG) for the product whose (English) name is 'Advantix Pup & Small Dog (0-4Kg)'.

 

Equivalents tab

This tab allows you specify any products that are functionally equivalent to this one. Note that this simply a way of documenting any equivalent products.  ie when you enter the product on an invoice, the system does not inform you that there is an equivalent.

 

Taxes tab

This tab allows you to set the applicable taxes for the product if this is necessary. Normally it is not because taxes are normally set at the Product Group or Practice level. See Concepts|Taxes.

Locations tab

This tab is displayed for Service and Template products when the Practice Use Location Products option is selected, and allows the selection of the products to be restricted to particular practice locations.

This is useful in multi-location practices, where not all products are available at all locations.

Stock Management

Complete

The Stock Management screen enables you to search for and display stock management transations, i.e. stock adjustments (where you are increasing or decreasing the stock of one or more items in a given stock location) and stock transfers (where you are transferring quantities of one or more items from one stock location to another).

You can also export and import stock quantity information - this is useful for stocktaking. You export the data for the Stock Location and products to be counted, then count the stock and update the New Quantities in the CSV file and then import it to generate a Stock Adjustment transaction which you can then Finalise to adjust the stock quantities.

A typical screen is as follows:

The top half of the screen is a standard select screen. The bottom half shows the details of the selected transaction. If you need clarification of the field contents, see Stock Adjustment and Stock Transfer

Buttons: For an 'In Progress' transaction the available buttons are shown above. For a 'Posted' transaction, only the New and Print buttons are shown (because one cannot Edit, Delete or Finalise a posted tranaction).

The Finalise button applies the stock changes and sets the status to 'Finalised'.

Note that there are no reversal transactions to correct incorrect transfers and adjustments. To reverse a transfer you just use another transfer with the To and From locations swapped.  To reverse an adjustment, you just use another adjustment with negative quantities.

Export - initiates the Export Stock process.

Import - initiates the Import Stock process.

The Export and Import options are only available to users with authorities to create and save Stock Adjustments. This includes administrators, and users with the Stock Manager role.

Stock Adjustment Create/Edit

Complete

This is the screen used to create or edit a Stock Adjustment transaction.

The fields are:
Date - the date of the adjustment
Stock Location - the stock location at which the adjustment is to be done
Status - this can be 'In Progress' or 'Finalised'.
Reason - an optional reason describing the adjustment.
Items tab - this shows the line items in the adjustment, and the details of the selected item. The details fields are:
Product - the name of the product
Adjust Quantity By - the amount by which the quantity is to be adjusted. This number can be negative to reduce the stock or positive to increase it.  It is NOT the new stock in-hand (which will be the Current Quantity + Adjust Quantity By entered when the transaction is finalised).
Current Quantity - this shows the current quantity

Stock Transfer Create/Edit

Complete

This is the screen used to create or edit a Stock Transfer transaction.

The fields are:
Date - the date of the transfer
From - the stock location from which stock is to be transferred. A user can transfer from any stock location associated with their Practice Locations.
To - the stock location to which stock is to be transferred.  A user can transfer to any stock location. This allows stock to be transferred to another location without giving a user full access to that location.
Reason - an optional reason describing the transfer.
Status - this can be 'In Progress' or 'Finalised'.

Items tab - this shows the line items in the adjustment, and the details of the selected item. The details fields are:
Product - the name of the product
Quantity - the quantity to be transferred. It must be greater than or equal to 1.
Current From Quantity - this shows the current quantity in the From location
Current To Quantity - this shows the current quantity in the To location

Confirm Delete

Complete

When you press the Delete button on the Products|Stock Management screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

Confirm Finalise

Complete

When you press the Finalise button on the Products|Stock Management screen, a confirmation window will appear. Press OK to confirm or Cancel to abort.

Confirm New

Complete

This is the New Stock Management Act confirmation window. Select the type of act to be created and then use OK to continue or Cancel to abort. Note that if you have selected an act on the Stock Management screen, then this will already be selected in this window - thus you can normally simply click OK to proceed.

Confirm Print

Complete

This is a standard Print window - see Introduction|Common Screens|Print

Export Stock

Complete

The Export Stock window is used to export OpenVPMS stock quantities to a CSV (comma separated values) file.

The exported data can be manipulated in a spreadsheet program such as Microsoft Excel or OpenOffice Calc, and imported using the Import button.

 

 

Stock can be selected for export using the following criteria:

  • Type - one of Medication, Merchandise or All
  • Search - enables the products to be queried by name or identity
  • Search Identities - if selected, products are queried by identity
  • Include Deactivated - if selected, inactive products are included in the search
  • Product Type - the type of the product. E.g "Desexing", "Euthanasia".
  • Stock Location - the stock location to export stock for. Defaults to that for the current Practice Location
  • Income Type - queries products by income type. E.g. "Medication", "Professional"
  • Product Group - queries products by product group. E.g "Fees", "Grooming"
  • Zero negative quantities - if selected, any stock that has a negative quantity will have its New Quantity set to zero.

Export File Format

The exported data is a comma-separated-values file, containing the following columns:

Column Required Type Description
Stock Location Id Yes Integer The stock location identifier.
Stock Location Name Yes String The stock location name.
Product Id Yes Integer The product identifier.
Product Name Yes String The product name.
Selling Units No String The product selling units.
Quantity Yes Decimal The current stock quantity
New Quantity Yes Decimal

The new stock quantity. This will be the same as Quantity, unless the Quantity is negative and Zero negative quantities is selected. In this case, New Quantity will be 0.

 

 

Import Stock

Complete

The Import button initiates the Import Stock process by displaying an upload window to let you select the file to be imported.

The file must have the same format as that exported via Export Stock. However, you can add extra columns on the right (such as Remarks, Counted By, etc) to help with the stocktake process and these will be ignored. You cannot have extra rows containing stocktake instructions etc - the only rows allowed are the header and stock data rows.

If the file can be imported, a new Stock Adjustment will be created, containing a adjustment for each line of the imported file where the New Quantity is different to Quantity. The Adjust Quantity By is calculated as New Quantity - Quantity.

The Stock Adjustment status is set to In Progress, allowing it to be edited. To apply the changes, it must be Finalised.

Import Errors

If there are errors detected in the import file, these will be displayed and the file not imported.

The possible errors and their causes are outlined below:

Error Cause
A value for <column name> is required

A mandatory value is missing. Values for Stock Location Id, Stock Location Name, Product Id, Product Name, Quantity and New Quantity must always be provided.

'<some value>' is not a valid value for <column name> An invalid value has been specified for Stock Location Id, Product Id, Quantity or New Quantity.

Expected '<name 1>' but got '<name 2>'

A Stock Location Name or Product Name has been provided that is different to that stored.
Stock location not found The stock location with the specified identifier cannot be found.
Product not found The product with the specified identifier cannot be found
Expected <value 1> for Stock Location Identifier but got <value 2> A different Stock Location Identifier has been entered to that already present. An import file can only have data for a single Stock Location.

Batches

Complete

Product Batches are used to associate a batch number, expiry date, and manufacturer with a particular product.

The Batches screen supports:

  • querying Batches by batch number, expiry date, product, stock location, active status and manufacturer
  • creating new batches
  • viewing and editing batches
  • deleting batches

When first used, the screen will be empty. The picture below shows it after a selection has been done.

 

 

Create/Edit/View

Complete

This is the Create/Edit/View screen for product Batches.

The fields are:

Id - the internal identifier for the batch.
Batch Number - the manufacturer's identifier for the batch.
Product - the product the batch is for.
Expiry Date - the batch expiry date.
Description - batch description.
Active - uncheck this box to deactive the batch.
Manufacturer - the batch manufacturer.

Stock Locations

The Stock Locations tab is used to track the locations where a batch is located. Each Batch Stock Location identifies the location, and the date range that the batch is active for at that location.

If a batch has run out at Location A, but not Location B, set the To Date for Location A to today's date. It will no longer be displayed in queries at Location A.

If a batch has run out at all locations, then the Active flag can also be unticked.

Product Select

Complete

The Product Select screen is displayed whenever you are looking for a product.  Sometimes, you will not be able to look for all types of products because it does not make sense to do so (eg when doing a stock transfer, you can only transfer types where stock is held, ie medication and merchandise).

It works like a standard select screen (and in fact you will find that the example used to explain how select screens work is in fact the Product Select screen).

Reporting

The Reporting workspace is used to handle various processing and reporting functions.

Till Balancing

Complete

This screen is used display, print, adjust and clear balances. For background information see Concepts|Tills.

Summary: How to clear the till

  1. if necessary press Select to select the required till
  2. if business needs to continue, press Start Clear to freeze this till balance and let a new one start so that business can continue
  3. press Print to get the Till Balance Report
  4. count the till and compare with the report
  5. if necessary make corrections (see below) and go back to step 3
  6. when it all matches, press Clear

Initially the screen shows the current uncleared balance of the default till for the current location. The following shows a till with very little activity - normally there will be far more transactions.

The top half of the screen works as a standard select screen to select and display the Till Balance records for the selected till. The bottom half shows the payments making up the selected Till Balance.

If the till displayed is not the one you want, press the Select button to select the required till.

The columns in the top half of the screen are as follows:

Date - this shows the date of the first payment made after the till was previously cleared, ie it will have the same date as the earliest payment in the set shown at the bottom of the screen.
Type - this always shows as 'Till Balance'
Status - will be either Cleared or Uncleared. These should be only one line with status Uncleared, but this will not appear until the first payment is made following the till being cleared.
Amount - this shows the total of the payments received since the till was last cleared.  It will always be negative because OpenVPMS treats amounts that the customer owes us as positive, and the amounts they pay as negative. NOTE that this amount does not represent the total of the cash money in the physical till. When you need to see the cash total, use the Print button to print the Till Balance Report.
Description - always blank

The fields in the bottom half of the screen are as follows:
Start Time - the date of the first payment in this till balance
End Time - blank if this till balance has not been cleared, else shows the date on which the till was cleared
Amount - the sum of all the payments shown in the columns below
Cash Float - the amount of cash left in the till each time it is cleared so as to give some money for change.
Printed - set when the till balance is printed
Status - shows Cleared or Uncleared

The columns in the bottom half are as follows:
Date - the date of the transaction
Type - the transaction type, normally Payment but also can be Refund or Cash Float Adjustment
Customer - the customer's name, or if this was a payment for an OTC sale, the name of the OTC account. Note that this is a link so you can click it to jump to the customer.
Amount - the amount of the payment
Description - almost always blank

Buttons - the buttons are as follows:

Start Clear - starts clearing the till. This changes the status of the current till balance to Clear In Progress, so that new payments and refunds don't impact it while it is in the process of being cleared. This can be used in practices that want to perform intra-day till clearing without suspending payments and refunds.
Clear - clears the till. Don't use this until you have checked the amount of cash in the till against the Till Balance Report.
Print - initiates the printing of the Till Balance Report for the selected Till Balance. You will need to print the report so that you can check that the amount in the till matches what the system thinks it is and that the other appropriate documents (eg cheques, credit card clips, etc) are present.
Mail - email the Till Balance Report for the selected Till Balance.
Adjust - generate an adjustment transaction to correct the cash amount in the till.
Edit - edit adjustments and payments. Editing of payments is available to administrators and can be used to correct payment types.
If a payment type is changed (e.g., an EFT replaced with Cash), this will be displayed in an Audit field on the payment, including the time and user name of the person who made the change.
Reverse - (only appears if till status is Clear In Progress, and a Payment or Refund transaction is currently selected) - reverses the currently selected transaction.
New - (only appears if till status is Clear In Progress) - allows you to create a new Payment or Refund.
Transfer - (only appears if the till status is Uncleared and when one of the payments is selected) - transfer the payment to another Till. When you press the button, a confirmation window will appear allowing you to choose the till.
Open Drawer - open the till's cash drawer. This button is only displayed if the Printer Name and Drawer Command for the till have been configured.

 

Making Corrections

The following table lists the possible errors and their corrective actions.

Error Action
(if Start Clear has been pressed and status is Clear in progress)
Action
(if status Uncleared)
Cash amount less than shown on print Use Adjust to insert an adjustment transaction with description ‘Cash amount less than on print’, the amount equal to difference, and the Credit box unticked Same
Cash amount more than shown on print Use Adjust to insert an adjustment transaction with description ‘Cash amount more than on print’ and amount equal to difference, and the Credit box ticked Same
Print shows payment (cheque, credit card or EFT), but document (ie cheque/credit card slip/EFT record) not found Select the payment and use Edit to edit it to correct the payment item type. Same
Print shows payment (cheque, credit card or EFT), but document in till has a different amount Use Reverse to reverse the payment, then use New to create the correct payment Use Customers|Account|Reverse to reverse the payment, then use Payments|New to create the correct payment
Print shows payment (cheque, credit card or EFT) but details are incorrect Use Reverse to reverse the payment, then use New to create the correct payment Use Customers|Account|Reverse to reverse the payment, then use Payments|New to create the correct payment
Payment has wrong customer (ie payment is for Smith but should be for Smyth) Use Reverse to reverse the payment, then use New to create the payment for the correct customer Use Customers|Account|Reverse to reverse the payment, then select the correct customers and use Payments|New to create the correct payment
Have evidence of payment (ie Cheque or credit card slip or EFT details or even cash) but no matching customer payment recorded Either use New to create the matching payment, or alternatively, move evidence to new current till contents and create matching payment using Customers|Payments|New Create matching payment using Customers|Payments|New

 

Confirm Adjust

Complete

This is the window that is displayed when you press the Adjust button on the Till Balancing screen.

s

The fields are as follows:
Date - the date of the adjustment
Description - the reason for the adjustment (the default is shown above)
Amount - the amount
Credit - tick this box if this is a credit. If the amount of actual cash in the tin is more than is shown on the Till Balance Report, then leave the box unticked. If the amount of actual cash is less, then tick the box.

The buttons have their normal meanings.

Confirm Clear

Complete

This window is displayed when you press the Clear button in the Till Balancing screen.

The fields are as follows:
New Cash Float - this is float amount for the new till. It defaults to the current float amount. If you modify this, then an Adjustment transaction will be added to the till balance being cleared to reflect the change in float amount.
Deposit Account - choose the account into which the cleared amount is to be deposited

Press the OK button to proceed, else Cancel.

Confirm Start Clear Till

Complete

This window is displayed when you press the Start Clear button in the Till Balancing screen.

The New Cash Float is the float amount for the new till. It defaults to the current float amount. If you modify this, then an Adjustment transaction will be added to the till balance being cleared to reflect the change in float amount.

Press the OK button to proceed, else Cancel.

Confirm Till

Complete

This window appears when you press the Transfer button on the Reporting|Till Balancing screen. Click the till you wish to transfer the payment to and then press OK, or use Cancel to abort.

Deposits

Complete

This screen is used to manage deposits from tills into deposit accounts

How To Summary:

  1. if necessary, press Select to select the account
  2. press Find to find the undeposited amounts
  3. press Print to print the deposit slip
  4. press Deposit to do the deposit

Having done steps 1 & 2 the screen will look like the one below. Note however that here we have set the Status to 'All' to show the Deposited amounts as well - the default is 'Undeposited' and this will show only one item (or none if there have been no till clearances since the last deposit).

The top half of the screen works as a standard select screen to select and display the Bank Deposit records for the selected account. The bottom half shows the payments making up the selected Till Balance.

If the Deposit Account displayed is not the one you want, press the Select button to select the required account.

The Status can be set to All, Deposited or Undeposited.

The columns in the top half of the screen are as follows:
Date - this shows the date of the first till balance made after the last deposit was made, ie it will have the same date as the earliest till balance in the set shown at the bottom of the screen.
Type - this always shows as 'Bank Deposit'
Status - will be either Deposited or Undeposited. These should be only one line with status Undeposited, but this will not appear until the first till balances is done following the last deposit.
Amount - this shows the total of the till balances that are part of this deposit.  It will always be negative because OpenVPMS treats amounts that the customer owes us a positive, and the amounts they pay as negative.
Description - always blank

The fields in the top of bottom half of the screen are as follows:
Start Time - the date of the first till balance in this deposit
End Time - blank if this deposit is still undeposited, else shows the date on which the deposit was done. (Note that because of a current bug, this field is always blank.)
Amount - the sum of all the amounts in the till balances shown in the columns below
Printed - this is set if the deposit has been printed
Status - shows Deposited or Undeposited

The columns in the bottom half for the Till Balance records are as follows:
Date - the date of the till balance
Type - the transaction type, always Till Balance
Amount - the amount of the till balance
Description - almost blank

If you select a Till Balance record, its details are shown (as they are in the above screen shot). For further information see Reporting|Till Balancing.

Buttons - the buttons are as follows:
Deposit - initiates the deposit (there will be a confirmation window). This button will not be present if there is no Undeposited item.
Print - initiates the printing of the Deposit Report for the selected Deposit Account. This will be useful when you go to the bank.
Mail - email the Deposit Report for the selected Deposit Account

Confirm Deposit

Complete

This is the Deposit confirmation window. Press OK to action the deposit, else Cancel.

Debtors

Complete

The Debtors screen is used to manage debtors. You can:

  • display customer balance information with various selection options and print the results
  • print a current or prior statement for a selected customer
  • do the end-of-period processing at the end of the accounting period
  • generate the statements at the end of the accounting period
  • re-print previously generated statements

For background information, see Concepts|Accounting. See also the note on statement detail at the bottom of this page.

How to summary:

  • for month (or accounting period) end processingfor debtor management
    • set the Statement Date to the end of the period (eg end of previous month)
    • press the End Period button to do the period end processing for all customers
    • press the Send All button to generate the statements for the selected customers
    • if you did select customers (say those with 60 days overdue balances so that you can include a payment request note in the envelope with their statement), then clear the selection conditions and press Send All again to process the other customers. The 60 day overdue customers' statements will not be reprinted (unless you use the reprint option).
    • Note that you do not have to generate statements for all customers. If say you have two customer account types, Normal and Staff, you could choose to only print statements each month for Normal customers and never for Staff.
    • set the Statement Date to the required date
    • enter the other selection criteria
    • press the Find button
    • optionally press the Report button
  • for account enquiries (if a customer wants a current statement)
    • set the Statement Date to today
    • set the Customer From and To to minimise the number of customers selected (ie 'sm' to 'smz' if the customer is named Smith)
    • press the Find button
    • click the line containing the customer and press the Print button
    • Note that the resulting statement will only include finalised transactions prior to the statement date - ie it will not show today's finalised invoice.
  • for account enquiries (if a customer wants a statement for a prior period)
    • set the Statement Date to the end of the required period
    • set the Customer From and To to minimise the number of customers selected (ie 'sm' to 'smz' if the customer is named Smith)
    • press the Find button
    • click the line containing the customer and press the Print button
    • Note that the resulting statement will show transactions from the Opening Balance transaction prior to the specified statement date up to the specified statement date.

This is a standard select screen. The selection fields are:
Customer Account Type - this allows you to select customers by their account type
Overdue From & To - use these to select overdue accounts. They are entered as the number of days after the statement date, ie 30 and 60 will select accounts that are between 30 and 60 days overdue. They are both optional. If you enter bad data, it is ignored. Hence:

From To Meaning
    all
30   more that 30 days overdue
30 xxx same as above (bad To value ignored)
  60 up to 60 days overdue
xxx 60 same as above (bad From value ignored)

Customer From & To - this allows you to select customers by name. For this to work as expected you need to set both the From and To entries and the To value must be greater than the From.  If you get this wrong, eg search from 't' to 't', no error will be reported, you will just get 'No results to display'.
Statement Date - the date of the end of the accounting period. Normally this will be the last day in the previous month if you are doing end-of-period and statement printing. However, if you are doing debtors management, then this should be set to the current date so that you can see the current situation.
Balances - you can select All, Current or Overdue. 'Current' selects those customers who do not have an overdue balance, 'Overdue' just those who do have an overdue balance.
Exclude Credit - uncheck the box if you also want to include customers with credit balances. Note that irrespective of any of the selection settings, customers with zero balances are never displayed.
Customer Location can be used to filter customers using their preferred practice location, to support location specific content. Selecting:

  • a practice location, returns customers that have the location set as their Practice Location.
  • None - selects all customers that don't have a Practice Location
  • All - returns customers for all practice locations

The column headings are:
Customer Name - the customers' names - each is a link to the customer.
Balance - the balance of the account as at the Statement Date.
Overdue Balance - the overdue balance, see below
Credit Balance - if the account is in credit the amount will be shown here (as well as in the Balance column)
Unbilled - the amount that is unbilled, ie the total of any in-progress, on-hold, or completed transactions
Last Payment Date & Amount - the date and amount of the last payment
Last Invoice Date - the date of the last invoice

The Buttons are:
Send All - generates the statements for the selected customers.  This will display a confirmation window - which will also allow you to request the reprint of statements of previously printed statements (which would otherwise not be reprinted).
Note that you normally use Send All only after you have used End Period, and you should keep the same Statement Date for both.
The statements generated will be emailed to the customer (rather than printed) if the customer has an email address with the purpose 'Billing'.
The document template used for the statements will be that with the type 'Customer Statement' - and this MUST have an Email Template specified - see Administration|Templates.

Print - prints a statement for the currently selected customer

Report - prints a Debtors report for the accounts of the customers shown on the screen - ie only those customers who match the current selection criteria. Note that this report does not show the selection critera. The document template used for the Debtors report will be that with the type 'Customer Account Balance'.

End Period - initiates the end-of-period processing for all customers (not just those selected). A confirmation window will be displayed. It has a 'Finalise Completed Invoices' checkbox - you should normally leave this ticked. However, if your practice has a policy that all invoices should be manually finalised by the accounts department, then you should untick this. In this case the completed/not finalised ones will be held over and not included in the closing balance.
Note that you use End Period before you have used Send All, and you should keep the same Statement Date for both.

 

Overdue calculation
The overdue date, ie the date at which an account becomes overdue is calculated as:
   overdue date = statement date - customer's account type payment terms

If the customer doesn't have an account type, then the overdue date is the statement date.

A balance is overdue if it's unpaid or part paid, and has been so since prior to the overdue date.

 

Statement Detail
The standard statements generated by the system use a document template that is written so that whether or not the statement contains line item detail depends on the Line Item Print option in the Letterhead that is being used. The options are Always, Never, and 'Not Printed'. If the latter, then the line items are shown if the invoice's Print flag is not set. (This flag is set when the finalised invoice is printed - emailing or previewing does not set the flag.)

 

Emailed Statements

When statements are emailed, the From address will be set to:

  • the Billing email contact associated with the customer's Practice Location; or
  • the Practice's Billing email contact, if the  customer doesn't have a Practice Location, or the Practice Location doesn't have a Billing email contact; or
  • the Practice's preferred email contact, if there is no Billing email contact

 

Location Specific Statements

Location specific statement content can be supported by:

  • filtering by Customer Location, and using the appropriate letterhead
  • examining the customer's Practice Location within the statement template

Confirm End Period

Complete

This confirmation window is displayed when you press End Period to to do the end-of-period processing.

There is a 'Finalise completed invoices' check box. You should normally leave this ticked. However, if your practice has a policy that all invoices should be manually finalised by the accounts department, then you should untick this. In this case the completed/not finalised ones will be held over and not included in the closing balance.

Click OK to proceed, else Cancel.

Confirm Report

Complete

This screen is used to confirm that the Account Balance Report should be run.  Press OK to proceed, Cancel to Cancel.

Confirm Statements

Complete

This confirmation window is displayed when you press Send All to generate the statements.

There is a 'Reprint statements' check box. If you are reprinting, you MUST check this so that Accounting Fees are not levied again on any overdue accounts.

Click OK to proceed, else Cancel.

Charges

Complete

The Charges workspace provides support to:

Search

Complete

The Search screen provides query support for charges.

Charges can be filtered by:

  • Search - criteria to search on. This includes:
    • charge identifier
    • customer name. Partial customer names may be entered
    • customer identifier
  • Type - can be set to All, Counter Sale, Credit Note or Invoice
  • Status - can be set to All, Completed, In Progress or On Hold
  • Date Range - by default, charges for all dates are displayed. To only display those charges created on particular dates, untick All and enter the date range
  • Location - the practice location where the charge was created.
  • Amount - the amount range. When searching by amount, date range must be specified.

Press the:

  • View button to view the selected charge. Double-clicking a charge also does this.
  • Print button to print the selected charge.
  • Mail button to email the selected charge.
  • Report button to print the Charges report.

Searching by Amounts

The Amount field can be used to filter charges by a range of amounts. The left field represents the lower bound, and the right the upper bound of the range.
E.g:

Amount Description
137.00 137.00 Shows charges with an amount of $137.00
200 500 Shows charges with an amount between $200 and $500 inclusive.
  500.00 Shows charges with an amount <= $500
500.00   Shows charges with an amount >= $500

 

Work In Progress

Complete

The Work In Progress screen is displays the current open charges i.e., those invoices, credit notes and counter sales that are in progress, on hold, or completed.

Charges can be filtered by:

  • Type - can be set to All, Counter Sale, Credit Note or Invoice
  • Status - can be set to All, Completed, In Progress or On Hold
  • Date Range - by default, charges for all dates are displayed. To only display those charges created on particular dates, untick All and enter the date range
  • Location - the practice location where the charge was created.

Press the:

  • View button to view the selected charge. Double-clicking a charge also does this.
  • Print button to print the selected charge.
  • Mail button to email the selected charge.
  • Report button to print the Work In Progress report.

Reminders

Complete

Reporting - Reminders is used to:

Errors

Complete

This screen is to used to review and correct errors that have occurred when sending reminders.

The fields are as follows:

Type Selects the type of reminder.
All When selected, show all reminders that have failed to be sent.
When deselected, the Send date is used to filter reminders.
Send All reminders with a Send date on or before this date will be shown.
Location

Used to filter reminders by a customer's preferred practice location, to support location specific content. Selecting:

  • a practice location, returns reminders for customers that have the location set as their preferred location
  • All - returns reminders for all practice locations

The columns are as follows:

Type Shows the reminder item type. These determine how a reminder will be sent.
Status The reminder item status. On the Errors tab, these will always be Error.
Send The date from when the reminder should be sent.
Due Date The reminder due date for the reminder count.
Customer The customer to send the reminder to.
Patient The patient the reminder is for.
Reminder Type The name of the reminder type.
Count The number of times the reminder has been sent.
Error The error encountered processing the reminder. See below.

 

The buttons are as follows:

Find Find all reminders matching the criteria.
Edit Edit the selected reminder
Resolve Resolve the error with the selected reminder, making it a candidate for sending again. Note that pressing 'Resolve' simply removed the error flag - it does not actually fix the underlying cause of the error, so if you do nothing to fix the cause, the error will occur again when the reminder is next sent.
Resolve All Resolve the errors with the all reminders matching the criteria, making them candidates for sending again.
Complete Marks the selected reminder item as Completed, without sending it. If the associated reminder has no other Pending reminder items, it's reminder count will be incremented.
Complete All Marks all reminder items matching the criteria as Completed, without sending them. If an associated reminder has no other Pending reminder items, it's reminder count will be incremented.

Error Text

In most cases the error message will be self explanatory, some are not:

No rules match the customer contacts
This means that there are no rules for the given reminder type and reminder count that match the customer contacts. E.g, it will occur if you have a single rule to email reminders, and the customer has no email contact.
It can also occur if the document templates aren't fully configured. You can glean more information from openvpms-full.log. Look for messages containing the text:
     ReminderProcessor

Resend

Complete

This screen is to used to resend reminders that have been sent or cancelled.

The fields are as follows:

Type Selects the type of reminder to send.
Status The reminder status.
From All reminders with a Send date on or after this date will be shown.
To All reminders with a Send date on or before this date will be shown.
Location

Used to filter reminders by a customer's preferred practice location, to support location specific content. Selecting:

  • a practice location, returns reminders for customers that have the location set as their preferred location
  • All - returns reminders for all practice locations

The columns are as follows:

Type Shows the reminder item type. These determine how a reminder will be sent.
Status The reminder item status.
Send The date from when the reminder should be sent.
Due Date The reminder due date for the reminder count.
Customer The customer to send the reminder to.
Patient The patient the reminder is for.
Reminder Type The name of the reminder type.
Count The number of times the reminder has been sent.
Error Any error encountered processing the reminder.

 

The buttons are as follows:

Find Find all reminders matching the criteria.
Edit Edit the selected reminder
Send Send the selected reminder
Send All Send all reminders matching the criteria
Preview Preview the selected reminder. If the reminder type has Group By set to Customer or Patient, any adjacent reminder matching the criteria will be grouped in the preview.

Send

Complete

This screen is to used to send reminders that have been queued by the Patient Reminder Queue job.

If the Patient Reminder Queue is not configured it will display:

Cannot send reminders.
No Patient Reminder Queue Job is configured to queue reminders for sending.

If there are no reminders queued it will look like:

If there are reminders queued, it will look like:

The fields are as follows:

Type Selects the send type (Email, Export, List, Print, SMS or All) to process.
Send The date to send reminders from. All reminders with a Send date on or before this date will be shown.
Location

Used to filter reminders by a customer's preferred practice location, to support location specific content. Selecting:

  • a practice location, returns reminders for customers that have the location set as their preferred location
  • All - returns reminders for all practice locations

The columns are as follows:

Type Shows the reminder item type. These determine how a reminder will be sent.
Status The reminder item status. On the Send tab, these will always be Pending.
Send The date from when the reminder should be sent.
Due Date The reminder due date for the reminder count.
Customer The customer to send the reminder to.
Patient The patient the reminder is for.
Reminder Type The name of the reminder type.
Count The number of times the reminder has been sent.
Error Any error encountered processing the reminder.

The reminder details pane is displayed if you click on a reminder to select it.  See here for details of its fields.

The buttons are as follows:

Find Find all unsent reminders matching the criteria.
Edit Edit the selected reminder
Send Send the selected reminder
Send All Send all reminders matching the criteria
Complete Marks the selected reminder item as Completed, without sending it. If the associated reminder has no other Pending reminder items, it's reminder count will be incremented.
Complete All Marks all reminder items matching the criteria as Completed, without sending them. If an associated reminder has no other Pending reminder items, it's reminder count will be incremented.
Preview Preview the selected reminder. If the reminder type has Group By set to Customer or Patient, any adjacent reminder matching the criteria will be grouped in the preview.

Sending Reminders

Reminders can be sent by clicking Send or Send All.

SMS and email reminders can also be sent automatically by configuring a Patient Reminder Sender job.

Email Reminders

When reminders are emailed, the From address will be set to:

  • the Reminder email contact associated with the customer's Practice Location; or
  • the Practice's Reminder email contact, if the  customer doesn't have a Practice Location, or the Practice Location doesn't have a Reminder email contact; or
  • the Practice's preferred email contact, if there is no Reminder email contact

Print Reminders

Location specific reminder content can be supported by:

  • filtering by Location, and using the appropriate letterhead
  • examining the customer's location within reminder templates

Export Reminders

If one or more reminders are to be exported then the CSV file will be generated and then downloaded to the browser for the user to save on the completion of reminder generation.  See also Reminder Export Format.

Notes

  1. If you do process individual send types (i.e. do not select All), then you should also do a run with All specified to ensure that you pick up all the reminders for the period, and don't forget some types.
  2. Errors. If you get an error saying "... no document template for .. with a reminder count of N..", it can mean what it says (i.e. the Reminder Type does not have a template specified for that reminder count), or that a template is specified but that it does not have Document Template specified, or that it does but the specified Document Template does not have its Content specified.
  3. Processing Limits: the system will only process a maximum or 1000 reminders at a time. If this limit is reached the processing confirmation window will display something like the following:

    You can see that for the List reminders, 1000 have been processed but more are available.
    All you need to do is use the Send All button to process the remaining ones.

See Also

Reports

Complete

This window is used to run reports.  For background information, see Introduction|Reports.

This works like a standard select screen.

The column headings are:

Id - the Id number of the report
Name - the name of the template - see Administration|Templates
Description - its description
Report Type - its report type
Run Level - its run level. Note that you will not be shown any reports with a run level higher than your own. Your run level is set using Administration|Users

Press the Run button to run the report.

Report Criteria

Complete

This window is displayed when you press the Run button on the Reporting|Reports screen. It is allows the input of the report parameters (which will vary from report to report) and also provides the standard print request facilities.

The non standard buttons are as follows:
Export - click this to to export the report to a CSV file so that it can be processed by another program. Note that for best effect, the report itself may need to be adjusted. That is, if the report has page headers, footers and titles (as is normally the case) then these will also be in the CSV output. Hence making a 'no fancy bits' version will produce a cleaner CSV file.
Export & Email - will generate the CSV file and then bring up an Email window to allow you to send it somewhere

Report Parameters
This area will vary from report to report because the parameters vary from report to report.

If the parameter is a date, then you can use any of the date shortcuts - eg '-2y' for two years ago.

If the parameter is a string (indicated by the data field having resize dots in the bottom right corner like the Location name and other selection boxes above) then you can use a macro to enter the information. This can be useful for entering data which a macro can easily generate but which you have to think about.

For example if you define a macro @cid whose expression is $customer.id, then provided the report has defined the Customer Id parameter as a string, you can enter @cid and press Enter and (if there is a current customer) then the @cid will be replaced by 123456 (or whatever the current cusomer's id is).

If fact a better macro expression to use is expr:var("customer.id", "There is no current customer") because this will warn if there is no current customer.

[Note that for the 1.8 and later releases, the above technique is not longer required because the report can be written to provide the current customer ID (and any other current item value) - see here.]

Insurance

Complete

This window is used to report on Insurance Claims.

The query fields are as follow:

  • Id
Finds claims by OpenVPMS identifier, policy number or insurer claim identifier
  • Status

Finds claims by their status. Use:

  • All
to find all claims
  • Incomplete
to find claims that haven't been Settled, Declined, or Cancelled.
  • Not Submitted

to find claims that are Pending or Finalised

  • Pending
to find claims that are still being edited
  • Finalised
to find claims that can no longer be changed but haven't been submitted to the insurer
  • Submitted
to find claims that have been submitted, but not yet accepted by the insurer
  • Cancelling
to find claims that are in the process of being cancelled
  • Cancelled
to find claims that have been cancelled
  • Accepted
to find claims that the insurer has accepted, but has not yet settled or declined.
  • Settled

to find claims that the insurer has settled

  • Declined
to find claims that the insurer has rejected
  • Insurer
Finds claims for the specified insurer. Leave blank to find claims for all insurers.
  • All/Date range
Allows claims to be found by date, or use All to find claims for all dates.
  • Gap Claim Status

Finds claims by their gap claim status. Use:

  • All
 to find all claims
  • Pending
to find gap claims where no Benefit Amount has been determined by the insurer.
  • Received
to find gap claims where a Benefit Amount has been received from the insurer.
  • Paid
to find gap claims where the claim has been paid, but the insurer has yet to be notified.
The insurer must be notified in order for them to reimburse the customer, if full payment was made, or the practice, if gap payment was made.
  • Notified
to find gap claims where the insurer has been notified of payment.
  • Location
Finds claims by the practice location where they were created.
Leave blank to find claims for all locations.
  • Clinician
Finds claims by the clinician responsible for them, or use All to find claims for all clinicians.

The results table columns are as follows:

  • Id
The OpenVPMS identifier for the claim.
  • Date
The date the claim was created.
  • Customer
The customer making the claim.
  • Patient
The patient the claim is for.
  • Location
The practice location where the claim was created.
  • Insurer
The insurer handling the claim.
  • Policy Number
The policy number.
  • Claim Number
The claim number.
  • Claim Status
The claim status.
  • Amount
The claim amount.
  • Gap Claim
If selected, indicates the claim is a gap claim.
  • Gap Claim Status
The gap claim status.
  • Benefit Amount
The agreed benefit amount, determined by the insurer for a gap claim. If the Gap Claim Status is Pending, the insurer has not yet set the amount.
  • Clinician
The clinician responsible for the claim.
 

The buttons are as follows:

  • Edit
Edit the selected claim.
  • Delete
Delete the selected claim. Claims that have been submitted cannot be deleted.
  • Submit
Submits the selected claim to the insurer. Once submitted, the claim cannot be changed
  • Pay Claim
Pays a gap claim.
  • Cancel Claim
Cancels the selected claim.
  • Settle Claim
Mark a claim as being settled by the insurer.
This is only applicable to offline claims.
  • Decline Claim
Mark a claim as being declined by the insurer.
This is only applicable to offline claims.
  • Print
Prints the selected claim.
  • Report
Generates a report of all claims matching the query criteria.

Report

The Report button displays a window to generate a report of all claims matching the query criteria.

This can be:

  • previewed as a PDF
  • printed
  • emailed as a PDF

Administration

Complete

The Administration entry in the top menu line is used to access various administration functions. It is displayed only for users who have been set as administrators.

Note that when documenting the screens in this section, it has been assumed that since you must be an andministrator to use them, you only need the fields explained and not the various buttons and how the screen works. If you do need help with the functionality, you should read the Introduction section.

Organisation

Complete

The Administration|Organisation screen is a select screen that allows you to select the specific Organisation Type to be viewed or maintained. Below is the screen as initially displayed but with the Organisation Type pull-down list showing.

Note that if you do edit Administration|Organisation items (say to change an email address), then the new values will not become available until the next time you log on (because these organisation settings are fetched once at logon time to improve performance).

Each Type has its own view/edit screen.

The buttons are as follows:

New create and edit a new instance of the selected type
Edit edit the selected instance
Delete delete the selected instance
Synchronise Insurers only applicable when the selected instance is an Insurance Service. Adds, updates or deactivates insurers managed by the Insurance Service.

Calendar Event

Complete

This window is used to manage a Calendar Event.

The fields are:

  • Name
An optional name for the event.
  • Start Time
The date and time that the event starts.
  • End Time
The date and time that the event ends.
  • Duration
The event duration, expressed in days, hours, and minutes.
  • Notes
Optional notes.
  • Author
The user that created the event.
  • Repeat
Determines the event recurrence. See Repeating Events below.

Repeating Events

Calendar Events can be made to repeat one or more times, to form a series of events. Each event in the series:

  • has the same details as the first event
  • can be edited independently of the series

Repeat Options

Calendar Events can be made to repeat:

  • Daily
    • Every day
    • On weekdays
    • Every N days
    • Every Sunday...Saturday
  • Weekly
    • Every Week
    • Every N weeks
  • Monthly
    • Every month
    • Every N months
    • On the first..fifth or last Sunday...Saturday every N months
    • On the 1..31 or last day(s) every N months 
  • Yearly
    • Every year
    • Every N years
    • On the 1..31 January...December every N years
    • On the first..fifth or last Sunday...Saturday of January...December every N years

Calendar Events repeat until a specified date, or number of times. When using 'until date', the relative date facility can be used to calculate the date - e.g. 0ye will set the end of the current year, and 6me will set the end of the 6th month ahead.

Restrictions

  • at most only 729 recurring events can be scheduled (i.e. for a total of 730 in a series)
  • if an event is set to repeat on a day that is not available, it is skipped. E.g specifying a monthly repeat on the 31st of the month will skip all months without 31 days.

Clickatell

Complete

This screen is used to configure the Clickatell Plugin.

For background, Setup - SMS - Plugins

The fields are:

  • API Key
the Clickatell API Key for the REST integration.
  • Country Prefix
the country code, e.g. 61 for Australia, 44 for the UK, etc.
  • Area Prefix
the digit used to prefix the area code, i.e. 0 for Australia
  • From
the SMS sender ID. If specified, it must correspond to one configured with the Clickatell account.
  • Maximum Parts
the maximum number of parts that may be sent in a single message. These are sent as multiple SMS by Clickatell, but are concatenated together so that the recipient sees a single message.
Each part is charged separately by Clickatell.
The specified number must not exceed that of the Clickatell account.
  • Monitor Status
if selected, periodically poll Clickatell for status updates to messages.
  • No. of Days to Monitor
the number of days to monitor

 

Note: The Country and Area Prefixes are used to send phone numbers to Clickatell in the required format.
That is, the customer's number will be something like 0413 123 456, but Clickatell needs the full international number, i.e. 61413123456.
If the customer lives in another country then their number will be something like (for Hong Kong) 852 1234 5678. To indicate that this is an international number, prefix it with a +, i.e. +85212345678.

The logic is therefore:

  • if the number starts with a +, it is an international number. The + will be removed; else
  • if the number starts with the Area Prefix, then it is a local number. The Area Prefix will be replaced with the Country Prefix added; else
  • the number will be used as is

Deposit Accounts

Complete

This screen is used to create/edit/view the details of the bank accounts in which takings are deposited via the Reporting|Till Balancing|Deposit processing.  Most of the fields are used to provide the information to print on the Bank Deposit document obtained using Reporting|Till Balancing|Print.

The fields are as follows:
Name - the name of the Deposit Account
Account Name - the name in which the account is held
Bank - select the bank from those available in the pull-down - see Lookups|Bank
Branch - the name of the branch
Account Number - the account number
Last Deposit - the date on which the last deposit was made (this is updated by the system when the Till Balancing|Deposit processing is done)
Active - uncheck this box to deactivate the account

Locations Tab - used to set the Practice Locations for which this Deposit Account is available. Note that multiple locations can be set, but not repeated - ie an error will occur if you attempt to add one location twice

Select

Complete

This is the screen used to select a Deposit Account. It works like a standard select screen.

Insurance Service

Complete

This screen is used to create or edit an Insurance Service.
Insurance Services are provided by plugins and the available fields are defined by the Insurance Service provider.

Please contact your Insurance Service provider for a description of the fields.

Mail Server

Complete

Mail Server is used to configure email server settings to enable OpenVPMS to send emails.

The fields are as follows:

Name The server name
Description The server description
Active Uncheck this to prevent emails being sent
Host The server host name
Port The server port
Username The server user name
Password The server password
Security Set to None, SSL/TLS, or STARTTLS as required by your email provider. The standard setup is:   
Port Security
25 None
465 SSL/TLS
587 STARTTLS
Timeout

The timeout, in seconds for sending and receiving data from the mail server. A value of 0 indicates no timeout.
This can be used to prevent email sends from waiting indefinitely if there are mail server or network problems.
Note that this sets the upper limit for interaction with the mail server, not the length of time it takes to send an email.
If a timeout occurs, an email may still be be partially sent.

OTC

Complete

This screen is used to create/edit/view the OTC accounts. See also Concepts|OTC - Over The Counter.

The fields are as follows:
Name - the name of the OTC account
Description - serves to clarify the name
Active - uncheck this box to deactivate the account

Locations Tab - used to set the Practice Locations for which this OTC account is available. Note that multiple locations can be set, but not repeated - ie an error will occur if you attempt to add one location twice

Select

Complete

This is the screen used to select an OTC account. It works like a standard select screen.

Practice

Complete

This screen is used to create/edit/view the Practice. Note that you can only have one active Practice at a time.

The fields are as follows:
Practice Name - the name of the practice. This will appear on various reports and documents so it should be set as you want it to appear.
Active - uncheck this box to deactivate the practice
Currency - select the currency to be used - see Lookups|Currency
Patient Age Format - select the required format - see Lookups|Duration Formats. If you leave this set at None, default settings apply - see Lookups|Duration Formats.
Estimate Expiry - the default interval for how long estimates are valid - see Concepts|Estimates
Default Payment Type - sets the default payment type
Prescription Expiry - the default interval for how long prescriptions are valid - see Concepts|Prescriptions
Reminder Export Format - this determines the file format when exporting reminders on the Reporting|Reminders screen - it can be set to None, Comma or Tab separated values.
Auto Lock Screen - this determines how long a user's session may remain inactive before a dialog is displayed prompting the user to re-enter their password. A value of 0 disables this feature. Note that due to the way the client browser is refreshed, the dialog may be displayed up to 30 seconds after the specified period of inactivity.
In order to prevent auto-lock, you need to periodically do something that triggers synchronisation with the server. This resets the auto-lock timer. Things that trigger synchronisation include:
- pressing Enter in a field
- clicking a button (e.g. Apply)
The following will not trigger synchronisation:
- inputting text without pressing enter
- moving the mouse
- pressing tab
The reason for this is to limit the amount of network traffic between the browser and the server.
Auto Logout - this determines how long a user's session may remain inactive before the user is automatically logged out.
Scheduling Refresh - the number of seconds between automatic refreshes of the Scheduling and Work Lists displays. Use 0 to disable refreshes. When enabled, the Appointment and Task caches need to be sized correctly to ensure fast updates. See Application Caches for more details.
Show Problems in Visit - if selected, a Problems tab will be displayed in the Visit Editor. By default, it is unselected.
Ignore List Price Decreases - if selected, then if the Auto Price Update option is checked on the Product's Supplier tab and the calculated cost price is less than the existing cost price of the product, then no Auto Price Update will be done.
Log Communication - if selected, communication with a customer will be automatically logged. See Communication for more details.
Record Lock Period - the period of time after a patient medical record is created that it is locked from editing. Setting a value <= 0 disables locking. Changing this value will log an Audit message. Enabling it will schedule a job to periodically lock records. See Medical Record Locking for more details.
Minimum Quantities - used to reduce charging errors, by ensuring that a product has a minimum quantity.
When enabled, product template and estimate Low Quantities set a mininum quantity for a product. When expanding a template into an estimate or charge, the low quantity of the included product becomes the minimum quantity for an item. When invoicing an estimate, the estimate low quantities set the minimum quantities on the invoice.

  • For estimates, an item is invalid if its Low Qty is less than the minimum quantity
  • For charges, an item is invalid if its Quantity is less than the minimum quantity

If an item has a minimum quantity:

  • it cannot be swapped for another product, if it is a service
  • it can be swapped for another medication, if it is a medication
  • it can be swapped for other merchandise, if it is merchandise
  • it can be deleted, subject to the Override.
    This specifies the type of user that may delete items with a minimum quantity.  If unset (i.e. None), items may be deleted, but a warning will be displayed. If set, only users with the specified user type may delete the item.

When Override is set, users with the specified user type can override minimum quantities.

Show Prices Tax Inclusive - determines if fixed and unit prices in Products - Information and during product selection should be displayed inclusive or exclusive of tax.
Use Location Products - if selected, products used in charges, estimates, investigations and reminders are restricted to those available at the current location. This is useful for multi-location practices where not all products are available at each location. For:

  • medication and merchandise products, this excludes products that don't have a Stock Location relationship, ie there has never been stock of the product at the stock location for the current practice location
  • service and template products, this excludes products that are specifically set as not being available at the location. By default all templates and services are available at all locations. To set the 'not available at' locations for specific templates and services, use the Locations tab on the Product Information screen (which is only displayed if 'Use Location Products' is checked).

Insurance Claim at Check Out - determines if insurance claims should be made during Check Out, for those patients with insurance policies. This provides the options:

  • Don't claim - don't prompt to make any claims
  • Gap Claim Only - only prompt to make gap claims. This occurs before payment is collected, and only applies if an insurer supports gap claims.
  • Standard Claim Only - only prompt to make standard claims. This occurs after payment is collected.
  • All - prompt to make both standard claims and gap claims

Follow Up at Check Out - check this box if you want to pop up a new task editor at check-out to optionally create a follow up task for the patient.
Use Logged In Clinician - determines how Clinician fields are populated. When:

  • selected, Clinician fields default to:
    • the current user, when the logged in user is a clinician; else
    • the workflow clinician or the last selected clinician, when the logged in user is not a clinician

This is the preferred choice.

  • unselected, Clinician fields default to the workflow clinician, or the last selected clinician  

Only use this if workstations are shared.

Short User Name Format - specifies the format for user and clinician names in reports. Defaults to the user's name.
Medium User Name Format - specifies the format for user and clinician names in printed Medical Records and Problems, Appointments and Tasks, and Drug Labels. Defaults to the user's title and name.
Long User Name Format - specifies the format for user and clinician names in Estimates and certificates. Defaults to the user's title, name and qualification.
Restrict Ordering - when selected, supplier orders can only be finalised by a clinician. This can be used in jurisdictions that require restricted drug ordering to be limited to clinicans.
Pharmacy Order Discontinue Period - determines how long after an invoice is finalised that any pharmacy orders are discontinued. When non-zero, this automatically schedules a Pharmacy Order Discontinuation Job to discontinue pharmacy orders after invoices have been finalised. If zero or not specified, pharmacy orders are discontinued when an invoice is finalised.
Base URL - the base URL for accessing OpenVPMS. This is used by plugins that need to serve content. This is set automatically when editing the Practice.
Service User - the user responsible for background services. This is required by:

  • the HL7 services to update outbound messages.
  • the Smart Flow Sheet interface, when processing events (e.g. treatments, discharge)
  • medical record locking
  • plugins

Mail Server - the default email server. This is used:

  • by the email-to-SMS gateway
  • when no Mail Server is specified on a Practice Location

SMS - the SMS gateway.
Appointment SMS - the default appointment reminder SMS template to use if no template is specified for a Practice Location. See also Template|Appointment Reminder SMS Template.
Reminder Configuration  - determines how patient reminders are processed. See Reminder Configuration.
Smart Flow Sheet Configuration - configuration for the Smart Flow Sheet interface. See Smart Flow Sheet Configuration.

 

The Contacts tab is used to view and maintain the various contacts. The types are as follows:
 

Location - you should set this so that it can appear on reports and documents
Phone - again you should set this so that it can appear on reports and documents
Email - you need to set this, not only so that it can appear on reports and documents, but also because it is used by the system when generating the From address on emails being sent out. In particular, the code that sends out Reminders and Statements via email will the Practice's email addresses for customers who do not have a Practice Location set. If you set one with the purpose 'Billing' it will be used for the Statements. If you set one with the purpose 'Reminder' it will be used for Reminders. Note however that emails initated by users are sent out using the current location's email address(es).

See Concepts|Contacts for details.

 

Below is the Locations tab. You can use this to set the Practice Locations, but it's more normal to attach the locations to the practice when setting up the locations.

Below is the Taxes tab. Use this to set the applicable taxes.

Below is the Templates tab. You should set the 'default' template here for each type of template for which you have multiple templates of that type. For example if you are using different Invoice templates for some Practice Locations, then you should set the default invoice template here.

Below is the Subscription tab with no current subscription. First you need to click the link to purchase the subscription. You will be sent a key file.  Upload this by clicking the Upload button.

Below is the Subscription tab showing the current subscription (with the details intentionally blurred).

Select

Complete

This is the screen used to select a Practice. It works like a standard select screen.

Practice Location

Complete

This screen is used to create/edit/view the Practice Locations, ie the branches of the practice. See Concepts|Practice and Locations for background.

The fields are as follows:
Location Name - the name of the location. This will appear on various reports and documents so it should be set as you want it to appear.
Active - uncheck this box to deactivate the location
Stock Control - check this box to enable stock control for this location
Rostering - check this box to enable rostering at this location
Roster Check Period - determines how far into the future that the roster is checked when assigning clinicians to appointments. This is to avoid warning users that a clinician is not rostered on when the roster hasn't been established.
Logo - used to set the logo to be displayed at the top of the screen when the Practice Location is selected. Logos may be .png, .jpg, .gif, or .bmp format, and should be no more than 30 pixels high. Note that any new logo will be displayed after the location is selected.
Default Printer - use the pull-down to select the default printer for this location.
Pricing Group - the pricing group in use for the practice location. This is optional. It is used by practices that set different prices for the same product at different locations. See Concepts|Pricing for details.
Disable Discounts - if selected, disables discount entry when editing charges and estimates at this location.
Stock Locations - sets the Stock Location for the location. If you have Stock Control enabled for this location then you must have one. Multiple locations can share the one stock location. See also Organisation|Stock Location.
OTC - sets the OTC account for the location. You can only have one but multiple locations can share the one OTC account. See also Organisation|OTC.
Smart Flow Sheet Clinic API Key - specifies the API key used to connect to Smart Flow Sheet. See also Smart Flow Sheet integration.
Mail Server - specifies the email server to use when sending emails from the location. If none is specified, the mail server associated with the Practice will be used. See also Organisation|Mail Server.
Appointment SMS - specifies the appointment reminder SMS template to use when sending SMS reminders from the location. If none is specified, the template associated with the Practice will be used. See also Template|Appointment Reminder SMS Template.
Letterhead - specifies the Letterhead template to use for this location. This field is not mandatory but is needed if you want to use the Letterhead facility for easy customisation of invoice, credit notes, statements etc.
Online Booking - if selected, appointment schedules at this location that also have Online Booking selected, are available for online booking.

The Contacts tab is used to view and maintain the various contacts. The types are as follows:
Location - you should set this so that it can appear on reports, documents and the letterhead
Phone - again you should set this so that it can appear on reports, documents and the letterhead. If you have a fax number, you should enter it (as a Phone contact with purpose Fax) so that it can be shown on the letterhead.
Email - you need to set this, not only so that it can appear on reports, documents and the letterhead, but also because it is used by the system when generating the From address on emails being sent out. Although the code that sends out Reminders and Statements via email uses the Practice's email addresses, emails initiated by users are sent out using the current location's email address.  If there are multiple email addresses set, then the user can choose the required one from a pull-down list.
Website - you should set this so that it can appear on reports, documents and the letterhead

See Concepts|Contacts for details.

 

Below is the Practice tab. Use this to set the Practice to which this location belongs. Note that you can have a location not attached to a practice, but it can't be used because it can't be selected using the Location pull-down at the top right of the screen.

Below is the Tills tab. Use this to set theTill(s) for the location. You must have at least one, otherwise there is nowhere to put the money. It is possible for multiple locations to share tills. See also Organisation|Tills.

Below is the Deposit Accounts tab. Use this to set the Deposit Account(s) for the location. You must have at least one, otherwise there is nowhere to deposit the money. It is possible for multiple locations to share accounts. See also Organisation|Deposit Accounts.

Below is the Schedule Views tab. Use this to set the Schedule Views for the location. You must have one, but can have more. Multiple locations can share Schedule Views. See also Organisation|Schedule Views.

Below is the Work List Views tab. Use this to set the Work List Views for the location. You must have one, but can have more. Multiple locations can share Work List Views. See also Organisation|Work List Views.

Below is the Printers tab. Use this to set the printers that may be selected at the location. If no printers are listed, all will be available for selection.

The Status column indicates if a printer is Available or Unknown. If a printer is marked as Unknown, it is no longer available for selection when printing.

 

Below is the Templates tab. Use this to set any location specific Document Templates.These were commonly used where it was necesssary for each location to have different logos on invoices, receipts etc. However, the Letterhead facility now provides this. The facility is of use for setting location specific printers, and for testing new versions of templates.

Below is the Service Ratios tab. Use this to apply a ratio to prices of products of a specific product type, at this practice location. See Service Ratios for more details.

Follow-up Work Lists tab. Use this to configure the work lists that may be selected when:

  • clicking the button in the patient summary, to add a follow-up task
  • the Follow-Up At Check Out option is selected to create follow-up tasks at check-out

Select

Complete

This is the screen used to select a Practice Location. It works like a standard select screen.

Roster Area

Complete

A Roster Area is an area within a Practice Location where employees work.

It is used in Workflow - Rostering to roster employees on to shifts.

A Roster Area may have optional Schedules. These determine which schedules a clinician may be rostered on to for an appointment.

The fields are as follows:

Name The area name
Description The area description
Location The practice location that the area belongs to
Active Determines if the area is active. If unticked, the area is inactive, and shifts cannot be created for it
Schedules Optional appointment schedules.

SMS Configuration: Clickatell SMTP Connection

Complete

This screen is used to configure the SMS gateway for Clickatell using e-mail.

NOTE: this configuration is deprecated as Clickatell no longer supports e-mail for new accounts. Use the Clickatell plugin instead.

See also Concepts|SMS and Reference|Setup|SMS. The screen is in two parts - the top contains the parameters, the bottom allows you to test the setup.

The fields in the top half are as follows:

Name - the name of the connection
Description - a description which serves to clarify the name
Website - Clickatell's website
Active - uncheck this box to deactivate this configuration
Country Prefix - the country code, eg 61 for Australia, 44 for the UK, etc
Area Prefix - the digit used to prefix the area code, ie 0 for Australia - see also below
User - the user name for the Clickatell account
Password - the password for the Clickatell account
API ID - the API ID provided by Clickatell
From - a valid email address
Reply To - an optional email address - responses from the gateway will be sent here
Sender ID - the SMS sender ID. If specified, it must correspond to one configured with the Clickatell account.
2 Way SMS - used to indicate that Clickatell should use Sender ID to allow mobile phone users to send SMS messages to your Clickatell account. See the Send 2 Way SMS Service for more details.
Maximum Parts - the maximum number of parts that may be sent in a single message. These are sent as multiple SMS by Clickatell, but are concatenated together so that the recipient sees a single message.
Each part is charged separately by Clickatell.
The specified number must not exceed that of the Clickatell account.

Notes:

  • If your Clickatell SMS Configuration was created prior to OpenVPMS 1.7.1, you will need to recreate it to use the Sender ID field.
  • If your Clickatell SMS Configuration was created prior to OpenVPMS 1.9, you will need to recreate it to use the 2 Way SMS field.

The bottom half of the screen contains:
Number - the phone number to which the test message is to be sent
Message - the text for the SMS message
SMS Button - press to send the email
Email - this panel shows the email that will be sent
Status - this shows 'OK' if all is OK else an error message indicating what is wrong
To get the Email and Status to update you must press the Enter key when the cursor is positioned in either of the Number or Message fields.

Note: The Country and Area Prefixes are used to format phone numbers so that they have the required format. That is, the customer's number will be something like 0413 123 456, but the gateway needs the full international number, ie 61413123456. However, if the customer lives in another country then their number will be something like (for Hong Kong) 852 1234 5678. You need to indicate that this is an international number by prefixing it with a +, ie +85212345678.

So the logic is:
If the number starts with a +, strip it and use that number.
Else does the customer's number start with the Area Prefix? If yes, then strip the prefix and add the Country Prefix.

SMS Configuration: Generic Email Gateway

Complete

This screen is used to configure the generic SMS gateway. See also Concepts|SMS and Reference|Setup|SMS. The screen is in two parts - the top contains the parameters, the bottom allows you to test the setup. Note that this is a generic gateway configuration screen - the screen shot below shows parameters suitable for Exetel.

The fields in the top half are as follows:
Name - the name of the connection
Description - a description which serves to clarify the name
Website - the provider's website
Active - uncheck this box to deactivate this configuration
Country Prefix - the country code, eg 61 for Australia, 44 for the UK, etc
Area Prefix - the digit used to prefix the area code, ie 0 for Australia - see also below

From & From Expression - these define the email's From address. If only From is entered, this is used. If the From Expression is provided, it is evaluated and the result used. The expression may refer to the From value as "$from".

To & To Expression -these define the email's To address. If only To is entered, this is used. If the To Expression is provided, it is evaluated and the result used. The expression may refer to the To value as "$to".

Reply To & Reply To Expression - these define the email's Reply To address. If only Reply To is entered, this is used. If the Reply To Expression is provided, it is evaluated and the result used. The expression may refer to the Reply To value as "$replyTo".

Subject & Subject Expression - these define the email's Subject. If only Subject is entered, this is used. If the Subject Expression is provided, it is evaluated and the result used. The expression may refer to the Subject value as "$subject".

Text & Text Expression - these define the email's Text. If only Text is entered, this is used. If the Text Expression is provided, it is evaluated and the result used. The expression may refer to the Text value as "$text"."

Maximum Parts - the maximum number of parts that may be sent in a single message. These are sent as multiple SMS by the gateway provider, but are concatenated together so that the recipient sees a single message.
Each part will be charged separately by the provider.
The specified number must not exceed that supported by the provider.

The bottom half of the screen contains:
Number - the phone number to which the test message is to be sent
Message - the text for the SMS message
SMS Button - press to send the email
Email - this panel shows the email that will be sent
Status - this shows 'OK' if all is OK else an error message indicating what is wrong

To get the Email and Status to update you must press the Enter key when the cursor is positioned in either of the Number or Message fields.

Note: The Country and Area Prefixes are used to format phone numbers so that they have the required format. That is, the customer's number will be something like 0413 123 456, but the gateway needs the full international number, ie 61413123456.  However, if the customer lives in another country then their number will be something like (for Hong Kong) 852 1234 5678. You need to indicate that this is an international number by prefixing it with a +, ie +85212345678.

So the logic is:
If the number starts with a +, strip it and use that number.
Else does the customer's number start with the Area Prefix? If yes, then strip the prefix and add the Country Prefix.

Select

Complete

This is the screen used to select an SMS configuration. It works like a standard select screen.

SMS Configuration: SMSGlobal Email2SMS

Complete

This screen is used to configure the SMS gateway for SMSGlobal. See also Concepts|SMS and Reference|Setup|SMS. The screen is in two parts - the top contains the parameters, the bottom allows you to test the setup.

The fields in the top half are as follows:
Name - the name of the connection
Description - a description which serves to clarify the name
Website - SMSGlobal's website
Active - uncheck this box to deactivate this configuration
Country Prefix - the country code, eg 61 for Australia, 44 for the UK, etc
Area Prefix - the digit used to prefix the area code, ie 0 for Australia - see also below
From - a valid email address - this must be the same as that entered in the Email to SMS settings in the Email Settings page at https://mxt.smsglobal.com/integrations/email-to-sms
Subject - placeholder email subject. This is not used by SMSGlobal, but may be set to prevent mail servers from rejecting SMS emails as spam.
Maximum Parts - the maximum number of parts that may be sent in a single message. These are sent as multiple SMS by SMSGlobal, but are concatenated together so that the recipient sees a single message.
Each part is charged separately by SMSGlobal.
The specified number must not exceed that of the Maximum Messages Split Allowed setting in the SMSGlobal Email Settings page at https://mxt.smsglobal.com/integrations/email-to-sms.

The bottom half of the screen contains:
Number - the phone number to which the test message is to be sent
Message - the text for the SMS message
SMS Button - press to send the email
Email - this panel shows the email that will be sent
Status - this shows 'OK' if all is OK else an error message indicating what is wrong

To get the Email and Status to update you must press the Enter key when the cursor is positioned in either of the Number or Message fields.

Note: The Country and Area Prefixes are used to format phone numbers so that they have the required format. That is, the customer's number will be something like 0413 123 456, but the gateway needs the full international number, ie 61413123456. However, if the customer lives in another country then their number will be something like (for Hong Kong) 852 1234 5678. You need to indicate that this is an international number by prefixing it with a +, ie +85212345678.

So the logic is:
If the number starts with a +, strip it and use that number.
Else does the customer's number start with the Area Prefix? If yes, then strip the prefix and add the Country Prefix.

Schedule

Complete

This screen is used to create/edit/view the Schedules. These together with the views (see Organisation|Schedule View) determine how the Workflow|Scheduling screen works. It also sets options to control the check-in behaviour.

The fields are as follows:

Name - the name of the schedule
Description - serves to clarify the name
Slot Size - this and Slot Units defines the size of each slot in the schedule
Slot Units - can be set to minutes or hours
Allow Double Booking - check this box to allow multiple appointments to be scheduled at the same time.
Active - uncheck this box to deactivate the schedule. Note that if you do deactivate a schedule because it is no longer needed, then you should also remove this schedule from any schedule views in which it is used, otherwise the Workflow|Scheduling screen will happily display and let you use a schedule that has been deactivated.
Start  & End Time - these define the work day - ie the times between which appointments can be booked. If left unset, they default to 08:00 to 18:00 respectively.  Enter either in hh:mm or hhmm format. If you enter just the hour the minute portion will be set to the current time (ie 9 yields 9:13 if the current time is 11:13).
If you set say 18:00 as the end time, then the last slot shown on the schedule will start at the slot size before this, ie 17:45 if you have a 15 minute slot size.
For a practice that operates on a 24 hour basis, you should set the start time to 00:00 and the end to 24:00.
Use All Work Lists - if this box is checked, then when an appointment if checked-in from this schedule, you will be able to choose any work list, otherwise only the worklists defined in the Work Lists tab will be available
Input Weight - if this box is checked, then as part of the check-in, the New Weight screen will be displayed so that the patient's weight can be entered
Use All Templates - if this box is checked, then as part of the check-in, all patient form and letter document templates will be displayed for you to select from, otherwise only those defined in the Templates tab will be available
Send Appointment Reminders - if this box is checked, SMS reminders may be sent automatically for appointments in the schedule. If not checked, then SMS reminders can still be sent manually.
Online Booking - determines if this schedule is available for online booking
Online Booking Times - specifies alternative times to the Start and End Times for online bookings.
Location - this field is mandatory and is used to set the Practice Location to be associated with this schedule when sending out SMS appointment reminders.
Cage Type - identifies a schedule as being a physical cage, used for boarding or in-hospital stay.  

Views tab - used to set the Schedule Views which this Schedule is included in

Appointments Types tab - as shown below, this is used to view, add and delete the Appointment Types that are valid for this Schedule.

The fields are as follows:
Appointment Type - the appointment type (the available types are determined by the Administration|Types|Appointment screen)
No of Slots - the lenght of this appointment type in this schedule
Default - check this box if this is the default appointment type.

 

Work Lists tab - as shown below, this is used to view, add and delete the Work Lists you can choose from when checking-in an appointment on this schedule.
These only apply when Use All Work Lists is not selected.
If a Work List has its Default flag selected, it will be pre-selected at patient Check-In.

The Work List flagged as the Default will be pre-selected

 

Templates tab - as shown below, this is used to view, add and delete the patient form and letter document templates that will be presented to choose from when checking-in an appointment to this schedule.
The templates will only be used if Use All Templates is not selected.

 

As you can see you can add, delete and modify the list of templates.
The Print option allows a template to be pre-selected for printing. Use this if a template is always printed when a patient is checked in to the schedule.

Select

Complete

This is the screen used to select a Schedule. It works like a standard select screen.

Schedule View

Complete

This screen is used to create/edit/view the Schedule Views. These together with the schedules themselves (see Organisation|Schedules) determine how the Workflow|Scheduling screen works.

The fields are as follows:
Name - the name of the schedule view
Description - serves to clarify the name
Active - uncheck this box to deactivate the schedule view
Display Expression - this the expression used to construct what is displayed when the schedule view contains multiple schedules. (It's not used if there is only a single schedule in the view.) See also Expressions below.
Display Notes - uncheck this if you do not want the notes icon shown on the multi-schedule version of the Workflow|Scheduling screen. On the single-schedule version, the notes text is shown in the Notes column.
Highlight - you can select None, Clinician, Event Type (ie appointment type), or Status. This determines the initial setting of the Highlight setting on the Scheduling screen. Remember that if you are going to make proper use of this highlighting facility, then you need to set different colours for each clinician (in Administration|Users), appointment type (in Administration|Types|Appointment). However if you want to change the status colours, it's more difficult - see Reference|Colours.
Multiple Day View - if selected, multiple days worth of appointments can be shown at once.
Use strikethrough for Completed/Cancelled - if selected, Completed and Cancelled appointments are displayed with strikethrough text.
Schedules tab - used to set the Schedules which this Schedule View includes.  If there are more than one, then the Workflow|Scheduling screen initially shows each schedule in its own column.  If there is only one, then a different screen format is used with columns for each of Status, Appointment Type, Customer, Patient, Reason and Notes.  Even with a multiple-schedule view, you can switch the Scheduling screen to show only a single schedule.

Test Button
Pressing the Test button opens a window that allows you to test and compose expressions. It includes documentation and examples as well as its own Test button that actually tests your expression and displays the resulting text.

 

Expressions
The expression shown in the screenshot above is duplicated here so you can copy it:

concat(openvpms:get(.,'clinician.name'),': ',openvpms:get(.,'customer.name'),' - ',openvpms:get(.,'patient.name'),'\n',openvpms:get(.,'act.reasonName'),' - ',openvpms:get(.,'act.statusName'))

Note that what we are doing is concatenating together bits of information from the openvpms:get calls with various separators, eg ': '. The '\n' injects a newline character to start a second line.

The following table shows the parameters that the expressions have access to, that is, each of the node names which can be used in the openvpms:get(.,'nodeName') function.

Node Name Explanation
act.description Appointment Notes
act.status Status code (eg PENDING)
act.statusName Status (eg Pending)
act.reason Reason code (eg HIT_BY_CAR)
act.reasonName Reason (eg Hit by Car)
customer.name Name of Customer (eg Smith,Fred)
patient.name Name of Patient
clinician.name Name of Clinician
schedule.name Name of the schedule
scheduleType.name Appointment Type
arrivalTime Time arrived, ie check-in time (eg Sat Jul 27 10:15:47 EST 2013)
empty string if not checked-in yet
use date:format functions to format, eg
date:formatDateTime(openvpms:get(.,'arrivalTime'),'short')
yields 27/7/13 10:16 AM
waiting Time as '(h:mm)' since check-in, empty string if not checked-in yet

 

There are also a number of others which may be used, but not particularly efficiently as they require database queries.

  • patient.objectReference - reference to the patient
  • act.objectReference - reference to the appointment/task
  • schedule.objectReference - reference to the schedule
  • customer.objectReference - reference to the customer
  • clinician.objectReference - reference to the clinician

To get the breed, do:

 openvpms:lookup(openvpms:get(., "patient.objectReference"), "breed")

To get the customer's last name, do:

 openvpms:get(.,"customer.objectReference.lastName") 

Notes:

  • the various objectReference properties above aren't supported by the Display Expression editor and hence if you use its Test function, you will get 'Expression Error'
  • if there is no patient, an empty string will be returned

However, if you need a customer's full name and address to show on a schedule view so that a house call vet can look at the schedule with his iPhone to see where to go next, then the following will do the trick:

normalize-space(openvpms:get(., "customer.objectReference.description"))

The 'normalize-space' function (one of the xpath functions) removes the newline characters to convert the multiline address into a single line.

Finally, an example where the information is displayed over three lines but is limited to 30 characters wide:

 concat(substring(concat(openvpms:get(., 'clinician.name'),': ', openvpms:get(., 'patient.name'),' ',openvpms:get(.,'customer.objectReference.lastName')),1,30),'\n', substring(concat('[',openvpms:lookup(openvpms:get(., 'patient.objectReference'),'breed'),']'),1,30),'\n', substring(concat(openvpms:get(.,'scheduleType.name'), ':', openvpms:get(.,'act.reasonName'),' ', openvpms:get(.,'waiting')),1,30)) 

Select

Complete

This is the screen used to select a Discount Type. It works like a standard select screen.

Service Ratio Calendar

Complete

This screen is used to create/edit/view Service Ratio Calendars.
These are used to determine the dates and times that a Service Ratio applies.

The top part of the screen contains the calendar details.
The bottom part contains the events in the calendar.

The fields are as follows:

  • Name
The name of the calendar
  • Description
An optional description for the calendar
  • Active
Uncheck this to deactivate the calendar.
When deactivated, any Service Ratio using this calendar will be charged using the ratio at all times.
   

Calendar Events

Calendar Events determine when a Service Ratio applies.
Wherever there is:

  • an event, the Service Ratio will be applied
  • no event, the Service Ratio will be ignored

To add, change, or delete events, double click on a cell to edit it.
If the cell is empty, a new event will be created.
 

Stock Location

Complete

This screen is used to create/edit/view the Stock Locations, ie the store rooms where stock is held. See Concepts|Stock Control for background.

The fields are as follows:
Name - the name of the stock location. This will appear on various reports and documents so it should be set as you want it to appear.
Description - used to clarify the name if necessary
Active - uncheck this box to deactivate the stock location

 

The Default Author tab is used to view and maintain the user set as the author of stock management transactions generated by the system. It is possible to set an normal user for this, but it is better to create a special user - as is shown in the screen shot above.

Below is the Locations tab. Use this to set the Practice Locations to which this stock location belongs. One stock location can be used by multiple practice locations, but a practice location cannot have more than one stock location. Note that you can have a stock location not attached to a practice location, but it is of little use since all you can do is use the Products|Stock Management|Stock Transfer transaction to transfer items to it.  However, you could use this as a mechanism to keep a record of written-off stock, ie create a stock location called Write-offs unlinked to any practice location, and transfer written-off stock to it.

 

Select

Complete

This is the screen used to select a Stock Location. It works like a standard select screen.

Till

Complete

This screen is used to create/edit/view the details of the Tills. See Concepts|Tills for background information.

The fields are as follows:
Name - the name of the till
Till Float - the float - ie the amount of cash money to be left in the till when it is cleared as part of the Reporting|Till Balancing|Clear operation
Last Cleared - the date on which the till was last cleared.  Although you can modify this field, you should not normally need to as it is set by the system.
Active - uncheck this box to deactivate the till
Printer Name - the receipt printer name. Used in conjunction with Drawer Command to open the cash drawer.
Drawer Command - a comma separated list of numbers, in the range 0..255 that may be used to trigger the cash drawer to open. The Test button can be used to verify that the Drawer Command can be used to open the drawer.

Locations tab - used to set the Practice Locations which this till is used by

Opening the Cash Drawer

Many POS terminals support opening the cash drawer by sending a set of control codes to the receipt printer. OpenVPMS supports this through the Printer Name and Drawer Command fields.

OpenVPMS will send the drawer command to the receipt printer when:

  • a payment containing Cash, Cheque, or Credit line item is finalised
  • a payment containing an EFT line item with non-zero Cashout is finalised
  • a refund containing a Cash, Cheque or Credit line item is finalised

Consult your POS terminal vendor for the appropriate control codes to use.

Alternatively, see this list.

 

Select

Complete

This is the screen used to select a Till. It works like a standard select screen.

Work List

Complete

This screen is used to create/edit/view the Work Lists. These together with the views (see Organisation|Worklist View) determine how the Workflow|Scheduling screen works and also to control what screens are presented as part of the check-in and worklist transfer processes. See also the note at the bottom about * as the default task type.

The fields are as follows:
Name - the name of the work list
Description - serves to clarify the name
Max Slots - the maximum number of slots in the work list, ie how many entries it can contain. For normal 'list of jobs' work lists this can be left at the default of 100. However, if your work list represents some limited commodity such as the number of boarding kennels, then you should set the Max Slots to this.  
Active - uncheck this box to deactivate the work list. Note that if you do deactivate a work list because it is no longer needed, then you should also remove this work list from any work list views in which it is used, otherwise the Workflow|Work Lists screen will happily display and let you use a work list that has been deactivated.
Use All Templates - uncheck this box if you want to limit the list of document templates presented for selection at check-in and worklist transfer time. You will then need to use the Templates tab to define which templates are to be displayed for selection, and if none are defined then the document selection step will be skipped. If the box is checked, then all suitable templates will be displayed for selection. Note that even if you do want to be able to select from all available templates, you may want to uncheck this box and list all the templates in the Templates tab because you can then control the order so that the most commonly used one are listed first.
Input Weight - uncheck this box if you do not want the Weight recording window to be displayed as part of the Check In process.
Create Flow Sheet - used to create a Smart Flow Sheet for a patient on Check In, or when the patient is transferred to the Work List. Only applies if Smart Flow Sheet has been configured for the Practice Location.
Default Flow Sheet Department - the default Flow Sheet department. Only applies if if Smart Flow Sheet has been configured for the Practice Location.
Default Flow Sheet Template - the default Flow Sheet treatment template. Only applies if if Smart Flow Sheet has been configured for the Practice Location.
Expected Hospital Stay - the default expected number of days stay.

Views tab - used to set the Work List Views which this Work List is included in

Task Types tab - as shown below, this is used to view, add and delete the Task Types that are valid for this work list.

The fields are as follows:
Task Type - the task type
No of Slots - this field is not currently used by the system (every task type uses one slot in the work list irrespective of anything you set here)
Default - check this box if this is the default task type

Templates tab - as shown below, this is used to view, add and delete the Templates that are valid for this work list - i.e. those that will be suggested for use when a check-in or task transfer is done.
The templates will only be used if Use All Templates is not selected.

As you can see you can add, delete and modify the list of templates.
The Print option allows a template to be pre-selected for printing. Use this if a template is always printed when a patient is checked in or transferred to the Work List.
 

Note that in order to enable the quickest possible selection of the Task Type on the Workflow/Work Lists screen, you should define an task type "*" (description 'unspecified') and make this the default.  When you do the check-in, this will get set as the task type, and can generally be left as is BECAUSE the Notes field of the worklist entry gets automatically set to the Appointment Reason + the Appointment Notes.  However, if you do want to set a specific Task Type, you can just edit the Worklist entry and press the Task Type binoculars to show the available types (and all available types will be displayed because * acts as a wildcard mean 'show all'). 

If you don't like this approach, then be sure to set the default task type for the worklist to the most common task, so that most of the time you don't need to change it.

Select

Complete

This is the screen used to select a Work List.

It works like a standard select screen.

This screen is displayed when performing a Check-In, or transferring a task from one work list to another.

Check-In

Click on the required work list to choose it. The patient weight screen will then open as the next part of the check in process.

Pressing Skip will skip the selection of the work list so this activity will not be listed on any work list. This is not normally a sensible thing to do. However, if you do have a current consult running, then you can get to the visit edit screen for that consult by pressing the Check-In button and skipping everything (Alt-K is the easiest) until you get to the visit editor.

Pressing Cancel will abort the check-in.

Transfer

Click on the work list to transfer to. If the work list is not available at the current practice location, select All Locations to list all matching work lists.

If the work list has document templates, a print dialog will be displayed.

Work List View

Complete

This screen is used to create/edit/view the Work List Views. These together with the work lists themselves (see Organisation|Work Lists) determine how the Workflow|Work Lists screen works.

The fields are as follows:
Work List View - the name of the work list view
Description - serves to clarify the name
Active - uncheck this box to deactivate the schedule view
Display Expression - this the expression used to construct what is displayed when the work list view contains multiple work lists. (It's not used if there is only a single work list in the view.) See also Expressions below.
Display Notes - uncheck this if you do not want the notes icon shown on the multi-work list version of the Workflow|Work List screen. On the single-work list version, the notes text is shown in the Notes column.
Highlight - you can select None, Clinician, Event Type (ie task type), or Status. This determines the initial setting of the Highlight setting on the Work Lists screen. Remember that if you are going to make proper use of this highlighting facility, then you need to set different colours for each clinician (in Administration|Users), task type (in Administration|Types|Task Type). However if you want to change the status colours, it's more difficult - see Reference|Colours.
Work Lists tab - used to set the Work Lists which this Work List View includes.  If there are more than one, then the Workflow|Work Lists screen shows each work list in its own column.  If there is only one, then a different screen format is used with columns for each of Status, Appointment Type, Customer, Patient, Reason and Notes.  Even with a multiple-work list view, you can switch the Work List screen to show only a single work list.

Test Button
Pressing the Test button opens a window that allows you to test and compose expressions. It includes documentation and examples as well as its own Test button that actually tests your expression and displays the resulting text.  Note that it is possible to write a valid complex expression that the Test facility says is invalid - see the note at the bottom of this page.

Expressions
The expression shown in the screenshot above is duplicated here so you can copy it:

 concat(openvpms:get(.,'clinician.name'),':',openvpms:get(.,'patient.name'),' ',openvpms:get(.,'customer.objectReference.lastName'),' =',substring(openvpms:get(.,'act.status'),1,2),' ', openvpms:get(.,'waiting'),'{',date:format(openvpms:get(., 'act.objectReference.appointments.source.startTime'), "HH:mm"),'}',openvpms:get(.,'customer.objectReference.type.name'),'\n','[',openvpms:lookup(openvpms:get(.,'patient.objectReference'),'breed'),'] ',openvpms:get(.,'scheduleType.name'),':',openvpms:get(.,'act.objectReference.author.entity.name'),'\n',openvpms:get(.,'act.description')) 

Note that what we are doing is concatenating together bits of information from the openvpms:get calls with various separators, eg ': '. The '\n' injects a newline character to start a second line. The above expression generates output like:


ie the clinician is DQ, the patient is Miso, customer last name Liang, status is In Progress, 1 hour 32 between being checked in and the consult starting, the appointment was at 09:15, the customer Account Type is 'Creature Comforts', breed is Poodle-Toy, task type is Hospital Inpatient, the task author is 'Anita Chiu', and the bottom line gives the task notes.

The following table shows the parameters that the expressions have access to, that is, each of the node names which can be used in the openvpms:get(.,'nodeName') function.

act.description Task Notes
act.status Status code (eg PENDING)
act.statusName Status (eg Pending)
act.reason [can be used but always empty]
act.reasonName [can be used but always empty]
customer.name Name of Customer (eg Smith,Fred)
patient.name Name of Patient
clinician.name Name of Clinician
schedule.name Name of the work list
scheduleType.name Task Type
waiting Time between check-in and consult starting in format (hh:mm). Empty if this not available.

There are also a number of others which may be used, but not particularly efficiently as they require database queries.

  • patient.objectReference - reference to the patient
  • act.objectReference - reference to the appointment/task
  • schedule.objectReference - reference to the schedule
  • customer.objectReference - reference to the customer
  • clinician.objectReference - reference to the clinician
  • author.objectReference - reference to the author

To get the breed, do:

openvpms:lookup(openvpms:get(., "patient.objectReference"), "breed")

To get the customer's last name, do:

openvpms:get(.,"customer.objectReference.lastName")

To get the referring practice if any, use:

expr:concatIf('\n', 'Ref: ',openvpms:get(party:getPatientReferralVetPractice(openvpms:get(., 'patient.objectReference')), 'name'))

In the above, the expr:concatIf() function ensures that things work nicely if there is no referring practice since the whole expression becomes null if one component is null.

To get the appointment start time (in 24hour format) for this task, do:

date:format(openvpms:get(., 'act.objectReference.appointments.source.startTime'), "HH:mm"))

Notes:

  • the various objectReference properties above aren't supported by the Display Expression editor and hence if you use its Test function, you will get 'Expression Error'
  • when you are testing a new expression, remember that you need to logout and log back in again in order for the new expression to be active
  • if there is no patient, and empty string will be returned
  • The various $patient, $customer, $task etc variables that are available in macro expressions are not available here

However, if you need a customer's full name and address to show on a schedule view so that a house call vet can look at the schedule with his iPhone to see where to go next, then the following will do the trick:

normalize-space(openvpms:get(., "customer.objectReference.description"))

The 'normalize-space' function (one of the xpath functions) removes the newline characters to convert the multiline address into a single line.

Select

Complete

This is the screen used to select a Work List View. It works like a standard select screen.

Confirm Delete

Complete

When you press the Delete button on the Administration|Organisation screen, a confirmation window will appear.

If the selected Organisation is not in use and can be deleted, the window will simply ask you to confirm the delete. Press OK to confirm or Cancel to abort.

If it cannot be deleted because it is in use, the text will be "xxxx has relationships and cannot be deleted. Do you want to deactivate it instead?"(where xxx is the name of the item you are trying to delete). Pressing OK will unset its Active flag, Cancel will abort.

If it is in use but can be deleted, the text will be "xxxx has relationships. Are you sure want to delete? This operation cannot be undone." (where xxx is the name of the item you are trying to delete). Pressing OK will delete the item as well as all references to it, Cancel will abort.

Confirm New

Complete

This is the New Organisation confirmation window. Select the type of Organisation to be created and then use OK to continue or Cancel to abort. Note that if you have selected a type on the Organisation screen, then this will already be selected in this window (even if it is not showing in the list of types) - thus you can normally simply click OK to proceed.

Types

Complete

The Administration|Types screen is a select screen that allows you to select the specific Type to be viewed or maintained. Below is the screen as initially displayed but with the Types pull-down list showing.

Note that if you do edit Administration|Types items (say to change an an appointment type colour), then the new values will not become available until the next time you log on (because these type settings are fetched once at logon time to improve performance).

Each Type has its own view/edit screen.

Appointment

Complete

This screen allows you to create/view/edit the details for each Appointment Type. This and Organisation|Schedule determine what appointment types can be made.

The fields are as follows:

Appointment Type - it's name
Description - you can use this to clarify the type of appointment
Colour - used to set the colour used to identify appointment types in the schedule screen. You use the mouse to select the colour via the colour and luminosity/hue boxes.  If you want to check the colours of the different appointment types, the easiest way to do this is to view the appointment type and then to use the Next and Previous buttons to run back and forth through the different types.
Note that you should avoid the 'light cream' colour f2f3b3 which displays as follows:
because this is used to highlight the selected item on the Workflow|Scheduling screen.
Active - uncheck the box to deactivate the Appointment Type
Online Booking - determines if this appointment type is available for online booking
Send Appointment Reminders - if this box is checked, SMS reminders may be sent automatically for appointments with the appointment type, providing that their schedule also has Send Appointment Reminders checked.

Cage Type

Complete

This screen allows you to create/view/edit Cage Types.

These are used to:

  • indicate that an appointment Schedule is used for boarding or in-hospital stay
  • determine charges for the Schedule

The fields are as follows:

  • Name - the name of the Cage Type
  • Description - the description of the Cage Type
  • Active - determines if the Cage Type is active or inactive. If it is inactive, it is not available for selection.
  • First Pet Product - Day - the product that is charged for day boarding
  • Second Pet Product - Day - the product that is charged for day boarding for other pets belonging to the same customer in the same cage (i.e. the first pet is charged using the First Pet Product - Day). Optional
  • First Pet Product - Overnight - the product that is charged per night for one pet.
  • Second Pet Product - Overnight the product that is charged per night for other pets belonging to the same customer in the same cage (i.e. the first pet is charged using the First Pet Product - Overnight). Optional.
  • Late Checkout Time - the time after which a fee is charged for late checkout. Optional.
  • Late Checkout Product - the product that is charged for late checkout. Optional.

The products may be templates with weight rules, in order to support weight-based charging.  

Cage Type Invoicing Rules

All charges are based on the time of check-in, and time of check-out. The appointment times are not used charging purposes.

Single Pet

Single pets are charged the First Pet Product - Day, if they check-in and out on the same day.
If they stay multiple days, they are charged First Pet Product - Overnight, with the quantity determined set to the number of days beween the current date and the pet's visit date. Any time is ignored.

Multiple Pets, Same Cage

If a customer has multiple pets in the same cage, and the pets are entering and leaving on the same days:

  • The heaviest pet is charged as per the Single Pet rule above. The heaviest pet is selected to ensure that weight based templates are applied uniformly.
  • For single day stay, subsequent pets in the cage are charged Second Pet Product - Day, if present. If none is defined, they will be charged First Pet Product - Day.
  • For multiple day stay, subsequent pets in the cage are charged Second Pet Product - Overnight, if present. If none is defined, they will be charged First Pet Product - Overnight.

Multiple Pets, Same Cage, Different Days.

If a customer has multiple pets in the same cage, but the pets are entering and leaving on the different days, the Single Pet rule above applies to each pet.

Multiple Pets, Different Cages

Multiple pets in different cages are each charged using the Single Pet rule above.

Late Checkout

If a Cage Type specifies a Late Checkout Time and Late Checkout Product, and the time at checkout is greater, then the Late Checkout Product will be charged, with quantity 1.

Note:

  • the late checkout charge does not apply if the pet overstays, but leaves before the Late Checkout Time. It will be charged for the additional day(s) using the rules above.
  • if a customer does a late checkout and has multiple pets, the Late Checkout Product for each Cage Type may be charged to the invoice.

Calendar Block

Complete

Calendar Block Types are used by Calendar Blocks to:

  • determine how the Calendar Block is displayed
  • reserve Calendar Blocks to specific customers

The fields are:

Name - the name of the Calendar Block Type
Description - optional description
Colour - used to set the colour used to identify blocks in the schedule screen. You use the mouse to select the colour via the colour and luminosity/hue boxes.  If you want to check the colours of the different types, the easiest way to do this is to view the type and then to use the Next and Previous buttons to run back and forth through the different types.
Note that you should avoid the 'light cream' colour f2f3b3 which displays as follows:
because this is used to highlight the selected item on the Workflow|Scheduling screen.
Active - uncheck the box to deactivate the Calendar Block Type
Reserve For Account Types - specifies any Customer Account Types to reserve times for.
Reserve For Customer Types - specifies any Customer Types to reserve times for.

Discount

Complete

This screen allows you to create/view/edit the Discount Types. See also Concepts|Discounts.

The fields are as follows:
Name - the name of the discount
Description - a description that serves to clarify the name
Discount Type - either Percentage (ie a percentage of the amount), Fixed (ie a fixed amount), or At-cost + Rate + Tax
Rate - either the fixed amount (for the Fixed type), or the percentage amount (for the Percentage and At-cost types)
Include Fixed Amount - check this box if the discount is to apply to the fixed component of the product price as well as its unit component
Active - uncheck this box to deactivate the discount

Note that the 'At-cost + Rate + Tax' type is so-named to reflect how the discount amount is calculated. Whereas with a Percentage discount of 10%, the sale price is reduced by 10% and thus the discount amount is 10% of the original sale price.

With an At-cost discount of 10%, the item is sold for (cost+10%)+tax, and thus the discount amount will depend on the markup.

Select

Complete

This is the screen used to select a Discount Type or a Discount Type Group. It works like a standard select screen.

Discount Group

Complete

This screen allows you to create/view/edit the Discount Groups. These are used to group together Discounts so that multiple discounts can be more easily set for a customer or patient. See also Concepts|Discounts.

The fields are as follows:
Name - the name of the discount group
Description - a description that serves to clarify the name
Active - uncheck this box to deactivate the discount group

Discounts Tab - used to add and delete the discount types in the group. Its fields are:
Discount - enter the name of the Discount or use the binoculars to display a list to select from
From and To Dates - these define the inclusive dates between which the discount applies. The From date is mandatory, the To date can be left unspecified and in this case means 'forever'.

Note that you cannot add the same discount type more than once, ie the group can only contain one of each discount type.
 

Select

Complete

This is the screen used to select a Discount Type to be included in a Discount Type Group. It works like a standard select screen.

Online Booking Times

Complete

Online Booking Times can be used to specify the availability of an appointment Schedule for the purposes of online booking.

This can be used to restrict the days and times that a schedule is available.

The fields are:

Name - the name of the Onbline Booking Time type
Description - optional description
Active - uncheck the box to deactivate the Online Booking Time type

For each day of the week, the Opening Times are set as:

  • Open flag indicates if the schedule is open or closed
  • Start indicates the time that online bookings can start for that day
  • End indicates the end of the last appointment for that day

Patient Alert Type

Complete

This screen allows you to create/view/edit the details for Patient Alert Types.

The fields are as follows:

Name - the Alert's name
Description - the Alert's description
Reason - a default reason. This will be copied to the Reason field of the Patient Alert
Priority - can be set to High, Medium or Low. If there are too many alerts for the display space, higher priority ones get preference.
Mandatory Alert - if ticked, Patient Alerts with this alert type will be displayed in a popup window, when a patient is selected that has the alert. Users must acknowledge the alert. Acknowledgement is only required once in a 24 hour period.
Colour - used to set the colour used for the alert. You use the mouse to select the colour via the colour and luminosity/hue boxes.
Duration - used to specify a default duration for alerts. Leave empty if alerts shouldn't have an end date
Interactive - if ticked, a Patient Alert editor will be displayed when products that link to the alert type are invoiced.
Class - an optional classification for the alert. OpenVPMS provides two types by default, Allergy and Aggression. (These are set via Administration|Lookups|Patient Alert Class.) Patient alerts with these classifications will be sent to HL7 interfaces, and Smart Flow Sheet.
Active - uncheck the box to deactivate the alert type

Product

Complete

This screen allows you to create/edit/view the details for each Product Type. Each Merchandise, Medication, and Service Product can be given a Product Type. These allow you to:

a) determine how the product appears on the invoice
b) set different taxes by product type
c) set different discounts by product type

The fields are as follows:
Product Type - it's name
Description - you can use this to clarify the type of product
Invoice Sort Order - the lower the number set here, the earlier the item appears on the invoice. See below.
Detail on Invoice - untick this box if you want all the invoice items of the same type combined as one line item on the invoice. See below.
Active - uncheck the box to deactivate the Product Type
Pharmacy - this is only required if you use the HL7 facility where it is used the set a Pharmacy or Pharmacy Group for all products of this Type
Synchronise with Smart Flow Sheet - determines if products of this type will be synchronised with Smart Flow Sheet.

Taxes tab
This is used to display/set the taxes applicable to the Product Type. To adjust, click the tax in the Available or Selected box and then click the > or < button respectively.

Discounts tab
This is used to display/set the discounts applicable to the Product Type. The fields are as follows:
Discount - enter the Discount Type or click the binoculars to select one. Note that you cannot attach Discount Type Groups to a Product Type, only a Discount Type. You can add one or more.
From Date - the date from which the discount will apply
To Date - the date to which the discount will apply - left unspecified this means 'forever'

 

Invoices and Product Types

If you are using the standard invoice documents (or customised ones based on the standard versions), then invoice format depends on the 'Use Product Types' setting in the Letterhead record. If this is unchecked, then the Product Type is ignored.  If it is checked then:

  1. the line items are grouped by patient, date, then by Invoice Sort Order, then by product name.
  2. if Detail On Invoice is not checked for a given Product Type, then the product line items with that type are not displayed and only the total for the Product Type is shown. If the total is zero the line will be suppressed.  Hence if you have some 'no charge' products (such a dummy products used only to create a set of reminders) then you can assign them Product Type 'No Charge' and set this without the Detail On Invoice flag set, and if all the No Charge products do in fact have no charge, then the No Charge line will be suppressed.

Reminder

Complete

This screen allows you to view/edit the details for each Reminder Type.  For general information on the Reminder system, see Concepts|Reminders. See also Stopper Reminders and Switch Reminders below.

The fields are as follows:
Name - its name
Description - you can use this to clarify the type of reminder
Active - uncheck the box to deactivate the Reminder Type
Group By - you can select None, Patient or Customer.  Use None if you want individual reminders generated; use Patient to group multiple reminders for the one patient on one reminder, and use Customer to group multiple reminders for the customer's patients on one reminder.  See also the Grouped Reminders discussion below.
Interactive - check this box if you want confirmation when this type of reminder is generated as a result of using a product to which the reminder is attached (such as a vaccination). Note that this sets the default setting of the Interactive flag for this reminder. However, each product that uses this reminder can have its own setting of the Interactive flag.  Specifically, this means that if you have existing products using this reminder, then altering the Interactive setting here will have no effect - you will have to go and set the Interactive flag as required for each product that uses this reminder.
Reminder Interval - the period from the time that the reminder is created until it is due
Cancel Interval - the period of time after a reminder is due that it is automatically cancelled. This should be set to be a little more than the reminder count Interval set for the "last" template that you have - ie the one with the highest Count. If you set it less than the last Interval, then the reminder will be cancelled before all the reminders that you planned have been sent.
Sensitivity Interval - the period that determines the colour of the reminder when displayed on the Patient Information & Medical records screens when you click the Reminders bell icon in the left panel. It shows as follows:

If a given reminder has a sensitivity period of two weeks,  then up until two weeks before the reminder is due, it will be shown in green; in the two weeks prior to and after the due date, it will be shown in orange; and after two weeks after the reminder date, it will be shown in red.
Note - an optional note that can be used in reporting, or on reminders, or simply as an extended description.

Counts

The Counts tab determines how reminders are sent. There should be at least one Reminder Count defined. Multiple Reminder Counts can be used so that different reminder notices are generated for the initial reminder and first, second, etc overdue notices.

The fields are as follows:
Count - this is the reminder number, 0 for the initial one, 1 for the second etc.
Interval - the period from the reminder Due Date when the reminder should be sent. The interval can be:

  • negative, indicating that the reminder should be sent prior to the Due Date
  • zero, indicating that the reminder should be sent on the Due Date
  • positive, indicating that the reminder should be sent after the Due Date

Template - required if a Reminder Rule indicates that reminders should be emailed, SMS'ed or printed. Enter the name of template or use the binoculars to search for one. Notes:

  1. The template must have its Type (see Templates) set to Patient Letter or Form, and depending on the Rules, will need to have an Email and/or SMS template specified.
  2. If the reminder is being sent by SMS, then the template Content is ignored and the specified SMS Template determines the text that is SMS'ed
  3. If the reminder is being sent by Email, then the specified Email Template is used to generate the email itself. If 'Email Reminders as Attachments' is checked in the Reminder Configuration settings, then the template Content is used to generate the attachment otherwise the template Content is ignored and not used.

Rules

These determine how individual Reminder Counts are sent.

A Reminder Count may specify multiple rules. These are processed in order, until one is satisfied.

Each rule contains the following options, one or more of which may be selected:

  • Contact - use the customer's contacts that have Reminder purpose to determine if the reminder should be printed, emailed or SMS'ed. If multiple contacts have a Reminder purpose, then Send To determines which are used.
  • Email - using the customer's preferred Email contact (or first if no preferred), email the reminder to the customer
  • SMS - using the customer's preferred Phone contact (or first if no preferred) with Allow SMS enabled, send the reminder via SMS
  • Print - using the customer's preferred Location contact (or first location if no preferred), print the reminder for mailing to the customer
  • List - list the reminder on the Patient Reminders Report
  • Export - export the reminder to a CSV file. See here for the export format.
  • Send To - may be one of:
    • First - send to the first matching contact. This is the default.
      E.g. if both Email and SMS is selected, the rule is satisfied if the customer has either contact.
      The precedence is Email > SMS > Print
    • Any - send to any matching contact. If a customer doesn't have a contact, then the rule isn't satisfied.
      E.g. if both Email and SMS is selected, the rule is satisfied if the customer has either contact, and the reminder will be sent to each one
    • All - send to all specified contacts.
      If a customer doesn't have a contact, then the rule isn't satisfied.
      E.g. if both Email and SMS is selected, the rule is only satisfied if the customer has both Email and SMS contacts.
      NOTE: if a customer has multiple contacts of the same type (e.g two email addresses), only one will be selected to receive the reminder

If no rule is satisfied, then the Reminder will be processed as per List.
E.g. A Reminder Type might specify the following:

  • Reminder Count = 0
    • Rule 1: Contact, Send To = All
    • Rule 2: Email,SMS, Send To = All
    • Rule 3: Print, Send To = All
  • Reminder Count = 1
    • Rule 1: SMS, Print, Send To = Any

In the above, the first reminder will be sent:

  • to all contacts with Reminder purpose, if there are any; else
  • via SMS, if the customer has a Phone contact with Allow SMS set AND by email if the customer has an Email contact; else
  • via Print, if the customer has a Location contact; else
  • it will be Listed

The second reminder will be sent:

  • via SMS, if the customer has a Phone contact with Allow SMS set and/or via Print, if the customer has a Location contact; else
  • it will be Listed

Multiple rules may be selected. If Contact and Print is selected, and both correspond to to the same customer contact, a duplicate is not created.

Species

The Species tab is used to display and edit the species to which this reminder can apply. You don't have to use this facility. It is only needed if you want to ensure that species specific reminders are applied only to the relevant species. To adjust, click the species in the Available or Selected box and then click the > or < button respectively.

Groups

The Groups is used to display and edit the group(s) to which this reminder belongs. To adjust, click the group in the Available or Selected box and then click the > or < button respectively.
This facility is optional. It is only needed if you want to group reminders so that generating reminder B will complete an existing reminder A (for example for "Stopper" and "Switch" reminders - see below). Use Administration|Lookups|Reminder Groups to create a group named say G, and the use the Groups Tab to make both reminders A and B members of group G.

 

"Stopper" Reminders
You may want to create a special reminder whose purpose is simply to complete other reminders. Consider the following:

Senario - have a new puppy and so manually create Desex reminder for 4 months forward. When we do the actual Desex operation we want this reminder to disappear, but with no creation of any future reminder.

Solution:

  • create a reminder group called say Desexing-Complete-G
  • create the Desex reminder as normal, but with group Desexing-Complete-G
  • create Desex-Complete reminder with a zero Interval and zero Cancel Interval, and also set the group Desexing-Complete-G
  • for all desex products, set the reminder type as 'Desex-Complete'

Now when we invoice the Desex operation, a new Desex-Complete reminder will be created. This will complete the original Desex reminder.

 

"Switch" Reminders
A variant of the above case is where have a product whose sale needs to generate its own reminder but stop another reminder. Consider the following:

Senario - you want to offer vaccine antibody testing. That is, instead of having the client's dog vaccinated, you offer the option of having a blood test so that you can see if the dog already has enough antibodies (and therefore doesn't need to be revaccinated).

So, if a dog has one of these blood tests, then they no longer need to have a vaccination - so it should cancel out the reminder associated with the G6 vaccination. And it should create a new reminder to redo the blood test within a year.

Solution:

  • Create a reminder group called say G6 Vaccination Complete-G
  • It is assumed that you already have a G6 Vaccination reminder type - edit this and set its Group to 'G6 Vaccination Complete-G'
  • Create 2 new reminders types
    • G6 Vaccination-Complete with a zero Interval and zero Cancel Interval and set its Group to 'G6 Vaccination Complete-G'
    • Canine Vaccination Antibody Blood Test with the required intervals
  • Create the product: Vaccine Coverage Antibody Titre Test Canine (Clotted Blood/Serum) and add the two reminders 'Canine Vaccination Antibody Blood Test' and 'G6 Vaccination-Complete'

Now when we invoice the Antibody test, it will complete any G6 reminders, but also create a new Antibody test reminder.

You will probably want to also create a cat/feline/F3 of the above.

 

Grouped Reminders processing
The Group By option indicates when reminders queued for Email, SMS or Print can be grouped. It does not apply to reminders that are queued for Export or List.

If a patient has:

  • multiple reminders to be sent using the same method (e.g. there is multiple reminders to be emailed); and
  • those reminders have types that have Group By set to Patient

then these will use the Reminder Configuration's Patient Grouped Reminder Template, irrespective of the Template specified for the applicable reminder count.

Similarly, if a customer has:

  • multiple reminders to be sent using the same method (e.g. there is multiple reminders to be printed); and
  • those reminders have types that have Group By set to Customer

then these will use the Reminder Configuration's Customer Grouped Reminder Template.

Consider the following, and assume that reminders will be printed in all 4 cases:

If both the G6 and Proheart reminder types have their Group By set to Customer, then one document will generated for Sir Humphry. It will be generated using the Customer Grouped Reminders Template, and it will list the 4 reminders shown.

If both the G6 and Proheart reminder types have their Group By set to Patient, then two documents will be generated, one for Dotty, and one for Twiglet. They will be generated using the Patient Grouped Reminder Template.

If only the G6 reminder type has the Group By set to Customer, then 3 documents will be printed:

  • one Grouped Reminder for the G6 vaccinations showing both Dotty and Twiglet
  • two Proheart reminders, one for Dotty and one for Twiglet, generated using the Document template specified for the reminder count. 

If Twiglet did not have a G6 vaccination due, then there would still be 3 documents, with the Grouped Reminder being replaced by a G6 vaccination reminder letter for Dotty.

That is, if the Group By is selected, then the appropriate Grouped Reminder Document Template will be used - but ONLY IF there are multiple reminders.  If the customer only has one reminder (and thus there is no need to group them) then the Document Template used is that specified in the Reminder Type's Templates tab for the applicable reminder count.

A sample Grouped Reminders document template is included in the standard system.  It will need tailoring for your practice.

Any Email Template linked to Grouped Reminders template follows the same format.

If the Reminder Configuration has Email Reminders as Attachments selected, the Grouped Reminder Template will be used to generate a summary of the reminders and include them as an attachment.

Reminder Configuration

Complete

This screen is used to create/edit/view the Reminder Configuration - which determines how patient reminders will be processed.

Only one Reminder Configuration record is required and it must be linked to the Practice, for it to take effect.

The fields are as follows:

Name The configuration name
Description The configuration description
Active Determines if this configuration is used.
Location The practice location to use when sending reminders, when a customer doesn't have a preferred practice location.
This must be present when using the Patient Reminder Sender.
Email Lead Time The period prior to a reminder due date to start sending email reminders.
Email Cancel Time The period after an email reminder item send date when it should no longer be sent. So in the above case with the Lead Time set to 30 days, and the Cancel Time set to 28 days, the email will be sent up to 2 days prior to the due date.
SMS Lead Time The period prior to a reminder due date to start sending SMS reminders.
SMS Cancel Time The period after an SMS reminder item send date when it should no longer be sent. So in the above case with both the Lead Time and the Cancel Time set to 3 days, the SMS will be sent on the day 3 prior to the due date but not after that.
Print Lead Time The period prior to a reminder due date to print reminders for mailing.
Print Cancel Time The period after a print reminder item send date when it should no longer be printed.
Export Lead Time The period prior to a reminder due date to start exporting reminders.
Export Cancel Time The period after an export reminder item send date when it should no longer be exported.
List Lead Time The period prior to a reminder due date to start listing reminders.
List Cancel Time The period after a list reminder item send date when it should no longer be listed.
Email Reminders as Attachments

When selected, emailed reminders will include the reminder details as an attachment.

When deselected, the reminder detail will be included in the body of the email. The Email Template is responsible for including the reminder detail.

Customer Grouped Reminder Template

The template to use when multiple reminders have Reminder Types that group by customer.

If unspecified, no grouping will occur.

Patient Grouped Reminder Template

The template to use when multiple reminders have Reminder Types that group by patient.

If unspecified, no grouping will occur.

Notes:

  1. The templates specified for both Grouped Reminder Templates must have Type 'Grouped Reminders'. Also, since only one Reminder Configuration is used, the same templates are used for every Practice Location. This means that if you need to have location specific information in the reminder, then this must be catered for in the template. In the standard templates, this is done using the Letterhead facility.
    In the screen above the same template has been specified both the Customer and Patient Grouped Reminders. This is not an error - the standard 'Grouped Reminders' template has be designed to handle both a single patient with multiple reminders (ie group by patient) and multiple patients with one or more reminders each (ie group by customer).
     
  2. If you change a Lead Time then the new lead time will only be used for reminders that are added to the queue by the Patient Reminder Job. Reminders that are already in the queue will not be affected.  If you do need them to be affected, then you need to delete the reminders individually from the queue using Patients|Medical Records|Reminders and then they will be re-queued (using the updated Lead Times) the next time the Patient Reminders Job runs.

Smart Flow Sheet Configuration

Complete

The Smart Flow Sheet Configuration provides practice-wide options for the Smart Flow Sheet interface.
It must be linked to the Practice to have any effect.

The fields are as follows:

Synchronise Notes

If selected, notes entered into Smart Flow Sheet will be added to patient history.

Minimum Word Count When Synchronise Notes is selected, this specifies the minimum number of words that a note must have before it will appear in patient history.
This is designed to filter notes from Smart Flow Sheet that are too short to add anything meaningful to the patient history.
Note that this only applies to notes being added or the first time. If a note is added but then amended to have fewer words, it will be updated in patient history to reflect the new text.
 
Save Flow Sheet Report On Discharge

If selected, the flow sheet report will be saved to a patient's history when they are discharged.
It will be saved as a PDF file named Smart Flow Sheet - Flow Sheet.pdf.

NOTE: if the Smart Flow Sheet Documents Management option Merge reports into one PDF is selected, they will be merged into this PDF.

Save Medical Records Report On Discharge If selected, the medical records report will be saved to a patient's history when they are discharged.

It will be saved as a PDF file named Smart Flow Sheet - Medical Records.pdf.

Should be unticked if the if the Smart Flow Sheet Documents Management option Merge reports into one PDF is selected.

Save Billing Report On Discharge

If selected, the billing report will be saved to a patient's history when they are discharged.
It will be saved as a PDF file named Smart Flow Sheet - Billing.pdf.

Should be unticked if the if the Smart Flow Sheet Documents Management option Merge reports into one PDF is selected.

Save Notes Report On Discharge

If selected, the notes report will be saved to a patient's history when they are discharged.
It will be saved as a PDF file named Smart Flow Sheet - Notes.pdf.

Should be unticked if the if the Smart Flow Sheet Documents Management option Merge reports into one PDF is selected.

Save Forms Reports On Discharge If selected, each form report will be saved to a patient's history when they are discharged, as a PDF file.
 
Save Anesthetics Reports On Discharge If selected, each anesthetic report will be saved to a patient's history when they are discharged, as a PDF file.
 
Save Dental Reports On Discharge If selected, each dental chart report will be saved to a patient's history when they are discharged, as a PDF file.

Should be unticked if the if the Smart Flow Sheet Documents Management option Merge reports into one PDF is selected.

 

Task

Complete

This screen allows you to view/edit the details for each Task Type. This and Organisation|Work List determine what appointment types can be made.

The fields are as follows:

Task Type - its name
Description - you can use this to clarify the type of task
Colour - used to set the colour used to identify task types in the worklist screen. You use the mouse to select the colour via the colour and luminosity/hue boxes. If you want to check the colours of the different task types, the easiest way to do this is to view the task type and then to use the Next and Previous buttons to run back and forth through the different types.
Note that you should avoid the 'light cream' colour f2f3b3 which displays as follows:
because this is used to highlight the selected item on the Workflow|Work Lists screen.
Active - uncheck the box to deactivate the Task Type

Confirm Delete

Complete

When you press the Delete button on the Administration|Types screen, a confirmation window will appear.

If the selected Type is not in use and can be deleted, the window will simply ask you to confirm the delete. Press OK to confirm or Cancel to abort.

If it cannot be deleted because it is in use, the text will be "xxxx has relationships and cannot be deleted. Do you want to deactivate it instead?" (where xxx is the name of the item you are trying to delete). Pressing OK will unset its Active flag, Cancel will abort.

If it is in use but can be deleted, the text will be "xxxx has relationships. Are you sure want to delete? This operation cannot be undone." (where xxx is the name of the item you are trying to delete). Pressing OK will delete the item as well as all references to it, Cancel will abort.

Confirm New

Complete

This is the New Type confirmation window. Select the Type to be created and then use OK to continue or Cancel to abort. Note that if you have selected one on the Type screen, then this will already be selected in this window (even if it is not showing in the list of types) - thus you can normally simply click OK to proceed.

Templates

Complete

The Administration|Templates screen is a select screen that allows you to select the specific Template to be viewed or maintained.

There are 5 different types:

Note that the only diffence between Email Templates and System Email Templates is that the System Email Templates are not available as templates on the Email Write screen. Thus System Email Templates are normally used as the email templates specified as the Email Template in Document Template to be used when emailing the document.

Below is the screen as initially displayed but with the Type pull-down list showing.

Each Type has its own view/edit screen.

Once you have pressed the Find button and items are displayed, more buttons are displayed as shown below.

The Delete button will initiate the deletion of the selected item. You will not be able to delete it if it is in use.

The External Edit button is used to edit the document content of those templates which have Open Office odt document contents, and will be disabled otherwise.

When items are displayed and they are all of the same type, then the columns change to suit the type - contrast the screen below which displays Doucument Templates with that for the All case above.

The meanings of the column headings are documented in each of the Template create/edit screens in this section.

Appointment Reminder SMS Templates

Complete

These are used to generate SMS text for appointment reminders - both those sent out by the system by the Appointment Reminder Sender, or when the Reminder button on the Workflow|Scheduling screen is used to send an ad-hoc reminder.

When sending SMS Appointment Reminders for appointments in a given schedule, the template used is determined by looking at the location set for that schedule (via Administration|Organisation|Schedule) and then using the SMS Appointment Reminder template set for that location (via Administration|Organisation|Practice Location).

This is the template selection screen for Appointment Reminder SMS Templates.

 

Create/Edit/View

Complete

This is the create/edit/view screen for SMS appointment reminder templates.

These are used to generate SMS text for appointment reminders based on an expression. The template can be plain text, macros, or an XPath expression.

The screen is in two parts - the top contains the fields, the bottom allows the template to be tested.

The fields are as follows:

Name the name of the template
Description a description of the template. This should be used if necessary to clarify the purpose of the template.
Active uncheck this to deactivate the template.
Content Type

the template content type. One of Plain Text, Macro or Expression

Content

The content used to generate the SMS text. This should produce text no longer than 160 characters.

XPath expressions may use the following variables directly:

  • $appointment - the appointment act
  • $customer - the customer
  • $patient - the patient
  • $location - the practice location
  • $practice - the practice
  • $nl - new line character

These variables are also available to XPath expressions used by macros, if the Content Type is Macro.

The expression itself can be up to 5000 characters long so can be quite complex

 

The bottom part of the screen contains:

Customer allows a customer to be selected, to test the template
Patient allows a customer to be selected, to test the template
Message the generated message. The count shows the number of characters remaining.
Status this displays any error message, if the template fails to generate the SMS text

Example XPath expression

concat("Reminder: ",
        expr:if(expr:var("patient.name") != "", concat(expr:var("patient.name"), " has"), "you have"),
        " an appointment at " , $location.name," on ", date:formatDate($appointment.startTime, "short"),
        " @ ", date:formatTime($appointment.startTime, "short"), $nl,
        'Call us on ', party:getTelephone($location), ' for any queries')

The XPath expression above will generate an SMS message like:

Reminder: Muffett has an appointment at Main Clinic on 28/11/15 @ 9:00 AM
Call us on 041312345 for any queries

If the appointment has no patient, it will generate an SMS like:

Reminder: you have an appointment at Main Clinic on 28/11/15 @ 9:00 AM
Call us on 041312345 for any queries

Example XPath expression for Surgery

It is quite possible to generate difference messages depending on the type of appointment. This example generates a different message if the appointment type is 'Admit - Surgery'

expr:if($appointment.appointmentType.entity.name = 'Admit - Surgery',

concat("Reminder: East Island Vets Surgery Appointment", $nl,
        expr:var("patient.name")," ",
        date:formatDate($appointment.startTime, "short"),
        " @ ", date:formatTime($appointment.startTime, "short"), $nl,
        "Remember: water is OK but no food after 9pm ",date:formatDate(date:add($appointment.startTime,"-1d"), "short"),$nl,
        'If queries phone ', party:getTelephone($location)),

concat("Reminder: East Island Vets Appointment", $nl,
        expr:if(expr:var("patient.name") != "",expr:var("patient.name"), "is on")," ",
        date:formatDate($appointment.startTime, "short"),
        " @ ", date:formatTime($appointment.startTime, "short"), $nl,
        'If queries phone ', party:getTelephone($location))

)

For a surgery appointment with a patient 'Mr Moo' this will generate an SMS message like:

Reminder: East Island Vets Surgery Appointment
Mr Moo 15/12/15 @ 10:00 AM
Remember: water is OK but no food after 9pm 14/12/15
If queries phone 2915 3999

Date Switching

If you want to replace the date by 'today' or 'tomorrow' when appropriate, you can use the following as a replacement for the date:formatDate() call in the above:

        expr:if((date:formatDate($appointment.startTime) = date:formatDate(date:now())),"today",
        expr:if((date:formatDate($appointment.startTime) = date:formatDate(date:add(date:now(),"1d"))),"tomorrow",
        date:format($appointment.startTime, "dd MMM")))

 

Email Templates

Complete

Email Templates and System Email Templates are used to fill the subject and content of emails.

These can be used when:

  • writing emails
  • sending documents such as invoices or referral letters, via email. Here, the email template is linked to the relevant Document Template and it is normal to set these as System Email Templates so that they are not available to users on the email write screen

That is, System Email Templates are provided to differentiate between templates used for emailing standard documents (e.g. invoices), and the templates available in the Write Email Templates window.
Both Email Templates and System Email Templates may be used for the former, but only Email Templates may be used for the latter.

 

Templates can contain:

The following is a simple template for use when emailing a handout pdf that is not held in the OpenVPMS database - ie you use this template and then manually attached the Kidney function pdf to the email.

The following is a cover note used when emailing an invoice: (this template would be set as the 'Email Template' on the Invoice document template)

The following is used to generate a sexy looking footer block on emails:

See here for an explanation of the fields.

Documents

When the Content Type is Document the following document types are supported:

  • JasperReport (.jrxml), OpenOffice (.odt), Microsoft Word (.doc)
    • The object returned by the Content Source expression will be supplied to the document to support merging.
    • When selected by the email Template option, any parameters will be prompted for.

If the Content Source expression doesn't return a valid object, the document will be converted to HTML without merging.

  • Rich Text Format (.rtf)
    No merging is supported.
  • HTML (.html)
    No merging is supported.

Images

Images are supported, with the following caveats:

  • Images must be URLs, rather than embedded in documents.
    Popular email clients (e.g. GMail and Outlook) don't support embedded images.
  • OpenOffice should be used to merge OpenOffice/Word documents. 
    LibreOffice has a bug where all images are embedded in the HTML, and are therefore not displayable in all email clients.
  • Images may not be displayed automatically by email clients.
    According to this link referring to a study done in 2009, "only 48% of email recipients see images automatically".

See also How To: Email Template Tips - Open Office and How To: Email Template Tips - Jaspersoft Studio

Examples

The following shows the email generated by the invoice cover note template:

The following shows the footer generated by the third template:

Create/Edit/View

Complete

This is the create/edit/view screen for Email and System Email Templates. These are used to fill the subject and content of emails. Both have the same fields and the only difference between the two is that System Email Templates are not available as templates on the Email Write screen.  Both are available as email templates on Document Templates. See here for more background.

 

The fields are as follows:

Name The template name
Description The template description
Subject Type

Determines how the Subject is processed. One of:

  • Plain text - the Subject is inserted into the email subject as plain text
  • Macro - the Subject is evaluated as a macro, and the result inserted into the email subject
  • Expression -  the Subject is evaluated as an xpath expression, and the result inserted into the email subject
Subject The subject to evaluate
Subject Source

An optional expression to select the object to evaluate against. This is only applicable when the Subject Type is Macro or Expression.

E.g. a value of:

$customer

would evaluate Subject against the current customer.

Content Type

Determines how the Content is processed. One of:

  • Plain text - the Content is inserted into the email as plain text
  • Macro - the Content is evaluated as a macro, and the result inserted into the email
  • Expression - the Content is evaluated as an xpath expression, and the result inserted into the email
  • Document - the content is a document. See below.
Content The content to evaluate
Content Source

An optional expression to select the object to evaluate the Content against. This is only applicable when the Subject Type is Macro, Expression or Document.

E.g. a value of:

$patient

would evaluate Content against the current patient.

Active determines if the template is active or inactive. If it is inactive it is not available for selection.

Source Expressions

The Source Expressions can be any expression or variable that sets the object to evaluate the content against.  This can be:

  • a macro variable , ie $customer, $patient, etc
  • a period (.) meaning the current document. This is most useful when creating cover-notes for use when emailing documents via the Print|Email operation.
  • left blank. For pre-filled emails, the invoice or document etc will be passed. In this case, it is equivalent to using a period.
  • an xpath expression returning an archetype object e.g. openvpms:get(., 'patient.entity')

Documents

When the Content Type is Document the following document types are supported:

  • JasperReport (.jrxml), OpenOffice (.odt), Microsoft Word (.doc)
    • The object returned by the Content Source expression will be supplied to the document to support merging.
    • When selected by the email Template option, any parameters will be prompted for.

If the Content Source expression doesn't return a valid object, the document will be converted to HTML without merging.

  • Rich Text Format (.rtf)
    No merging is supported.
  • HTML (.html)
    No merging is supported.

Letterhead & Document Control

Complete

The Letterhead & Document Control facility provides a mechanism to customise various documents (such as invoices, credit notes, etc) for your practice without having to edit the jrxml files.

The versions of these documents provided in the standard release package use a common letterhead subreport (Letterhead.jrxml) to generate the letterhead portion of each document. The following documents use this letterhead facility:

  • all customer documents (ie counter sale, credit, credit and debit adjustments, estimate, invoice, receipt and refund)
  • all supplier documents (ie credit, delivery, invoice, order, refurnd,remittance and return)
  • patient medical records and problems
  • debtors statements
  • patient reminders (grouped and non-grouped)
  • customer orders (pharmacy orders and returns)

The Administration|Templates screen enables you create a new Letterhead and to select one to delete, edit or view.

You can specify the letterhead to be used for each practice location, and you can specify that multiple locations use the same letterhead.

The Letterhead record is used to define not only the items that go on the letterhead itself, but also items used to customise the various documents. For example on the debtors statement you can specify the various payment options that your practice supports.

Note that you do NOT have to create any letterhead records.  However, if you do not, you will not be able to have a logo on your letterhead (unless you customise the supplied Letterhead.jrxml or use customised invoices, etc). You also will not be able to customise the text on statements and other documents.

The letterhead facility is designed to provide good looking documents using plain paper. However, if you do wish to use your own pre-printed letterhead stationary, this is allowed for and, if your printer supports it, you can also use pre-printed stationary for the first page and plain paper for subsequent pages.

The design does assume that your letterhead stationary has the letterhead at the top of the page and that the rest of the page can be printed on - ie you have nothing pre-printed at the bottom of the page. If this is not the case then you will have to use customised versions of the various content files and you will need to use Jaspersoft Studio to clone your versions from the standard Invoice.jrxml etc content files. However, you should be able to get away with just increasing the bottom margin to avoid the pre-printed area at the bottom of the page.

The layout of the document is designed to place the customer (or supplier) address so that it is correctly positioned for use with window envelopes as follows:

  • A4 - use standard DL window envelopes. Make the first fold 10.5 cm from the top of the paper.
  • A5 - not supported
  • Letter - use #10 window envelopes. Note that the window position in #10 envelopes is not standardised, but the positioning should suit those available from the large office supply companies. Make the first fold 4 inches from the top of the paper.

If the address block is not correctly positioned for the window envelopes that you use, then you can adjust the Letterhead AddressBlock template (which uses content 'Letterhead AddressBlock.jrxml'). See below.

If you want to use a customised letterhead then you should clone it from the standard Letterhead.jrxml using Jaspersoft Studio. You should only need to do this when:

  • you simply do not like the existing design
  • you have multiple practice locations that each have pre-printed letterhead stationary but with different designs
  • your letterhead design is such that the pre-printed information occupies more space than the OpenVPMS templates allow for - which is as follows: A4-52.2mm, A5-37.0mm, Letter-1.93ins.

Note that if you are using an A5 template, then the A5 version of your customised letterhead (called say MyPracticeLH) is expected to be in MyPracticeLH-A5.jrxml.

You will also have to provide a customised address block (because a customised letterhead almost always required a customise address block to correctly position the address in the envelope window). This can be cloned from the standard 'Letterhead AddressBlock.jrxml' and if your letterhead is MyPracticeLH, then the address block is expected to be in 'MyPracticeLH AddressBlock.jrxml'.

Resource Bundles

The many of the templates make use of a facility called 'resource bundles'. These are a set of files named report.properties_xxx located in <TOMCAT-HOME>/webapps/openvpms/WEB-INF/classes/localisation. The following ones are supplied with the system:

File Locale Remarks
reports_en_AU.properties Australia taxName=GST, invoiceTitle=Tax Invoice
reports_en_GB.properties Great Britain taxName=VAT, invoiceTitle=Invoice
reports_en_US.properties United States taxName= State Tax, invoiceTitle=Invoice
reports_zh_HK.properties Hong Kong as for GB  but taxName=NONE as no sales tax
reports.properties   used if no file for the current locale found; needs to be edited to suit your locale

As well as setting the name of the local tax, the report.properties files set the names of a number of other documents. For example if you want your printed Patient Medical History titled that rather than 'Patient Medical Records' then you need to edit the line:

text.medicalRecordsTitle=Patient Medical Records

If you do edit the file, the changes will not take effect until your restart Tomcat.

Editing the Address Block position

First use Administration|Templates|View to view the Letterhead AddressBlock document template. Then download the content by clicking on the Content button.

Now use Jaspersoft Studio to edit the downloaded Letterhead AddressBlock.jrxml file. Using Studio, simply move the frame containing the address elements as required.

If you feel intimidated by Studio, you can use a good text editor (like NotePad++) to simply edit the file.  Find line 43 (which contains the co-ordinates of the frame) and modify these as required. The units are in pixels and 10 pixels = 0.1389 inches or 3.5278 mm.

In both cases save the modified jrxml file and use Administration|Templates|Edit to edit the Letterhead AddressBlock document template and use the Upload button to upload the modified file.

Create/Edit/View

Complete

This screen is used to create/edit/view the Letterhead & Document Control records.

The fields are as follows:
Name - the name of the letterhead
Description - an appropriate description
Active - uncheck this box to deactivate the letterhead
Company Tax ID - the tax registration of your organisation. Enter both the registration name (eg ABN, VAT Reg, STS, etc) and the number/code. If your jurisdiction does not require this, leave it blank.
Logo File - enter the name of the file that contains the logo you wish to use. Leave blank if you have none. In the standard Letterhead.jrxml the space allowed for the letterhead is 280 pixels wide, 100 high. If your logo differs from this it will be scaled to fit whilst retaining its shape. NOTE: if you mistype the file name, then no error will be reported but the logo area will be blank on the printed documents.
HTML Logo URL - a URL to the practice logo. This can be used in email templates.
Base URL - a URL prefix used to help construct templates that refer to resources located at a common base path. These could be images, HTML, or plain text for example. The resources must be publicly accessible. When populating the field, it should always containing a trailing slash.
Contacts Source - either enter the Practice Location whose contacts are to be used , or leave blank - in which case the contacts used will be drawn from the user's current location.
Subreport Expression - the content name of the subreport to be used to generate the letterhead (without the .jrxml extension).  This can be normally be left as the default value 'Letterhead'.  However, if you need to have different letterhead formats for your various locations, then you can clone these from the standard Letterhead.jrxml and specify their content file names here. Note that if you do use say 'MyPracticeLH', then you will also need to provide you own address block subreport with the content name 'MyPracticeLH Address Block.jrxml' and this can be cloned from the standard Letterhead Address Block subreport.

Plain Paper - check this box if you use plain paper. If you use pre-printed letterhead paper, uncheck the box - and the letterhead block will left blank unless the document is being emailed.
Letterhead Page 1 Only - check this box if you use pre-printed letterhead paper but only for the first page (and your printer is set up to print the remaining pages on plain paper). Leave it unchecked otherwise. The setting of this option is ignored unless the Plain Paper option is unchecked.
Use Product Types - check this box to show the product type on each line item in invoices, credit notes, estimates and statements. The line items are grouped by product type and ordered by the product type's Invoice Sort Order. This option is not available on A5 format documents because of lack of space.
Reminders on Invoice - check this box to display on invoices any patient reminders due in the next 12 months.  A maximum of 4 lines are shown with reminders for products of the same product type on the same day for multiple patients combined on the one line.
Appointments on Invoice - check this box to display on invoices any appointments in the next 12 months.  If there are more than 3 then only the next 3 are shown.

The following fields are use to control messages added to various documents.

Slogan - this text will be placed at the bottom of the last page.  It can use be used to display a slogan for your business. Note that space allowed for this is two lines. Text longer than this will be truncated.
Invoice Message - this text is shown at the end of the invoice (both for customer and counter sale invoices)
Invoice Payment Instr. - this text enables payment instructions to be printed on customer invoices (but not counter sales to anonymous customers). If the characters '[REF]' are present in the text they will be replaced by a reference code. This will consist of the first 5 letters of the customer name followed by their customer ID. Hence if Mr Fredricks is customer 34567, the reference code will be FREDR34567.
Receipt Message - this text is shown at the end of the payment receipt
Estimate Message - this text is shown at the end of the estimate
General Message - this text is shown at the end of customer documents other than invoices, estimates and receipts
Order Message - this text is shown at the end of the order
Supplier Message - this text is shown at the end of supplier documents other than orders

The following fields affect the Debtors Statements. They are used to determine what payment instructions are shown, and whether or not Invoice line items are shown:

Credit Card Instructions - if you accept payment by credit card, enter the instructions here, else leave blank
Direct Deposit Instructions - if you accept payment by direct deposit (or other electronic payment method into your bank account), enter the instructions here, else leave blank. If the characters '[REF]' are present in the text they will be replaced by a reference code. This will consist of the first 5 letters of the customer name followed by their customer ID. Hence if Mr Fredricks is customer 34567, the reference code will be FREDR34567.
Payment Option 3 - if you have a 3rd payment option (for example by cheque), enter its instructions here, else leave blank.
Payment Option 4 - if you have a 4th payment option, enter its instructions here, else leave blank.
Line Item Print - determines whether or not the invoice & credit line items are printed. The options are Always, Never, and 'Not Printed'. If the latter, then the line items are shown if the invoice's Print flag is not set. (This flag is set when the finalised invoice is printed - emailing or previewing does not set the flag.)
 

Reminder Message - this message is added to the end of the Grouped Reminders document.

Patient Reminder SMS Template

Complete

This is the create/edit/view screen for SMS patient reminder templates.

These are used to generate SMS text for patient reminders. The template can be plain text, macros, or an XPath expression.

The screen is in two parts - the top contains the fields, the bottom allows the template to be tested.

The fields are as follows:

Name the name of the template
Description a description of the template. This should be used if necessary to clarify the purpose of the template.
Active uncheck this to deactivate the template.
Content Type

the template content type. One of Plain Text, Macro or Expression

Content

The content used to generate the SMS text. This should produce text no longer than 160 characters.

XPath expressions may use the following variables directly:

  • $customer - the customer
  • $patient - the patient
  • $location - the practice location
  • $practice - the practice
  • $nl - new line character

These variables are also available to XPath expressions used by macros, if the Content Type is Macro.

 

The bottom part of the screen contains:

Customer allows a customer to be selected, to test the template
Patient allows a patient to be selected, to test the template
Reminder Type allows a reminder type to be selected, to test the template
Message the generated message. The count shows the number of characters remaining.
Status this displays any error message, if the template fails to generate the SMS text

Note that for testing purposes, a customer, patient and reminder type must be selected.

Example XPath expressions

For single patient reminders:

concat($patient.name, ' is due for a vaccination at ',$location.name,'.', $nl, 
     'Please contact us on ',party:getTelephone($location),' to make an appointment')

The XPath expression above will generate an SMS message like:
     Fido is due for a vaccination at Main Clinic.
     Please contact us on 041312345 to make an appointment

For reminders grouped by patient:


concat($patient.name,' is due for a ',list:sortNamesOf(.,'reminderType',',',' & '),$nl, 
'Please contact us on ', party:getTelephone($location), ' to make an appointment')

To produce text like:
     Fido is due for a Grooming, Health check & Vaccination.
     Please contact us on 12345678 to make an appointment.

For reminders grouped by customer:


concat(list:sortNames(list:set('patient'),',',' and ',' is',' are'), 
    ' due for a visit to ',$location.name,'.',$nl,
    'Call ',party:getTelephone($location),' to make a booking')

To produce text like:
     Fido and Muffett are due for a visit to VetsRUs.
     Call 041312345 to make a booking.

For a single patient, it will produce text like:
     Fido is due for a visit to VetsRUs.
     Call 041312345 to make a booking.

You can include reminder types, although its not possible to indicate which reminders apply to which patients.


concat(list:sortNames(list:set('patient'),',',' & ',' is',' are'),
     ' due for a ',list:sortNames(list:set('reminderType'),', ',' & '),$nl,
     'Call ',party:getTelephone($location),' to make a booking')

Document Templates

Complete

Every form and report has a document template. The template specifies things like usage, paper format, associated printers, its content, and when it is printed.  See also Concepts|Printing for background information, and Create/View/Edit for the template details.

As shown below, the system comes with a number of standard templates. These have to be loaded using the templateload utility (see the readme.txt file in the release package for instructions). Template sets are provided for A4, A5 and Letter. You can use these but you will probably want to modify some of them. You may also want to use a report from the Resource Library set.  See below for a quick summary of how to do this.

Template Usage: One can divide the templates into three groups:
Reports - you use the Reporting|Reports screen to select the report to run
Selectable forms - (eg Patient Forms) you will be presented with a list to select from
System forms - (eg Invoices) where the system chooses the template.

For the first two you can obviously set up as many as you need - you just choose the one you want. In the last case (eg Invoices) you need to be careful because if you create three different invoice templates, the system will just use the first it finds. This is not normally a problem - after all you only need one type of invoice form. However, if you do want to use different templates for each Practice Location, then you can do this by defining the templates to be used by the location. See Administration|Organisation|Practice Location.

If you do need to create or modify reports and forms, see Reference|Reports and Forms. Note that if you want to modify an existing report or form, then if you View the template, you can then click on the Content field to download the report/form ready for editing.

 

Installing a new template
To install a new templatefrom the Resource Library, do as follows:

  1. download the jrxml (or odt) file by right-clicking on the attachment link and using 'Save Link As' (or 'Save Target As' etc depending on your browser) - remember where you saved it
  2. click the New button
  3. on the resulting New Document Template screen set the Type to Report, then click the Upload button. If it's not a report, then you need to set the appropriate Type.
  4. on the resulting window, click Browse and navigate to where you downloaded the file and select it. Click the Send button.
  5. back at the Edit Document Template screen, click the OK button

Changing a standard report paper size
The system comes with a set of reports and documents in the <OPENVPMS-HOME>/reports directory. This is structured as follows:

You can see that there are 8 directories with most having multiple sub-directories, one per function, and each of these has a sub-directory for each paper size each containing the templates for that paper size.

Note that not all paper sizes are provided. In particular, the Reports are provided only in A4 and Letter and not in A5.

So if you initially loaded the A4 set, and want to change your invoices to the A5 equivalents, then you need to load the templates in Customer/Invoice/A5. Do this by editing each template, and then pressing the Upload button to load the appropriate content.

For the invoices you will see that the directory contains the files Invoice.jrxml, Invoice Items.jrxml, Invoice Appointments.jrxml, Invoice Notes.jrxml and Invoice Reminders.jrxml.

Hence you need to edit the Invoice, Invoice Items, Appointments, Notes and Reminders templates, and in each case upload the relevant file from the Customer/Invoice/A5 directory.

Note that these A5 versions use the A5 versions of the Letterhead and Addressbock templates, but these should be present as they are loaded as part of the A4 template set in case you ever want to use some A5 versions.

 

 

Create/Edit/View

Complete

This is the create/edit/view screen for document templates. See also Concepts|Printing and Administration|Templates|Document Templates for background information.

The fields are as follows:
Name - the name of the template. The name can be anything (ie in the example above, we could change the name to 'ABCDE' and the system would still work) but it is sensible to use meaningful names. You can have multiple templates with the same name, but again, it is sensible not to.

Description - a description of the template. This should be used if necessary to clarify the purpose of the template.

Active - uncheck this to deactivate the template.

Type - this is used to define the usage of the template - for example when printing an invoice for a customer, the system looks for templates of type 'Customer Invoice'. The Type also defines what information fields are made available to the Content generator (see below). Most of the Types are self explanatory. Use 'Report' for a report (eg a list of customers or sales, etc), and 'Sub Report' for the report's repeated components (ie the line items). See also this summary.

User Level - this allows you to define who can run which reports. Each user has a level (0-9). A user with level N can only run reports of level N and below.

Report Type - select the report type from the pull-down list. Those available are set using Administration|Lookups|Report Type. The Report Type can be used to select a group of reports on the Reporting|Reports screen.

Preferred Print Mode - this determines when documents are printed or offered for printing. The option is used when the document is generated as a result of invoicing an item which has an attached document. It can be set to:
  None - the print mode is not specified
  Immediate - print immediately using the printer/interactive option
  Check Out - (the default) delay print until at Check Out time
  Manual - documents must be manually selected for printing

At Check Out time, the system checks if any documents have been accumulated. If there are any that have not been printed, then a window is displayed showing the accumulated documents each with a print checkbox - those that have already been printed, and those with Mode=Manual will have the box unchecked - those whose mode is 'Check Out' will have their box checked.

Paper Size - used to indicate to the printer what size paper is required. It can be set to None, A4, A5, Custom, and Letter. Normally can be left at 'None' unless the printer(s) that you are using allow the selection of different sized paper.

Content - the 'content' is the name of the file containing the JRXML report or Open Office or Microsoft Word template used to generate the document.  See also Introduction|Reporting and JXPath Extension Functions.
If you are editing the template, click the Upload button to upload the required file. If you are viewing the template, then you can click the content file name to download the template content.
Note that for templates that are Type=Subreport, the Report that uses the subreport finds the subreport via its Content name, not its Template name.  Hence if you edit a subreport template and upload content with a different file name, you will have to modify the report to use this new subreport content name.

Orientation - set to Portrait or Landscape as required

Copies - set to the required number of copies

Paper Height, Width and Units - these can normally be left at their defaults unless you have specified 'Paper Size' as Custom.

Note that for OpenOffice and Microsoft Word templates, the Paper Size, Orientation, Paper Height, Paper Width, and Paper Units settings of the Document Template are ignored. These settings must be specified within the OpenOffice or Word template. That is, they are only used for templates that use Jasper Reports (jrxml) content.

Email Template - this is used when sending a document via email. It is:

  • required when the system is generating emails to send out reminders and statements;
  • optional for all other Document Templates. If present, it will be used to pre-fill emails with content when you use Print|Email to email the document.

Note also that the reminder and statement emails will have a From address that will be set as follows (where RB is the contact purpose and is Reminder for reminders and Billing for statements):

  • the RB email contact associated with the customer's Practice Location; or
  • the Practice's RB email contact, if the  customer doesn't have a Practice Location, or the Practice Location doesn't have an RB email contact; or
  • the Practice's preferred email contact, if there is no RB email contact

SMS Template - this is used for customers that have elected to receive SMS messages for patient reminders.

File Name Format - used to specify the file name format of generated documents. If unspecified, the document name is derived from the template file it was generated from. So a PDF generated from the template 'Invoice A5.jrxml' would be assigned the name 'Invoice A5.pdf'. Available formats are determined by Administration|Lookups|File Name Format

Printers tab
The Printers Tab is used to display and maintain the printers that can be used with this template.  You don't have to use this facility, but if you don't then your users will have to choose the required printer each time they print something.
Before using this you need to set up the printers available to the Practice Locations(s) - see Administration|Organisation|Practice Location.
The fields are as follows:
Practice Location - the Practice Location. Note that you can also insert the Practice here. This useful for the case where you want to set a global default printer, and override it for one (or more) locations.  For example if the standard label printer is LABEL-R, but for the upstairs office you wish to use LABEL-U, then it may be more convenient to set LABEL-R for the practice, and LABEL-U for the Main-Upstairs location, than to set the label printer for each practice location. Of course, if you only have two practice locations, then it makes no difference which way you do it, but if you have a more complex setup then it may be better to use the 'set for practice, and override for one location' approach.
Printer Name - choose one from the pull-down list
Paper Tray - if applicable, select the required tray - you will want to use this if you are running plain paper in one tray and letterhead in the other
Interactive - check this box if you want the print dialog box to be displayed (so you can use preview or email rather than print, or change the printer if necessary or load the required paper or ...) before the printing occurs. If the box is not checked, then printing proceeds immediately.

Summary

Complete

The following table summarises the standard Document Templates and their Types and usage.




Document Template Name Template Type Used by/for
Bank Deposit Bank Deposit Reporting|Deposits|Print
Customer Account Balance Report Customer Account Balance Reporting|Debtors|Report
Counter Sale Customer Counter Sale Customers|Charges|Counter Sale|Print
Credit Customer Credit Customers|Charges|Credit
Estimation Customer Estimate Customers|Estimates|Preview|Print
Invoice Customer Invoice Customers|Charges|Invoice|Print
Receipt Customer Payment Customers|Payments|Payment|Print
Statement Customer Statement Reporting|Debtors|Print & Send All
Grouped Reminders Report Grouped Reminders Reporting|Reminders|Send All
Message Message Workflow|Messaging|Print
Desexing Certificate Patient Form check-in processing
Vaccination Certificate Patient Form check-in processing
Patient Image Patient Image Patients|Medical Records|Documents|Print where the item is an Image
Referral Letter Patient Letter report macro
Reminder Cartrophen First Patient Letter Reporting|Reminders|Print & Send All
Reminder Desexing First Patient Letter Reporting|Reminders|Print & Send All
Reminder Vaccination First Patient Letter Reporting|Reminders|Print & Send All
Reminder Vaccination Puppy and Kitten First Patient Letter Reporting|Reminders|Print & Send All
Reminder Vaccination Second Patient Letter Reporting|Reminders|Print & Send All
Drug Label Patient Medication Label Customers|Charges|Invoice &
Patients|Medical Records|New|Medication
where item has a dispensing label
Patient Clinical Event Patient Visit Patients|Medical Records|Print
Patient Reminders Report Reminder Report Reporting|Reminders|Report
Clinician Sales Report Report Reporting|Reports
Customer Acquisition Report Report Reporting|Reports
Customer Balance Report Report Reporting|Reports
Customer List Report Report Reporting|Reports
Customer Payments Report Report Reporting|Reports
Customer Product Sales Report Report Reporting|Reports
Customer Reconciliation Report Report Reporting|Reports
Customer Referral Report Report Reporting|Reports
Customer Sales Report Report Reporting|Reports
Patient Acquisition Report Report Reporting|Reports
Patient Deceased Report Report Reporting|Reports
Patient List Report Report Reporting|Reports
Patient Sterilisation Report Report Reporting|Reports
Practice Clinician Sales Report Report Reporting|Reports
Product List Report Report Reporting|Reports
Product Price List Report Report Reporting|Reports
Stock Reorder Report Report Reporting|Reports
Stock Take List Report Report Reporting|Reports
Stock Valuation Report Report Reporting|Reports
StockTake Sheet Report Report Reporting|Reports
Counter Sale Items Sub Report line items component of Report
Credit Items Sub Report line items component of Report
Estimation Items Sub Report line items component of Report
Invoice Items Sub Report line items component of Report
Invoice Reminders Sub Report line items component of Report
Order Items Sub Report line items component of Report
Receipt Items Sub Report line items component of Report
Statement Items Sub Report line items component of Report
Order Supplier Order Suppliers|Orders|Preview & Generate
Till Balance Till Balance Reporting|Till Balances|Print
Work In Progress Report Work in Progress Charges Reporting|Work In Progress|Report

Delete Template

Complete

When you press the Delete button on the Administration|Templates screen, a confirmation window will appear.

If the selected Template is not in use and can be deleted, the window will simply ask you to confirm the delete. Press OK to confirm or Cancel to abort.

If it cannot be deleted because it is in use, the text will be "xxxx has relationships and cannot be deleted. Do you want to deactivate it instead?"(where xxx is the name of the item you are trying to delete). Pressing OK will unset its Active flag, Cancel will abort.

Select

Complete

This is the screen used to select a Document Template, SMS Appointmnent Reminder Template or Letterhead. It works like a standard select screen.

It will be presented whenever you need to choose a template, for example when assigning document, templates to a Practice or Practice Location, or (more commonly) when selecting a document at check-in time. In the latter case only the relevant templates will be displayed.

The following is the screen for selecting a Document Template.

Lookups

Complete

The Administration|Lookups screen is a select screen that allows you to select the specific Lookup to be viewed or maintained. These Lookups are used mostly to define the values that can be entered in various fields - for example the Species can only be set to one of the define Species Lookup Types. Below is the screen as initially displayed but with the Types pull-down list showing.

Each Type has its own view/edit screen. Note that those shown are only a subset of the full set of Lookup Types which are as follows:

Address Format
Bank
Breed
Colour
Contact Purpose
Country
Credit Card
Currency
Custom Payment Type
Customer Account Type
Customer Alert Type
Customer Communication Reason
Customer Insurance
Customer Referral
Customer Type
Customer Vet
Demographic Update

Diagnosis
Diagnosis (VeNom)
Duration Formats
File Name Format
Macro
Message Reason
Message Status
Patient Alert Type
Person Title
Practice Type
Presenting Complaint
Presenting Complaint (VeNom)
Pricing Group
Product Group
Product Income Type
Reminder Group
 

Report Macro
Report Type
Species
Species (IDEXX)
State
Suburb
Supplier Account Type
Supplier Type
Tax Type
Units of Measure
Units of Measure Group
User Name Format
User Type
Veterinary Speciality
Visit Reason
Visit Reason (VeNom)

 

Once you have pressed the Find button and items are displayed, more buttons are displayed as shown below.

The Delete button will initiate the deletion of the selected item. You will not be able to delete it if it is in use (but you will be able to deactivate it to prevent it being used in future).

The Replace button is used to either to remove all usages of the selected item or to replace all usages of the selected item with another. To illustrate when you would want to do the second, assume that you have been using two Product Groups, Washing and Cutting which you now want to combine into one. You would do this by first editing Washing to change its name to Grooming, then Replacing Cutting by Grooming and checking the 'Delete lookup?' box - see Confirm Replace. Note that if the lookup has a target relationship (eg Suburbs which have an associated State) then you will not be able to replace SuburbA by SuburbB if these two are not in the same State.  Similarly you cannot replace BreedA by BreedB unless both have the same Species.

When items are displayed and they are all of the same type, then the columns change to suit the type - contrast the screen below which displays Macros with that for Banks above.

The meanings of the column headings are documented in each of the Lookup Type create/edit screens in this section.

Address Format

Complete

This screen is used to create/view/edit the Address Format lookups. These are used to how addresses are formatted. Normally only one is needed and it is used to set the values in the 'Address Format' field on the Administration|Organisations|Practice screen.

The fields are as follows:

Name - the name of the format
Active - uncheck the box to deactivate the format
Single Line Format - the xpath expression used to generate the address when a single line address is needed
Multi Line Format - the xpath expression used to generate the address when a multiple line address is needed

The expressions should be a concat() of the required items. The following variables are available:

  • $address - e.g "36 Nonesuch St". For single-line addresses, any '\n' will be removed
  • $suburb - e.g. "Sawtell"
  • $postcode - e.g. "3095"
  • $state - e.g. "Victoria"
  • $state.code - e.g. "VIC"

Any missing data (for example if the postcode has been omitted) is supplied as an empty string ("").

These could be used as follows:

  • Single Line Format: concat($address, ', ', $suburb, ' ', $state, ' ', $postcode)
  • Multi-line Format: concat($address, '\n', $suburb, ' ', $state, ' ', $postcode)

Note that the $xxx variables are shortcuts for the expression openvpms:get(.,'xxx','').

This allows for:

  • single line:
    concat(expr:concatIf($address, ', '),
                 expr:concatIf(toUpperCase($suburb), ' '),
                 expr:concatIf($state.code, ' '),
                 $postcode)
     

          E.g. 123 Gilrown Avenue, DOREEN VIC 3754

  • multi-line:
    concat(expr:concatIf($address, $nl),
                 expr:concatIf(toUpperCase($suburb), ' '),
                 expr:concatIf($state.code, ' '),
                 $postcode)

           E.g. 123 Gilrown Avenue
                   DOREEN VIC 3754
 

In countries where the state/county/area are normally omitted (eg the UK, South Africa), the state part of the above two expressions can simply omitted.

Note that the above expressions still work for the cases where, for a customer or supplier with an overseas address, you are holding the complete multi-line address in the Address field and have not set the suburb, state or postcode. (However, the single line format may be quite long.)

Bank

Complete

This screen is used to create/view/edit the Bank lookups. Note that these hold just the Bank names, details of the account such as Branch and Account Number are held elsewhere.

The fields are as follows:

Name - the name of the bank
default - check the box to make this the default bank
Active - uncheck the box to deactivate the bank

Breed

Complete

This screen is used to create/view/edit the details of the Breed lookups.

The fields are as follows:

Name - the name of the breed
Species - the species
Default - check the box to make this the default breed
Active - uncheck the box to deactivate the breed

Colour

Complete

This screen is used to create/view/edit the details of the Colour lookups. Note that currently these are not used by the system. That is, when you enter the patient details, you can set the patient's colour to anything - unlike Species and Breed, it's value does not have to be chosen from a list. If you really have a need to limit the colours that can be set, then your integrator can adjust the relevant archetype so that the Colour lookup is used to limit the colours that can be set.

Contact Purpose

Complete

This screen is used to create/view/edit the details of the Contact Purpose lookups.

The fields are as follows:

Name - the Contact Purpose
Active - uncheck the box to deactivate the Contact Purpose

 

The system comes with a basic set (Billing, Correspondence, Home, Mobile, Postal, Reminder and Work) which will normally suffice. However, you might want to add 'Spouse' or 'Partner' or 'Maid'.

These contact purposes are independent of the Contact Type (ie Location, Phone, Email and Fax).

The system does make use of the Contact Purpose in some situations.

  • When generating Reminders it uses the Reminder contacts
  • When generating Statements it uses the Billing contacts
  • The various JXPath extension functions like party:getCorrespondenceAddress and party:getBillingAddress use the relevant contact purpose.  [But note that ther is no getPostalAddress function.]
  • In all cases the selection logic is to look for the preferred contact of the relevant purpose, if none, then use the first found for the purpose, if none then use the first preferred contact of any purpose.
  • Note however, that the system does NOT look at the Contact Purpose when providing lists of email addresses. For example, if you are emailing a customer invoice, the system will not look for a Billing Contact Purpose. Rather the list of available email addresses is determined by the current workspace as follows:

In the customer and patient workspaces, the To dropdown will include:
- the customer's email addresses
- the referral email addresses
- any practice email addresses associated with the referrals

In the supplier workspaces, the To dropdown will include:
- the supplier's email addresses

In all other workspaces, the To dropdown will be empty.

Country

Complete

This screen is used to create/view/edit the details of the Country lookups. Note that you need at least one of these - for the country that you operate in. You may need others if you have customers or suppliers located in other countries.

The fields are as follows:

Code - the code for the country. It is conventional to use the standard country codes (eg see http://en.wikipedia.org/wiki/ISO_3166-1), but you can in fact use any upper case letter string (eg AUST, or AUSTRALIA in place of the standard AU). Note that once you have created the Country Lookup, you cannot change the Code - you have to create a new one, and then use the Replace mechanism.
Country - the name of the country
Default - check the box to make this the default country
Active - uncheck the box to deactivate the country
 

States tab - this is used to display and set the States that are part of the country - use Lookup|State to create these

Credit Card

Complete

This screen is used to create/view/edit the details of each type of Credit Card. Not all of the fields are currently used by the system.

The fields are as follows:

Name - the name of the Credit Card
Floor Limit - not currently used by the system. Reserved for future use to set the minimum payment amount for which this credit card can be used.
Authorisation - not currently used by the system. Reserved for future use to so you can enter a note about the authorisation procedure required for this card.
Separate Deposit List - not currently used by the system. Reserved for future use to control whether, when processing the Bank Deposits, the system is to generate a separate report for amounts paid by this card.
default - check the box to make this the default credit card
Active - uncheck the box to deactivate the credit card

Currency

Complete

This screen is used to create/view/edit the details of the Currency lookups. Note that this is used in only one place, to set the currency used by the practice. The system runs in single currency mode and there is no support for foreign currency transactions.

The fields are as follows:

ISO code - the code for the currency. When creating the Currency, the pull-down list allows you to select from the standard set (eg see http://en.wikipedia.org/wiki/ISO_4217). Note that once you have created the Currency Lookup, you cannot change the Code - you have to create a new one, and then use the Replace mechanism.
Currency - the name of the currency
Default - check the box to make this the default currency
Rounding Mode - this determines how amounts are rounded. It can be set to Half Down, Half Up or Half Even. See below for more.
Minimum Cash Denomination - the value of the smallest coin in this currency
Minimum Price - the minimum price to round to. This can be used to round prices to the nearest 5 cents or dollar for example. If unset or zero, all prices will be rounded to the default number of decimal places for the currency. (This is specified for each currency code - see the 3rd column (E) in the list of codes at https://en.wikipedia.org/wiki/ISO_4217#Active_codes which is 2 for most but 0 for some such as the Chilean Peso).
Active - uncheck the box to deactivate the currency

OpenVPMS assumes that all currencies are decimal and displays amounts to two decimal places, ie it assumes a dollars and cents structure. When doing calculations (say for a 20% discount on an amount of $23.57) then commonly the calculation will not yield an exact number of cents (in this case the discount amount is 23.57/5=4.714). The Rounding Mode determines how the fractional cents are rounded as follows:

Half Up Round to nearest cent, for half a cent, round up away from zero.
Note that this is the rounding mode that most of us were taught at school.
4.714->4.71
4.715->4.72
4.716->4.72
-4.714->-4.71
-4.715->-4.72
-4.416->-4.72
Half Down Round to nearest cent, for half a cent, round down towards zero. 4.715->4.72
-4.715->-4.71
Half Even Round to nearest cent, for half a cent, round towards the even cent.
Note that this is the rounding mode that minimizes cumulative error when applied repeatedly over a sequence of calculations.
4.715->4.72
4.725->4.72
-4.715->-4.72
-4.725->-4.72

Custom Payment Type

Complete

This screen is used to create/view/edit the details of the Custom Payment Type lookups. When you make a payment, there is a pull-down list of payment types (Credit Card, EFT, Cash, Cheque, Other, and Discount). If you select Other, then the available Payment Types are the Custom Payment Types.

The fields are as follows:

Name - the Custom Payment Type
default - check the box to make this the default custom payment type
Active - uncheck the box to deactivate the custom payment type

Customer Account Type

Complete

This screen is used to create/view/edit the details of the Customer Account Type lookups. You don't have to use Customer Account types, but doing so enables better financial management of debtors and provides a method of quickly identifying important groups of customers by using an alert.

The fields are as follows:

Name - the name of the Account Type
Credit Limit - not currently used by the system
Payment Terms and Payment Terms Units - define the period within which payment is expected and define how the Overdue Balance is calculated - see below. The units can be days, weeks or months.
Account Fee Type - can be set to None, Fixed, or Percentage. If not None, then when the End Period processing is done using Reporting|Debtors and statements are being generated, a check will be made to see if an overdue fee is applicable.
Fee Amount - this is either the fee amount (if the Fee Type is set to Fixed) or the percentage of the overdue balance (if the Fee Type is set to Percentage)
Minimum Fee - no fee is charged if the fee amount is less than this amount
Minimum Balance - no fee is charged if the overdue balance is less than this amount
Overdue Days - this defines how long a payment can be outstanding before it is considered to be overdue and thus liable for an Account Fee
Fee Message - if an Account Fee is charged, the Notes text of the generated Debit Adjustment transaction is set to this text, or if none has been entered, to "Account Fee". Note that because of a current bug, the text entered is ignored and the Notes text is always "Account Fee".
General Message, Overdue Message - these are displayed at the end of the statement. If payment is overdue, the Overdue message is printed, else the General message. Leave blank if you don't want a message to be displayed.
Active - uncheck the box to deactivate the the Account Type
Default Lookup - check the box to make this the default Customer Account Type - ie that set when a new customer is created.
Alert tab - here you can see an alert to be displayed in the left panel where the current customer has this Account Type.

 

Calculation Logic

To determine the current overdue balance:

  1. the payment terms (e.g 30 days) are subtracted from the current date
  2. any unpaid amounts dated prior to this new date are summed to get the overdue balance

The account fee is determined during statement generation.

A non-zero account fee will be returned if:

  • the customer has an account type;
  • there is a non-zero overdue balance for the account fee date (derived from the statement date - Overdue Days);
  • the overdue balance is >=Minimum Balance; and
  • the account fee is greater than Minimum Fee

The account fee is calculated as:

  • overdue balance * Fee Amount/100 if the Account Fee Type is PERCENTAGE; or
  • Fee Amount if the Account Fee Type is FIXED

Customer Alert Type

Complete

This screen allows you to create/view/edit the Customer Alert Type lookups.

The fields are as follows:

Name - the Alert's name
Priority - can be set to High, Medium or Low. If there are too many alerts for the display space, higher priority ones get preference.
Mandatory Alert - if ticked, Customer Alerts with this alert type will be displayed in a popup window, when a customer is selected that has the alert. Users must acknowledge the alert. Acknowledgement is only required once in a 24 hour period.
Colour - used to set the colour used for the alert. You use the mouse to select the colour via the colour and luminosity/hue boxes.
Default - check this box to make this alert the default type
Active - uncheck the box to deactivate the alert type

Customer Communication Reason

Complete

This screen is used to create/view/edit the Customer Communication Reason lookups.

The fields are as follows:

Name the name of the communication reason
Default check the box to make this the default reason
Active uncheck the box to make the reason inactive

Customer Insurance

Complete

This screen is used to create/view/edit the Customer Insurance lookups (used in the Insurance Plan field on the customer information screen).

The fields are as follows:

Name - the name of the Insurance Plan
default - check the box to make this the default Insurance Plan
Active - uncheck the box to deactivate the Insurance Plan

Customer Referral

Complete

This screen is used to create/view/edit the Customer Referral lookups. These are used to set the 'Referred By' values on the customer information screen.

The fields are as follows:

Name - the 'referred by' value
default - check the box to make this the default
Active - uncheck the box to deactivate the referral

Customer Type

Complete

This screen is used to create/view/edit the Customer Type lookups. These are used to set the Categories available on the customer information screen.

The fields are as follows:

Name - the customer type
Active - uncheck the box to deactivate the type

Customer Vet

Complete

This screen is used to create/view/edit the Customer Vet lookups. These are used to set the 'Preferred Vet' values on the customer information screen. Note that there is no relationship between the names set here and the actual names of the vets in the practice - ie in the example below, no check is made to see that there is a Dr Bloggs on staff. This implies that you could have 'Not Dr Bloggs' as an entry.

The fields are as follows:

Name - the 'preferred vet' value
default - check the box to make this the default
Active - uncheck the box to deactivate this entry

Demographic Update

Complete

This screen is used to create/view/edit the Demographic Update lookups. These are used to set what is available under the Update tab on the product information screen. An update is used to change something in the patient record as a result of the use of the product - eg to set the desexed status after a spaying operation.

The fields are as follows:

Name - the name of the update
Expression - the jxpath expression that does the update
Node Name - the name of the node to be used
Active - uncheck the box to deactivate this entry

The following table gives examples including the above:

Name Expression Node
Desex party:setPatientDesexed(.) patient.entity
Deceased party:setPatientInactive(.) patient.entity
DDate openvpms:set(.,"deceasedDate",java.util.Date.new()) patient.entity
     

Diagnosis (VeNom)

Complete

Use this screen to view VeNom (Veterinary Nomenclature) Diagnosis codes.

These are used by patient Problems.

These cannot be edited as they are specified by the VeNom standard.

To add a diagnosis, create a Diagnosis instead.

Diagnosis

Complete

This screen allows you to create/view/edit a Diagnosis.

These are used by patient Problems.

In general, you should only need to create a Diagnosis if there is no equivalent Diagnosis (VeNom).

 

Duration Formats

Complete

This screen is used to create/view/edit the Duration Formats lookups. These are used to set how a patient's age is presented and allows the format to vary as a function of age. Normally only one is needed and it is used to set the values in the 'Patient Age Format' field on the Administration|Organisations|Practice screen.

The fields are as follows:

Name - the name of the format
Active - uncheck the box to deactivate the format
Formats tab - its fields are as follows:
Interval - sets the (inclusive) age (in units of Units) below which this format is to be used (ie less than or equal to 3 years in the above example)
Units - can be years, months, days or weeks
Show Years/Months/Weeks/Days - check the boxes to display the years/months/weeks/days

Note that when adding formats, these can be added in any order. The last entry (999 years) provides the setting for the more than 3 years case.  If no 'Patient Age Format' is set for the Practice, then the formats used are as follows:

Age Shown as
< 7 days  N day(s)
< 90 days  N week(s)
< 23 months  N month(s)
< 2 years  N year(s)
else  N years

If the age is greater than that set for the largest defined interval, then the above table is used to define the format.

Note that no rounding is done. That is, with the default settings, a patient aged 1 year, 11 months will be shown as '1 Year' rather that '2 Years'.

File Name Format

Complete

This screen allows you to create/view/edit a File Name Format.

These are used to format the names of documents generated from a Document Template.

The fields are as follows:

  • Name - the format name
  • Description - a description of the format
  • Expression - the xpath expression to format file names

The expression is provided with:

  • a $file variable. This represents the name of the template
  • the object that the template is being applied to e.g. act.customerAccountChargesInvoice, act.customerAccountPayment, act.patientDocumentLetter, act.customerDocumentForm, act.supplierDocumentAttachment
  • a $patient variable, if a patient is linked to the act
  • a $customer variable, if a customer is linked to the act, or the owner of the patient, if a there is only a patient present
  • a $supplier variable, if a supplier is linked to the act

To ensure that generated file names are valid, any illegal characters such as \, /, :, *, ?, <, >, and | are replaced with underscores.

 

Note that in some cases it is useful/necessary to have different templates for different practice locations. These will have different names (such as Estimate CC and Estimate EIAH), and it may not be desirable for the file name to include the location signature - ie you just want 'Estimate' rather than 'Estimate CC' or 'Estimate EIAH'.

One way to achieve this is to adopt the convention that the template name be formatted as <part1>[!<part2>] - ie something optionally followed by an ! character and more text - eg like one of the following

  1. Estimate!CC
  2. Estimate!EIAH
  3. Estimate

then we can extract the <part1> bit (ie 'Estimate') using the expression:

concat (substring($file,1,number(not(contains($file,'!')))*string-length($file)),
       substring-before($file,'!'), .....)

This works because if there is no ! present (ie case 3 above) then the first argument will be $file (ie 'Estimate'), and the second argument will be an empty string.

In cases 1 & 2 (where there is an ! present) then the first argument will be an empty string and the second the characters up to the !, ie 'Estimate'.

So - for the 'Document name - patient full name - document date' the, the full expression for the File Name format expression is:

concat(substring($file,1,number(not(contains($file,'!')))*string-length($file)),
       substring-before($file,'!'), ' - ', $patient.name, ' ', $customer.lastName, ' - ', date:format(openvpms:get(.,'startTime'), 'd MMM yyyy'))

Macro

Complete

This screen is used to create/view/edit the Macro lookups. These are used to enable the accelerated entry of text in any text field. If you are having problems, see here.

The fields are as follows:

Code - the text that will be replaced. The code must start with a letter or @, and the other characters can be letters or numbers or _. Hence abc, A4b, a_B, a_4, @aBc, and @abc are all valid. Note however that although the case is preserved (ie you can define a macro aBBa), you then cannot have another macro abba. Also if you do create a macro with a mixed case name, eg @aBc then you must invoke it as @aBc - @abc will not find it. It is thus probably best to always use lower case letters. Also take care not to use an actual word as it will expand into text inappropriately, for example bid can transform into twice daily when you may just mean bid. Perhaps end the code in "x" to avoid this mishap. Alternatively you can use @ as a prefix.
Name - the name of the macro. Normally this reflects the text that will be generated.
Description - an optional description. It is sensible to use this to provide a hint to the user as to how the macro is invoked - because the description will be displayed as part of the Macro Select window when the user types Alt-M. A useful convention is as follows:

Case Name Description
simple text expansion same as generated text none unless needed to clarify when used
expression something suitable, eg
Twice a Day
usage instructions such as the following:
eg: 4@bid -> Take 4 Tablet(s) Twice a Day
data retrieval something suitable, eg
Customer Name
none unless needed to clarify when used

Active - uncheck the box to deactivate the macro
Expression - the replacement text or an expression (see below). For replacement text you have a 4,999 character limit and can format with leading spaces and paragraphs. The text should be enclosed in double quotes. You can also enclose with single quotes, but then if you use the single quote character as an apostrophe in the text, the macro will fail. For example, if you want to have text such as today's temperature, the single quote in today's will cause the macro to fail if the whole of the text is not enclosed in double-quotes.

The Expression can contain more that just text - it can incorporate the preceding number, it can invoke another macro, and it can perform a lookup.  You can also use the concat function to concatenate things, and other XPath functions.

If you do use concat, then if you need the generated text to be on separate lines, you just split the line in the middle of a string like the following:

concat('This is the first part',' and this is the end of line one
This is the second line') 

and this will expand to two lines:

This is the first part and this is the end of line one
This is the second line 

Alternatively, you can use the $nl variable as follows:

 concat('This is the first line',$nl,'This is line 2',$nl,'This is line 3') 

$number: If you define a macro, say @hrs to have the expression concat('every ',$number,' hours') then when you enter 6@hrs, it will be replaced by "every 6 hours".  That is, the number preceding the macro code ('@hrs' in this case) can be accessed using the special variable $number. As well as simple integers (like 6 or 10), you can use decimals (like 2.5) or fractions (like 1/4).

You cannot pass more than one number into the macro, but you can use the following trick. You can use a decimal and then cut it up using an expression like the following:

concat('Part1=',substring-before(string($number),'.'),' Part2=',substring-after(string($number),'.')) 

If a macro say @parts is defined with the above expression, then 12.34@parts will expand to 'Part1=12 Part2=34'.

You can even use three parts using the expression:

concat('Part1=',substring-before(string($number),'.'),' Part2=',substring-before(substring-after(string($number),'.'),'.'),' Part3=',substring-after(substring-after(string($number),'.'),'.')) 

Now 123.567.789@parts will expand into 'Part1=123 Part2=456 Part3=789'. That is, although we are passing in a number with an illegal format, we can cut it into parts.

The above trick is useful if you a building a macro to generate something like 'Take x mls y times a day for z days'.

If you prefer, you can use / as the separator rather than the decimal point by changing '.' in the above expressions to '/'. You then invoke the macro as 123/456/789@parts.

Lookups: If you define a macro, say dispensingUnits, to have the expression openvpms:lookup(openvpms:get(.,'product.entity'), 'dispensingUnits')
this will be used to look up the dispensing units for the current product. Other useful examples are:
openvpms:lookup(openvpms:get(.,'product.entity'), 'dispensingVerb') and
openvpms:lookup(openvpms:get(.,'product.entity'), 'sellingUnits')

Obviously, you need a understanding of the archetypes to make extensive use of this facility.

Macros in Macros: We can make use of the above two facilities by defining a macro, say @oid with the expression:

  concat($dispensingVerb, ' ', $number, ' ', $dispensingUnits, '(s) Once Daily')

Here we are invoking two other macros, dispensingVerb and dispensingUnits, and also making use of the $number.  Thus 4@oid will expand to something like "Give 4 Tablet(s) Once Daily"

Note that invoked macro (eg 'dispensingVerb') MUST have a name that starts with a letter, otherwise the expansion will not work. (What will happen is that the invoked macro will be immediately expanded instead of delaying its expansion until you invoke the outer macro.)

If you do really need to invoke a macro starting with @, then you need to 'hide' the macro by splitting it as in the following example:

macro:eval(concat('@', 'lea'))

Here we have hidden the macro code from expansion using concat, and then evaluated it with the macro:eval() function. If in the earlier example, the dispensing macros were in fact @dispensingVerb and @dispensingUnits, then we could write the macro as follows:

concat(macro:eval(concat('@','dispensingVerb')),' ',$number, ' ',macro:eval(concat('@','dispensingUnits')),'(s) Once Daily') 

 

JXPath Extension Functions

Macro expressions are JXPath expressions and may therefore use the JXPath Extension Functions.

Macro Variables

Within the OpenVPMS web application, there a number of pre-defined variables that can be used in macros.

For example, the $patient variable refers to the current selected patient. If no patient is selected, then the variable is undefined.

The standard JXPath functions can be used to access the variable fields. e.g:

  • openvpms:get($patient, "name") - gets the current patient name
  • openvpms:lookup($customer, "title") - gets the current customer's title (as opposed to the title code)

For convenience, the variables support the archetype dot notation, so the above can be simplified to:

  • $patient.name
  • $customer.title

Note: these variables are not available in reports.

The following variables are available:

Variable Archetype(s) Description Example
$patient party.patientpet The current patient $patient.name
$customer party.customer* The current customer party:getBillingAddress($customer)
$practice party.organisationPractice The current practice party:getCorrespondenceAddress($practice)
$location party.organisationLocation The current practice location party:getTelephone($location)
$stockLocation party.organisationStockLocation The current stock location $stockLocation.description
$supplier party.supplier* The current supplier $supplier.notes
$product product.* The current product $product.label
$deposit party.organisationDeposit The current deposit account $deposit.accountNumber
$till party.organisationTill The current till date:formatDate($till.lastCleared)
$clinician security.user The current clinician $clinician.name
$user security.user The current user $user.id
$invoice act.customerAccountChargesInvoice

The current invoice. Only valid:

  • if in the Check-In, Consult, or Checkout workflows
  • if an invoice is selected in the charges workspace
openvpms:get($invoice, "amount")
$visit act.patientClinicalEvent

The visit for the current patient. Only valid:

  • if in the Check-In, Consult, or Checkout workflows
  • if a patient visit is selected
$visit.reason
$appointment act.customerAppointment The current appointment. Only valid:
  • if an appointment is selected in Workflow - Scheduling
  • in the Check-In, Consult, or Checkout workflows, when launched from an appointment
See $appointment
$task act.customerTask The current task. Only valid:
  • if a task is selected in Workflow - Work Lists
  • in the Check-In workflow, if a task was created
  • in the Check-In, Consult, or Checkout workflows, when launched from a task

See $task

 

Sample Expressions

$appointment

concat(expr:if(boolean($appointment.patient), concat($appointment.patient.entity.name, "'s"), 'Your'), 
       ' appointment at ', $appointment.schedule.entity.location.target.name, ' is confirmed for ', 
       date:formatDate($appointment.startTime, 'short'), ' @ ', date:formatTime($appointment.startTime, 'short'), $nl, 
       'Call us on ', party:getTelephone($appointment.schedule.entity.location.target), 
       ' if you need to change the appointment')

$task

concat('Customer: ', $task.customer.entity.name, $nl,
       'Patient: ', expr:if(boolean($task.patient), $task.patient.entity.name, 'None'), $nl,
       'Work List: ', $task.worklist.entity.name, $nl,
       'Type: ', $task.taskType.entity.name, $nl,
       'Started: ', date:formatDateTime($task.startTime, 'short'),  $nl,
       'Completed: ', date:formatDateTime($task.endTime, 'short'), $nl,
       'Status: ', $task.status)

Troubleshooting

If your macro does not expand, then the following may help:

Symptom Problem Action
The macro code entered remains on screen No macro with entered code Use Alt-M to see list of available macros. If what you entered is there, then see below.
as above Error in macro expansion Check the openvpms log and fix the error in your macro.
Code disappears but no new text appears Macro has generated too much text Press the Apply button, you should get an error message confirming that the text has exceeded the available space. You will need to change the macro to generate less text.

Message Reason

Complete

This screen is used to create/view/edit the Message Reason lookups. These are used to set the Reasons available on the message create/edit screen.

The fields are as follows:

Name - the message reason
default - check the box to to make this the default reason

Message Status

Complete

This screen is used to create/view/edit the Message Status lookups. These are used to set the Statuses available on the message create/edit screen.

The fields are as follows:

Name - the message status
default - check the box to to make this the default status

Patient Alert Class

Complete

This screen allows you to create/view/edit the details for the Patient Alert Classes. These are used only to define the available Classes for Patient Alert Types. Two are present by default, 'Aggression' and 'Allergy'.

The fields are as follows:

Name - the Alert's name
Default - check this box to make this alert the default class
Active - uncheck the box to deactivate the alert class

 

Person Title

Complete

This screen is used to create/view/edit the Title lookups. These are used to set the Titles available on the customer create/edit screen.

The fields are as follows:

Name - the title
default - check the box to to make this the default title
Active - uncheck the box to deactivate the title

Practice Type

Complete

This screen is used to create/view/edit the Practice Type lookups. These are used to set the Categories available on the Supplier-Veterinary Practice create/edit screen.

The fields are as follows:

Name - the practice type
Active - uncheck the box to deactivate the type

Presenting Complaint (VeNom)

Complete

Use this screen to view VeNom (Veterinary Nomenclature) Presenting Complaint codes.

These are used by patient Problems.

These cannot be edited as they are specified by the VeNom standard.

To add a presenting complaint, create a Presenting Complaint instead.

Presenting Complaint

Complete

This screen allows you to create/view/edit a Presenting Complaint.

These are used by patient Problems.

In general, you should only need to create a Presenting Complaint if there is no equivalent Presenting Complaint (VeNom).

Confirm Delete

Complete

When you press the Delete button on the Administration|Lookups screen, a confirmation window will appear.

If you press OK to confirm the delete, then, if the Lookup is not in use, it will be deleted. Otherwise an error window will appear with the text:

Cannot delete lookup. It is being used.
To delete the lookup, select 'Replace' to replace it with another lookup.

Click OK to dismiss the error window and use the Replace button to replace the Lookup.

Confirm New

Complete

This is the New Lookup confirmation window. Select the type of Lookup to be created and then use OK to continue or Cancel to abort. Note that if you have selected a type on the Lookup screen, then this will already be selected in this window (even if it is not showing in the list of types) - thus you can normally simply click OK to proceed.

Confirm Replace

Complete

This is the Replace Lookup confirmation window.  As shown below it allows you to confirm the Lookup you are about to replace and choose what to replace it with.

Notes:

  1. You must choose a replacement, ie you cannot leave it set as 'None' as shown above.
  2. If you check the Delete Lookup? box, then the Lookup you are replacing will be deleted when the replacement is complete. ie in the above case, the Product Group Lookup 'Procedures' would be deleted.

Pricing Group

Complete

This screen is used to create/view/edit Pricing Group lookups. See Concepts|Pricing for details.

These are used to classify product prices to enable different pricing between Practice Locations.

Note that since only one Pricing Group can be assigned to each Practice Location, you will normally have fewer Pricing Groups than locations.

Name - the name of the Pricing Group
Default - check the box to make this the default Pricing Group
Active - uncheck the box to deactivate the Pricing Group

Product Group

Complete

This screen is used to create/view/edit the Product Group lookups. These are used to set the Classifications available on the Product (merchandise, medication and service) create/edit screens.
Note that the Classifications available include both the Product Groups and the Product Income Types.

The fields are as follows:

Name - the group
Active - uncheck the box to deactivate the group

Product Income Type

Complete

This screen is used to create/view/edit the Product Income Type lookups. These are used to set the Classifications available on the Product (merchandise, medication and service) create/edit screens.
Note that the Classifications available include both the Product Income Types and the Product Groups.

The fields are as follows:

Name - the income type
Active - uncheck the box to deactivate the income type

Reminder Group

Complete

This screen is used to create/view/edit the Reminder Group lookups. These are used to set the Groups available on the Administration|Types|Reminders create/edit screen.

The fields are as follows:

Name - the group name
Description - an optional description used to clarify the purpose of the group
Active - uncheck the box to deactivate the reminder group

Report Macros

Complete

This screen is used to create/view/edit the Report Macro lookups. These are used to:

  • enable the accelerated entry of text in any text field by running a report.
  • generate email text.
  • generate text in documents using macro:eval. See below.

If you are having problems, see here.

The fields are the same as for normal Macros (see Lookups|Macros) but with a different usage for the Expression field and an additional Report field.

Description - it is sensible to use a description like the above to emphasise that the macro will generate a text version of the report (and not the actual fully formatted report)

Expression - this is used to pass the data source to the report and we need to access the thing that we are going to report on. This is done using of the JXPath Extension Functions - specifically one of the party:get*() series. As you can see in the above example the expression is getting the last visit for the current patient.
Note: You need to be careful with the syntax used in the Expression. Specifically, you can only use the $xxxx argument format ($patient in the above screen shot) if the ReportMacro is to be invoked directly by the user.  If the ReportMacro is to be invoked from say an Open Office document by using the macro:eval function, then you cannot use the $xxxx argument format. Instead, simply use a period - ie party:getPatientVisit(.) and in the Open Office document the user field should be like: [macro:eval('@referral',openvpms:get(.,'patient.entity'))] - here the second argument is passing the patient entity needed by the macro expression.

Report - the Report to run. See below.
The above macro runs the Referral Letter report, using the current patient's most recent Visit. Note that if there is no current patient, then the macro simply will not expand - i.e. the user will be left with the '@referral' that they typed.

Reports

Report macros can use:

  • OpenOffice documents
  • Microsoft Word documents
  • JasperReports templates

 OpenOffice and Word documents

If you are using OpenOffice or Word documents, you may want to do some conditional text handling (ie if sex=male use 'he', if female use 'she', else use 'it'.  This is possible - see here for OpenOffice, here for MS Word.

JasperReports templates

When using JasperReports templates, there are a number of issues to be aware of:

  • a fixed size font should be used
  • special properties need to be defined to indicate to JasperReports how to divide the report into a grid
  • fields should start on grid boundaries to avoid text being excluded

The easiest approach is to:

  • define all dimensions in pixels
  • set the character width and height to a round number
  • ensure the page height and width is divisible by the character size

To set the character size to 10x10 pixels in iReport:

  1. right click on the report in Report Inspector
  2. select Properties
  3. scroll down to Properties in the displayed table
  4. click on the elipsis; this will display a dialog containing the defined properties.
  5. add property net.sf.jasperreports.export.text.character.width with value 10
  6. add property net.sf.jasperreports.export.text.character.height with value 10

Set the page width and height to a multiple of the character width and height. E.g. 500x500. Note also:

  • The 'Stretch with overflow' setting is ignored with when using this Text Export facility, hence all the text needs to fit in the field.
  • With a character width of 10, and a page width of 500 the maximum number of characters in a field will be 500/10=50.  If you need more than this increase the page width to say 2000 and decrease the character width to 5 which will then allow 400 characters.
  • Set the height of your fields to the same as text.character.height setting - eg 10 px
  • Use a small font (say 5) so you can see the text in the fields

See also JasperReports - Text Export Sample

Using macro:eval

Report macros can be run in documents using the macro:eval function.

To access the document (e.g. Patient Letter or Form) that launched them:

  • use '.' without quotes as the Expression
  • use either:
    • macro:eval('<code>') or
    • macro:eval('<code>', /)

to run the macro, where <code> is the report macro code.
 

Report Type

Complete

This screen is used to create/view/edit the Report Type lookups. These are used to set the Report Types available for document templates.

The fields are as follows:

Name - the report type
Default - check the box if this is to be the default report type
Active - uncheck the box to deactivate the type

Species (IDEXX)

Complete

This screen is used to create/view/edit the details of the IDEXX Species lookups.

These are used by the HL7 interface when sending messages to IDEXX. A mapping needs to be established between OpenVPMS and IDEXX species lookups.

 

The fields are as follows:

Species - the IDEXX species code
Name - the name of the species
Active - uncheck the box to deactivate the species
 

Species

Complete

This screen is used to create/view/edit the details of the Species lookups.  These determine what patient species are available.

The fields are as follows:

Name - the name of the species
default - check the box to make this the default species
Active - uncheck the box to deactivate the species
Custom Fields - normally this is left at 'None'. The system supports the use of custom fields. To make use of this feature, you need to copy/modify the entity.customPatientExample archetype that is shipped with the system to make archetypes having names matching entity.customPatient* (eg entity.customPatientLastVaccination). Note that if you do make use of this facility, then:
a) for existing patients, the new custom field tab will not appear until you edit the patient, but from then on it will appear for that patient
b) when you are creating a new patient, the custom tab will not appear until you set the species (because the custom field is species specific)

Breeds tab - this is used to set/display the Breeds belonging to the species

Mapping tab - this is used to map breeds to those used in external systems.

State

Complete

This screen is used to create/view/edit the details of the State lookups. 

The fields are as follows:

Code - the code for the state. It is conventional to use the standard state codes, but you can in fact use any upper case letter string (eg VICTORIA in place of the standard VIC). Note that once you have created the State Lookup, you cannot change the Code - you have to create a new one, and then use the Replace mechanism.
Name - the name of the state
Default - check the box to make this the default state
Active - uncheck the box to deactivate the state

Suburbs tab - this is used to display and set the suburbs that are part of the state - use Lookup|Suburb to create these
 

Suburb

Complete

This screen is used to create/view/edit the details of the Suburb lookups. 

The fields are as follows:

Name - the name of the suburb
Post Code - the post or zip code
Default - check the box to make this the default suburb
Active - uncheck the box to deactivate the suburb
State - this is used to display and set the state - use Lookup|State to create this

Supplier Account Type

Complete

This screen is used to create/view/edit the Supplier Account Type lookups. These are used to set the Account Types available on the Supplier (Organisation and Person) create/edit screens.

The fields are as follows:

Name - the account type
Payment Terms and Payment Terms Units - the supplier's payment terms
Active - uncheck the box to deactive the account type

Note that the system contains no automatic payment processing system which would make use of the Payment Terms fields to pay only invoices that are due (and this functionality is usually handled by the accounting system).  However, it is quite possible to build a supplier payments due report that would use these fields.

Supplier Type

Complete

This screen is used to create/view/edit the Supplier Type lookups. These are used to set the Categories available on the Supplier (Organisation and Representative) create/edit screen.

The fields are as follows:

Name - the supplier type
Active - uncheck the box to deactive the supplier type

Tax Type

Complete

This screen is used to create/view/edit the Tax Type lookups. These set the available taxes on the Taxes tabs for Practices, Practice Locations, Product Types, Products, and Customers.

The fields are as follows:

Name - the tax name (normally its short name such as GST or VAT)
Description - the full name of the tax
Percentage - the tax rate as a percentage
Active - uncheck the box to deactive the tax type
Tax Scheme - can be set to None, Goods and services tax, or Value added tax.
Tax Category - can be set to None, Standard rated, or Zero rated.

The latter two fields (Tax Scheme and Category) are used only are used to map ESCI (e-Supply Chain Interface) taxes to their OpenVPMS equivalents.  See the ESCI documentation for more details: http://www.openvpms.org/documentation/esci  If you are not using ESCI, then these two can be left at their defaults, ie None.

 

Units of Measure

Complete

This screen is used to create/view/edit the Units of Measure lookups. These are used to set the units available for the Selling, Dispensing and Packaging Units on the Product Information screens.

The fields are as follows:

Name - the name of the Unit of Measure (eg Unit, Grams, Pounds, Box, Syringe, Pack of 10)
Printed Name - this is used to provide a short abbreviation that can be used when displaying quantities on invoices, credits, counter-sales and statements. See also below.
Unit Code - this is used by the ESCI facility (see below).  If you are not using ESCI, then you can happily leave this set at its default of 'each'. 
default - check this box to make this the default Unit of Measure
Active - uncheck the box to deactive the Unit of Measure

 

The Printed Name field can hold a maximum of 5 characters.  However the standard invoices etc in the release package allow space for 3 m characters, ie 'mmm'. Note that in the majority of cases you can leave this field empty and only set it where needed. Thus although
    Hills Feline D/D Venison Can 5.5oz   10
makes sense, you probably do want
    Atropine Injection                          0.25 ml

It is probably worth pointing out that the standard convention is that unit abbreviations should be singular (ie ml rather than mls).

The Unit Code is used by the ESCI facility to map UN/CEFACT Unit Codes* to the practice equivalents. The list contents are defined within the archetype lookup.uom and can only be added to by modifying the archetype. Note that OpenVPMS only provides a subset of the available codes, so if a required code is missing, it can be added but must be present in the list provided by http://docs.oasis-open.org/ubl/cs-UBL-2.0/cl/gc/cefact/UnitOfMeasureCode...

* UN/CEFACT Recommendation N°. 20 - Codes for Units of Measure Used in International Trade - http://www.unece.org/fileadmin/DAM/cefact/recommendations/rec20/rec20.zip

Units of Measure Group

Complete

This facility is not used in the current system. It is reserved for future use to categorise units of measure in order to set a practice wide default for weight units.

User Name Format

Complete

This screen is used to create, view or edit a User Name Format.

These are used to format user names in reports and documents.

The fields are as follows:

  • Name - the format name
  • Description - a description of the format
  • Expression - the xpath expression to format user names

The expression is provided with the following variables:

  • $username - the user's login name
  • $title - the user's title
  • $firstName - the user's first name
  • $lastName - the user's last name
  • $qualifications - the user's qualifications
  • $name - the user's name (ie the field labeled 'Full Name' on the Administration|Users|Create/edit/view screen)
  • $description - the user's description

User Type

Complete

This screen is used to create/view/edit the User Type lookups. These are used to set the Categories available on the Administrator|Users create/edit screen.

The system comes with four user Types, Administrator, Clinician, Nurse and Receptionist. The first two are important for the functioning of the system. Users with Type Administrator, get will have the Administration workspace available. Only users with Type Clinician can be selected as the Clinician in places where the system allows or requires the clinician to be entered.

The fields are as follows:

Name - the user type
Active - uncheck the box to deactive the user type

Veterinary Speciality

Complete

This screen is used to create/view/edit the Veterinary Speciality lookups. These are used to set the Categories available on the Supplier-Veterinarian create/edit screen.

The fields are as follows:

Name - the speciality
Active - uncheck the box to deactivate the speciality

Visit Reason (VeNom)

Complete

Use this screen to view VeNom (Veterinary Nomenclature) Visit Reason codes.

These are used to classify Appointments and Visits.

 

These cannot be edited as they are specified by the VeNom standard.

To add a visit reason, create a Visit Reason instead.

Visit Reason

Complete

This screen is used to create/view/edit the details of each Visit Reason.

The fields are as follows:

Name - the Visit Reason
Default - check the box to make this the default reason for appointments and visits
 

Laboratories

Incomplete document

The Administration - Laboratories screen provides support to configure laboratory plugins and their associated data including:

The buttons are as follows:

New create and edit a new instance of the selected type
View view the selected instance
Edit edit the selected instance
Delete delete the selected instance
Synchronise Data only applicable when the selected instance is a Laboratory.
Adds, updates or deactivates Devices, Investigation Types and Tests  managed by the Laboratory Service.

 

Laboratory

Complete

A Laboratory describes an internal or external service that performs laboratory tests.

Laboratories are provider specific, but in general include the following:

  • Name
the name of the Laboratory
  • Description
an optional description of the Laboratory
  • Active
uncheck the box to deactivate the Laboratory
  • Locations

the Practice Locations that this laboratory may be used at.
If there are no Practice Locations assigned, this laboratory may be used at any Practice Location

  • Mappings
describes data mapping requirements between OpenVPMS and the Laboratory.
E.g, this may be used to map OpenVPMS species codes to those of the Laboratory.

 

Laboratory Device

Complete

A Laboratory Device describes hardware or software used to perform Laboratory Tests.
These are typically automatically created by Laboratory services when synchronising data.

A Laboratory may:

  • require a Laboratory Device be specified in order to perform a test
  • automatically choose from the available devices, if no Laboratory Device is specified
  • not require any Laboratory Device

The fields are as follows:

  • Name
the name of Laboratory Device
  • Description
an optional description of the Laboratory Device
  • Device Id
a unique identifier for the device, issued by the Laboratory
  • Active
uncheck the box to deactivate the Laboratory Device
  • Laboratory
the Laboratory that this device is managed by
  • Locations

the Practice Locations that this device may be used at.
If there are no Practice Locations assigned, this device may be used at any Practice Location.

In multi-location practices, Laboratory Devices that represent physical hardware should be assigned the Practice Location where they are situated.

 

Investigation Type

Complete

Investigation Types describe how patient Investigations are performed.

These are used:

The fields are as follows:

  • Name
the name of Investigation Type
  • Description
an optional description of the Investigation Type
  • Active
uncheck the box to deactivate the Investigation Type
  • Laboratory
the Laboratory, if the Investigation is ordered automatically
  • Template
optional Document Template. 
If one is specified then it defines the document that will be printed when the investigation is initiated.  It is normally some sort of form that can be used to request the required test(s)
  • Supplier
optional Supplier. 
If one is specified then will be displayed on the Workflow - Investigations screen.
  • Devices
the Laboratory Devices that may perform tests for this Investigation Type.
These are specified by the associated Laboratory

 

If the Investigation Type has been created by a Laboratory, then the Name, Description, Laboratory and Devices cannot be changed.

 

 

Laboratory Test

Complete

Laboratory Tests describe a test that may be ordered via laboratory.

The fields are as follows:

  • Name
the name of Laboratory Test
  • Description
an optional description of the test
  • Code
a unique code for the test, issued by a Laboratory
  • Active
uncheck the box to deactivate the Laboratory Test
  • Turnaround
optional text describing the turnaround for the text
  • Investigation Type
the Investigation Type that determines how the test will be performed i.e. which Laboratory provides the test, and which Laboratory Devices can be used to perform it
  • Group
determines if the Laboratory Test can be grouped with other tests on the same Investigation.
  • Use Device
determines if a Laboratory Device must be specified when performing the test
  • Specimen
optional text describing the specimen collection requirements

 

If the Laboratory Test was created by a Laboratory, all fields will be read-only, with the exception of the Active field.

 

ESCI

Complete

The Administration - ESCI screen provides support to:

  • View and Edit ESCI suppliers
  • Manage inboxes

The buttons are as follows:

  • View
view the selected Supplier
  • Edit
edit the selected Supplier
  • Check Inbox
check the inbox for documents from the selected supplier at the Stock Location, and process them.
  • Check All Inboxes 
check the inboxes for documents from all ESCI suppliers
  • Manage Inbox
manage the ESCI inbox for the selected Supplier and Stock Location

Inboxes

An Inbox is a service provided by an ESCI supplier that that contains responses to OpenVPMS orders for a particular Stock Location.

These are stored as documents that conform to the UBL specification.

An Inbox may contain two types of documents:

  • OrderResponseSimple - a response to an OpenVPMS order, indicating if it has been accepted or rejected
  • Invoice - an invoice for an OpenVPMS order. OpenVPMS uses these to create Delivery records.

OpenVPMS processes the responses sequentially, acknowledging them as they are successfully processed.
If a response cannot be processed due to an error, no other responses in the Inbox can be processed until the error is resolved.
 

Inbox

The Inbox window displays pending documents from the selected Supplier and Stock Location and enables them to be managed.

This can be used to:

  • selectively process documents, ignoring errors in Invoice documents that refer to non-existent orders
  • administratively delete a document that cannot be processed

This provides the following the functions:

  • Refresh  
refresh the list of pending documents.
  • Process
process the selected document.
  • Documents can be processed out of order, but this is not recommended as it can lead to errors.
  • If an Invoice cannot be processed, it can be retried with errors caused by incorrect order references being ignored.
  • Delete
delete the selected document.
This should only be used where a document cannot be processed due to some unrecoverable error.

 

HL7

Complete

The Administration - HL7 screen enables HL7 support to be configured.

This includes:

  • Services - the HL7 services that OpenVPMS connects to
  • Connectors - these determine how OpenVPMS connects to the services
  • Mappings - these determine how HL7 messages are constructed

Connectors

Complete

The Connectors screen supports viewing and editing HL7 connectors.

Connectors may be:

  • Senders - used to send HL7 messages from OpenVPMS to an external system
  • Receivers - used to receive HL7 messages from an external system

The buttons are as follows:

New create a new Connector
Edit edit the selected Connector
Delete delete the selected Connector - a confirmation window will appear
Messages displays HL7 messages sent or received via the selected Connector
Stop stops messaging for a Sender. Messages will be queued until the Sender is started.
Start starts messaging for a Sender
   

Creating a new HL7 Connector

The New button is used to create a new HL7 Connector:

The available Connectors are:

HL7 MLLP Receiver used to receive HL7 messages from an external application
HL7 MLLP Sender used to send HL7 messages to an external application

HL7 MLLP Receiver

Complete

This is the create/edit/view screen for HL7 MLLP Receivers. These are responsible for receiving HL7 messages using the MLLP protocol over TCP/IP, from external applications.

The fields are as follows:

Id the receiver identifier
Name the receiver name
Active uncheck this box to deactivate the receiver. Deactivating the receiver prevents HL7 messages being received.
Port The TCP/IP port to listen on
Sending Application Uniquely identifies the sending application among all other applications within the network.
Sending Facility Identifies the sending application facility.
Receiving Application Uniquely identifies the receiving application among all other applications within the network.
Receiving Facility Identifies the receiving application facility.
Mapping The HL7 Mapping to use when creating messages.

HL7 MLLP Sender

Complete

This is the create/edit/view screen for HL7 MLLP Senders. These are responsible for sending HL7 messages using the MLLP protocol over TCP/IP, to external applications.

The fields are as follows:

Id the sender identifier
Name the sender name
Active uncheck this box to deactivate the sender. Deactivating the sender prevents HL7 messages being sent.
Host The host to connect to
Port The port to connect to
Sending Application Uniquely identifies the sending application among all other applications within the network.
Sending Facility Identifies the sending application facility.
Receiving Application Uniquely identifies the receiving application among all other applications within the network.
Receiving Facility Identifies the receiving application facility.
Response Timeout The maximum time to wait for responses, in seconds.
Retry Interval The time to wait after an error occurs, before resubmitting a message.
Mapping The HL7 Mapping to use when creating messages.

Messages

Complete

The Messages window displays HL7 messages sent or received via a HL7 Connector.

The buttons are as follows:

Find Find all messages matching the criteria. Also press this to refresh the display.
OK Closes the window
Resubmit

Resubmits a message to an external application. Only applies to:

  • messages with Error status; and
  • Sender connectors.
Dequeue

This is used to prevent a message from being sent. Once dequeued, the message cannot be re-queued.

Only applies to Sender connectors.

 

Mappings

Complete

The Mappings screen supports viewing and editing HL7 mappings.

These determine how HL7 messages are populated, and the messages that are sent.

 

The buttons are as follows:

New create a new HL7 Mapping
Edit edit the selected HL7 Mapping
Delete delete the selected HL7 Mapping - a confirmation window will appear
Export Lookup Mapping export mappings between lookups
Import Lookup Mapping import mappings between lookups

Creating a Mapping

The New button is used to create a new HL7 Mapping:

The Cubex HL7 Mapping and IDEXX HL7 Mapping are pre-configured mappings for the Cubex pharmacy service and IDEXX laboratory service, respectively.

The HL7 Mapping is a generic mapping.

Select OK to create the selected mapping.

Lookup Mappings

Some HL7 applications require OpenVPMS lookups to be mapped to their format. This is supported by creating a relationship between the OpenVPMS lookup and the application specific version.

From OpenVPMS 1.9, mapping of Species is supported. For convenience, these mappings can be exported to CSV (comma-separated values), edited in a spreadsheet, and then re-imported.

Exporting Mappings

The Export Lookup Mapping button is used to export mappings to CSV. This displays a popup window:

Clicking OK generates a CSV containing the current mapping between the selected lookup archetypes.

If no mapping has been established, the file will look like:

Map From Type Map From Code Map From Name Map To Type Map To Code Map To Name
lookup.species AVIAN Avian lookup.speciesIDEXX    
lookup.species BOVINE Bovine lookup.speciesIDEXX    
lookup.species CAMELID Camelid lookup.speciesIDEXX    
lookup.species CANINE Canine lookup.speciesIDEXX    
lookup.species CAPRINE Caprine lookup.speciesIDEXX    
lookup.species CAVIES Cavies lookup.speciesIDEXX    
lookup.species CERVIDAE Cervidae lookup.speciesIDEXX    
lookup.species EQUINE Equine lookup.speciesIDEXX    
lookup.species FELINE Feline lookup.speciesIDEXX    
lookup.species LAPINE Lapine lookup.speciesIDEXX    
lookup.species MURINE Murine lookup.speciesIDEXX    
lookup.species OTHER Other lookup.speciesIDEXX    
lookup.species OVINE Ovine lookup.speciesIDEXX    
lookup.species PISCINE Piscine lookup.speciesIDEXX    
lookup.species PORCINE Porcine lookup.speciesIDEXX    

Each column with blanks needs to be filled out. If no mapping exists, the row should be deleted.

Importing Mappings

The Import Lookup Mapping button is used to import mappings from CSV. This displays a popup window to upload the CSV file:

Click Browse to select the CSV file.

Click Send to upload the file and import it.

A message will be displayed if the file was imported successfully.

Lookup Mapping Import Errors

If errors were detected in the import, a summary will be displayed:

Correct these, and re-import until no errors are reported.

Cubex HL7 Mapping

Complete

This is the screen used to create and edit HL7 mappings for the Cubex HL7 pharmacy service.

The Cubex mapping is pre-configured, with most fields read-only. The editable fields are:

Name The mapping name.
Description The mapping description.
Active Determines if the mapping is active.

HL7 Mapping

Complete

This is the screen used to create and edit generic HL7 mappings.

The fields are as follows:

Id Uniquely identifies the mapping, or -1 if the mapping is unsaved.
Name The mapping name.
Description The mapping description.
Active Determines if the mapping is active.
Send Admit/Discharge/Transfer Determines if HL7 ADT (Admit/Discharge/Transfer) messages should be sent. If unticked, the Send Update Patient and Send Cancel Admit options are ignored.
Send Update Patient (ADT A08) Determines if ADT A08 messages are sent when a patient is updated, or its weight changes.
Send Cancel Admit (ADT A11) Determines if ADT A11 messages are sent. If unticked,  ADT A03 (Patient Discharge) messages will be sent instead.
Set PID-3 If ticked, the patient identifier will be populated in the PID-3 field.
Set PID-2 If ticked, the patient identifier will be populated in the PID-2 field.
Sex: Male The code to use for male patients.
Sex: Male - desexed The code to use for desexed male patients.
Sex: Female The code to use for female patients.
Sex: Female - desexed The code to use for desexed female patients.
Sex: Unkown The code to use if the patient sex is unknown.
Species Mapping

The species mapping lookup. If unset, no mapping is performed.

Note that if set, then the patient breed will not be supplied in the PID-36 as breed mapping is not supported.

Unmapped Species The code to use if no species mapping exists.
Include Milliseconds If ticked, date/time fields will include milliseconds.
Include Timezone If ticked, date/time fields will include timezones.

 

IDEXX HL7 Mapping

Complete

This is the screen used to create and edit HL7 mappings for the IDEXX HL7 laboratory service.

The IDEXX mapping is pre-configured, with most fields read-only. The editable fields are:

Name The mapping name.
Description The mapping description.
Active Determines if the mapping is active.
Send Admit/Discharge/Transfer Determines if HL7 ADT (Admit/Discharge/Transfer) messages should be sent. These are not required to submit orders to IDEXX, but update the Census List when patients are checked in and out.

Note that a mapping between the OpenVPMS lookup.species and IDEXX lookup.speciesIDEXX will need to be established in order for species codes to be sent correctly. This can be done via Administration - Lookups, or using the Lookup Mappings support

 

 

   
   
   

Services

Complete

The Services screen supports viewing and editing HL7 services.

The buttons are as follows:

  • New

create a new HL7 Service or test

  • Edit
edit the selected service
  • Delete
delete the selected service - a confirmation window will appear

Creating a new HL7 Service

The New button is used to create a new HL7 Service or Test:

sent orders for patient Investigations, for a single Practice Location
groups multiple HL7 Laboratory services
describes a test that can be submitted to an HL7 Laboratory
sent patient admission, discharge and update events
sent pharmacy orders, for a single Practice Location
groups multiple Pharmacy services

HL7 Laboratory

Complete

This is the create/edit/view screen for HL7 Laboratory services.

These are responsible for:

  • submitting orders for patient Investigations to an external HL7 laboratory, during invoicing
  • generating Laboratory Returns and when the laboratory cancels an order.

The fields are as follows:

Id the Laboratory identifier
Name the Laboratory name
Description the Laboratory description
Active uncheck this box to deactivate the Laboratory. Deactivating the Laboratory prevents orders being placed and cancellation messages received.
Order Connector the connector used to submit orders to the Laboratory.
Cancel Connector the connector used to receive cancellation messages from the Laboratory.
Location specifies the Practice Location that this Laboratory is used for.
User specifies the user that Laboratory Returns will be created with.

HL7 Messages

For the messages supported by an HL7 Laboratory see:

HL7 Laboratory Test

Complete

An HL7 Laboratory Test is used to order tests via an HL7 Laboratory.

The fields are as follows:

  • Name
the name of the test
  • Description
an optional description of the test
  • Universal Service Identifier
the identifier for the test, issued by the laboratory
  • Active
uncheck the box to deactivate the Laboratory Test
  • Investigation Type
the Investigation Type that determines which HL7 Laboratory to use.

Laboratory Service Group

Complete

A Laboratory Group is used to group multiple HL7 Laboratory services in multi-location practices. An Investigation Type uses the Laboratory Group.

When invoicing a investigation linked to a Laboratory Group, the current practice location determines which Laboratory is selected to order the investigation.

Patient Event Service

Complete

A Patient Event Service is an HL7 service that notifies an external application of patient events using HL7 messages.

The fields are as follows:

Id the service identifier
Name the service name
Description the service description
Active uncheck this box to deactivate the service. Deactivating the service prevents HL7 messages being sent.
Connector the HL7 connector used to send messages to the external application
Location the practice location that this service will send messages for

HL7 Messages

For a list of messages and their triggers, see the HL7 Patient Administration Messages.

Pharmacy

Complete

This is the create/edit/view screen for HL7 Pharmacy services.

These are responsible for:

  • submitting orders for Medication and Merchandise products to an external pharmacy, during invoicing
  • generating Pharmacy Orders and Returns when the pharmacy dispenses products.

The fields are as follows:

Id the Pharmacy identifier
Name the Pharmacy name
Description the Pharmacy description
Active uncheck this box to deactivate the Pharmacy. Deactivating the Pharmacy prevents orders being placed and dispense messages received.
Order Connector the connector used to submit orders to the Pharmacy.
Dispense Connector the connector used to receive dispense messages from the Pharmacy.
Location specifies the Practice Location that this Pharmacy is used for.
User specifies the user that Customer Orders and Returns will be created with.

HL7 Messages

For the messages supported by a Pharmacy see:

Pharmacy Group

Complete

A Pharmacy Group is used to group multiple HL7 Pharmacy services in multi-location practices. A Medication or Merchandise product uses the Pharmacy Group.

When invoicing a product linked to a Pharmacy Group, the current practice location determines which Pharmacy is selected to order the product.

Jobs

Complete

The Jobs screen allows:

  • background jobs to be scheduled
  • jobs to be run on demand

Medical Record Locker

Complete

The Medical Record Locker is a scheduled job that periodically locks patient medical records based on the Practice Record Lock Period setting.
A default instance of this job will be created when the Record Lock Period is set.

The fields are as follows:

Name The job name
Description The job description
Active This schedules the job to run if checked, or prevents it from being run if unchecked. Note that preventing it from running does not completely disable locking, as locking is also determined by the creation date of the record and the Record Lock Period.
Batch Size The number of records to lock in a single batch
Max Records

The maximum number of records to lock in a single scheduled run. Should be greater or equal to the Batch Size.

Minutes See Cron Expression
Hours See Cron Expression
Day Of Month See Cron Expression
Month See Cron Expression
Day Of Week See Cron Expression
Run As

Specifies the user to run the job as. This user is required to have permissions to:

  • send notification messages
Notify Specifies the user or user group to notify when locking has completed. Notification only occurs when at least one record is locked, or errors are encountered. You may want to use a 'real' user or group of real users, or you may want to create a user such as 'Jobs Message Receiver' used only for these notifications.

The Batch Size and Max Records fields can be used to limit resource utilisation. If enabling locking for the first time, set Max Records to a suitably large value so that the backlog of records can be cleared.

Cron Expression

The Minutes, Hours, Day Of Month, Month, and Day Of Week fields determine when the job is run, using a simplified version of a Cron expression:

Field Allowed Values Allowed Special Characters
Minutes 0-59 , - * /
Hours 0-23 , - * /
Day Of Month 1-31 , - * ? /
Month 1-12 or JAN-DEC , - * /
Day Of Week 1-7 or SUN-SAT , - * ? /

Note that only one of Day Of Month and Day Of Week may be specified. If one is specified, the other must be set to ?.

If you change the schedule, the new schedule will take effect immediately.

Examples

Description Minutes Hours Day Of Month Month Day Of Week
Run at 8am every weekday 0 8 ? * mon-fri
Run every 30 minutes */30 * * * ?
Run every 2 hours 0 */2 * * ?
Run every 15 mins between 8am and 6pm on weekdays */15 8-18 ? * mon-fri

Document Loader

Complete

The Document Loader is a scheduled job that periodically load files from a directory and attaches them to documents or investigations.

Files are associated with documents or investigations by parsing their identifier from the file name.

 

The Active field:

  • schedules the job to run if checked; or
  • prevents it from being run if unchecked

The Source Directory is the directory to load files from.

The Destination Directory is the directory to move successfully loaded files to.

The Error Directory is the directory to move files to that couldn't be loaded.

Note that the Tomcat application must have write access to Destination and Error directories.

(nb. on linux servers you must use the direct path, not a symbolic link and the group that owns the the source and destination directories must have read and write permissions and the tomcat user must belong to that group eg. use 'sudo usermod -a -G group tomcat7'​)

The Id Pattern is a regular expression that enables the document identifier to be parsed from the file name. The default expression is [^\d]*(\d+).* - this looks for the first digit string in the file name.  For example, the following file names all have the ID 3035108:
  DAO DAO_TSANG_ _3035108_20150226_115435_4762.pdf
  3035108 CBC test.jpg
  Xray DAO DAO_TSANG 3035108.jpg

The Overwrite field determines if files should be loaded if one already exists. If selected, the existing content will be replaced, if it doesn't duplicate the existing content. For documents that support versioning*, the existing content will be saved as a version.  The following table indicates the behaviour if a document has been previously loaded:

Case File Ovewrite=n Overwrite=y
1 Same name, same content Skipped Skipped
2 Same name, different content Skipped Loaded
3 Different name Skipped Loaded

Note that in case 2 & 3, if the document supports versioning, then the previous document is set as a version, and the primary document is replaced.

In case 2, if the previous document already exists in the Destination Directory, then the loader will fail and terminate. The file in the Destination Directory needs to be manually moved aside.

* all of the standard document archetypes with the exception of act.documentTemplate in OpenVPMS support versioning. The Document Loader cannot be used to load act.documentTemplate instances.

The Recurse Subdirectories  field determines if subdirectories of the source directory should be searched for documents to load.

The Archetypes field is a comma separated list of archetype short names, identifying the document archetypes that may be loaded to. These may include wild cards. Use of wildcards is NOT recommended, as malformed file names may result in files being loaded to incorrect documents. For Investigations, use act.patientInvestigation.

The Enable Logging field determines if loading should be logged. This can be used to help track down problems.  The information is written to the OpenVPMS logs in <TOMCAT-HOME>/logs.

If Stop On Error is selected, the loader will stop on the first error it encounters.  Note that this means 'stop this run', it does not 'stop all future scheduled runs'.  For normal operation, you should leave this unticked, otherwise, it is possible that an error with one document (say because it has a name that does not contain an ID) will prevent other documents being loaded.

 

The Minutes, Hours, Day Of Month, Month, and Day Of Week fields determine when the job is run. [Note that if you change the schedule, the new schedule will take effect immediately.]

These are a defined using a simplified version of a Cron expression:

Field Allowed Values Allowed Special Characters
Minutes 0-59 , - * /
Hours 0-23 , - * /
Day Of Month 1-31 , - * ? /
Month 1-12 or JAN-DEC , - * /
Day Of Week 1-7 or SUN-SAT , - * ? /

Note that only one of Day Of Month and Day Of Week may be specified. If one is specified, the other must be set to ?.

Examples

Description Minutes Hours Day Of Month Month Day Of Week
Run at 8am every weekday 0 8 ? * mon-fri
Run every 30 minutes */30 * * * ?
Run every 2 hours 0 */2 * * ?
Run every 15 mins between 8am and 6pm on weekdays */15 8-18 ? * mon-fri

 

The Run As field specifies the user to run the job as. This user is required to establish the permissions to:

  • create and update the specified archetypes
  • send notification messages

 

The Notify field specifies the user or user group to notify when a load has completed. Notification only occurs when documents are loaded, or errors are encountered. You may want to use a 'real' user or group of real users, or you may want to create a user such as 'Document Loader Message Receiver' used only for these notifications.

 

ESCI Inbox Reader

Complete

The ESCI Inbox Reader is a scheduled job that periodically checks ESCI Inboxes for messages from suppliers.

The Active field:

  • schedules the job to run if checked; or
  • prevents it from being run if unchecked

The Minutes, Hours, Day Of Month, Month, and Day Of Week fields determine when the job is run.

These are a defined using a simplified version of a Cron expression:

Field Allowed Values Allowed Special Characters
Minutes 0-59 , - * /
Hours 0-23 , - * /
Day Of Month 1-31 , - * ? /
Month 1-12 or JAN-DEC , - * /
Day Of Week 1-7 or SUN-SAT , - * ? /

Note that only one of Day Of Month and Day Of Week may be specified. If one is specified, the other must be set to ?.

If you change the schedule, the new schedule will take effect immediately.

Examples

Description Minutes Hours Day Of Month Month Day Of Week
Run at 8am every weekday 0 8 ? * mon-fri
Run every 30 minutes */30 * * * ?
Run every 2 hours 0 */2 * * ?
Run every 15 mins between 8am and 6pm on weekdays */15 8-18 ? * mon-fri

 

The Run As field specifies the user to run the job as. The selected user must have permissions to:

  • update Orders
  • create Supplier Deliveries
  • create System Messages

Appointment Reminder Sender

Complete

The Appointment Reminder Sender is a scheduled job that periodically sends SMS appointment reminders.

The fields are as follows:

Name The job name
Description The job description
Active This schedules the job to run if checked, or prevents it from being run if unchecked
SMS Before

This determines how long prior to an appointment that the reminder will be sent.  It will never be sent before this, but may be sent after, if the Reminder Sender did not run when the reminder first became due.

No SMS Before

This prevents the Reminder Sender sending reminders for appointments that are in the near future, i.e. appointments which start less than the specified interval ahead in time. It must be less than the SMS Before interval.
For both the above, an interval of N days means Nx24 hours and similarly a week means 7x24 hours.  Thus if the job runs at 13:00, an interval of 1 day covers the period up to 13:00 the next day, not 23:59 the next day.

No Reminder This interval is checked when the appointment is created. If the appointment is less than this interval in the future, then the Send Reminder flag will not be set for the appointment.
Minutes See Cron Expression
Hours See Cron Expression
Day Of Month See Cron Expression
Month See Cron Expression
Day Of Week See Cron Expression
Run As

Specifies the user to run the job as. This user is required to have permissions to:

  • save appointments
  • send notification messages
Notify Specifies the user or user group to notify when sending has completed. Notification only occurs when SMS message are sent, or errors are encountered. You may want to use a 'real' user or group of real users, or you may want to create a user such as 'Reminder Jobs Message Receiver' used only for these notifications.

 

Cron Expression

The Minutes, Hours, Day Of Month, Month, and Day Of Week fields determine when the job is run, using a simplified version of a Cron expression:

Field Allowed Values Allowed Special Characters
Minutes 0-59 , - * /
Hours 0-23 , - * /
Day Of Month 1-31 , - * ? /
Month 1-12 or JAN-DEC , - * /
Day Of Week 1-7 or SUN-SAT , - * ? /

Note that only one of Day Of Month and Day Of Week may be specified. If one is specified, the other must be set to ?.

If you change the schedule, the new schedule will take effect immediately.

Examples

Description Minutes Hours Day Of Month Month Day Of Week
Run at 8am every weekday 0 8 ? * mon-fri
Run every 30 minutes */30 * * * ?
Run every 2 hours 0 */2 * * ?
Run every 15 mins between 8am and 6pm on weekdays */15 8-18 ? * mon-fri

Patient Reminder Queue

Complete

The Patient Reminder Queue is a scheduled job used to:

  • queue patient reminders for sending
  • cancel reminders that are no longer applicable.

It should be scheduled to run daily, preferably outside of business hours.

On completion, reminders may be manually sent via Reporting - Reminders.
Email and SMS reminders may be automatically sent by the Patient Reminder Sender.

Queueing

Reminders are selected for queueing if they have:

  • a Next Due Date less than or equal to the current date; and
  • an In Progress status; and
  • no associated Items with Pending or Error status

It will cancel reminders if:

  • the patient is deceased or inactive; or
  • the Next Due Date + the Reminder Type's Cancel Time is less than the current date

For each reminder that matches the criteria, one or more Patient Reminder Items will be created according to its Reminder Type's rules, and the associated customer's contacts.

Note that the queue is not rebuilt each time the job runs. Reminders that have been previously added to the queue are left unaltered. This does mean that if you change say the Lead Times, reminders already in the queue will not affected.

The fields are as follows:

Name The job name
Description The job description
Active This schedules the job to run if checked, or prevents it from being run if unchecked.
Minutes See Cron Expression
Hours See Cron Expression
Day Of Month See Cron Expression
Month See Cron Expression
Day Of Week See Cron Expression
Run As

Specifies the user to run the job as. This user is required to have permissions to:

  • send notification messages
  • update patient reminders
  • update patient reminder items
Notify Specifies the user or user group to notify when queuing has completed. Notification only occurs when at least one reminder has been queued or cancelled, or an error has occurred. You may want to use a 'real' user or group of real users, or you may want to create a user such as 'Reminder Jobs Message Receiver' used only for these notifications.

 

Cron Expression

The Minutes, Hours, Day Of Month, Month, and Day Of Week fields determine when the job is run, using a simplified version of a Cron expression:

Field Allowed Values Allowed Special Characters
Minutes 0-59 , - * /
Hours 0-23 , - * /
Day Of Month 1-31 , - * ? /
Month 1-12 or JAN-DEC , - * /
Day Of Week 1-7 or SUN-SAT , - * ? /

Note that only one of Day Of Month and Day Of Week may be specified. If one is specified, the other must be set to ?.

If you change the schedule, the new schedule will take effect immediately.

Examples

Description Minutes Hours Day Of Month Month Day Of Week
Run at 5am every day 0 5 ? * *
Run at 7:30 on weekdays 30 7 ? * mon-fri

Patient Reminder Sender

Complete

The Patient Reminder Sender is a scheduled job that sends Email and SMS reminders queued by the Patient Reminder Queue job.

It should be scheduled to run during business hours.

You do not have to use the Patient Reminder Sender job.  If you do not, then Email and SMS reminders will be sent as part of the Reporting|Reminders|Send|Send All processing.

However, since you probably want to send out Email and SMS reminders more often than printed, listed, and exported reminders, then it is convenient to set up a Patient Reminder job to do this on say a daily basis.

The create/edit/view screen is as follows:

The fields are as follows:

Name The job name
Description The job description
Active This schedules the job to run if checked, or prevents it from being run if unchecked.
Minutes See Cron Expression
Hours See Cron Expression
Day Of Month See Cron Expression
Month See Cron Expression
Day Of Week See Cron Expression
Run As

Specifies the user to run the job as. This user is required to have permissions to:

  • send notification messages
  • update patient reminders
  • update patient reminder items
Notify Specifies the user or user group to notify when sending has completed. Notification only occurs when at least one reminder has been sent, or an error has occurred. You may want to use a 'real' user or group of real users, or you may want to create a user such as 'Reminder Jobs Message Receiver' used only for these notifications.

 

Cron Expression

The Minutes, Hours, Day Of Month, Month, and Day Of Week fields determine when the job is run, using a simplified version of a Cron expression:

Field Allowed Values Allowed Special Characters
Minutes 0-59 , - * /
Hours 0-23 , - * /
Day Of Month 1-31 , - * ? /
Month 1-12 or JAN-DEC , - * /
Day Of Week 1-7 or SUN-SAT , - * ? /

Note that only one of Day Of Month and Day Of Week may be specified. If one is specified, the other must be set to ?.

If you change the schedule, the new schedule will take effect immediately.

Examples

 

Description Minutes Hours Day Of Month Month Day Of Week
Run at 8am every day 0 8 ? * *
Run at 8:30 on weekdays 30 8 ? * mon-fri

Pharmacy Order Discontinuation

Complete

This job is automatically scheduled by setting the Pharmacy Order Discontinuation Period option on the Practice.

The fields are as follows:

Name The job name
Description The job description
Active This schedules the job to run if checked, or prevents it from being run if unchecked.
Batch Size The number of invoices to process in a single batch
Max Records

The maximum number of invoices to process in a single scheduled run. Should be greater or equal to the Batch Size.

Minutes See Cron Expression
Hours See Cron Expression
Day Of Month See Cron Expression
Month See Cron Expression
Day Of Week See Cron Expression
Run As

Specifies the user to run the job as. This user is required to have permissions to:

  • send notification messages
Notify Specifies the user or user group to notify when locking has completed. Notification only occurs when at least one invoice is processed, or errors are encountered. You may want to use a 'real' user or group of real users, or you may want to create a user such as 'Jobs Message Receiver' used only for these notifications.

The Batch Size and Max Records fields can be used to limit resource utilisation.

Cron Expression

The Minutes and Hours fields will be populated automatically when the Pharmacy Order Discontinuation Period option on the Practice is set. The job will be scheduled to run twice during specified period.

The Minutes, Hours, Day Of Month, Month, and Day Of Week fields determine when the job is run, using a simplified version of a Cron expression:

Field Allowed Values Allowed Special Characters
Minutes 0-59 , - * /
Hours 0-23 , - * /
Day Of Month 1-31 , - * ? /
Month 1-12 or JAN-DEC , - * /
Day Of Week 1-7 or SUN-SAT , - * ? /

Note that only one of Day Of Month and Day Of Week may be specified. If one is specified, the other must be set to ?.

If you change the schedule, the new schedule will take effect immediately.

Examples

Description Minutes Hours Day Of Month Month Day Of Week
Run every 30 minutes */30 * * * ?
Run every 2 hours 0 */2 * * ?
Run every 15 mins between 8am and 6pm on weekdays */15 8-18 ? * mon-fri

Scheduled Report

Complete

Scheduled Report is a job that can be configured to periodically run a report and write the output to a file, email it, and/or print it.

The fields are as follows:

  • Report
The report to run.
  • Name
The job name. Defaults to the report name
  • Description
The job description. Defaults to the report description
  • Active
This schedules the job to run if checked, or prevents it from being run if unchecked.
  • Location
The location to pass to the report. Available via the OpenVPMS.location field.
  • Report Name
The name of the report, when it is written to a file, or emailed as an attachment. This can be further customised by specifying Report Name Format.
If not specified, the report name will be derived using Report.
  • Report Name Format
Used to format the Report Name, e.g. to append the current date.
If not specified, the File Name Format of the associated Report will be used. Available formats are determined by Administration - Lookups - File Name Format
  • File

If selected, writes the report as a file to the specified directory.

  • Directory
The directory to write the report to. Only valid when File is selected.
  • File Type
The type of file to write. Only valid when File is selected.
  • Email
If selected, emails the report.
  • Email From
The address to email the report from. Only valid when Email is selected.
  • Email To
The addresses to email the report to. Up to 5 addresses may be specified. Only valid when Email is selected.
  • Attachment Type
The type of the email attachment. Only valid when Email is selected.
  • Print
If selected, prints the report
  • Printer
The printer to print the report to. Only valid when Print is selected.
  • Minutes
See Cron Expression
  • Hours
See Cron Expression
  • Day Of Month
See Cron Expression
  • Month
See Cron Expression
  • Day Of Week
See Cron Expression
  • Run As

Specifies the user to run the job as. This user is required to have permissions to:

  • send notification messages
  • Notify
Specifies the user or user group to notify when reporting has completed.
  • Notify On Success

If deselected, notification only occurs when reporting fails.

If selected, notification also occurs when reporting is successful

  • Parameters

The report parameters, obtained from the report when it is first selected.

Date parameters may be fixed, or calculated. This is determined by a dropdown with the following options:

  • Date
use a fixed date
  • Now
use the current date and time
  • Today
use today's date
  • Tomorrow
use tomorrow's date
  • Yesterday
use yesterday's date
  • Start of Month
use the first day of the current month
  • End of Month
use the last day of the current month
  • Start of Last Month
use the first day of last month
  • End of Last Month
use the last day of last month
  • Start of Next Month
use the first day of next month
  • End of Next Month
use the last day of next month
  • Start Of Year
use the first day of the current year
  • End of Year
use the last day of the current year
  • Start of Last Year
use the first day of last year
  • End of Last Year
use the last day of last year
  • Start of Next Year
use the first day of next year
  • End of Next Year
use the last day of next year
  • June 30
use June 30th of the current year
  • June 30 - Last Year
use June 30th of last year
  • June 30 - Next Year
use June 30th of next year
  • July 1
use July 1st of the current year
  • July 1 - Last Year
use July 1st of last year
  • July 1 - Next Year
use July 1st of next year

Calculated date parameters may have an offset, expressed in days, weeks, months or years.  E.g.:

  • Today - 3 Months
subtracts three months from the current date
  • Start Of Month + 1 Years
adds one year to the first day of the current month

 

Cron Expression

 

The Minutes, Hours, Day Of Month, Month, and Day Of Week fields determine when the job is run, using a simplified version of a Cron expression:

Field Allowed Values Allowed Special Characters
Minutes 0-59 , - * /
Hours 0-23 , - * /
Day Of Month 1-31 , - * ? /
Month 1-12 or JAN-DEC , - * /
Day Of Week 1-7 or SUN-SAT , - * ? /

Note that only one of Day Of Month and Day Of Week may be specified. If one is specified, the other must be set to ?.

If you change the schedule, the new schedule will take effect immediately.

Examples

 

Description Minutes Hours Day Of Month Month Day Of Week
Run at 8am every day 0 8 ? * *
Run at 8:30 on weekdays 30 8 ? * mon-fri

Users

Complete

This screen allows you manage the Users.  See also Concepts|Users.

The buttons are as follows:

New Create a new user
View View the selected user
Edit Edit the selected user
Delete Delete the selected user
Default Preferences Edit the default preferences. These are assigned to users when they are first created.
Edit Preferences Edit the preferences of the selected user.
Reset Preferences Resets the preferences of the selected user to the defaults
Synchronise with Smart Flow Sheet Synchronises clinicians with Smart Flow Sheet. See Clinician synchronisation for more details.

 

Confirm Delete

Complete

When you press the Delete button on the Administration|Users screen, a confirmation window will appear.

If the selected User is not in use and can be deleted, the window will simply ask you to confirm the delete. Press OK to confirm or Cancel to abort.

If it cannot be deleted because it is in use, the text will be "xxxx has relationships and cannot be deleted. Do you want to deactivate it instead?"(where xxx is the name of the item you are trying to delete). Pressing OK will unset its Active flag, Cancel will abort.

Create/Edit/View

Complete

This screen allows you to create, edit and view Users. See also Concepts|Users for background information.

The fields are as follows:
Login Name - the name with which the user logs in. Note that you can set this to have upper and lower case letters (eg Doris). The user will be able to login with doris, Doris, DORIS, or even doRis. The upper case version of the login name must be unique, ie you cannot have one user named Doris and another named DORIS.
Password and Confirm Password - the user's password
Name - the name that will be used within the system - ie that shown in the Clinician pull-downs, and the name used to send messages. As shown in the above, this need not be a full name, and it is faster to select the clinician if the name is short or has a unique first letter.
Description - if you use short names then this should be the person's full name, else if can be any useful text.
Active - uncheck this box to deactivate the user
Title - user title, used for reporting purposes.
First Name - user first name, used for reporting purposes.
Last Name - user surname, used for reporting purposes.
Qualifications - user qualifications, used for reporting purposes.
User Level - used to limit the reports a user can run
Edit Preferences - when selected, the user can edit preferences via the gear icon
Colour - used to set the colour used for the user when highlighting them on the Scheduling and Work Lists windows.  It is not necessary to set the colour for anyone who is not a clinician. You use the mouse to select the colour via the colour and luminosity/hue boxes. If you want to check the colours of the different users, the easiest way to do this is to view the user and then to use the Next and Previous buttons to run back and forth through the different user.
Note that you should avoid the 'light cream' colour f2f3b3 which displays as follows:
because this is used to highlight the selected item on the Workflow|Scheduling and Work Lists screens.
Online Booking - determines if the user can be selected for appointments by online booking services. This only applies to clinicians.

Contacts tab - this is used to display, add, delete and edit the Contacts for the user - see here. Note that adding an email contact for each staff member makes it easy to CC or BCC staff on any emails sent.

Roles tab - this is used to display, add, delete and edit the Roles for the user

Groups tab - this is used to display, add, delete and edit the User Groups the user belongs to

Category tab - this is used to display, add, delete and edit the User Types for the user. Set Administrator for all users who need to access the Administration menu and other administrative functions (Customer Accounts Check and Merge, Patient Merge, and Product maintenance [Edit, Delete, Copy, Export & Import]). Set Clinician for any user who needs to be selectable in the Clinician pull-downs. You can set multiple categories, ie both Clinician and Administrator.

Location tab - this is used to display, add, delete and edit the Practice Locations for the user. You specify Practice Locations in order to limit the Locations that the user can select at the top right of the screen.  If you do not specify any, then the user can select any Location. You should set the default flag on the user's default Location- this will then be the selected Location when the user logs in.

Follow-up Work Lists tab - this is used to configure the work lists that may be selected when:

  • clicking the button in the patient summary, to add a follow-up task
  • the Follow-Up At Check Out option is selected to create follow-up tasks at check-out

 

Select

Complete

This is the screen used to select a User. It works like a standard select screen.

Groups

Complete

This screen allows you manage the User Groups. These are only used to allow groups of users to be addressed when sending a message.

Confirm Delete

Complete

When you press the Delete button on the Administration|User Groups screen, a confirmation window will appear.

If the selected Group has no members and can be deleted, the window will simply ask you to confirm the delete. Press OK to confirm or Cancel to abort.

If it has members, the text will be:

xxx has relationships. Are you sure want to delete?
This operation cannot be undone.

(where xxx is the name of the Group you are trying to delete). Pressing OK will delete the Group, Cancel will abort.

Create/Edit/View

Complete

This screen allows you to create, edit and view User Groups.

The fields are as follows:
Name - the name of the group
Description - use this to clarify the purpose of the group
Active - uncheck this box to deactivate the group

Users tab - this is used to display, add and delete users from the group

Roles

Complete

This screen allows you manage the Roles. These are used to define the roles that are assigned to Users. See also Concepts|Users for background information.

Confirm Delete

Complete

When you press the Delete button on the Administration|Roles screen, a confirmation window will appear.

If you press OK to confirm the delete, then, if the Role is not in use, it will be deleted. Otherwise an error window will appear with the text like:

Failed to delete object with reference security.role.1.0:.......

Click OK to dismiss the error window.

Create/Edit/View

Complete

This screen allows you to create, edit and view Roles.

The fields are as follows:
Name - the name of the role
Description - use this to clarify the purpose of the role
Active - uncheck this box to deactivate the group

Authorities tab - this is used to display, add and delete authorities from the role

Note that in the above you will see that the Clinician role can create or save (ie modify) everything, but remove (ie delete) only messages. If you don't include message remove, then the user will not be able to delete their own messages. However, a normal (ie non-administrator) user can happily operate with no other remove authorities - recall that in general nothing should be deleted, only deactivated.

Authorities

Complete

This screen allows you manage the Authorities. These are used to define the authorities that are assigned to roles. See also Concepts|Users for background information.

Confirm Delete

Complete

When you press the Delete button on the Administration|Authorities screen, a confirmation window will appear.

If you press OK to confirm the delete, then, if the Authority is not in use, it will be deleted. Otherwise an error window will appear with the text like:

Failed to delete object with security.archetypeAuthority.1.0:.......

Click OK to dismiss the error window.

Create/Edit/View

Complete

This screen allows you to create, edit and view Authorities. Normally you should never need to change these.

The fields are as follows:
Authority Name - the name of the authority
Description - use this to clarify the purpose of the authority
Service Name - must be set to Archetype Service
Method Name - can be one of save, new or remove
Archetype Name - the name of the archetype

Archetypes

Complete

This screen is used to select an archetype to view and maintain archetypes.  (See further down for what an archetype is.)

Note that if you are a normal administrator, you almost certainly do not need to use this screen. If you are developing reports, then you will find this facility useful for seeing how things are put together so that you can write the necessary SQL code. (See also Reference|Report Fields.)

If you do really need to modify an archetype, then the best way is probably to modify the archetype's adl file (after saving a copy), then shutdown the system by stopping Tomcat, then use the archload script to load the archetype(s), and finally restart Tomcat. [Though if you do need to leave the system running so that business operations can continue, you can use archload and then press the Reload button - see below.]

Note also that if you use this screen to make changes to a derived node or you import an archetype that makes changes to a derived node, then you will be presented with the option to update derived nodes. If you do not accept this offer, then the derived node(s) will not be updated until the object itself is edited and saved.  If you use archload to import the modified archetype, then because archload does not have this 'update derived nodes' facility, these will not get updated until you edit the affected object.

This is a standard select screen with three extra buttons:

Import - click this to upload an archetype from an adl file.  Note that a) you should not do this unless you know exactly what you are doing; and b) it is probably better to shut down the system and use the archload script to load the archetype(s) and then restart the system. Note that if you do import as archetype using this button, then if the imported archetype has changes that affect the data (eg a change in a derived field) then you will get the following message

If you press the OK button, then the affected data will be updated.  If you have large data sets then this can take a long time.  If you press the Cancel button then then existing data will not be updated, but any new or modified records will include the update.

Note that the above message will also be displayed if you edit a node and your changes affect the data.

This option to apply updates to the affected data is not available if you use the archload script.

Export - click this to export the archetype to an adl file. Note that if you want to study the archetypes don't use this - it generates a very complete but overly complex adl file.  If you do want to look at a file, take a copy of the adl file from the <OPENVPMS_HOME>\archetypes\org\openvpms\archetype folders.  Alternatively, use the View or Edit buttons.  Note however, that if you use View, you will not be able to see the full archetype.  Specifically, if the archetype has a node that links to multiple archetypes (eg participation.product's entity node), then if you use View, you will only be shown one.  To see all four you need to Edit the archetype.

Reload - click this to force a reload of the archetypes after you have used the archload utility (otherwise you will need to restart Tomcat). Note that reloading archetypes in this way has a number of limitations:

  • user's currently on the system may be accessing old copies. Working with both old and updated versions of an archetype may yield unexpected behaviour, so  it is strongly recommended no users be on the system, and the administrator logs in again after performing the reload.
  • some archetype data is cached (e.g. act statuses), and can only be refreshed by restarting OpenVPMS

 

What exactly is an archetype?

OpenVPMS is built using some modern system design concepts borrowed from the health informatics field. Specifically its architecture was influenced by the work of the openEHR Foundation (archetypes), and the HL7 Reference Information Model (acts, entities, participations etc). It is interesting to note that in the health informatics field, two primary concerns are the 'future proofing' of the information structures and the ease of exchanging data between organisations. Although OpenVPMS does not implement either standard directly because they are more complex than is required, the inherent flexibility of the approach has stood us in very good stead.

 

Each entity (eg customer, patient, supplier, product etc), each 'act' (ie the actions associated with each entity - eg invoice for customer, order to supplier, visit to a patient) and each relationship between these has a set of 'attributes' (eg customer last-name/title/first-names etc, patient species/breed/age/colour etc) that define the entity, act and relationship.

These are described using a variant of XML (eXtended Markup Language), and the 'description' is called an archetype. These are held in files with the extension .adl (for Archetype Description Language).

Because of the way the OpenVPMS code is built (it's completely driven by the archetypes), and because the archetypes can be changed by a knowledgeable person, certain adjustments to the system are very simple and require no change to the underlying code. To emphasis this, if you add a new field to the customer archetype, party.customerperson, then the Customers|Information screen will automatically be updated to include the new field. Similarly, if you added a new Lookup archetype, lookup.customerTravel, to be used to validate entries in the Customer's Travel field, then the new lookup will automatically appear in Administration|Lookups.

Three examples:

  1. Say you wanted to use an otherwise unused field (eg the Travel field on the Customer Information screen) for some other purpose (eg to hold the customer's Citizen ID Number). To modify the system so that Travel becomes 'Citizen ID' on the customer screen, all you have to do is to edit the party.customerPerson archetype to change the Display Name of the field called 'travel' from 'Travel' to 'Citizen ID'.
     
  2. Say you wanted to to ensure that the microchip numbers entered into the system have one of three formats, 9999 9999 9999 999 or 999*999*999 or 10 characters alpha numeric, then you edit the entityIdentity.microchip archetype to add the following to the microchip node to set both the necessary validation and the appropriate error message:
    <assertion name="regularExpression">
        <errorMessage>Format must be 999 999 999 999 999 or 999*999*999 or 10 characters alpha numeric or anything starting ??
        </errorMessage>
        <property name="expression" type="java.lang.String" 
           value="(\?\?.*)|([0-9]{3} [0-9]{3} [0-9]{3} [0-9]{3} [0-9]{3})|([0-9]{3}\*[0-9]{3}\*[0-9]{3})|([A-Z,0-9]{10})"/>
    </assertion>
  3. To add a new field you can do as follows:
    1. for a simple data field, you add it /details path - eg the following adds a Language field which is validated mandatory and to be one of Cantonese, Dual and English:
      <node displayName="Language" name="language" path="/details/language" type="java.lang.String" minCardinality="1" >
           <assertion name="lookup.local">
              <propertyList name="entries">
                  <property name="C" value="Cantonese"/>
                  <property name="E" value="English"/>
                  <property name="D" value="Dual"/>
              </propertyList>
              <errorMessage>Language is mandatory</errorMessage>
          </assertion>
      </node>
      

      If you just need a simple text field with no validation, simply omit the assertion block.

    2. to add a field that is a link from one entity to another is a little more complex because we need to add a new archetype to define to link between the entities. However it is not complex - see http://www.openvpms.org/forum/referred-client-option 

To make the equivalent changes in most other systems is impossible – because they are completely compiled applications and thus have 'no user serviceable parts inside'.

Note that if you are modifying archetypes, then although you can do it directly by editing it on the screen, it is best to edit the adl file, and then import it. This has two advantages. Firstly you have a copy of the modified archetype that can be re-used if/when the system is upgraded. Secondly, if you are adding a new field (more correctly referred to as a node), then you can control where it is displayed because, in general, the screen layout is determined by the order of the nodes in the archetype.

 

Database Structure  It is appropriate here to also mention something about the database structure used by OpenVPMS.  If you have ever played with conventional databases, you will be used to having tables which hold like data, ie there will be a customer file, a patient file, a product file, etc etc.  This is not the case with OpenVPMS where the database tables hold entities, acts and relationships. Thus the entities table contains entries for all the entities, ie customers, patients, products, etc with each tagged with an archetype to say what sort of entity it is. Further information about each entity is held in the entity-classifications and entity-details and other tables.

This setup makes it a bit more difficult to extract data from the system, for example when building the SQL code required for a report. However, it has huge benefits in the ease of extending the system when it is necessary to add extra fields.

If you are faced with the problem of writing some SQL code to access or update the database, one of the best ways to proceed is to look at the SQL code used in the various reports (by using JasperSoft Studio to examine the jrxml files).

You may also find the following table to be of some use for understanding the database structure:

Group

Table

Contents/Remarks

Entities    
  entities All entities (customers, suppliers, products, etc etc)
  entity_classifications Links entities to their classifications, ie lookup
  entity_details Additional details for each entity
  entity_identities Identities (ie alias, microchip, barcode etc) for entities
  entity_identity_details Additional details for above
  entity_links Links one entity to another
  entity_link_details Additional details for above
  entity_relationships Links entities to something else
  entity_relationship_details Additional details for above
  participations Links entities to acts and vice versa
  participation_details Additional details for above
Acts    
  acts All acts (invoices, medications, stock movements etc etc)
  act_details Additional details for above
  act_relationships Links each act to its related acts
  act_relationship_details Additional details for above
  financial_acts Financial and quantity date for each act that needs it
Contacts    
  contacts Links entities to their contacts
  contact_details Additional details for above
  contact_classifications Links contacts to their classifications, ie lookup
Documents    
  documents All documents
  document_details Additional details for above
  document_acts Links documents to their acts
Lookups    
  lookups All lookups
  lookup_details Additional details for above
  lookup_relationships Links between lookups (eg suburbs and states)
  lookup_relationship_details Additional details for above
Products    
  products All entities that are products
  product_prices Prices for each product
  product_price_details Additional details for above
  product_price_classifications Links products to their classifications, ie lookup
Users    
  users Login and password for each user
  parties All entities that are users
  roles_authorities Links each security role to its authorities
  security_roles All roles
  user_roles Links each user to their security roles
System   These can be ignored for reporting purposes
  action_type_descriptors  
  archetype_descriptors  
  assertion_descriptors  
  assertion_type_descriptors  
  audit_records  
  etl_log  
  granted_authorities  
  node_descriptors  
  schema_version  

Confirm Delete

Complete

When you press the Delete button on the Administration|Archetypes screen, a confirmation window will appear.

If you press OK to confirm the delete, then, if the Archetype is not in use, it will be deleted. Otherwise an error window will appear with the text like:

Failed to delete object with descriptor.archetype.1.0:.......

Click OK to dismiss the error window.

Create/Edit/View

Complete

This is the create/edit/view screen for archetypes.  Feel free to use this screen to examine archetypes, but unless you know exactly what you are doing, do not use it to modify things.

The fields are:
ID - the id number of the archetype
Name - the name of the archetype
Display Name - its display name
Class Name - the name of the java class that defines the archetype
Latest - check this box if this is the latest version
Primary - check this box if this is a primary archetype. The primary field is used to filter similarly named archetypes from lists when wildcards are used. E.g listing archetypes for act.customerAccount* with primary=true will exclude all of the item acts (act.customerAccountPaymentCash etc). Most cases where workspaces list archetypes by archetypes (e.g. Admin|Organisation), they list primary archetypes.
That said, there aren't too many non-primary archetypes, and these wouldn't be matched on the wildcards used anyway.
Node table - this shows each 'node' or component of the archetype. In the above example there are only 4. If there are more than 10, then the display is paged.

Node tab - this shows the attributes of the selected node (microchip in the above example). Its fields are:
Name - the name of the node
Display Name - this is used as the name of the field when it appears on the screen
Type - the java class that defines the node's type
Path - defines where this node is held in the database
Min, Max Cardinality - define how many of these nodes there can be. (1,1) means there must be one only (ie the field is mandatory),  (0,1) means that the node is optional but there can be no more than one, (0,-1) means that the node is optional, but there in no limit to the number.
Min, Max Length - define the allowed number of characters if this is a string
Default Value - the default value for this node
Derived - check this box if the value of this node is to be derived from others
Derived Value - an expression that provides the derived value. For example, the Description node of the till archetype is "concat('Last Cleared : ',/details/lastCleared, ' Cash Float : ',/details/tillFloat)".
Hidden - check this box is the node is not to be displayed
Read Only - check this box if the node cannot be updated

Assertion Descriptors tab - this shows the attributes of the selected assertion. Assertions are used to validate the data for the node. There are a dozen different types (such as number, stringcase, expression, regular expression, lookup, etc). In the above example there is a single regular expression assertion. The fields are in general different for each assertion type, and are not documented here.

 

Style Sheets

Complete

This is an experimental facility and not completely implemented. It allows you to control and experiment with the stylesheet parameters that define the layout of the OpenVPMS screens.

OpenVPMS has a set of stylesheets for different screen resolutions.  This facility allows you to modify the parameters for each resolution, define a new resolution, and to open a new window with a specified resolution to see how things look.

Note that any changes made will be lost when you log out.  That is, this facility is for experimenting with the effects of stylesheet changes, not permanently making them.

The screen is as follows:

The fields are:
Resolution - a pull-down list of the available resolutions. Initially this will show 'Default' and the screen width and height will be that of your screen.
Screen Width and Height - the screen width and height corresponding to the resolution
Property - this column showns the name of the property. These are fixed and cannot be modified, deleted or added to.
Expression - this column shows the expression used to determine the value of the property. As you can see the majority consist of a number multiplied by a parameter such as the font size, screen height or width.

The buttons are as follows:
Add - opens a window to allow you to add a new screen resolution - you can also edit the various settings. When you press the OK button, the current display will be updated to reflect your settings.
Edit - opens a window to allow you to modify the expressions for the currently selected resolution. To get these to be applied to the current screen, press the OK button on the edit screen, and then press the Add button and immediately OK it.
Change Resolution - displays a window to allow you to set a screen width and height and then opens a new OpenVPMS window with that width and height. This allows you to see what the screens will look like on a screen of that size.
Revert Changes - enables you to discard all changes you made in this session
Export - displays a note window displaying the settings. Note that the properties are held as a default set with overrides for each resolution.  Hence, if you press Export when the Resolution is shown as Default, there will be a full set of properties shown in the note window. However, if you call up say 800x600 resolution and then press Export, you will see only a very small number of properties - and these are the ones in the full set that are overridden for 800x600 resolution.

For permanent changes you need to edit the properties files in the <TOMCAT HOME>\webapps\openvpms\WEB-INF\classes\style directory.

If you are changing an existing resolution, say 800x600, then you only need to edit the file default-800x600.properties

If you are creating a new resolution, say 600x1024, then you need to create the file default-600x1024.properties and fill it with the information copied from the note window displayed by the Export button. Then you need to add the new resolution to the list in the default-resolutions.properties file.

Finally you need to restart Tomcat to make the changes take effect.

System

Complete

The Administration - System screen provides an overview of current:

 

 

Application Caches

Complete

The Application Caches window displays current memory use and statistics for select caches in OpenVPMS.
This is launched by clicking Caches in Administration - System.

The table displays:

  • Name
The cache name.
  • Elements
The number of elements currently in the cache.
  • Max Elements
The maxium number of elements the cache can hold, before old elements are discarded.
  • Use
The cache use, expressed as a percentage.
  • Cache Hits
The number of times an element was in the cache when it was requested.
  • Cache Misses
The number of times an element was not in the cache when it was requested.
  • Size
An approximate calculation of the cache size.

The buttons are:

  • Edit
Change the selected cache.
  • Refresh
Refreshes the statistics.
  • Reset Statistics
Resets the Cache Hits and Cache Misses to zero. This can be used to help evaluate the effectiveness of a change to the Max Elements of a cache.
  • Clear Cache
Releases memory allocated to a cache.
  • Close
Close the window.

 

Changing a Cache

The Edit button displayed a Change Cache window for the selected cache.

This displays the current maximum elements for the cache, and provides options to select a suggested value for the cache size, or enter a new one.

The cache size should be changed if:

  • there are too many cache misses vs cache hits.
    This indicates that the cache is too small and that Max Elements should be increased.
  • memory consumption is too high
    Here Max Elements should be decreased.

 

Note that the suggested size does not take into account memory consumption.

 

 

Diagnostics

Complete

The Diagnostics window supports viewing:

This can aid quick diagnosis of problems where access to the server or database is limited.

The buttons are:

  • Refresh
Refresh the current view.
  • Mail
Emails a snapshot of the system information.
  • Re-load Log4j configuration
Available on the Logs tab. Re-reads the log4j2.xml file in <TOMCAT-HOME>\webapps\openvpms\WEB-INF\classes and then apply the changes without having to restart Tomcat.
See also Troubleshooting.

Memory

This tab  displays:

  • Total Memory
The maximum amount of memory that the Java virtual machine will attempt to use.
  • Free Memory
The amount of unused memory.
  • Use
The memory use, expressed as a percentage.
  • Allocated Now
The amount of memory currently available to the Java Virtual Machine.
  • Free Now
The amount of memory currently available to the Java Virtual Machine that is unused.

MySQL - InnoDB

This tab displays the result of the SQL statement:

SHOW ENGINE INNODB STATUS

If the message:

Access denied; you need (at least one of) the PROCESS privilege(s) for this operation

is displayed, it means that the MySQL user doesn't have permissions to execute the command.

This can be granted using the following SQL statement:

GRANT SELECT, PROCESS ON *.* TO 'openvpms'@'localhost';

Replace 'openvpms' and 'localhost' the actual database user name and host if they have been changed from their default values.

NOTE: this may not take effect until Tomcat has been restarted.

Document Locks

Complete

The Document Locks tab displays the users that have locks on documents to prevent other users from overwriting their changes. These locks are created by OpenOffice when External Edit is used to edit a document.

Each row in the table displays:

  • the user login name
  • the user name
  • the name of the locked document
  • the time when the lock expires - note that this time will normally be a couple of minutes in the future. When this time is reached the system checks that the document is still being edited, and if so renews the lock.

Locks can be filtered by login name, user name or host.

The Delete button can be used to delete a lock that needs to be cleared. Normally the lock will be removed when the document has finished being edited.

 

Plugins

Complete

The Plugins screen displays the status of the plugin support in OpenVPMS.

Plugin support is initially disabled. To enable it, click Configure and enter the path to the plugins directory. For a standard OpenVPMS installation, this is the plugins directory located in the OpenVPMS installation directory.

Each row in the table displays the plugin:

  • identifier
  • name
  • version
  • status

The buttons are as follows:

Start Start the selected plugin.
Stop Stop the selected plugin.
Install Plugin

Install a plugin.
This must be is a .jar file that follows OSGi packaging conventions.
NOTE: Only install plugins from sources that you trust, as they have full access to your OpenVPMS data.

Refresh Refresh the display.
Configure Configure plugin support.

 

Updating Plugins

There is currently no user interface support to directly update plugins.

To update a plugin:

  1. remove the existing version from the plugins/deploy/ directory
  2. restart Tomcat
  3. install the new version using Install Plugin

Failure to correctly remove the existing version of the plugin may result in multiple versions being installed, with unpredictable results.

Sessions

Complete

The Sessions tab displays current user sessions.

 

Each row in the table displays:

  • the user login name
  • the user name
  • the host they are logged in from

NOTE: this may be the address of a firewall or proxy, rather than the user's actual address.

  • when they logged in
  • when they last accessed the session

Sessions can be filtered by login name, user name or host.

The buttons are:

  • Smart Flow Sheet
Displays the Smart Flow Sheet status and enables the interface to be restarted.
  • Caches
Displays the Application Caches window.
  • Diagnostics
Displays the Diagnostics window.

 

 

 

Help

Complete

Clicking Help on the top menu item, or using Alt-H displays a screen like the one below.

On most other screens, you can press Alt Function Key 1 to directly access help for that screen.

Notes:

How To

Complete

This section contains sections describing how to do various things. 

Note that 'Administering OpenVPMS' covers topics such as Backup that are not accomplished with the OpenVPMS web application.

Administering OpenVPMS

Complete

This section includes things that are not done using the OpenVPMS web application.

Backup

Complete

This section covers how to backup your OpenVPMS system - both what to backup and how to.

In the following it is assumed that you are running OpenVPMS on a Windows system.  If you are using a linux system, then you should be able to do the appropriate folder name conversions.

Note also that you really should practice disaster recovery, ie assume that your system was lost or destroyed and that you have to start from scratch with a new computer.  That is, your backups are only any good if they can be restored. Backups should be periodically tested or restored to a backup server as part of your backup process. If you don't have a 'backup server', at least get your hands on a system that you can install OpenVPMS on and check that you can restore your database.

What to backup

The MySQL database itself. OpenVPMS keeps everything in the database including the report and document templates and all patient and customer documents, attachments and images. So backing up the openvpms database itself secures most of what you will need to recover in the event of a disaster. Note that MySQL will normally have two other databases (or 'schemas'), mysql and performance_schema.  You don't need to backup these.

Other files. Apart from the database itself, you should backup:

  1. the mysql configuration file, normally called 'my.ini'. In a standard windows system this is located in C:\Program Files\MySQL\MySQL Server 5.5\my.ini - remember that even if you have not done any other adjustments to the standard my.ini file, you will have made the changes required by openvpms as documented in Installing OpenVPMS|Requirements.
  2. any other modified versions of files in the standard release package. These will include any modifed archetypes (.adl files) and any modified files in the <TOMCAT_HOME>/webapps/openvpms/WEB-INF/classes/org/openvpms/web/resource/localisation and the <TOMCAT_HOME>/webapps/openvpms/WEB-INF/classes/style folders.
  3. any other installation specific files. These include any files you have that will be lost if you have a complete disaster and have to start from scratch.

It is also wise to occasionally make a 'system image' that you can restore the system disk from in the event of a disk failure (otherwise you are going to have to reinstall all your software). In Windows 7 this can be done via Control Program|Backup and Restore, and in Windows 8 via Control Program|File History.

When to backup

Essentially this is governed by the amount of data you can afford to lose and have to re-enter. If you do a daily backup at 6pm each business day, and the system fails at 2pm, then you will have to re-enter everything that happened after 6pm the previous day.  Hence a weekly backup is probably not a viable option.

How to backup

Essentially you need to take a copy and put it somewhere else, where 'somewhere else' means, at a minimum, an external disk or storage device. You should also strongly consider having a copy held off-site so that you can cope with your building being destroyed or all your computer equipment being stolen.

Although USB memory sticks are now available with large capacities, and are wonderful for transferring files, they are not reliable enough to use as backup storage. Use a USB hard drive or NAS (Network Attached Storage) device instead.

Backing up to 'the cloud' is a possibility, but most sites do not have sufficient upload bandwidth to make this a viable solution.

So how to backup MySQL.  There are at least three ways to do this: mysqldump, raw file copy, and database replication.

mysqldump
The mysqldump command line utility has lots of options, but for our purposes it is invoked as follows:

mysqldump -u <username> --password=<password> --single-transaction --quick --extended-insert --add-locks --result-file=<dumpfile> openvpms

where both <username> and <password> will be 'openvpms' unless you have set these differently in your system, and <dumpfile> is where you want the data to go, eg E:\backups\opvdump.sql

The single-transaction option allows for the fact that someone may be using the system entering data - and as this implies you do not have to shut down Tomcat to prevent people using the system while mysql dump runs.  You certainly do not want to shutdown mysql itself - it has to be running for mysqldump to work.

The quick option functionally decreases the impact of running mysqldump so that it minimises the impact on normal users (otherwise they will notice a slow down in the system response).

The extended-insert and add-locks options make the restore process more efficient.

In the windows environment, especially with a large database, it is more efficient to use the results-file argument as above rather than piping the output, eg as follows but in the unix environment piping is just as efficient.

mysqldump -u <username> --password=<password> ... openvpms > E:\backups\opvdump.sql

You will see examples on the web of compressing the .sql file to save space. This is normally not worthwhile with OpenVPMS databases because typically such a large part of the data is uncompressible jpeg images.

To restore the database, you use the mysql command line utility as follows:

mysql -u <username> -p openvpms < <dumpfile>

Note that MySQL dumps can be large - see also 'File Sizes' below. Compression can achieve some space saving at the cost of the extra time required to do the compression. Linux users will be familiar with the process or piping the output of one program into another, and thus on a linux system one can do:

  • To backup: mysqldump -u openvpms -p openvpms | gzip > dump.sql.gz
  • To restore: gzip -cd dump.sql.gz | mysql -u openvpms -p openvpms

On Windows systems the same can be done using the 7-Zip compression utility (see http://www.7-zip.org) as follows:

  • To backup: mysqldump -u openvpms -p openvpms | 7z a -si dump.sql.7z
  • To restore: 7z x dump.sql.7z > mysql -u openvpms -p openvpms

However, because a typical OpenVPMS database contains a large number of uncompressable images (from x-rays and ultra-sounds), the saving is space is normally only about 25%.

raw file copy
If you want to minimise the database restore time, then you can simply copy the MySQL database files to another device.  In MySQL terminology, this is called a 'cold backup' - see http://dev.mysql.com/doc/refman/5.5/en/innodb-backup.html. To do this you need to shut down MySQL before you copy the files, and you have to copy nearly everything in the MySQL data folder. Specifically you need to copy the ibdata files and each of the sub-folders, ie mysql, performance_schema, and openvpms.  You do not need to copy ib_logfile1 and ib_logfile2.

In the windows environment, the best copy program to use is robocopy.

Note that when do the recovery (by copying the files back) you MUST still be using the same version of MySQL, and you may need to be wary about the log files.  If you have not been backing these up, then when you copy the other files back you must ensure that any old log files are deleted

database replication
If you have a large busy practice, you should consider using MySQL's ability to replicate the database on another machine. There is a slave database on the other machine, and updates to the master database are continuously copied to the slave. When a disaster occurs, it is quite easy and very quick to switch operations to the backup machine which was running the slave database which now becomes the master.

See http://dev.mysql.com/doc/refman/5.1/en/replication-howto.html

other information
For more information on backing up and restoring MySQL databases, see:

File Sizes

The size of an OpenVPMS database depends mainly on two things, the number of transactions recorded, and the number (and size) of the stored documents. The following data is taken from a reasonably sized business. ('participations' counts the number of links between data.)

Item Size (GB) Count Time (min)
MySQL Database 20.4   12
documents.ibd file 11.2 48,500  
participations.ibd file 5.6 13,500,000  
mysql dump 15.5   20
compressed mysql dump 11.8   35

As you can see, the documents and participations files make up some 80% of the total database size. The Time column shows the time required for the raw file copy, and the uncompressed and compressed mysql dumps. In all cases the data is moved to a NAS unit via a 1gigabit network connection.  Note that although compression gives a space saving of 24%, it increases the time required by 175%. The relatively small space saving is due to the fact that many of the documents are jpeg images and thus uncompressible.

Hardware redundancy

Apart from backing up, it is possible to decrease the probability of failure by providing some redundancy in the system.  There are two things to consider, RAID and server class systems.

RAID (Redundant Array of Inexpensive Disks) - see http://en.wikipedia.org/wiki/RAID - provides a storage system that is resilient to failure. These can be configured as a simple 2 disk mirror RAID-1 setup where data is written to both drives, and the system will continue to operate when one fails. At the other end of the scale there are multi-disk RAID-5 and -6 systems with hot stand-by drives.

Server class hardware  There is a very real difference between a standard desktop machine and a server class system (apart from the price and weight). Server machines typically offer a remote access console (so you can power on the system from afar), large fast storage systems, and dual power supplies.

Even if you don't use a server class machine, you should consider the use of enterprise rather than consumer class disk drives.

Second system  The simplest approach to hardware redundancy is simply to have a second system that is a exact duplicate. You can use this system for other non-critical things (perhaps as a spare worstation).  You can then make an image backup of the primary system.  When it fails, you disconnect the primary system from the network (in case it is still partially alive), restore the image backup to the backup system, and then restore your last database backup. You may also need to unplug any printers from the failed system and plug them into the backup system. Your users can then resume work - but they will have to re-key transactions since the last backup.

Note we need the backup machine to be an exact duplicate so that the image backup from the primary system can be restored and run without any changes.

Housekeeping

Complete

This section deals with various housekeeping activities.

OpenVPMS Logs

The openvpms log files (in <TOMCAT-HOME>/logs) are kept under control by the settings in <TOMCAT-HOME>/webapps/openvpms/WEB-INF/classes/log4j.properties file.  The standard setup is to 'rotate' these when they get to 1024KB and keep only 1 backup.  Thus in a mature system you will see an openvpms.log.1 of size 1MB and a smaller openvpms.log (and similarly for the openvpms-full.log).

You can keep more data by increasing the log4j.appender.fileout.MaxBackupIndex parameter from 1 to something greater.

Note that the openvpms.log and openvps-full.log backups are not in sync (ie openvpms-full.log.1 does not contain the full data for the events in openvpms.log.1). This is because the full log grows significantly faster than the standard log.

If you wish to keep older synchronised versions then you need to implement a system for renaming the log files on a regular basis before they grow to 1MB in size. In unix systems this can be done using the logrotate facility.  In windows systems you can have a bat file containing commands like the following and run it via the task scheduler.

set DSTAMP=%date:~6,4%-%date:~3,2%-%date:~0,2%

net stop "Apache Tomcat 6.0 Tomcat6"
net stop "MySQL55"

sleep 10

ren C:\openvpms\data\mysql-slow.log %DSTAMP%-mysql-slow.log
ren C:\openvpms\data\mysql-slow.log %DSTAMP%-mysql-error.log
ren "C:\Program Files\Apache Software Foundation\Tomcat 6.0\logs\openvpms.log" %DSTAMP%-openvpms.log
ren "C:\Program Files\Apache Software Foundation\Tomcat 6.0\logs\openvpms-full.log" %DSTAMP%-openvpms-full.log

..... other stuff to backup database etc

net start "MySQL55"
net start "Apache Tomcat 6.0 Tomcat6"

exit

docload Destination Directory

The document loader destination directory receives the files that have been loaded.  Since the documents are now in the database, these files can either be deleted or archived elsewhere.

Note that regularly sweeping this directory allows the document loader to load updated copies of documents when the overwrite option is set. Otherwise if the document 3214567_xray.jpg was previously loaded, then when an attempt is made to load an updated copy, this will fail because the file 3214567_xray.jpg is already present in the destination directory.

 

 

Appointment Reminders

Complete

OpenVPMS can send SMS reminders for upcoming appointments, automatically or manually.

To do this:

1. The Practice must have a Mail Server configured

The SMS gateways supported by OpenVPMS use email, so a Mail Server must be configured on the Practice.

2. The Practice must have SMS configured

3. An Appointment Reminder SMS Template must be configured

Reminder templates can be linked to the Practice and/or Practice Location. If a template is linked to a Practice Location, it will be used in preference to any linked to the Practice.

4. Schedules must be configured to send appointment reminders

This is done be selecting the Send Appointment Reminders flags for each Schedule that may send appointment reminders

5. Appointment Types must be configured to send appointment reminders

This is done be selecting the Send Appointment Reminders flags for each Appointment Type that may send appointment reminders

6. Customers must be able to receive SMS messages

This is done by selecting Allow SMS on their phone contact. If the customer has multiple phone contacts with Allow SMS set, then the preferred one will be used, and if none are preferred, then the first one created.

7. The Appointment Reminder Sender can be configured

This is required to send reminders automatically.

If you do not configure this (or create the sender job, but deactivate it) then appointment reminders will not be sent automatically, but can still be sent manually via the Remind button in Workflow - Scheduling. Doing things this way allows you the convenience of automatically generating the SMS text, but because the text is generated and then displayed, and allows you to personalise the reminder if required. The date and time of sending the reminder will also be recorded against the appointment.

8. The Appointment itself must have its 'Send Reminder' box ticked

This will be automatically ticked for new appointments provided that the previous conditions are satisfied. However, if you have appointments created before the Appointment Reminders system was activated, then in order to enable the automatic sending of reminders for these, you will have to edit each appointment to tick the 'Send Reminder' box.

Correct 'patient added to wrong customer'

Complete

If you have a situation is which a patient was mistakenly added to the wrong customer some time ago and you need to currect the situation and keep the patient's medical history but move all financial transations involving the patient to the correct owner, then do as follows:

1. Reverse any transactions on the OLD Customer that involved the patient to be transferred....even if they included another pet from that customer's file.

2.  Reverse any payments associated with those invoices. If payments cannot be reversed that match the invoice total - create a REFUND of the correct payment type.

3. At this point the OLD customer balance should be the same before you started.

4. Transfer the Patient to the NEW(Correct) Customer.

5. At this point you have the history, patient and customer correct - you just need to fix the transaction history.

6.  If invoices that you reversed contained transactions that were still relevant to the OLD Customer, recreate these invoices and pay them using the same payment type you reversed.

7.  In the new Customer recreate the relevant invoice items you reversed from the old customer and pay them using the same payment method you either created the refund for OR reversed in step 2.  Adjust line item costs to be the same (if prices have risen).

8. Make notes on each new invoice about the actual date the transaction took place on - do the same for payments.

9. At this point both client Balances would be in theory either zero or reflect the balance before you started the process.

10. Run a balance check over each customer.

11. The TILL for this day will have a lot of transactions that don't really exist - but the reversals and payments should balance each other out, so the nett effect on the daily total should be zero.

Deputy Integration

Complete

OpenVPMS supports integrating Workflow - Rostering with Deputy:

  • Two-way shift synchronisation is supported.
  • Synchronisation is performed for OpenVPMS Roster Areas that have been mapped to a corresponding Area in Deputy.
  • Synchronisation is performed for shifts starting today, and 30 days (by default) into the future. Historical shifts are not synchronised
  • OpenVPMS shifts that cannot be synchronised will be flagged as an error in Workflow - Rostering

This requires:

  1. a Deputy account
  2. rostering to be configured
  3. a Permanent Token for plugin authorisation
  4. the Deputy plugin to be installed
  5. the Deputy plugin to be configured

1. Deputy Account

Deputy accounts can be obtained at https://www.deputy.com.

This includes free trial accounts.

2. Configuring Rostering

See How To - Rostering.

3. Plugin authorisation token

In order for OpenVPMS to connect to Deputy, a Permanent Token must be generated.

There is an animated GIF showing this under the Permanent Token section of Deputy's API Authentication page.

  1. Go to https://<your deputy host>.deputy.com/exec/devapp/oauth_clients
  2. Click 'New OAuth Client'
  3. Fill out the fields:
    Name: OpenVPMS
    Redirect Uri: http://localhost
  4. Click 'Save This OAuth Client'
  5. Click 'Get An Access Token'
    This will display a prompt:

    Access Token is 9878a0425d4b6287131501751a407e19. This is a long life token that will last 10 years.
     

  6. Record your Access Token.

4. Plugin Installation

To install the Deputy plugin:

  1. Go to Administration - System - Plugins
  2. Click 'Install Plugin'
  3. Upload the Deputy plugin from <OPENVPMS_HOME>/plugins/available/openvpms-deputy-plugin.jar
    For OpenVPMS 2.1.2, the plugin is named openvpms-deputy-plugin-2.1.2.jar
  4. Log-out/in. This is required as the plugin archetypes aren't visible
5. Plugin Configuration

To configure the Deputy plugin:

  1. Go to Administration - Organisation
  2. Click New - Deputy Service
    Fill out the fields: 
  1. Click Apply
  2. If no Mappings are displayed, click Refresh
  3. Map Roster Areas and Employees
  • Only those Roster Areas that are mapped will be synchronised.
  • If a Roster Area is synchronised that has users that aren't mapped to Deputy Employees, affected shifts will be highlighted in the Workflow - Rostering
  1. Configure the synchronisation frequency
    By default, synchronisation happens every 30 minutes.
    This can be set to 5 minutes. Any lower frequency setting will be treated as 5 minutes.

Email Template Tips - Open Office

Complete

The following are tips and tricks to make Email Templates that generate impressive looking emails using Open Office.

Set the Content Type to Document, and if possible use an Open Office document for the Content. Avoid RTF and HTML content as these do not allow merging, and use Jasper Report (jrxml) content only if you need Jasper Reports abilities to run sub-reports. Avoid Microsoft Office content if possible, because although it does allow merging, it does not provide some of the Open Office facilities (such as conditional content).

When preparing the Open Office document, you need to be careful when you insert images.  You cannot simply inset the image, and you MUST use an image that resides on a publicly accessible website (so that the person who receives the email can access the images), and you MUST link to the image.

Thus, you insert the image, use Insert|Picture|From File... and enter the URL of the image, and ensure that the Link box is ticked - as follows:

Note that the easiest way of getting the image's URL is to open the web page where it is displayed and then right click on the image, then:

In Firefox, use Copy Image Location

In Chrome, use Copy Image Address

 

Having inserted your image, if you want to centre or right-align it then you must do as follows:

First right-click on the image and select Anchor|As Character:

Click just after the image - by default it is left aligned:

To centre or right-align, click the appropriate icon.

Finally, in normal use, it is quite common to use empty paragraphs to space between items (as has been done above). However, you will find that doing this leads to big gaps in the email text.  Just letting the paragraphs follow one after the other provides perfectly adequate spacing.

Hence, with an invoice cover-note like the following:

the generated email looks like:

Using spaces for spacing
If you have not played with HTML, you may not realise that if text in HTML documents contains multiple consecutive spaces, then these are replaced by a single space. More strictly, multiple whitespace characters are replaced by a single space.  Hence if you wish to space say two graphics apart by 3 spaces, then you cannot use space characters - instead you must use 'non-breaking space' characters.  In Open Office Writer and Microsoft Word you inject these using Ctrl-Shift-Space on a Windows machine or Option-Space on a Mac).

No gaps between paragraphs
The paragraph spacing used in Open Office Writer will be ignored. Hence if your text in Writer looks like:

then the email text will look like:

To bring the lines together, use 'New Lines' (Ctrl-Shift-Enter) instead, so that in Writer you have:

then the email text will look like:

Wrong font
There is a bug in Open Office 4.1.2 that results in a user field at the beginning of a paragraph being given no font specification and thus shows up as (the default) Times.

That is, if in Writer you have:

then the email text will look like:

Looking closely you will see that although the 'Regards' has font Arial, that for Dr Crossling has font Times.

If you change the paragraph mark after the Regards, to a new line, ie like:

then the email text will look like:

 

Email template Tips - Jaspersoft Studio

Complete

The following are tips and tricks to make Email Templates that generate impressive looking emails using Jaspersoft Studio.

Studio is designed to generate pixel-accurate documents.  This works well when generating PDF format output, but for HTML format output one needs top take into account the fact that HTML is designed to handle different screen formats.

In order to make a best effort at generating HTML output that is pixel-acurate, Studio generates the HTML using tables to position items.

To quote https://community.jaspersoft.com/wiki/making-html-xls-or-csv-friendly-re..., the guidelines are:

  1. Minimizing the number of rows and columns in the grid oriented formats (minimizing the number of "cuts").

    To do that, you have to make sure you align your report elements as often as you can, both on the horizontal and the vertical axis and that you eliminate the space between elements.

    1. Inefficient Layout:

    2. Grid friendly layout:

  2. Avoiding overlapping report elements.

    Make sure report element will not overlap when the report will be generated. This is because if you have two elements that share some region, it will be impossible for them to share the same cell in the resulting grid structure. You might obtain some unexpected results if elements overlap.

  3. Give up using page headers and page footers.

    Especially when you want to obtain documents in which the page breaks are not relevant (CSV for example), make sure that you suppress the page header and page footer sections in your report design. You could also minimize the top and bottom margins for your report, so that when exported to HTML, XLS or CSV, your documents will be made of a single chunk, without page separators.

 

We also want the email to look good in the email clients that are commonly used. It is suggested that you test with Microsoft Outlook, Gmail using a browser on a workstation or laptop, and Gmail on a smartphone.

To achieve this:

  1. use a Page Format with the height and width set to 500px, and zero for all margins
  2. in the Report Properties, check the 'Ignore Pagination' option

 

Image guidlines:

  1. Images look best if centered
  2. Microsoft Outlook renders images at their original size ignoring any height or width set in the HTML.  Hence having designed the layout with an image height of say 60px and width say 200px, and having set the image property 'Scale Image' to 'Retain Shape', you then need to ensure that the images you are using have a height or 60px and a width not exceeding 200px.

 

HL7 Laboratories

Complete

Overview

This page describes how to configure OpenVPMS to interface with an HL7 laboratory such as IDEXX LabLink. For an overview of HL7 in OpenVPMS, see Concepts - HL7.

Configuration

To configure OpenVPMS to interface with an HL7 laboratory the following steps must be performed:

1. Configure an HL7 MLLP Sender, to send HL7 messages to the laboratory

2. Configure an HL7 MLLP Receiver, to receive HL7 messages from the laboratory

3. Configure an HL7 Laboratory with the Receiver and Sender

4. Configure an HL7 Laboratory Group (optional)

5. Configure investigations to be ordered via the Laboratory/Laboratory Group

1. Configuring an HL7 MLLP Sender

The HL7 MLLP Sender is used to send orders, and patient admission and discharge messages to the laboratory. It is configured via the Aministration - HL7 - Connectors page.

Select New - HL7 MLLP Sender and enter the laboratory connection information as per your laboratory provider's instructions.

2. Configuring an HL7 MLLP Receiver

The HL7 MLLP Receiver is used to receive order cancellation messages from the laboratory. It is configured via the Aministration - HL7 - Connectors page.

Select New - HL7 MLLP Receiver and enter the laboratory information as per your laboratory provider's instructions.

Note that Port is a TCP/IP port that OpenVPMS listens on. It must be accessible to the laboratory through any firewall. Appropriate security precautions should be taken to avoid other parties from accessing the port.

3. Configuring an HL7 Laboratory

The HL7 Laboratory is used to specify a pharmacy to send pharmacy orders to, and receive dispense messages from. It is configured via the Administration - HL7 - Services page.

Select New - HL7 Laboratory and enter the:

  • HL7 MLLP Sender configured in step 1 for the Order Connector
  • HL7 MLLP Receiver configured in step 2 for the Cancel Connector

4. Configuring an HL7 Laboratory Group

An HL7 Laboratory Group is used to group laboratories by Practice Location.

It is only required for multi-location practices that use different laboratories for each practice location.

It is configured via the Administration - HL7 - Services page.

Select New - HL7 Laboratory Group and enter the HL7 Laboratory or Laboratories configured in step 3.

5. Configuring Investigations

To configure investigations to be ordered by a Laboratory/Laboratory Group, edit the Investigation Types and set the appropriate Universal Service Identifier and Laboratory.

Testing the Connection

The simplest way to test the connection between OpenVPMS and the laboratory provider is to admit a patient. This will send an HL7 ADT A01 message via the Order Connector to the laboratory.

Its progress can be viewed on the OpenVPMS side by going to Administration - HL7 - Connectors, selecting the appropriate HL7 MLLP Sender, and clicking Messages.

To test the connection from the laboratory to OpenVPMS, charge an investigation, and then cancel the corresponding order at the laboratory. A corresponding:

  • HL7 ORM O01 should appear in the Messages window for the HL7 MLLP Receiver
  • Laboratory Return should appear in Customer - Orders

HL7 Pharmacies

Complete

Overview

This page describes how to configure OpenVPMS to interface with an HL7 pharmacy such as Cubex. For an overview of HL7 in OpenVPMS, see Concepts - HL7.

Configuration

To configure OpenVPMS to interface with an HL7 pharmacy the following steps must be performed:

1. Configure an HL7 MLLP Sender, to send HL7 messages to the pharmacy

2. Configure an HL7 MLLP Receiver, to receive HL7 messages from the pharmacy

3. Configure an HL7 Pharmacy with the Receiver and Sender

4. Configure an HL7 Pharmacy Group (optional)

5. Configure products to be dispensed via the Pharmacy/Pharmacy Group

1. Configuring an HL7 MLLP Sender

The HL7 MLLP Sender is used to send pharmacy orders, and patient admission and discharge messages to the pharmacy. It is configured via the Aministration - HL7 - Connectors page.

Select New - HL7 MLLP Sender and enter the pharmacy connection information as per your pharmacy provider's instructions.

2. Configuring an HL7 MLLP Receiver

The HL7 MLLP Receiver is used to receive pharmacy dispense messages from the pharmacy. It is configured via the Aministration - HL7 - Connectors page.

Select New - HL7 MLLP Receiver and enter the pharmacy information as per your pharmacy provider's instructions.

Note that Port is a TCP/IP port that OpenVPMS listens on. It must be accessible to the pharmacy through any firewall. Appropriate security precautions should be taken to avoid other parties from accessing the port.

3. Configuring an HL7 Pharmacy

The HL7 Pharmacy is used to specify a pharmacy to send pharmacy orders to, and receive dispense messages from. It is configured via the Administration - HL7 - Services page.

Select New - HL7 Pharmacy and enter the:

  • HL7 MLLP Sender configured in step 1 for the Order Connector
  • HL7 MLLP Receiver configured in step 2 for the Dispense Connector

4. Configuring an HL7 Pharmacy Group

An HL7 Pharmacy Group is used to group pharmacies by Practice Location.

It is only required for multi-location practices that use different pharmacies for each practice location.

It is configured via the Administration - HL7 - Services page.

Select New - HL7 Pharmacy Group and enter the HL7 Pharmacy or Pharmacies configured in step 3.

5. Configuring Products

To configure products to be dispensed by a Pharmacy/Pharmacy Group, set the Pharmacy on the appropriate Medication or Merchandise product, or the Product Type.

For large numbers of products, specifying the Pharmacy on the Product Type is the preferred approach, although all products with the Product Type must be dispensed this way.

Testing the Connection

The simplest way to test the connection between OpenVPMS and the pharmacy provider is to admit a patient. This will send an HL7 ADT A01 message via the Order Connector to the pharmacy.

Its progress can be viewed on the OpenVPMS side by going to Aministration - HL7 - Connectors, selecting the appropriate HL7 MLLP Sender, and clicking Messages.

To test the connection from the pharmacy to OpenVPMS, dispense a product. A corresponding:

  • HL7 RDS O13 should appear in the Messages window for the HL7 MLLP Receiver
  • Customer Order should appear in Customer - Orders

Online Bookings

Complete

Overview

OpenVPMS can accept online bookings from external providers, such as MyHealth1st's PetYeti Find A Vet portal.

To enable support for online booking, the following are required:

  1. Each participating Practice Location, Schedule and Appointment Type must have Online Booking enabled
  2. Each Schedule may specify Online Booking Times. These can be used to specify different times than the default for a schedule.
  3. A dedicated OpenVPMS user account should be created that is used solely for online bookings. The provider will use this to submit bookings.

Online Bookings

Online booking appointments will appear in the Scheduling display with a computer icon. In the Appointment editor, the Online Booking flag will be ticked.

If the customer is new or unrecognised, the appointment will display:

No Customer

The customer details will be displayed in the Booking Notes when editing the appointment.

Check-In may not be performed on the appointment until a customer is entered.

If the patient is new or unrecognised, its name will appear in the Booking Notes.

Security

There are a number of security considerations to be aware of:

  • an OpenVPMS user account is required to make online bookings. This should be a restricted account that only has the authorities required to make online bookings.
    This can be done by creating a user that only has the Online Booking role assigned.
  • the OpenVPMS web application should not be exposed to the wider internet to allow external providers to connect. Restricted access can be provided through a VPN, IP filtering, and/or URL filtering. For the purposes of online booking, only the:
       /openvpms/ws/booking
    URL should be exposed.

 

Online Investigations with IDEXX VetConnect

Complete

OpenVPMS can submit online orders for patient Investigations, and automatically have the results attached and displayed in patient history.

To do this:

  1. enable plugin support, if required
  2. install the IDEXX VetConnect PLUS plugin
  3. configure the IDEXX VetConnect plugin
  4. synchronise data
  5. link devices to Practice Locations
  6. add tests to products

1. Enable Plugin Support

Plugin support is provided in Administration - System - Plugins.

See the corresponding help for instructions on enabling plugins.

2. Install the IDEXX VetConnect PLUS plugin

The IDEXX VetConnect plugin is a file with a .jar extension provided by IDEXX, and will be named something like vetconnect-openvpms-plugin-2.2.jar.

To install it:

  • go to Administration - System - Plugins
  • click Install Plugin
  • in the Upload window, select Browse and enter the path to the plugin .jar
  • click Send
  • once uploaded it should appear in the list of plugins as IDEXX VetConnect PLUS OpenVPMS plugin, with a status of Active

3. Configure the IDEXX VetConnect PLUS plugin

The IDEXX VetConnect PLUS plugin needs to be configured to enter the user name and password to connect to IDEXX VetConnect PLUS.

To configure it for the first time:

  • log out and back in again
    This is required as the plugin installs archetypes which won't be immediately visible, due to caching
  • go to Administration - Laboratories and select New -> IDEXX VetConnect PLUS and enter the user name and password provided by IDEXX
  • click Apply
  • click Mappings - Species Mappings to map OpenVPMS species to their equivalents in IDEXX
    Select the Other species if there is no direct match.
  • click OK

4. Synchronise data

With the IDEXX VetConnect PLUS laboratory created in step 3 selected, click the Synchronise Data button.

This will create Investigation Types, Laboratory Devices and Laboratory Tests for use with IDEXX VetConnect PLUS.

Two Investigation Types will be created:

  • IDEXX VetLab Station - for tests that are performed by in-house IDEXX VetLab Station devices
  • IDEXX Reference Laboratory - for tests that are performed by an IDEXX Reference Laboratory

All IDEXX VetConnect PLUS test will be linked to one of these two Investigation Types.

5. Link Laboratory Devices to Practice Locations

Practices with multiple Practice Locations should limit which Practice Locations can use which Laboratory Devices.

To do this:

  • show the available Laboratory Devices in Administration - Laboratory; and
  • edit them; and
  • add the correct Practice Location to each device on the Locations tab

6. Add Laboratory Tests to products

Tests are ordered by attaching them to products. When the product is charged, the associated tests will be used to create an Investigation which will be submitted to IDEXX VetConnect PLUS.

The results will be automatically attached to the investigation as they become available.

To attach tests to a product:

 

 

 

Online insurance claims with PetSure VetHub

Complete

OpenVPMS can submit insurance claims to insurers managed by PetSure VetHub.

To do this:

  1. enable plugin support, if required
  2. install the PetSure VetHub plugin
  3. configure the PetSure VetHub Insurance Service
  4. synchronise insurers
  5. create a policy
  6. submit a claim

1. Enable Plugin Support

Plugin support is provided in Administration - System - Plugins.

See the corresponding help for instructions on enabling plugins.

2. Install the PetSure VetHub plugin

The PetSure VetHub plugin is a file with a .jar extension provided by PetSure, and will be named something like vethub-openvpms-plugin-2.0.jar.

To install it:

  • go to Administration - System - Plugins
  • click Install Plugin
  • in the Upload window, select Browse and enter the path to the plugin .jar
  • click Send
  • once uploaded it should appear in the list of plugins as PetSure VetHub OpenVPMS plugin, with a status of Active

3. Configure the PetSure VetHub Insurance Service

The PetSure VetHub Insurance Service needs to be configured to enter the user name and password to connect to VetHub.

To configure it for the first time:

  • log out and back in again
    This is required as the plugin installs archetypes which won't be immediately visible, due to caching
  • go to Administration - Organisation and select New -> PetSure VetHub Insurance Service
  • enter the user name and pass word provided by PetSure
  • click OK

4. Synchronise Insurers

The Synchronise Insurers button makes all insurers supported by PetSure VetHub available for use in OpenVPMS.

It:

  • adds insurers not already present in OpenVPMS
  • updates existing insurers
  • deactivates insurers no longer supported by PetSure VetHub

Only insurers that have been added via Synchronise Insurers can be used to submit claims to PetSure VetHub.

5. Create a Policy

New insurance policies can be created via Patient - Medical Records - Insurance by clicking the New Policy button.

This will display a New Insurance Policy window.

In order for claims to be made via PetSure VetHub, the Insurer must be one of the insurers added via Synchronise Insurers.

6. Submit a Claim

New insurance policies can be created via Patient - Medical Records - Insurance by clicking the Claim button.

This will display a New Insurance Claim window.

Once the claim is filled out, click the Submit button to submit it to PetSure VetHub.

This will display a declaration an Accept and Decline option. For the claim to be submitted, click Accept.

Orders and Deliveries

Complete

This page covers how to run the Supplier's side of OpenVPMS - ie how to generate orders and receive deliveries.

Note that the ESCI system is not covered here.

The first thing to do is to ensure that you have things set up so that ordering system will work. ie

  • the suppliers have been created using Suppliers|Information|New
  • products from that supplier set to use it and the supplier is set as preferred, and the ordering information is set in the product's Supplier Tab
  • products have their stock location data set with current, ideal and critical quantities set in the product's Stock Locations Tab

 

The basic flow is:

  1. Use Suppliers|Orders to create an order to a given supplier for a given stock location, edit if necessary, and when satisfactory, finalise the order [and print and send off to the supplier]. You can either use the Generate Orders button to generate the order(s), or you can create the order by keying in the line items and quantities, or you can do both - ie use Generate Orders, and then edit the order to add more items.
     
  2. When stuff arrives, use Suppliers|Deliveries to create the delivery record to tell the system that stuff has arrived, edit if necessary, and when satisfactory, finalise the delivery. Note that the system makes it easy for you to create the delivery record - it will bring up a list of what is on order and you just tick off the items (or if all got delivered, the complete order). If an item was short-shipped (eg you ordered 10 and got 7), then tick the item to get it listed as one of the delivered line items, and then edit the delivery line item to record the lower actual quantity. If an item was over-shipped (eg you ordered 10 and got 15) and you are going to accept the extras (and not send them back to the supplier) just record the quantity actually received.

    Note that when you press the Finalise button you are finalising THIS delivery - you are not necessarily indicating that the complete order has all been delivered - just the stuff that arrived today. The act of finalising the delivery updates the stock and and if you have Auto-Price update set, then the cost price (and hence your sell price) will be automatically updated.

    If this was a part delivery, when more stuff arrives, create the delivery, edit if required, and finalise this delivery.

    If you receive less than you ordered, and you know that there will be no more deliveries, then you need to edit the order (not the delivery) to indicate this.  There are two ways to do this: either you can change the order's status to Cancelled, or (more correctly), for those line items that short-shipped, set the Quantity Cancelled equal to (Quantity Ordered - Quantity Received). In this second case, the order's delivery status will change to Full when all the line items have (Ordered - Received - Cancelled) less than or equal to zero.

We have now done all that is really required. However, if you want OpenVPMS to track the supplier financials, then you need to generate the supplier invoices and enter the payments. Note that you do not need to do this, and many practices use their accounting system to handle the supplier finances.

Invoices and payments are handled as follows:

  1. Select a finalised delivery on the Suppliers|Deliveries  screen and press the Invoice button.  The system will create the invoice to the supplier for all delivered items from that supplier. Hence if the order was delivered in three lots, then if you wait until you have three finalised deliveries, pressing Invoice will create just one invoice.
  2. Now use Suppliers|Charges to process the invoice - edit it if necessary, and then finalise it.  Note that the Supplier will not want this invoice - he should have already sent you one.  Hopefully the two will agree - in fact you should delay finalising the invoice until the two do agree. [You may have set the supplier's list price wrongly, so your order shows the widgets at $10 each, but the supplier is actually charging $11.50 each.]
  3. Having finalised the invoice, it will now appear in Suppliers|Accounts. After you pay the supplier, you can now use Supplier|Payments to tell the system that you have paid.

 

Given the above flow, when the system is running happily, you use the Generate Orders button on the Suppliers|Orders screen to generate the order (s).  See the above link for the algorithm used.

In a startup situation, you will have orders outstanding that the system does not know about. You could use Suppliers|Orders|New to enter the order.  However, this is not mandatory - you can simply create the delivery records as the stuff is delivered. Note that because you have not entered the order, when you press New on the Suppliers|Deliveries screen,  the system will not find any orders to be delivered. Just OK this and it will generate an empty delivery record for you and you can manually add it all the line items that have been delivered.  Finalising this delivery will cause the stock to be updated.

 

 

Over the Counter Refund

Complete

If you do an OTC sale to an anonymous customer, and then they return the goods and you want to do a refund, the procedure is as follows:

  1. Call up the Customers|Account screen
  2. Press the Select button and search for the OTC account and select it
  3. Look through the transactions to find both the Invoice for the OTC sale you want to refund and its payment
  4. Select each in turn and press the Reverse button to reverse the two transactions. This will create a credit to reverse the invoice and a refund to reverse the payment

Now do the physical reversal - ie put the item(s) back on the shelf, and give the customer back their money.

Note that the refund created by reversing the payment will have the same payment type as the original payment, and you will need to do the refund the same way.

Thus, if they paid by credit card, you will need to do a credit on their credit card. You should NOT just give them money from the till.

Patients and Customers - Adding

Complete

The fastest way to add a new customer and their patient(s) is to do as follows:

1. On Customers|Information screen, click New then fill in the name etc, and then press the Add button on the Patient tab, and then the binoculars after the Patient name slot - ie as follows:

 

Having pressed the Patient binoculars, you will get:

Press the New button, and fill in the patient details so it looks like the following (note the use of the relative date facility to quickly set the Date of Birth and hence Age):

 

And then press the OK button, which will bring you back to the new customer screen as follows:

If you want you can set the ownership date to the real ownership start date (ie ask Mr Smith when he acquired Rover) but it’s not necessary.

If there are more patients, press Apply to save what you have entered, and then click the Patient Add button to add the next patient.

Having added the patients, you can now click the Contacts tab so that you can add Mr Smith’s contact details.

Finally, press the OK button and you have a new customer with their patient(s).

 

Patients and Customers - Finding

Complete

If you have already found your customer, then you can either select the patient from the Customers|Information screen, or you can click Patients in the top menu and use the Select button (useful if the customer is a boarding kennel and has 300 patients recorded).

If you are looking for a patient and have not already found the customer, then Patients|Information|Select may be used.

As shown below, if you omit any customer information, but provide some or all of the patient name, you will be shown all the matching patients, irrespective of owner.

Print General Labels

Complete

The standard drug label templates include a facility to generate a general purpose label.  A general purpose label will be printed for any medication product with the Printe Name set to "LABEL-CSB". For example:

This will generate a label like:

(this is using the Diskette sized label). As you can see the 'Animal Use Only' gets suppressed and the product name is replaced by the patient's Colour/Species/Breed (hence the CSB).

Note that because you can do a New Medication on the Patients|Medical records screen, select this product, fill in the label text and print the label, and THEN cancel, you can generate a label and not leave an entry in the medical records.

Restrict what products are available at each location

Complete

If you have multiple locations, you may wish to limit which products are visible to each location in charges, estimates, reminders and patient documents.

By default, all products are available at all locations, and there is no block against invoicing an item for which there is no record of any stock at the current location. (You will get a no stock warning, but if you go ahead and finalise the invoice, a stock record for that item will be created with a negative quantity.)

If you want to limit what products are available then you need to set the 'Use Location Products' flag in the Practice. Having does this, then:

  • Medication and merchandise products will only be available if they have a Stock Location relationship. That is, there is (or has previously been) stock at the location. To make the product available at that location you will either have to:
  1. transfer stock to that location, or
  2. finalise a delivery of the product to that location, or
  3. edit the product and on the Stock Locations tab, create a Product Stock Location record for that location.

If there has been stock at the location, and you wish to make it unavailable at that location, then you simply edit the product and, on the Stock Locations tab, simply delete the Product Stock Location record for that location. (Obviously, if there is stock at that location, then you will want to transfer it elsewhere before deleting the record.)

  • Service and template products will available UNLESS they have been excluded via their Locations tab.

In addition, templates can indicate what should happen if an included product isn't available at the location. It the the Skip If Missing option is checked then the product will be ignored if it isn't available at the current practice location. This allows a common template to be used that selectively includes products based on the location. The Skip If Missing is not checked (the default) then the template expansion will fail if the product isn't available at the location.

Rostering

Complete

Rostering enables employees to be scheduled to work, and identifies which clinicians can be scheduled for online booking.

To set up rostering:

  1. Enable rostering at the Practice Location
  2. Create Roster Areas
  3. Assign users to Practice Locations
  4. Enable Online Booking for clinicians
  5. Configure Caching
  6. Create Shifts

1. Enabling rostering at the Practice Location

In order to do rostering it needs to be enabled. This is done on a per-Practice Location  basis.

  1. Go to Administration - Organisation
  2. Edit the Practice Location that rostering is to be used at
  3. tick the Rostering box
  4. change the Roster Check Period, if required.
    This determines how far into the future to check the roster when scheduling clinicians to appointments. E.g., if the period of 4 weeks, the roster will be checked when assigning a clincian to an appointment created between the current date and 4 weeks in the future.
    If a clincian isn't rostered on, a warning will be displayed.

2. Creating Roster Areas

Roster Areas are areas within a Practice Location where employees work, e.g. Surgery, Reception, Grooming, or Boarding.
They can be assigned Schedules, indicating which schedules a clinician can work on.

  1. Go to Administration - Organisation
  2. New Roster Area
  3. Enter the Name, optional Description, and practice Location, and add any Schedules.
  4. click OK
  5. repeat for each area in the practice

3. Assign users to Practice Locations

This step applies to multiple-locaction practices, where employees only work at one or several of the practices. It can be skipped for single-location practices.

In the Employees view of the Rostering workspace, all employees who can work at the current location are displayed.
To ensure that only those employees who work at the current location are displayed:

  1. Go to Administration - Users
  2. edit each User and on the Locations tab, add the practice locations that the user works at

4. Enable Online Booking for Clinicians

By default, online bookings aren't associated with any particular clinician. To allow customers make an online booking with specific clinicians:

  1. Go to Administration - Users
  2. edit each clinician User, and click the Online Booking flag

Notes:

  • clinician availability is determined by the clincian's roster. A clinician will be unavailable if no roster has been set up for the period when a customer makes an appointment
  • the booking provider must support v2 of the OpenVPMS Booking API

5. Configure Caching

Rostering data is cached for performance reasons. Two caches are used, Roster By Area, and Roster By Employee. The default sizes of these are determined by the number of Roster Areas and the number of Users respectively.

These only need to be changed if Roster Areas or Users are added or deleted or marked inactive.

To configure Rostering data caching:

  1. Go to Administration - System
  2. click Caches
  3. select Roster By Area
  4. click Edit
  5. select Suggested, and click OK
  6. select Roster By Employee
  7. click Edit
  8. select Suggested, and click OK
  9. click Close

6. Create Shifts

Employees are rostered to areas by creating Shifts in Workflow - Rostering.
New shifts can be created by double-clicking in an empty cell on the Areas or Employees tab. Shifts can be copied using Ctrl-C and pasted into an empty cell using Ctrl-V.

To avoid scheduling warnings when assigning clincians to appointments, shifts should be created at least a week beyond the Roster Check Period.

 

 

 

Smart Flow Sheet integration

Complete

1. Overview

OpenVPMS can connect to Smart Flow Sheet to:

  • create Flow Sheets for patients
  • charge treatments given to a patient in Smart Flow Sheet
  • add notes entered in Smart Flow Sheet to the corresponding patient's history
  • import Medical Record, Billing, Notes, Flow Sheet and Anaesthetic reports, and add them to a patient's history
  • dicharge patients at check-out

To use Smart Flow Sheet:

  1. Configure the Smart Flow Sheet Clinic API Key
  2. Synchronise products
  3. Synchronise clinicians
  4. Configure work lists to create Flow Sheets (optional)
  5. Configure Smart Flow Sheet

See Troubleshooting to diagnose Smart Flow Sheet related errors.

2. Configuring the Smart Flow Clinic API Key

Smart Flow Sheet needs to be enabled for each Practice Location where it will be used. This is done by:

  1. Editing the Practice Location
  2. Copying the API KEY displayed on the EMR Integration Settings page to the Smart Flow Sheet Clinic API Key

Multiple Smart Flow Sheet accounts are required if you have multiple Practice Locations, and:

  • wish to receive billing information from Smart Flow Sheet; or
  • limit products that are available for treatment, per location; or
  • limit users that are available, per location

You will need to log out after making this change for it to take effect.

Once enabled:

3. Synchronising products

In order to see OpenVPMS products in Smart Flow Sheet, they need to be synchronised.

This:

  • adds products to Smart Flow Sheet that aren't already present
    Only Medication, Merchandise and Service products are added, that are:
    • active, and;
    • available at the current Practice Location*, and;
    • don't have Use only in Templates set, and;
    • have no Product Type, or have a Product Type with Synchronise with Smart Flow Sheet ticked
  • updates products in Smart Flow Sheet, that have changed since they were last synchronised. 
  • removes products that are no longer active, or are no longer being synchronised 

* To be available at the current Practice Location:

  • Medication and Merchandise products must have a Stock Location relationship with the current Practice Location's Stock Location
  • Service products must have a Location relationship with the current Practice Location, if the Practice Use Location Products option is selected

Before synchronising products for the first time, log in as an administrator and go to Administration - Types. Edit each Product Type that should be synchronised, selecting Synchronise with Smart Flow Sheet.

To synchronise products, log in as an administrator user and go to Products - Information and click Synchronise with Smart Flow Sheet

Whenever products are updated, they should be synchronised.

Medication products

Medication products that have a Concentration must also specify the concentration units and Dispensing Units in order to fully synchronise.

Multiple Practice Locations

In multi-location practices, product synchronisation needs to be done for each practice location that has Smart Flow Sheet configured.

If the Practice Use Location Products option is selected, only the products linked to the current location will be synchronised. All other products will be removed.

4. Synchronising clinicians

In order to see OpenVPMS clinicians in Smart Flow Sheet, they need to be synchronised. This:

  • adds clinicians to Smart Flow Sheet that aren't already present
    Only active clinicians that are available at the current Practice Location are added
  • updates clinicians in Smart Flow Sheet, that have changed since they were last synchronised. 
  • removes clinicians that are no longer active

To synchronise clinicians, log in as administrator user, and go to Administration - Users and click Synchronise with Smart Flow Sheet.

Whenever clinicians are updated, they should be synchronised.

Multiple Practice Locations

In multi-location practices, clinician synchronisation needs to be done for each practice location that has Smart Flow Sheet configured.

Only the clinicians that are available at the current practice location will be synchronised.

5. Configuring Work Lists to create Flow Sheets

Work Lists have a Create Flow Sheet option. When ticked, this will create a new Flow Sheet for a patient when the patient is:

  • added to the Work List during Check In
  • transferred to the Work List

Flow Sheets are linked to the patient Visit, so no new Flow Sheet will be created if one already exists for the Visit.

6. Configuring Smart Flow Sheet

Smart Flow Sheet provides an EMR Integration Settings page that determines the notifications that OpenVPMS receives.

6.1 Billing

To invoice treatments given in Smart Flow Sheet, set the following options to ON:

  • Send Billing & Medical Records to EMR
  • Send Anesthetic Billing & Medical Records to EMR

When OpenVPMS receives treatment notifications, it creates Customer Pharmacy Orders. If a treatment is amended or removed, it may create a Customer Pharmacy Return to reverse any invoiced amount.

Where possible, these will be automatically invoiced during the Check-In, Consult and Check-Out workflows.

NOTE: if you have multiple practice locations, you must use a separate Smart Flow Sheet account for each location when using these options to avoid charges being associated with the wrong location.

Cubex

If you connect Smart Flow Sheet and OpenVPMS to Cubex, you should set the options to OFF, to avoid double charging.

6.2 Notes

Notes entered into Smart Flow Sheet will automatically be added to patient history.
By default, notes shorter than 5 words are excluded, as they typically aren't very useful.

This behaviour can be changed by adding a Smart Flow Sheet Configuration to the Practice. The Synchronise Notes and Minimum Word Count options affect note synchronisation:

  • Synchronise Notes can be used to enable or disable note synchronisation.
    When ticked, notes entered into Smart Flow Sheet update the patient history, subject to the Minimum Word Count below.
    When unticked, notes entered into Smart Flow Sheet will not update the patient history.
  • Minimum Word Count is used to exclude new notes that are too short. This only applies to notes that are being added for the first time; if a note has fewer words than the mimum count, it will not be added to the patient history. If an existing note is changed to have fewer words than the minimum count, it will be updated in the patient history to reflect the change.
    If too many notes are being synchronised that aren't relevant, consider increasing the minimum count.

6.3 Patient Discharge

To notify OpenVPMS when a patient is discharged from Smart Flow Sheet, set Export Documents to EMR to YES on the Smart Flow Sheet Documents Management page.

This allows OpenVPMS to automatically attach the reports to the patient Visit.

Individual Reports

By default, all available reports are attached as individual PDF files. This includes:

  • Medical Records
  • Billing
  • Notes
  • Flow Sheet
  • Anesthetics
  • Forms

To detemine which reports are attached, and which aren't, add a Smart Flow Sheet Configuration to the Practice.

For each report that should be attached, it's corresponding Files to Retain After Discharge option must be set to YES.

Single Report

If the Merge reports into one PDF option in Documents Management is set to YES, Smart Flow Sheet will generate a single PDF containing all of the reports.

In this case, add a Smart Flow Sheet Configuration to the Practice with the Save Flow Sheet Report On Discharge selected, and all of the other Save .. On Discharge deselected.

7. Troubleshooting

  • SFS-0103: Failed to connect to Smart Flow Sheet. Check that the Smart Flow Sheet Clinic API Key is correct.

Check that the Smart Flow Sheet Clinic API Key matches that provided by Smart Flow Sheet.

  • SFS-0118: Failed to download Smart Flow Sheet - Medical Records
    The manager turned off document on the Settings / Documents management page

The report needs to have its corresponding Files to Retain After Discharge option set to YES on the Documents Management page.

  • Production/Test systems
    If you have both a production and test installation of OpenVPMS, you should either:
    • disable Smart Flow Sheet integration in the test system; or

    • discharge any patients that have had flow sheets created by the test system, before using it for production

This is because Smart Flow Sheet hospitalisations are linked to OpenVPMS by the patient's Visit identifier, and you cannot have two flow sheets for the same Visit identifier.
 

Test Reminders

Complete

If you are building or modifying reminder templates, then you will want to test them.

A convenient way to do so is as follows.

First set up the following:

  1. a test practice location called say ZZ Test (this will enable you to process just reminders for customers whose practice location is set to ZZ Test)
  2. a test customer say ZZ Test (whose practice location is set to ZZ Test) who has a patient say ZZ Dog. 
  3. two test reminders called say ZZ Test1 and ZZ Test2 (you need 2 if you are want to test grouped reminders)

Now call up Patients|Medical Records|Reminders for ZZ Dog and use New to create two reminders, one for ZZ Test1 and the other for ZZ Test2. For each, add an item for each type of reminder (Print, Email, SMS, Export or List) that you want to test, eg:

Now go to Reporting|Reminders, set the Location to ZZ Test and you will see something like:

You can now press the Send All button and it will send these reminders.

Use Gmail to send mail

Complete

If you have a Gmail account, you can use Gmail's SMTP server to send out mail from OpenVPMS.  Setting up things this way is particularly useful if you are using your Gmail address as the From address in OpenVPMS - because some mail systems (Gmail in particular) check the From address against the SMTP server used to transmit the email and will generate warnings to the recipient if the SMTP server used does not match the from address.

To use your Gmail account as an SMTP server, you need to set up a Mail Server record (via Administration|Organisation) as follows:

The Name, Description, Username, and Password should be set to suit your setup.

You will then need to set this Mail Server in the Practice and/or Practice Location records as required.

Note that one idiosyncrasy of the Gmail SMTP server is that if the From address in the email differs from that being used then the From address will be updated to reflect the name of the account used to send the email.

Hence if the From address is set to "XYZ Vets Inc<xyzvets[at]gmail[dot]com>", and the above Mail Server is used, then the From address will be changed to "XYZ Vets Inc<dg12345[at]gmail[dot]com>".  Thus, in the above case, it would be better to use the xyzvets[at]gmail[dot]com account in the Mail Server record.

Reference

Complete

This section contains reference information which will be useful to administrators, integrators, and others who need to know "what's under the hood".

Audit

Complete

OpenVPMS has a simple but incomplete audit facility that needs to be explicitly enabled - see below.

Some records (eg invoices) record the 'author' - ie the name of the user who created them. However, this is not universal - for example no author is recorded on the customer record.

 

Audit Service
The audit service is very limited. It has never been developed beyond prototype phase. As such, it doesn't audit all of the operations performed on the database nor does it log the user that performed the operation.  It works by intercepting calls to the archetype service but it does not intercept the method where multiple objects are saved at once.

This method is used in many places, including:

* editing
* lookup merging
* customer merging
* invoice/credit reversals
* document generation
* customer balance updates
* till clearing

If you want to try it out, you need to edit applicationContext.xml located in <TOMCAT_HOME>/webapps/openvpms/WEB-INF/ and uncomment auditDao, auditService, autoProxyCreator, and auditServiceAdvisor so that things look as follows:
 

     <bean id="auditDao"
          class="org.openvpms.component.business.dao.hibernate.im.audit.AuditDAOHibernate">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <bean id="auditService"
          class="org.openvpms.component.business.service.audit.AuditService">
        <constructor-arg ref="auditDao"/>
    </bean>

    <bean id="autoProxyCreator"
          class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames">
            <list>
                <value>archetypeService</value>
            </list>
        </property>
        <property name="interceptorNames">
            <list>
                <value>auditServiceAdvisor</value>
            </list>
        </property>
    </bean>

    <bean id="auditServiceAdvisor"
          class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
        <property name="advice" ref="auditService"/>
        <property name="patterns">
            <list>
                <value>.*ArchetypeService\.save</value>
                <value>.*ArchetypeService\.remove</value>
            </list>
        </property>
    </bean> 

Caching

Complete

There are multiple caches within OpenVPMS. These are used to improve performance, but in some cases and circumstances changes you make may not be immediately effective.

 

In general, if you update the database outside OpenVPMS, the changes:

  • won't be seen immediately; or
  • won't be seen until the object is edited, assuming it is not in the second level cache
  • won't be seen till restart

The major caches are listed below:

1. Hibernate's second level cache, configured by ehcache-web.xml

Elements in this cache are set with <expiry><none/></expiry> which means that they don't expire unless the cache capacity is reached, in which case the least recently used will be tossed out.

2. Archetypes

Elements in this cache can only be updated by:

  • editing/loading archetypes via Administration - Archetypes
  • Tomcat restart

3. Lookups

Elements in this cache can be updated:

  • by editing via Administration - Lookups
  • when cache capacity is exceeded - least recently used elements are discarded
  • on low memory - elements will be shed from the cache to reclaim memory
  • by clearing the Lookups cache in Administration - System - Caches
  • by Tomcat restart

4. Appointments

Elements in this cache can be updated:

  • by editing via Workflow - Scheduling
  • when cache capacity is exceeded - least recently used elements are discarded
  • on low memory - elements will be shed from the cache to reclaim memory
  • by clearing the Appointments cache in Administration - System - Caches
  • by Tomcat restart

5. Tasks

Elements in this cache can be updated:

  • by editing via Workflow - Tasks
  • when cache capacity is exceeded - least recently used elements are discarded
  • on low memory - elements will be shed from the cache to reclaim memory
  • by clearing the Tasks cache in Administration - System - Caches
  • by Tomcat restart

6. Roster

Elements in this cache can be updated:

  • by editing via Workflow - Rostering
  • when cache capacity is exceeded - least recently used elements are discarded
  • on low memory - elements will be shed from the cache to reclaim memory
  • by clearing the Roster By Area and Roster By User caches in Administration - System - Caches
  • by Tomcat restart

 

7. Current user context

This includes the current:

  • practice
  • practice location
  • stock location
  • schedule view
  • schedule
  • work list view
  • work list
  • customer
  • patient
  • clinician
  • user
  • till
  • deposit account

Refreshed by:

  • logging out/in

Functions - JXPath Extensions

Complete

OpenVPMS uses JXPath to perform expression evaluation within archetypes, macros, and reports.

The following extension functions can be used within expressions. They are grouped as GeneralDate, Expression, List, Contact, Patient, Party, Math, Macro, History, Product, Reminder, Supplier and User functions.

In the examples below you will see arguments like $patient, $customer, $visit, etc. This is a convenient shorthand for openvpms:get(.,'xxxx.entity') where xxxx is patient, customer, etc.  You can also use Application Fields and here also there needs to be a $ prefix, eg $OpenVPMS.location to access the current Practice Location.

Note that the $ shorthand is only available in the GUI environment. Specifically, it can be used in macros invoked the by user, but not in macros invoked by macro:eval() when generating forms and letters.

To enclose string arguments, you can use either " or ', ie "ABC" and 'ABC' are equivalent.

General Functions

Function Description

openvpms:get(object, node)
openvpms:get(object, node, default)

  • object: any archetype
  • node: the node name
  • default: the default value

Note that in the case where the node is an object reference (such as the node patient in the act.customerAppointment) then the node 'patient.objectReference' will return the patient object and one can then use this to access the patient details. In this case (see examples) using the / syntax to access the child node provides a shorthand.

Returns the named node. If the object is null, then the default value is returned, or a null string if no default value is provided.

The node name may be a single or composite name. The former returns the immediate node. A composite name is multiple node names separated by ".".

Two special node names are defined:

  • displayName - returns the display name of object's archetype
  • shortName - returns the archetype short name

Examples

  • openvpms:get(.,"displayName")
  • openvpms:get(.,"shortName")
  • openvpms:get(.,"name")
  • openvpms:get(., "customer.entity.id")

Object Reference Examples (the first two are equivalent)

  • openvpms:get(openvpms:get(.,"patient.objectReference"),"id")
  • openvpms:get(.,"patient.objectReference")/id
  • openvpms:get(openvpms:get(.,"patient.objectReference"),"id","No patient")

openvpms:set(object, node, value)

  • object: any archetype
  • node: the node name
  • value: the value to be set
Sets the named node to the supplied value.

The node name may be a single or composite name. The former sets the immediate node. A composite name is multiple node names separated by ".".

Examples

  • openvpms:set(.,"deceasedDate",java.util.Date.new())
  • openvpms:set(.,"deceased",true())

Note that this is a powerful low level function which should be avoided if there is a dedicated function for the task (as there is indeed for the above two examples). Indeed after build 7516, this function cannot be used in reports and macros, and can only be used in demographic updates.

openvpms:lookup(object, node)
openvpms:lookup(object, node, default)

  • object: any archetype
  • node: the node name
  • default: the default
     

Returns the name of a lookup node. If object is null, then the default value is returned, or a null string if no default value is provided.

The node name may be a single or composite name. The former returns the immediate node. A composite name is multiple node names separated by ".".

Examples

  • openvpms:lookup(., "title")
  • openvpms:lookup(., "patient.entity.species")
  • openvpms:lookup(openvpms:get(.,"patient.objectReference"),"breed")
  • openvpms:lookup(openvpms:get(.,"patient.objectReference"),"breed","No patient")

Date Functions

Note that the date: functions return a timestamp. If you want a printable result then you will need to use date:format to transform the timestamp into printable text - something like:
  date:format(date:add(openvpms:get(.,"startTime"),"2y"),"d MMMM yyyy")

Function Description

date:now()

date:today()

date:tomorrow()

date:yesterday()

Returns the current date and time

Returns the current date, with the time set to 00:00

Returns tomorrow's date, with the time set to 00:00

Returns yesterday's date, with the time set to 00:00

Note that java.util.Date.new() is equivalent to date:now().

date:add(dateTime, period)

  • dateTime: the date/time to add to
  • period: the period to add

Adds (or subtracts) a period to a date/time.

The period is of the form:

({+|-}(0..9)+(h|d|m|w|q|y)+{s|e})

where:

  • h = hour
  • d = day
  • w = week
  • m = month
  • q = quarter (i.e. 3 months)
  • y = year
  • s = start.  For weeks, s refers to Monday
  • e = end. For weeks, e refers to Friday

Examples

Given: dateTime = 4/10/2015 and date:now() = 30/6/2016 05:39

Expression Result
  • date:add(dateTime, "1m")
04/11/2015
  • date:add(dateTime, "-2m")
04/08/2015
  • date:add(dateTime, "0me")
31/10/2015
  • date:add(dateTime, "1ms")
01/11/2015
  • date:add(dateTime, "1ys")
01/01/2016
  • date:add(dateTime, "1q")
04/01/2016
  • date:add(dateTime, "-2w")
20/09/2015
  • date:add(dateTime, "-2w3d")
17/09/2015
  • date:add(dateTime, "-2w+3d")
23/09/2015
  • date:add(date:now(), "-12h")
29/6/2016 17:39
  • date:add(date:today(), "4h")
30/6/2016 04:00

date:format(dateTime, pattern)

  • dateTime: the date/time to format
  • pattern: the format pattern

Formats a date/time according to a SimpleDateFormat pattern.

Examples

Given: dateTime = 3:30:05pm 20/8/2012

Expression Result
  • date:format(dateTime, "MMM yyyy")
Aug 2012
  • date:format(dateTime, "MMMM yyyy")
August 2012
  • date:format(dateTime, "dd/MM/yy 'at' hh:mm:ss")
20/08/12 at 17:30:05
  • date:format(dateTime, "EEE, MMM d")
Mon, Aug 20

date:formatDate(date)

  • date: the date to format

Formats a date using the current locale's MEDIUM format.

Examples

Given: dateTime = 10:38 am 15/7/2013

Expression Result
  • date:formatDate(dateTime)
Jul 15, 2013

date:formatDate(date, style)

  • date: the date to format
  • style: the style to use. One of "short", "medium", or "long"

Formats a date using the specified format for the current locale.

Examples

Given: dateTime = 11:00am 15/7/2013

Expression Result
  • date:formatDate(dateTime, "short")
15/07/13
  • date:formatDate(dateTime, "medium")
15/07/2013
  • date:formatDate(dateTime, "long")
15 July 2013

date:formatTime(time)

  • time: the time to format

Formats a time using the current locale's MEDIUM format.

Examples

Given: dateTime = 3:30:05pm 20/8/2012

Expression Result
  • date:formatTime(dateTime)
3:30:05 PM

date:formatTime(time, style)

  • time: the time to format
  • style: the style to use. One of "short", "medium", or "long"

Formats a time using the specified format for the current locale.

Examples

Given: dateTime = 3:30:05pm 20/8/2012

Expression Result
  • date:formatTime(dateTime, "short")
3:30 PM
  • date:formatTime(dateTime, "medium")
3:30:05 PM
  • date:formatTime(dateTime, "long")
3:30:05 PM

date:formatDateTime(datetime)

  • datetime: the date-time to format
     

Formats a date-time using the MEDIUM format for the current locale.

Examples

Given: dateTime = 3:30:05pm 20/8/2012

Expression Result
  • date:formatDateTime(dateTime)
20/08/2012 3:30:05 PM

date:formatDateTime(datetime, style)

  • datetime: the date-time to format
  • style: the style to use. One of "short", "medium", or "long"

 

Formats a date-time using the specified format for the current locale.

Examples

Given: dateTime = 3:30:05pm 20/8/2012

Expression Result
  • date:formatDateTime(dateTime, "short")
20/08/12 3:30 PM
  • date:formatDateTime(dateTime, "medium")
20/08/2012 3:30:05 PM
  • date:formatDateTime(dateTime, "long")
20 August 2012 3:30:05 PM

date:formatDateTime(datetime, dateStyle, timeStyle)

  • datetime: the date-time to format
  • dateStyle: the style to use to format the date. One of "short", "medium", or "long"
  • timeStyle: the style to use to format the date. One of "short", "medium", or "long"

Formats a date-time using the specified date and time styles for the current locale

Examples

Given: dateTime = 9:58:12am 28/7/2013

Expression Result
  • date:formatDateTime(dateTime, "long", "short")
28 July 2013 9:58 AM

Expression Functions

Function Description

expr:concatIf(value1, value2)

  • value1: the first string
  • value2: the second string

Concatentates two strings, if both are not null/empty. If either is null/empty, returns an empty string.

Examples

  • expr:concatIf(' - ', /details/reason))

expr:concatIf(value1, value2, value3)

  • value1: the first string
  • value2: the second string
  • value3: the third string

Concatentates three strings, if all are not null/empty. If any is null/empty, returns an empty string.

Examples

  • expr:concatIf(' (', party:identities(), ')')

expr:if(condition, value)

  • condition: the condition to evaluate
  • value: the value to return if the condition is true

Evaluates the result of condition. If true, returns value, otherwise returns null.

Examples

  • expr:if(openvpms:get(.,'sex')='MALE','M')

expr:if(condition, trueValue, falseValue)

  • condition: the condition to evaluate
  • trueValue: the value to return if the condition is true
  • falseValue: the value to return if the condition is false

Evaluates the result of condition. If true, returns trueValue, otherwise returns falseValue.

Examples

  • expr:if(openvpms:get(.,'sex')='MALE','M', 'F')

expr:ifempty(value, elseValue)

  • value: the string value to return if it is non-null nor empty
  • elseValue: the string value to return if value is null or empty.

Returns the first argument if it is not null or empty, or the second argument if it is.

Examples

  • expr:ifempty($description, $name)
  • expr:ifempty(expr:concatIf($firstName, ' ', $lastName), $name)

expr:replaceIf(value, maxLength, elseValue)

  • value: the string
  • maxLength: the maximum length
  • elseValue: the string to return if value is too long

Replaces a value with another if it exceeds a maximum length.

  • expr:replaceIf(list:sortNames(list:set('patient')), 50, 'Your pets')
     

expr:trim(value, maxLength)

  • value: the string
  • maxLength: the maximum length

Truncates value if its length exceeds maxLength, otherwise returns value unchanged.

  • expr:trim(concat(openvpms:lookup(.,'title'), ' ', /details/firstName, ' ', /details/lastName, expr:concatIf(' (', list:sortNamesOf('classifications'), ')')),255)

expr:var(name)

  • name: the variable name
     

Returns the value of the named variable if it exists, otherwise returns null.

Examples

  • expr:var("patient.name")

expr:var(name, value)

  • name: the variable name
  • value: the value to return if the variable doesn't exist

Returns the value of the named variable if it exists, otherwise returns value.

Examples

  • expr:var("patient", "There is no current patient")

List Functions

The following functions operate on lists of objects.

Function Description

list:join(objects, node)

  • objects: the objects
  • node: the node name

Iterates through a list of objects, joining the string value of the specified node, separated by commas.

  • list:join(openvpms:get(.,'classifications'), 'name')

 

list:join(objects, node, separator)

  • objects: the objects
  • separator: the value separator

Iterates through a list of objects, joining the string value of the specified node, separated by separator.

  • list:join(openvpms:get(.,'classifications'), 'name', '; ')

Example

  • list:join(openvpms:get(.,'patient.entity.identities')[archetypeId/shortName='entityIdentity.alias'], 'alias')

returns a comma separated list of the patient's aliases

list:join(objects, node, separator, lastSeparator)

  • objects: the objects
  • separator: the value separator
  • lastSeparator: the last pair of values separator

Iterates through a list of objects, joining the string value of the specified node, separated by separator. The last pair of values are separated by lastSeparator.

  • list:join(openvpms:get(.,'classifications'), 'name', ', ', ' and ')

list:join(objects, node, separator, lastSeparator, singular, plural)

  • objects: the objects
  • separator: the value separator
  • lastSeparator: the last pair of values separator
  • singular: appended to the string if there is a single name
  • plural: appended to the string if there a multiple names

Iterates through a list of objects, joining the string value of the specified node, separated by separator. The last pair of values are separated by lastSeparator.

  • list:join(openvpms:get(.,'classifications'), 'name', ', ', ' and ', ' is ', ' are ')

list:names(objects)

  • objects: the objects

Concatenates object names, comma separated.

  • list:names(openvpms:get(., 'classifications'))
  • list:names(list:values('products.entity'))

list:names(objects, separator)

  • objects: the objects
  • separator: the name separator

Concatenates object names, separated by separator

  • list:names(openvpms:get(., ''classifications'), '/')

list:sort(objects, node)

  • objects: the objects to sort
  • node: the node to sort on

Sorts objects on a node.

  • list:sort(openvpms:get(., 'classifications'), 'name')

list:sortNames(objects)

  • objects: the objects

Sorts and concatenates the names of the objects, separated by commas.

  • list:sortNames(openvpms:get(., 'classifications'), 'name)
     

list:sortNames(objects, separator)

  • objects: the objects
  • separator: the name separator

Concatenates object names, separated by separator

  • list:sortNames(openvpms:get(., ''classifications'), '; ')

list:sortNames(objects, separator, lastSeparator)

  • objects: the objects
  • separator: the name separator
  • lastSeparator: the separator for the last pair of names

Concatenates object names, separated by separator. The last pair of names are separated by lastSeparator.

  • list:sortNames(openvpms:get(., ''classifications'), ', ', ' and ')

list:sortNames(objects, separator, singlular, plural)

  • objects: the objects
  • separator: the name separator
  • lastSeparator: the separator for the last pair of names
  • singular: appended to the string if there is a single name
  • plural: appended to the string if there a multiple names

Concatenates object names, separated by separator. The last pair of names are separated by lastSeparator.

  • list:sortNames(list:set('patient'), ', ', ' and ', ' is due', ' are due')

 

list:sortNamesOf(node)

  • node: the collection node of the current object

Sorts and concatenate the object names of the specified node, separated by commas.

  • list:sortNamesOf('classifications')

list:sortNamesOf(objects, node)

  • objects: the objects
  • node: the collection node of the objects

Sorts and concatenate the object names of the specified node, separated by commas.

  • list:sortNamesOf(., 'classifications')

list:sortNamesOf(objects, node)

  • objects: the objects
  • node: the collection node of the objects
  • separator: the name separator

Sorts and concatenate the object names of the specified node, separated by separator.

  • list:sortNamesOf(., 'classifications', '; ')

list:sortNamesOf(objects, node)

  • objects: the objects
  • node: the collection node of the objects
  • separator: the name separator
  • lastSeparator: the separator for the last pair of names

Sorts and concatenate the object names of the specified node, separated by separator, with the last pair of names separated by lastSeparator.

  • list:sortNamesOf(., 'classifications', ', ', ' and ')

list:sortNamesOf(objects, node)

  • objects: the objects
  • node: the collection node of the objects
  • separator: the name separator
  • lastSeparator: the separator for the last pair of names
  • singular: appended to the string if there is a single name
  • plural: appended to the string if there a multiple names

Sorts and concatenate the object names of the specified node, separated by separator, with the last pair of names separated by lastSeparator.

  • list:sortNamesOf(., 'classifications', ', ', ' and ', ' is ', ' are ')

list:values(object, node)

  • object: the object
  • node: the collection node of the current object. May be a composite node name

Returns the values of a collection for the specified object. The node argument may refer to a single node, or a composite node. Null values are ignored.

  • list:values(., 'items')
  • list:values($customer, 'patients.entity')
  • list:values($invoice, 'items.target.documents.target')

list:values(node)

  • node: the collection node of the current object. May be a composite node name

Returns the values of a collection for the current object. The node argument may refer to a single node, or a composite node. Null values are ignored.

  • list:values('items')
  • list:values('patients.entity')
  • list:values($invoice, 'items.target.documents.target')

list:distinct(object, node)

  • object: the object
  • node: the collection node of the current object. May be a composite node name

Returns the distinct values of a collection for the specified object. The node argument may refer to a single node, or a composite node. Null values are ignored.

  • list:distinct($invoice, 'items.target.patient.entity')
  • list:distinct($invoice, 'items.target.product.entity.id')

list:distinct(node)

  • node: the collection node of the current object. May be a composite node name

Returns the distinct values of a collection for the current object. The node argument may refer to a single node, or a composite node. Null values are ignored.

  • list:distinct('items.target.clinician.entity')

list:set(object, node)

  • object: the object
  • node: the collection node of the current object. May be a composite node name

See list:distinct(object, node).

list:set(node)

  • node: the collection node of the current object. May be a composite node name
See list:distinct(node).

 

Contact Functions

Addresses

The following functions can be used to locate and format addresses.

Function Description

address:preferred(party)

  • party: any party archetype

Returns the preferred address contact for the specified party, or the first available contact, if none is preferred.

Examples

  • address:preferred(openvpms:get(., "customer.entity"))

address:billing(party)

  • party: any party archetype

Returns a contact for the specified party and BILLING purpose.
If cannot find one with matching purpose returns the preferred contact.
If cannot find with matching purpose and preferred returns the first available
.

Examples

  • address:billing(openvpms:get(., "supplier.entity"))

address:correspondence(party)

  • party: any party archetype

Returns a contact for the specified party and CORRESPONDENCE purpose.
If cannot find one with matching purpose returns the preferred contact.
If cannot find with matching purpose and preferred returns the first available
.

Examples

  • address:correspondence($OpenVPMS.location)

address:reminder(party)

  • party: any party archetype

Returns a contact for the specified party and REMINDER purpose.
If cannot find one with matching purpose returns the preferred contact.
If cannot find with matching purpose and preferred returns the first available
.

Examples

  • address:reminder(openvpms:get(., "customer.entity"))

address:purpose(party, purpose)

  • party: any party archetype
  • purpose: the contact purpose

Returns a contact for the specified party and purpose.

Examples

  • address:purpose($OpenVPMS.practice, 'BILLING')

address:format(contact)

  • contact: a contact.location

Formats an address contact (contact.location) on multiple lines.

Examples

  • address:format(address:billing($OpenVPMS.practice))

address:format(contact, singleLine)

  • contact: a contact.location
  • singleLine: if true, format the address as a single line, otherwise format it as multiple lines

Formats an address contact (contact.location), either on a single line, or over multiple lines.

Examples

  • address:format(address:billing($OpenVPMS.practice), false())
  • address:format(address:correspondence($OpenVPMS.practice), true())

Email

The following functions can be used to locate and format email contacts.

Function Description

email:preferred(party)

  • party: any party archetype

Returns the preferred email contact for the specified party, or the first available contact, if none is preferred.

Examples

  • email:preferred(openvpms:get(., "customer.entity"))

email:billing(party)

  • party: any party archetype

Returns a contact for the specified party and BILLING purpose.
If cannot find one with matching purpose returns the preferred contact.
If cannot find with matching purpose and preferred returns the first available
.

Examples

  • email:billing(openvpms:get(., "supplier.entity"))

email:correspondence(party)

  • party: any party archetype

Returns a contact for the specified party and CORRESPONDENCE purpose.
If cannot find one with matching purpose returns the preferred contact.
If cannot find with matching purpose and preferred returns the first available
.

Examples

  • email:correspondence($OpenVPMS.location)

email:reminder(party)

  • party: any party archetype

Returns a contact for the specified party and REMINDER purpose.
If cannot find one with matching purpose returns the preferred contact.
If cannot find with matching purpose and preferred returns the first available
.

Examples

  • email:reminder(openvpms:get(., "customer.entity"))

email:purpose(party, purpose)

  • party: any party archetype
  • purpose: the contact purpose

Returns a contact for the specified party and purpose.

Examples

  • email:purpose($OpenVPMS.practice, 'BILLING')

email:format(contact)

  • contact: a contact.email

Formats an email contact.

Examples

  • email:format(email:billing($OpenVPMS.practice))

Phone

The following functions can be used to locate and format phone contacts.

Function Description

phone:home(party)

  • party: any party archetype

Returns a contact for the specified party with HOME purpose.
If cannot find one with the purpose, returns the preferred contact.
If cannot find with matching purpose or preferred returns the first available
.

Examples

  • phone:home(openvpms:get(., "customer.entity"))

phone:work(party)

  • party: any party archetype

Returns a contact for the specified party with WORK purpose.
If cannot find one with the purpose, returns the preferred contact.
If cannot find with matching purpose or preferred returns the first available
.

Examples

  • phone:work(openvpms:get(., "customer.entity"))

phone:mobile(party)

  • party: any party archetype

Returns a contact for the specified party with MOBILE purpose.

Examples

  • phone:mobile(openvpms:get(., "customer.entity"))

phone:preferred(party)

  • party: any party archetype

Returns the preferred phone contact for the specified party, or the first available contact, if none is preferred.

Examples

  • phone:preferred(openvpms:get(., "customer.entity"))

phone:billing(party)

  • party: any party archetype

Returns a contact for the specified party with BILLING purpose.
If cannot find one with matching purpose returns the preferred contact.
If cannot find with matching purpose or preferred returns the first available
.

Examples

  • phone:billing(openvpms:get(., "supplier.entity"))

phone:correspondence(party)

  • party: any party archetype

Returns a contact for the specified party with CORRESPONDENCE purpose.
If cannot find one with matching purpose returns the preferred contact.
If cannot find with matching purpose and preferred returns the first available
.

Examples

  • phone:correspondence($OpenVPMS.location)

phone:reminder(party)

  • party: any party archetype

Returns a contact for the specified party and REMINDER purpose.
If cannot find one with matching purpose returns the preferred contact.
If cannot find with matching purpose and preferred returns the first available
.

Examples

  • phone:reminder(openvpms:get(., "customer.entity"))

phone:purpose(party, purpose)

  • party: any party archetype
  • purpose: the contact purpose

Returns a contact for the specified party and purpose.

Examples

  • phone:purpose($OpenVPMS.practice, 'BILLING')

phone:format(contact)

  • contact: a contact.phoneNumber

Formats a phone contact.

Examples

  • phone:format(phone:work($OpenVPMS.practice))

Patient Functions

The following functions operate on patients.

Function Description

patient:age(patient)

  • patient: a party.patientpet
  • return: string

Returns the age of the patient.
If the patient is deceased, the age of the patient when they died will be returned.

Examples

  • patient:age()  - use when the context object is a patient
  • patient:age(.) - use when the context object is a patient
  • patient:age(patient:get()) - use when the context object is an act

patient:age(patient, date)

  • patient: a party.patientpet
  • date: a date-time
  • return: string
Returns the age of the patient at the specified date.
 

Examples

  • patient:age(., date:yesterday()) - use when the context object is a patient
  • patient:age(patient:get(), date:yesterday()) - use when the context object is an act

patient:alerts(patient)

  • patient: a party.patientpet
  • return: collection of act.patientAlert
Returns the active alerts for a patient.
 

Examples

  • patient:alerts() - use when the context object is a patient
  • patient:alerts(patient:get()) - use when the context object is an act
  • list:join(patient:alerts(patient:get()), 'alertType.entity.name')

patient:appointments(patient, interval,
                                     units)

  • patient: a party.patientpet
  • interval: the interval, relative to the current date/time
  • units: the interval units. One of 'DAYS', 'WEEKS', 'MONTHS', 'YEARS'
  • return: a collection of act.customerAppointment

Returns the pending appointments for a patient between the current date/time and the current date/time plus the interval.

Examples

  • patient:appointments(., 1, 'YEARS') - use when the context object is a patient
  • patient:appointments(patient:get(), 1, 'YEARS') - use when the context object is an act
  • list:join(patient:appointments(patient:get(), 1, 'YEARS'),'startTime')

patient:get(object)

  • object: a party.patientpet, or an act with a participation.patient
  • return: the associated party.patientpet, or null

Returns the patient associated with the object, if any.

Examples

  • patient:get() -  use when the context object is a patient or act 
  • patient:get($visit)

patient:identity(patient, archetype)

  • patient: a party.patientpet
  • archetype: an entityIdentity.* archetype. May contain wildcards
  • return: the corresponding archetype insance, or null, if none is found

Returns the most recent active identity of the specified archetype(s).

Examples

  • patient:identity('entityIdentity.petTag') - use when the context object is a patient
  • patient:identity(patient:get(), 'entityIdentity.petTag') - use when the context object is an act
  • openvpms:get(patient:identity(patient:get(), 'entityIdentity.petTag'), 'identity')

patient:identities(patient, archetype)

  • patient: a party.patientpet
  • archetype: an entityIdentity.* archetype. May contain wildcards
  • return: a collection of entityIdentity.*

Returns the active identities for a patient, of the specified archetype(s).
If there are multiple identities, these will be ordered with the highest id first.

Examples
 

  • patient:identities('entityIdentity.*') - use when the context object is a patient
  • patient:identities(patient:get(), 'entityIdentity.*') - use when the context object is an act
  • list:join(patient:identities(patient:get(), 'entityIdentity.*'), 'identity')
patient:microchip(patient)
  • patient: a party.patientpet
  • return: an entityIdentity.microchip, or null if none is found

Returns the most recent active microchip for a patient.

Examples

  • patient:microchip() - use when the context object is a patient
  • patient:microchip(patient:get()) - use when the context object is an act
  • openvpms:get(patient:microchip(patient:get()), 'identity')
patient:microchips(patient)
  • patient: a party.patientpet
  • return: a collection of entityIdentity.microchip
Returns the active microchips for a patient.
If there are multiple identities, these will be ordered with the highest id first.

Examples
 

  • patient:microchips() - use when the context object is a patient
  • patient:microchips(patient:get()) - use when the context object is an act
  • list:join(patient:microchip(patient:get()), 'identity')
patient:owner(patient)
  • patient: a party.patientpet
  • return: a party.customerperson, or null

Returns the owner of a patient as of the current date.

Examples

  • patient:owner() - use when the context object is a patient
  • patient:owner(patient:get()) - use when the context object is an act
  • patient:owner($visit)
patient:owner(patient, date)
  • patient: a party.patientpet
  • date: a date/time
  • return: a party.customerperson, or null

Returns the owner of a patient as of the specified date.

Examples

  • patient:owner(., date:yesterday()) - use when the context object is a patient
  • openvpms:get(patient:owner(patient:get($visit), $visit.startTime), 'name')
patient:petTag(patient)
  • patient: a party.patientpet
  • return: an entityIdentity.petTag, or null if none is found

Returns the most recent active pet tag for a patient.

Examples

  • patient:petTag() - use when the context object is a patient
  • patient:petTag(patient:get()) - use when the context object is an act
  • openvpms:get(patient:petTag(patient:get()), 'identity')
patient:petTags(patient)
  • patient: a party.patientpet
  • return: a collection of entityIdentity.petTags
Returns the active pet tags for a patient.
If there are multiple identities, these will be ordered with the highest id first.

Examples
 

  • patient:petTags() - use when the context object is a patient
  • patient:petTags(patient:get()) - use when the context object is an act
  • list:join(patient:petTags(patient:get()), 'identity')
patient:rabiesTag(patient)
  • patient: a party.patientpet
  • return: an entityIdentity.rabiesTag, or null if none is found

Returns the most recent active rabies tag for a patient.

Examples

  • patient:rabiesTag() - use when the context object is a patient
  • patient:rabiesTag(patient:get()) - use when the context object is an act
  • openvpms:get(patient:rabiesTag(patient:get()), 'identity')
patient:rabiesTags(patient)
  • patient: a party.patientpet
  • return: a collection of entityIdentity.rabiesTags
Returns the active rabies tags for a patient.
If there are multiple identities, these will be ordered with the highest id first.

Examples
 

  • patient:rabiesTags() - use when the context object is a patient
  • patient:rabiesTags(patient:get()) - use when the context object is an act
  • list:join(patient:rabiesTags(patient:get()), 'identity')

patient:referral(patient)

  • patient: a party.patientpet
  • return: a party.supplierVeterinarian, or null, if none is found

 

Returns the referring vet for a patient as of the current date.

Examples

  • patient:referral() - use when the context object is a patient
  • patient:referral(patient:get()) - use when the context object is an act
  • openvpms:get(patient:referral(patient:get()), 'name')

patient:referral(patient, practice)

  • patient: a party.patientpet
  • practice: if true, return the referring vet practice, otherwise return the referring vet
  • return: a party.supplierVeterinaryPractice if practice is true, a party.supplierVeterinarian if practice is false, or null, if none is found

Returns the referral practice or vet for a patient as of the current date.

Examples

  • patient:referral(., true()) - use when the context object is a patient
  • patient:referral(patient:get(), true()) - use when the context object is an act

patient:referral(patient, practice, date)

  • patient: a party.patientpet
  • practice: if true, return the referring vet practice, otherwise return the referring vet
  • date: a date-time
  • return: a party.supplierVeterinaryPractice if practice is true, a party.supplierVeterinarian if practice is false, or null, if none is found

Returns the referral practice or vet for a patient as of the specified date.

Examples

  • patient:referral(., false(), $visit.startTime) - use when the context object is a patient
  • patient:referral(patient:get(), false(), $visit.startTime) - use when the context object is an act

patient:visit(patient)

  • patient: a party.patientpet
  • return: an act.patientClinicalEvent or null, if none is found
Returns the most recent visit for a patient.
 

Examples

  • patient:visit() - use when the context object is a patient
  • patient:visit(patient:get()) - use when the context object is an act

patient:weight(patient)

  • patient: a party.patientpet
  • return: the patient weight in kilograms, or 0 if there is no weight recorded
Returns the most recent weight for a patient, in kilograms.
 

Examples

  • patient:weight() - use when the context object is a patient
  • patient:weight(patient:get()) - use when the context object is an act

patient:weight(patient, units)

  • patient: a party.patientpet
  • units: one of 'KILOGRAMS', 'GRAMS',  or 'POUNDS'
  • return: the patient weight in the specified units, or 0 if there is no weight recorded
Returns the most recent weight for a patient, in the specified units
 

Examples

  • patient:weight(., 'GRAMS') - use when the context object is a patient
  • patient:weight(patient:get(), 'GRAMS') - use when the context object is an act

Party Functions

The following functions operate on party archetypes, such as customers, patients, suppliers, and organisations.

Function Description

party:getPartyFullName(party)

  • party: any party archetype

Returns the full name of the specified party

Examples

  • party:getPartyFullName(openvpms:get(., "customer.entity"))

party:getPartyFullName(act)

  • act: any act archetype with a customer or patient node

If the act has a customer node, then the full name of the customer will be returned.

If there is no customer node, but there is a patient node, the full name of the owner of the patient will be returned.

Examples

  • party:getPartyFullName(.)

party:getPatientOwner(patient)

  • patient: any party.patient* archetype

Returns the owner of a patient.

Examples

  • party:getPatientOwner(openvpms:get(.,"patient.entity"))

party:getPatientOwner(act)

  • act: any act archetype with a patient node

 

Returns the owner of a patient associated with an act.
If a patient has had multiple owners, then the returned owner will be that whose ownership period encompasses the act start time. If there is no such owner, the returned owner will be that whose ownership began closest to the act start time.

Examples

  • party:getPatientOwner($visit)

party:getPatientCurrentOwner(act)

  • act: any act archetype with a patient node

Returns the current owner of a patient associated with an act.

Examples

  • party:getPatientCurrentOwner($visit)

party:setPatientInactive(patient)

  • patient: any party.patient* archetype

Flags a patient as being inactive.

Examples

  • party:setPatientInactive($patient)

party:setPatientDeceased(patient)

  • patient: any party.patient* archetype

Flags a patient as being deceased.

This also:

  • flags the patient as being inactive
  • sets the patient's deceasedDate node to the current date/time.

Examples

  • party:setPatientDeceased(openvpms:get(.,"patient.entity"))

party:setPatientDesexed(patient)

  • patient: any party.patient* archetype

Flags a patient as being desexed.

Examples

  • party:setPatientDeceased(openvpms:get(.,"patient.entity"))

party:getPreferredContacts(party)

  • party: any party.* archetype

Returns a formatted string of preferred contacts for a party.

Examples

  • party:getPreferredContacts($customer)
  • party:getPreferredContacts(openvpms:get(.,"supplier.entity"))

party:getAddress(party, purpose)

  • party: any party.* archetype
  • purpose: a lookup.contactPurpose code

Returns a formatted address for a party with the given purpose.
If there is no location contact, it formats the first preferred location contact.
If there is no preferred location contact, it formats the first location contact.
If there are no location contacts, it returns an empty string.

Examples

  • party:getAddress($customer, 'HOME')

party:getAddress(party, purpose, singleLine)

  • party: any party.* archetype
  • purpose: a lookup.contactPurpose code
  • singleLine: if true, format the address on a single line

Returns a formatted address for a party with the given purpose.
If there is no location contact, it formats the first preferred location contact.
If there is no preferred location contact, it formats the first location contact.
If there are no location contacts, it returns an empty string.

Examples

  • party:getAddress($customer, 'REMINDER', true())

party:getBillingAddress(party)

  • party: any party.* archetype

Returns a formatted billing address for a party. This looks for:

  • a location contact with BILLING purpose; or if none found
  • the preferred location; or if none found
  • any location contact the party may have

Returns an empty string if there is no location contact.

Examples

  • party:getBillingAddress($customer)
  • party:getBillingAddress(openvpms:get(., "customer.entity"))

party:getBillingAddress(party, singleLine)

  • party: any party.* archetype
  • singleLine: if true, format the address on a single line

Returns a formatted billing address for a party. This looks for:

  • a location contact with BILLING purpose; or if none found
  • the preferred location; or if none found
  • any location contact the party may have

Returns an empty string if there is no location contact.

Examples

  • party:getBillingAddress($customer, false())
  • party:getBillingAddress(openvpms:get(., "customer.entity"), true())

party:getBillingAddress(act)

  • act: any act archetype with a customer or patient node

Returns a formatted billing address for a customer associated with act.

If the act has a customer node, then this customer will be passed to party:getBillingAddress(party)

If there is no customer node, but there is a patient node, the owner of the patient will be passed to party:getBillingAddress(party)

Returns an empty string if there is no location contact.

Examples

  • party:getBillingAddress($visit)
  • party:getBillingAddress(.)

party:getBillingAddress(act, singleLine)

  • act: any act archetype with a customer or patient node
  • singleLine: if true, format the address on a single line

Returns a formatted billing address for a customer associated with act.

If the act has a customer node, then this customer will be passed to party:getBillingAddress(party, singleLine)

If there is no customer node, but there is a patient node, the owner of the patient will be passed to party:getBillingAddress(party, singleLine)

Returns an empty string if there is no location contact.

Examples

  • party:getBillingAddress($visit, true())
  • party:getBillingAddress(., false())

party:getCorrespondenceAddress(party)

  • party: any party.* archetype

Returns a formatted correspondence address for a party. This looks for:

  • a location contact with CORRESPONDENCE purpose; or if none found
  • the preferred location; or if none found
  • any location contact the party may have

Returns an empty string if there is no location contact.

Examples

  • party:getCorrespondenceAddress($customer)
  • party:getCorrespondenceAddress(openvpms:get(., "customer.entity"))

party:getCorrespondenceAddress(party, singleLine)

  • party: any party.* archetype
  • singleLine: if true, format the address on a single line

Returns a formatted correspondence address for a party. This looks for:

  • a location contact with CORRESPONDENCE purpose; or if none found
  • the preferred location; or if none found
  • any location contact the party may have

Returns an empty string if there is no location contact.

Examples

  • party:getCorrespondenceAddress($customer, true())
  • party:getCorrespondenceAddress(openvpms:get(., "customer.entity"), false())

party:getCorrespondenceAddress(act)

  • act: any act archetype with a customer or patient node

Returns a formatted correspondence address for a customer associated with act.

If the act has a customer node, then this customer will be passed to party:getCorrespondenceAddress(party)

If there is no customer node, but there is a patient node, the owner of the patient will be passed to party:getCorrespondenceAddress(party)

Returns an empty string if there is no location contact.

Examples

  • party:getCorrespondenceAddress($visit)
  • party:getCorrespondenceAddress(.)

party:getCorrespondenceAddress(act, singleLine)

  • act: any act archetype with a customer or patient node
  • singleLine: if true, format the address on a single line

Returns a formatted correspondence address for a customer associated with act.

If the act has a customer node, then this customer will be passed to party:getCorrespondenceAddress(party, singleLine)

If there is no customer node, but there is a patient node, the owner of the patient will be passed to party:getCorrespondenceAddress(party, singleLine)

Returns an empty string if there is no location contact.

Examples

  • party:getCorrespondenceAddress($visit, true())
  • party:getCorrespondenceAddress(., false())

party:getTelephone(party)

  • party: any party.* archetype

Returns a formatted telephone number for a party. This looks for:

  • the preferred phone contact; or if none found
  • any available phone contact

Returns an empty string if there is no phone contact.

Examples

  • party:getTelephone($customer)
  • party:getTelephone(openvpms:get(., "customer.entity"))

party:getTelephone(act)

  • act: any act archetype with a customer or patient node

Returns a formatted telephone number for a customer associated with act.

If the act has a customer node, then this customer will be passed to party:getTelephone(party)

If there is no customer node, but there is a patient node, the owner of the patient will be passed to party:getTelephone(party)

Returns an empty string if there is no phone contact.

Examples

  • party:getTelephone($visit)
  • party:getTelephone(.)

party:getHomeTelephone(party)

  • party: any party.* archetype

Returns a formatted home telephone number for a party. This looks for:

  • the phone contact with HOME purpose; or if none found
  • the preferred phone contact; or if none found
  • any available phone contact

Returns an empty string if there is no phone contact.

Examples

  • party:getHomeTelephone($customer)
  • party:getHomeTelephone(openvpms:get(., "customer.entity"))

party:getHomeTelephone(act)

  • act: any act archetype with a customer or patient node

Returns a formatted home telephone number for a customer associated with act.

If the act has a customer node, then this customer will be passed to party:getHomeTelephone(party)

If there is no customer node, but there is a patient node, the owner of the patient will be passed to party:getHomeTelephone(party)

Returns an empty string if there is no phone contact.

Examples

  • party:getHomeTelephone($visit)
  • party:getHomeTelephone(.)

party:getWorkTelephone(party)

  • party: any party.* archetype

Returns a formatted work telephone number for a party. This looks for the phone contact with WORK purpose.

Returns an empty string if there is no such contact.

Examples

  • party:getWorkTelephone($customer)
  • party:getWorkTelephone(openvpms:get(., "customer.entity"))

party:getWorkTelephone(act)

  • act: any act archetype with a customer or patient node
Returns a formatted work telephone number for a customer associated with act.

If the act has a customer node, then this customer will be passed to party:getWorkTelephone(party)

If there is no customer node, but there is a patient node, the owner of the patient will be passed to party:getWorkTelephone(party)

Returns an empty string if there is no phone contact.

Examples

  • party:getWorkTelephone($visit)
  • party:getWorkTelephone(.)

party:getMobileTelephone(party)

  • party: any party.* archetype

Returns a formatted mobile telephone number for a party. This looks for the phone contact with MOBILE purpose.

Returns an empty string if there is no such contact.

Examples

  • party:getMobileTelephone($customer)
  • party:getMobileTelephone(openvpms:get(., "customer.entity"))

party:getMobileTelephone(act)

  • act: any act archetype with a customer or patient node
Returns a formatted mobile telephone number for a customer associated with act.

If the act has a customer node, then this customer will be passed to party:getMobileTelephone(party)

If there is no customer node, but there is a patient node, the owner of the patient will be passed to party:getMobileTelephone(party)

Returns an empty string if there is no phone contact.

Examples

  • party:getMobileTelephone($visit)
  • party:getMobileTelephone(.)

party:getFaxNumber(party)

  • party: any party.* archetype

Returns a formatted fax number for a party.

Returns an empty string if there is no fax contact.

Examples

  • party:getFaxNumber($supplier)
  • party:getFaxNumber(openvpms:get(., "supplier.entity"))

party:getFaxNumber(act)

  • act: any act archetype with a customer or patient node
Returns a formatted fax number for a customer associated with act.

If the act has a customer node, then this customer will be passed to party:getFaxNumber(party)

If there is no customer node, but there is a patient node, the owner of the patient will be passed to party:getFaxNumber(party)

Returns an empty string if there is no fax contact.

Examples

  • party:getFaxNumber($visit)
  • party:getFaxNumber(.)

party:getEmailAddress(party)

  • party: any party.* archetype

Returns a formatted email address for a party.

Returns an empty string if there is no email contact.

Examples

  • party:getEmailAddress($customer)
  • party:getEmailAddress(openvpms:get(., "customer.entity"))

party:getEmailAddress(act)

  • act: any act archetype with a customer or patient node
Returns a formatted email address for a customer associated with act.

If the act has a customer node, then this customer will be passed to party:getEmailAddress(party)

If there is no customer node, but there is a patient node, the owner of the patient will be passed to party:getEmailAddress(party)

Returns an empty string if there is no email contact.

Examples

  • party:getEmailAddress($visit)
  • party:getEmailAddress(.)

party:getWebsite(party)

  • party: any party.* archetype

Returns the website for a party.

Returns an empty string if there is no website contact.

Examples

  • party:getWebsite($supplier)
  • party:getWebsite(party:getLetterheadContacts($OpenVPMS.location))

party:getContactPurposes(contact)

  • contact: any contact.* archetype
Returns a formatted string of contact purposes for a contact.

party:identities(party)

  • party: any party.* archetype
Returns a formatted string of a party's identities.

party:getAccountBalance(customer)

  • customer: a party.customerperson

Returns the account balance for a customer.

Examples

  • party:getAccountBalance($customer)
  • party:getAccountBalance(openvpms:get(.,"customer.entity"))

party:getAccountBalance(act)

  • act: any act archetype with a customer or patient node

Returns the account balance for a customer associated with act.

If the act has a customer node, then this customer will be passed to party:getAccountBalance(customer)

If there is no customer node, but there is a patient node, the owner of the patient will be passed to party:getAccountBalance(customer)

Examples

  • party:getAccountBalance($invoice)
  • party:getAccountBalance(.)

party:getPatientReferralVet(patient)

  • patient: a party.patientpet

Returns the referral vet for a patient.

This is the patient's associated veterinarian from the first matching Referral (either a Referred From or Referred To relationship) active at the current time.

Examples

  • party:getPatientReferralVet($patient)
  • party:getPatientReferralVet(openvpms:get(., "patient.entity"))

party:getPatientReferralVet(act)

  • act: any act archetype with a patient node

 

Returns the referral vet for a patient linked to act.

This is the patient's associated veterinarian from the first matching Referral (either a Referred From or Referred To relationship)  active at the act's start time.

Examples

  • party:getPatientReferralVet($visit)
  • party:getPatientReferralVet(.)

party:getPatientReferralVetPractice(patient)

  • patient: a party.patientpet

Returns the referral vet practice for a vet associated with the supplied patient, active at the current time.

Examples

  • party:getPatientReferralVetPractice($patient)
  • party:getPatientReferralVetPractice(openvpms:get(., "patient.entity"))

party:getPatientReferralVetPractice(act)

  • act: any act archetype with a patient node

Returns the referral vet practice for a vet associated with the supplied act's patient, active at the act's start time.

Examples

  • party:getPatientReferralVetPractice($visit)
  • party:getPatientReferralVetPractice(.)

party:getReferralVetPractice(vet, date)

  • vet:  a party.supplierVeterinarian
  • date: the date

Returns the referral vet practice for a vet, for the specified date.

party:getPatientAge(patient)

  • patient: a party.patientpet

Returns the age of the patient.
If the patient is deceased, the age of the patient when they died will be returned.

Examples

  • party:getPatientAge($patient)
  • party:getPatientAge(.,openvpms:get(., "patient.entity"))

party:getPatientMicrochip(patient)

  • patient: a party.patientpet

Returns a patient's microchip, or an empty string if none exists.
Note that if the patient has multiple microchips then the one with the highest identifier (ie the most recently added one) will be returned.

Examples

  • party:getPatientMicrochip($patient)
  • party:getPatientMicrochip(., openvpms:get(., "patient.entity"))

party:getPatientMicrochip(act)

  • act: any act archetype with a patient node

Returns the microchip for a patient linked to act.

Examples

  • party:getPatientMicrochip(.)
  • party:getPatientMicrochip($visit)

party:getPatientMicrochips(patient)

  • patient: a party.patientpet

Returns a patient's microchips, or an empty string if none exists. If there are more than one, then the values are separated by commas, eg
045*610*874, 982 009 101 673 028

Examples

  • party:getPatientMicrochips($patient)
  • party:getPatientMicrochips(., openvpms:get(., "patient.entity"))

party:getPatientMicrochips(act)

  • act: any act archetype with a patient node

Returns the microchips for a patient linked to act.

Examples

  • party:getPatientMicrochips(.)
  • party:getPatientMicrochips($visit)

party:getMicrochip(party)

  • party: any party (typically party.patientpet)

Returns the most recent active entityIdentity.microchip for party.

Examples

  • openvpms:get(party:getMicrochip($patient), "identity")
  • openvpms:lookup(party:getMicrochip(.), "implantSite")
  • openvpms:get(party:getMicrochip(.), "implantDate")

party:getMicrochip(act)

  • act: any act archetype with a patient node

Returns the most recent active entityIdentity.microchip for a patient linked to act.

Examples

  • openvpms:lookup(party:getMicrochip($visit), "implantSite")
  • openvpms:get(party:getMicrochip($visit), "implantDate")

party:getPatientPetTag(patient)

  • patient: a party.patientpet

Returns the pet tag for a patient,or an empty string if none exists.

Examples

  • party:getPatientPetTag($patient)
  • party:getPatientPetTag(., openvpms:get(., "patient.entity"))

party:getPatientPetTag(act)

  • act: any act archetype with a patient node

Returns the pet tag for a patient linked to act.

Examples

  • party:getPatientPetTag(.)
  • party:getPatientPetTag($visit)

party:getPatientRabiesTag(patient)

  • patient: a party.patientpet

Returns the rabies tag for a patient,or an empty string if none exists.

Examples

  • party:getPatientRabiesTag($patient)
  • party:getPatientRabiesTag(., openvpms:get(., "patient.entity"))

party:getPatientRabiesTag(act)

  • act: any act archetype with a patient node

Returns the rabies tag for a patient linked to act.

Examples

  • party:getPatientRabiesTag(.)
  • party:getPatientRabiesTag($visit)

party:getPatientWeight(patient)

  • patient: a party.patientpet

Returns the formatted weight for a patient, or an empty string if the patient has not been weighed.

This uses the most recent recorded weight for the patient.

  • party:getPatientWeight($patient)
  • party:getPatientWeight(., openvpms:get(., "patient.entity"))

party:getPatientWeight(act)

  • act: any act archetype with a patient node

Returns the formatted weight for a patient linked to act, or an empty string if the patient has not been weighed.

This uses the most recent recorded weight for the patient.

Examples

  • party:getPatientWeight(.)
  • party:getPatientWeight($visit)

party:getWeight(patient)

  • patient: a party.patientpet

Returns the patient weight in kg.

If the patient has no recorded weight, returns 0.

This uses the most recent recorded weight for the patient.

Examples

  • party:getWeight($patient)
  • party:getWeight(openvpms:get(. 'patient.entity'))

party:getWeight(patient, units)

  • patient: a party.patientpet
  • units: the weight units. One of 'KILOGRAMS', 'GRAMS', or 'POUNDS'

 

Returns the patient weight in the specified units.

If the patient has no recorded weight, returns 0.

This uses the most recent recorded weight for the patient.

Examples

  • party:getWeight($patient, 'KILOGRAMS')
  • party:getWeight(openvpms:get(. 'patient.entity', 'GRAMS'))
  • party:getWeight($patient, 'POUNDS')

party:getWeight(act)

  • act: any act archetype with a patient node

Returns the weight (in kilograms) for a patient linked to act, or 0 if there is no patient, or the patient has no weight recorded.

This uses the most recent recorded weight for the patient.

Examples

  • party:getWeight(.)
  • party:getWeight($visit)

party:getWeight(act, units)

  • act: any act archetype with a patient node
  • units: the weight units. One of 'KILOGRAMS', 'GRAMS', or 'POUNDS'

Returns the weight in units for a patient linked to act, or 0 if there is no patient, or the patient has no weight recorded.

This uses the most recent recorded weight for the patient.

Examples

  • party:getWeight(., 'KILOGRAMS')
  • party:getWeight($visit, 'POUNDS)

party:getPatientDesexStatus(patient)

  • patient: a party.patientpet

Returns the desex status of a patient.

Examples

  • party:getDesexStatus($patient)
  • party:getDesexStatus(., openvpms:get(., "patient.entity"))

party:getPatientDesexStatus(act)

  • act: any act archetype with a patient node

Returns the desex status of a patient linked to act.

Examples

  • party:getDesexStatus(.)
  • party:getDesexStatus($visit)

party:getPatientVisit(patient)

  • patient: a party.patientpet

Returns the most recent Visit (i.e. act.patientClinicalEvent) for a patient.

Examples

  • party:getPatientVisit($patient)
  • party:getPatientVisit(., openvpms:get(., "patient.entity"))
party:getPractice()

Returns the practice object which can then be used to access other practice nodes. Note however, that the OpenVPMS.practice Application Fields form is more convenient.

Examples

  • openvpms:get(party:getPractice(), "name"))
  • OpenVPMS.practice.name
party:getPracticeAddress() Returns the practice address as a single line, or an empty string if the practice has no location contact.

party:getPracticeAddress(singleLine)

  • singleLine: if true, format the address on a single line

Returns the practice address or an empty string if the practice has no location contact.

Examples

  • party:getPracticeAddress(true())
  • party:getPracticeAddress(false())
party:getPracticeTelephone() Returns the practice WORK telephone, or an empty string if the practice has no phone contact with the purpose Work.
party:getPracticeFaxNumber() Returns the practice fax number, or an empty string if the practice has no fax contact

party:getAppointments(party, interval, units)

  • party: a customer or patient
  • interval:  the interval, relative to the current date/time
  • units: the interval units
Returns the Pending appointments for a customer or patient starting from now to the specified interval.

Examples

  • party:getAppointments($OpenVPMS.customer, 1, 'YEARS')
  • party:getAppointments(openvpms:get(.,'patient.entity'), 6, 'MONTHS')

party:getBpayID(party)

  • party: any party.*

Returns the BPay Customer Reference Number for a party. This is the id of the party plus a check digit generated using the Luhn 10 algorithm.

Examples

  • party:getBpayID($customer)
  • party:getBpayID(., openvpms:get(., "customer.entity"))

party:getBpayID(act)

  • act: any act archetype with a customer or patient node
Returns a the BPay CRN (see above)  for a customer associated with act.

If the act has a customer node, then this customer will be passed to party:getBpayID(party)

If there is no customer node, but there is a patient node, the owner of the patient will be passed to party:getBpayID(party)

Examples

  • party:getBpayID($visit)
  • party:getBpayID(.)

party:getLetterheadContacts(location)

  • location: the practice location

Returns:

  • $OpenVPMS.location.letterhead.target.contacts.target if the Contact Source is set in the Letterhead record; or
  • $OpenVPMS.location if the Contact Source is not set

This function is normally invoked as:
     party:getLetterheadContacts($OpenVPMS.location)

Math Functions

Function Description
math:round(value, n)

Rounds value to n decimal places.

Examples

  • math:round(22 div 7, 3)
math:pow(value, n)

Returns valuen

Examples

  • math:pow(party:getWeight($patient), 2)
     

 

Macro Functions

The following function can be used in document template content files. Its primary use is to provide standardised text strings for multiple documents.

Function Description

macro:eval(macro)

  • macro: the macro (i.e. its code and any prefix number) to expand enclosed in quotes

Expands the specified macro.
Use this form when:

  • expanding macros that don't need any context
  • expanding report macros that need access to the document that generated them. Note that in this case, this form is NOT equivalent to:
      macro:eval(macro, .)
    It is equivalent to:
      macro:eval(macro, /)

Examples

Given: the macro fn_bloggs contains the expression:
                  'Dr Joe Bloggs,  BSc(Vetbiol), BVMS(Hons)'

Expression Result
  • macro:eval("fn_bloggs")
Dr Joe Bloggs,  BSc(Vetbiol), BVMS(Hons)

macro:eval(macro, expr)

  • macro: the macro (i.e. its code and any prefix number) to expand enclosed in quotes
  • expr: an expression

Expands the specified macro, using expr to provide the context for the macro.

Examples

Given: the standard @qid macro which uses the dispensingVerb macro

Expression Result
  • macro:eval("3@qid",  openvpms:get('product.entity'))
Give 3 Tablet(s) Four Times a Day

History Functions

The patient history functions are restricted for use within Jasper Reports. They are designed to be used in sub-report expressions. E.g.:

 $P{dataSource}.getExpressionDataSource("history:medication(openvpms:get(.,'patient.entity'))")
Function Description

history:charges(patient)

  • patient: the patient

Returns all invoice item acts for a patient, ordered on descending start time.

  • history:charges(openvpms:get(.,'patient.entity'))

history:charges(patient, productTypeName)

  • patient: the patient
  • productTypeName: the name of the product type. May contain wildcards

Returns all invoice item acts for a patient, that have the specified product type name, ordered on descending start time.

  • history:charges(openvpms:get(.,'patient.entity'), 'Vaccinations')

history:charges(patient, date)

  • patient: the patient
  • date: the date
Returns all invoice item acts for a patient on the specified date, ordered on descending start time.
  • history:charges($patient, java.sql.Date.valueOf('2016-05-03'))

history:charges(patient, from, to)

  • patient: the patient
  • from: the start date/time, inclusive
  • to: the end date/time, exclusive

Returns all invoice item acts for a patient between the specified dates, ordered on descending start time.

If a date is null, indicates it is unbounded. The second example gets the charges for the last 60 days.

  • history:charges(openvpms:get(.,'patient.entity'), java.sql.Date.valueOf('2016-01-01'), null)
  • history:charges(openvpms:get(.,'patient.entity'), date:add(java.util.Date.new(),'-60d'), null)

history:charges(patient, productTypeName, date)

  • patient: the patient
  • productTypeName: the name of the product type. May contain wildcards
  • date: the date

Returns all invoice item acts for a patient that have the specified product type name, on the specified date, ordered on descending start time.

  • history:charges(openvpms:get(.,'patient.entity'), 'Vacc*', java.sql.Date.valueOf('2016-05-03'))

history:charges(patient, productTypeName, from, to)

  • patient: the patient
  • productTypeName: the name of the product type. May contain wildcards
  • from: the start date/time, inclusive
  • to: the end date/time, exclusive

Returns all charge acts for a patient that have the specified product type name, between the specified dates, ordered on descending start time.

If a date is null, indicates it is unbounded. The second example gets the Vaccinations for the last 6 months.

  • history:charges(openvpms:get(.,'patient.entity'), 'Vaccinations', java.sql.Date.valueOf('2011-01-01'), java.sql.Date.valueOf('2016-01-01'))
  • history:charges(openvpms:get(.,'patient.entity'), 'Vaccinations', date:add(java.util.Date.new(),'-6m'), null)

history:medication(patient)

  • patient: the patient

Returns all medication acts for a patient, ordered on descending start time.

  • history:medication(openvpms:get(.,'patient.entity'))

history:medication(patient, productTypeName)

  • patient: the patient
  • productTypeName: the name of the product type. May contain wildcards

Returns all medication acts for a patient, that have the specified product type name, ordered on descending start time.

  • history:medication(openvpms:get(.,'patient.entity'), 'Vaccinations')

history:medication(patient, date)

  • patient: the patient
  • date: the date
Returns all medication acts for a patient on the specified date, ordered on descending start time.
  • history:medication($patient, java.sql.Date.valueOf('2010-01-01'))

history:medication(patient, from, to)

  • patient: the patient
  • from: the start date/time, inclusive
  • to: the end date/time, exclusive

Returns all medication acts for a patient between the specified date/times, ordered on descending start time.

If a date is null, indicates it is unbounded. The first example gets medications from 1/1/2010 through to 00:00:00 today, the second those in the last 12 hours.

  • history:medication(openvpms:get(.,'patient.entity'), java.sql.Date.valueOf('2010-01-01'), date:today())
  • history:medication(openvpms:get(.,'patient.entity'), date:add(date:now(),'-12h', null)

history:medication(patient, productTypeName, date)

  • patient: the patient
  • productTypeName: the name of the product type. May contain wildcards
  • date: the date

Returns all medication acts for a patient that have the specified product type name, on the specified date, ordered on descending start time.

  • history:medication(openvpms:get(.,'patient.entity'), 'Vacc*', date:today())

history:medication(patient, productTypeName, from, to)

  • patient: the patient
  • productTypeName: the name of the product type. May contain wildcards
  • from: the start date/time, inclusive
  • to: the end date/time, exclusive

Returns all medication acts for a patient that have the specified product type name, between the specified date/times, ordered on descending start time.

If a date is null, indicates it is unbounded.

  • history:medication(openvpms:get(.,'patient.entity'), 'Vaccinations', date:add(date:now(),'-12h', null)

Product Functions

Function Description

price(product,taxExPrice)

  • product: a product/product identifier
  • taxExPrice: the tax-exclusive price

Returns the price for a product, given a tax-exclusive price.
The returned price will either include tax, or be rounded according to currency conventions, based on the practice Show Prices Tax Inclusive option
.

  • EVALUATE("product:price($F.productId, $F.unitPrice)")

price(product,taxExPrice, taxInclusive)

  • product: a product/product identifier
  • taxExPrice: the tax-exclusive price
  • taxInclusive: if true(), return the tax-inclusive price otherwise round it according to the currency rounding convention

Returns the price for a product, given a tax-exclusive price.

  • EVALUATE("product:price($F.productId, $F.unitPrice, $P.includeTax)")

round(price)

  • price: the price to round

Rounds a price according to the practice currency rounding convention.

  • EVALUATE(product:round("product:price($F.cost)"))

taxRate(product)

  • product: a product/product identifier

Returns the tax rate for a product, expressed as a percentage.

  • EVALUATE(product:taxRate("product:taxRate($F.productId)"))

Reminder Functions

Reminders functions returning lists of act.patientReminder acts are restricted for use within Jasper Reports. They are designed to be used in sub-report expressions. E.g.:

$P{dataSource}.getExpressionDataSource("reminder:getReminders(., 1, 'YEARS')")
Function Description

getReminders(act, dueInterval, dueUnits)

  • act: any act archetype with a customer node
  • dueInterval: the due interval, relative to the current date
  • dueUnits: the due interval units

Returns a list of reminders for a customer's patients for the customer associated with the supplied act.

  • reminder:getReminders(., 3, "MONTHS")

getReminders(act, dueInterval, dueUnits, includeOverdue)

  • act: any act archetype with a customer node
  • dueInterval: the due interval, relative to the current date
  • dueUnits: the due interval units
  • includeOverdue: if true, include overdue reminders

Returns a list of reminders for a customer's patients for the customer associated with the supplied act, optionally including overdue reminders.

  • reminder:getReminders(., 1, "YEARS", true())

getReminders(customer, dueInterval, dueUnits)

  • customer: the customer
  • dueInterval: the due interval, relative to the current date
  • dueUnits: the due interval units

Returns a list of reminders for a customer's patients.

  • reminder:getReminders(., 3, "MONTHS")

getReminders(customer, dueInterval, dueUnits, includeOverdue)

  • customer: the customer
  • dueInterval: the due interval, relative to the current date
  • dueUnits: the due interval units
  • includeOverdue: if true, include overdue reminders

Returns a list of reminders for a customer's patients.

  • reminder:getReminders(., 3, "MONTHS")

getDocumentFormReminder(act)

  • act: an act.patientDocumentForm act

 

Returns a reminder associated with a Form act, if any.

For forms linked to an invoice item, this
uses the invoice item to get the reminder. If there are multiple reminders for the invoice item, the one with the nearest due date will be returned.

If there are multiple reminders with the same due date, the reminder with the lesser Id will be used.

For forms not linked to an invoice item that have a product with reminders, a reminder with the nearest due date to that of the form's start time will be returned.

For forms that don't meet the above, null is returned.

  • reminder:getDocumentFormReminder(.)

getReminders(patient, date)

  • patient: the patient
  • date: the date

Returns all reminders for a patient starting on the specified date.
Reminders may be IN_PROGRESS, COMPLETED, or CANCELLED.

  • reminder:getReminders(openvpms:get(., 'patient.entity'), openvpms:get(. 'startTime'))

getReminders(patient, from, to)

  • patient: the patient
  • from: the start date/time, inclusive
  • to: the end date/time, exclusive

Returns all reminders for a patient starting on or after from and before to.
Reminders may be IN_PROGRESS, COMPLETED, or CANCELLED.

  • reminder:getReminders(openvpms:get(., 'patient.entity'), date:add(date:today,'-1m'),date:today())

getReminders(patient, productTypeName, date)

  • patient: the patient
  • productTypeName: the product type name. May contain wildcards
  • date: the date

Returns all reminders for a patient starting on the specified date, having a product with the specified product types.
Reminders may be IN_PROGRESS, COMPLETED, or CANCELLED.

  • reminder:getReminders(openvpms:get(., 'patient.entity'), 'Checkup', openvpms:get(. 'startTime'))
  • reminder:getReminders(openvpms:get(., 'patient.entity'), 'Vacc*', openvpms:get(. 'startTime'))

getReminders(patient, productTypeName, from, to)

  • patient: the patient
  • productTypeName: the product type name. May contain wildcards
  • from: the start date/time, inclusive
  • to: the end date/time, exclusive

Returns all reminders for a patient starting on or after from and before to, having a product with the specified product types.
Reminders may be IN_PROGRESS, COMPLETED, or CANCELLED.

  • reminder:getReminders(openvpms:get(., 'patient.entity'), 'Checkup', date:add(date:today,'-30d'), date:add(date:today(),'30d'))
  • reminder:getReminders(openvpms:get(., 'patient.entity'), 'Vacc*', date:add(date:today,'-30d'), date:add(date:today(),'30d'))

 

Supplier Functions

Function Description
accountId(supplier, location)
  • supplier: a party.supplierorganisation
  • location: the practice location

Returns the account identifier that a practice location uses when corresponding with a supplier.

Examples

  • supplier:accountId(openvpms:get(., 'supplier.entity), $OpenVPMS.location)
accountId(supplierId, location)
  • supplierId: the supplier identifier
  • location: the practice location

Returns the account identifier that a practice location uses when corresponding with a supplier. This form accepts the supplier identifier, and can be used when there is no other way to access the supplier details.

Examples

  • supplier:accountId(1234567, $OpenVPMS.location)

 

User Functions

Function Description
user:format(user, style)
  • user: a user/user identifier
  • style: the style to use. One of "short", "medium", or "long"

Formats a user name according to the specified style. Styles are configured for the practice via the Short User Name Format, Medium User Name Format and Long User Name Format options.

Examples

  • user:format(openvpms:get(., 'clinician.entity'), 'long')
  • EVALUATE(user:format($F.clinician_id, 'medium'))
  • concat($nl,"Regards, ",$user.firstName,$nl,user:format($user, 'long'))

 

 

Functions - XPath

Complete

OpenVPMS supports the XPath 1.0 functions and operators to perform expression evaluation within archetypes, macros, and reports.

By far the most commonly function is concat, used to concatenate strings.  Hence concat('ab','34','ef') yields 'ab34ef'.

However, others are used. One terrifyingly complex example is that used to generate the customer's name.  It is as follows:

concat(/details/companyName,substring(concat(/details/lastName,',',/details/firstName),0,number(not(/details/companyName))*string-length(concat(/details/lastName,',',/details/firstName))+1)) 

This returns the companyName if there is one, else lastName,firstName. It relies on the concatenation of two mutually exclusive strings, the first one being empty if the condition is false, the second one being empty if the condition is true. This is called "Becker's method", attributed to Oliver Becker.

In the above you can see the functions concat, substring, number, not, string-length, and the operators * and + being used.

Note also that using the jxpath function expr:ifempty() function provides a far simpler version of the above, for example:

expr:ifempty(openvpms:get(.,'product.entity.printedName'), openvpms:get(.,'product.entity.name'))

The table below shows the available functions. (Others are defined but are not relevant to our use.)

Note that except for sum() which returns a BigDecimal, all the functions that return a number (eg ceiling(), count() etc) return a Double. This can be ignored except when you use the functions in JasperReports. So the field [count(list:distinct(., "items.target.patient.entity.id"))] must be typed as  java.lang.Double .

Also, the arguments cannot be JasperReports fields, but must be jxpath functions. Hence
   [concat(product.entity.printedName,... ] will not work, but
   [concat(openvpms:get(., 'product.entity.printedName'), .... ] will

boolean(e) Converts object e to Boolean type. False values include numeric zero, empty strings, and empty node sets; other values are considered true.
ceiling(e) Returns the integer closest to infinity that is less than or equal to e. Examples: ceiling(5.9) returns 6; ceiling(-5.9) returns -5.
concat(e1, e2, ...) Concatenates the string values of its arguments and returns the result as a single string.
contains(s1, s2) True if string s1 contains s2.
count(c) Returns the number of nodes in the collection c as returned by some of the list: functions. Example:
  count(list:distinct(., "items.target.patient.entity.id"))
false() Returns the Boolean “false” value.
floor(e) Returns the integer closest to minus infinity that is greater than or equal to e. Examples: floor(5.9) returns 5; floor(-5.9) returns -6.
normalize-space(s) Returns the string s, except that all leading and trailing whitespace are removed, and all internal clumps of whitespace are replaced by single spaces. Note that a newline character counts as a whitespace character.
not(e) Returns the Boolean complement of the truth value of expression e: true if e is false, false if it is true.
number(e) Converts an expression e to a number. If e is not a valid number, you get the special numeric value NaN (not a number). If e is a Boolean value, you get 1 for true and 0 for false.
round(e) Returns the integer closest to the value of expression e. Values with a fractional part of 0.5 are rounded towards infinity. Examples: round(5.1) returns 5; round(5.5) returns 6; and round(-5.5) returns -5.
starts-with(s1, s2) True if string s1 starts with string s2.
string(e) Converts e to a string.
string-length(s) Returns the length of string s.
substring(s, n1, n2) Returns a substring of s starting at position n1 (counting from 1), and ending n2 characters later, or at the end of the string, whichever comes first. You can omit the third argument, and it will return the substring starting at position n1 and going through the end of s. For example, "substring('abcdefgh', 3, 4)" returns "cdef".
substring-after(s1, s2) If s2 is a substring of s1, returns the part of s1 after the first occurrence of s2; otherwise it returns the empty string.
substring-before(s1, s2) If s2 is a substring of s1, returns the part of s1 before the first occurrence of s2; otherwise it returns the empty string.
sum(c) Returns the sum, for each node collectionc, of the result of converting the string-values of the node to a number.
translate(s1, s2, s3) The result is a copy of string s1 with each occurrence of a character from string s2 replaced with the corresponding character from string s3. If s3 is shorter than s2, this function will delete from its result any characters from s2 that don't correspond to characters in s3
eg translate(s1, '&#xA;', '') will strip any newline charcters from s1
and
translate(s1, '&#xA;', ' ') will translate any newline charcters to spaces
true() Returns the Boolean “true” value.

 

Below are the operators used in XPath expressions. In the table below, e stands for any XPath expression.

e1+e2 If e1and e2are numbers, their sum.
e1-e2 e1minus e2.
e1*e2 The product of e1and e2.
e1 div e2 If e1and e2are numbers, their quotient as a floating-point value.
e1 mod e2 The floating-point remainder of e1divided by e2.
e1 = e2 Tests to see if e1equals e2.
e1 &lt; e2 Tests to see if e1is less than e2. You can't say e1< e2inside an attribute: the less-than sign must be escaped as "&lt;".
e1 &lt;= e2 Tests to see if e1is less than or equal to e2.
e1 &gt; e2 Tests for greater-than.
e1 &gt;= e2 Tests for greater or equal.
e1 != e2 Tests for inequality.
e1 and e2 True if both e1and e2are true. If e1is false, e2is not evaluated.
e1 or e2 True if either e1or e2is true. If e1is true, e2is not evaluated.
/e Evaluate estarting at the document node. For example, "/barge"selects the <barge>element that is the child of the document node.
e1/e2 The /operator separates levels in a tree. For example, "/barge/load"selects all <load>children of the <barge>element child of the document node.
//e Abbreviation for descendant-or-self::e.
./e Abbreviation for self::e.
../e Abbreviation for parent::e.
@e Abbreviation for attribute::e.
e1|e2 Selects the union of nodes that match e1and those that match e2.
* A wild-card operator; matches all nodes of the proper type for the context. For example, "*"selects all child elements of the context node, and "feet/@*"selects all attributes of the context node's <feet>children.
e1[e2] Square brackets enclose a predicate, which specifies an expression e2that selects nodes from a larger set e1.For example, in the XPath expression "para[@class='note']", the paraselects all <para>children of the context node, and then the predicate selects only the children that have an attribute class="note". Another example: "item[1]"would select the first <item>child of the context node.
$e The dollar sign indicates that the following name is a variable name. For example, in an XSLT script, if variable n is set to 357, <xsl:value-of select="$n"/>is expanded to the string "357".

HL7

Complete

OpenVPMS supports a subset of the HL7 2.5 messaging standard, to enable transfer of clinical and administrative data to other applications.

Patient Administration Messages

The following Patient Administration messages are supported:

Message Type Message Event Description Triggered Direction
ADT A01 Admit/visit notification
  • When an appointment changes status from Pending to In Progress, Admitted, or Checked In
Outbound
ADT A03 Discharge/end visit
  • When an appointment changes status to Completed.
  • When an invoice is finalised without the patient being checked-in
Outbound
ADT A08 Update patient information
  • When a patient is saved
  • When a patient weight record is saved or deleted
  • When a patient Allergy alert is saved or deleted
  • When product ordered via a Pharmacy is invoiced, and the patient isn't currently admitted
Outbound
ADT A011 Cancel admit/visit notification
  • When an appointment status changes to Cancel after being In Progress, Admitted, or Checked In
  • When Check-In is cancelled
Outbound

 

Pharmacy Messages

The following pharmacy messages are supported:

Message Type Message Event Description Triggered Direction
RDE O11 Pharmacy order message
  • When a product linked to a Pharmacy is invoiced
  • When an ordered product quantity changes. This generates an amendment
  • When the item associated with an ordered product is deleted. This generates a cancellation.
Outbound
RDS O13 Pharmacy dispense message
  • When a pharmacy product is dispensed
Inbound

 

Laboratory Messages

The following laboratory messages are supported:

Message Type Message Event Description Triggered Direction
ORM O11 General order message
  • When a patient Investigation is created during invoicing, and the Investigation Type is linked to a Laboratory
  • When the item associated with an ordered Investigation is deleted. This generates a cancellation.
Outbound
ORM O11 General order message
  • When a Laboratory cancels an order.
Inbound

 

 

Help Topics

Complete

When you click Help in the top menu line or press Alt-H, a help topics window is displayed.

In the standard system this provides four links, Help Topics (which links to this), An Introduction to OpenVPMS (which links to the Introduction section), OpenVPMS Concepts and Glossary (which links to the Concepts section) and User's Forum (which links to http://www.openvpms.org/category/forums/users/general).

You can modify these and add more topics by editing the file help.properties in <TOMCAT_HOME>\webapps\openvpms\WEB-INF\classes\localisation.

If you are going to provide Local Procedures, then this is how to provide links to them.

Note that you can provide a simple local procedures document by writing what you need with your favourite word processor and then creating a pdf (called say localProcs.pdf). You can place this in TOMCAT_HOME>\webapps\ROOT and the help.properties entry will be like:

help.topic.5.title = Local procedures
help.topic.5.url = http://localhost:8080/localProcs.pdf

Reminder Export format

Complete

Reminders may be configured to be exported during reminder processing instead of mailed.

This file can be either comma or tab-delimited, depending on the Practice configuration.

The file contains the following fields:

Field Description
Customer Identifier Corresponds to the id node of party.customerperson
Customer Title Corresponds to the title node of party.customerperson
Customer First Name Corresponds to the firstName node of party.customerperson
Customer Initials Corresponds to the initials node of party.customerperson
Customer Surname Corresponds to the lastName node of party.customerperson
Company Name Corresponds to the companyName node of party.customerperson
Customer Street Address Corresponds to the address node of contact.location
Customer Suburb Corresponds to the suburb node of contact.location
Customer State Corresponds to the state node of contact.location
Customer Postcode Corresponds to the postCode node of contact.location
Customer Phone Corresponds to the areaCode and telephoneNumber nodes of contact.phoneNumber
Customer SMS Corresponds to the areaCode and telephoneNumber nodes of the contact.phoneNumber that has Allow SMS checked.
Customer Email Corresponds to the emailAddress node of contact.email.
Patient Identifier Corresponds to the id node party.patientpet
Patient Name Corresponds to the name node of party.patientpet
Patient Species Corresponds to the species node of party.patientpet
Patient Breed Corresponds to the breed node of party.patientpet
Patient Sex Corresponds to the sex node of party.patientpet
Patient Colour Corresponds to the colour node of party.patientpet
Patient Date Of Birth Corresponds to the dateOfBirth node of party.patientpet
Reminder Type Identifier Corresponds to the id node of entity.reminderType
Reminder Type Name Corresponds to the name node of entity.reminderType
Reminder Due Date Corresponds to the endTime node of act.patientReminder
Reminder Count Corresponds to the reminderCount node of act.patientReminder
Reminder Last Sent Date Corresponds to the lastSent node of act.patientReminder
Patient Weight The last recorded weight of the patient
Patient Weight Units The units of the last recorded weight
Patient Weight Date The date when the weight was recorded
Practice Location Corresponds to the name of the Practice Location linked via  practice node of party.customerperson

Report fields

Complete

OpenVPMS supports reporting using:

  • JasperReports - these are created using Jaspersoft Studio
  • Microsoft Word documents with MERGEFIELDs
  • OpenOfffice documents with User Fields

In order to create a report using any of these, you will need to know the names of the available fields.

The first step is to determine the template Type, from this you can get from the table below the name of the archetype. Note that three (those in CAPS) are not archetypes - see Special Reports below.

Template Type Archetype
Appointment act.customerAppointment
Bank Deposit act.bankDeposit
Customer Account Balance CUSTOMER_BALANCE
Customer Counter Sale act.customerAccountChargesCounter
Customer Credit act.customerAccountChargesCredit
Customer Estimation act.customerEstimation
Customer Form act.customerDocumentForm
Customer Invoice act.customerAccountChargesInvoice
Customer Letter act.customerDocumentLetter
Customer Payment act.customerAccountPayment
Customer Refund act.customerAccountRefund
Customer Statement act.customerAccountOpeningBalance
Grouped Reminders GROUPED_REMINDERS
Message act.userMessage
Patient Form act.patientDocumentForm
Patient Image act.patientDocumentImage
Patient Letter act.patientDocumentLetter
Patient Medication Label act.patientMedication
Patient Visit act.patientClinicalEvent
Prescription act.patientPrescription
Problem act.patientClinicalProblem
Reminder Report act.patientReminder
Stock Adjustment act.stockAdjust
Stock Transfer act.stockTransfer
Supplier Credit act.supplierAccountChargesCredit
Supplier Delivery act.supplierDelivery
Supplier Form act.supplierDocumentForm
Supplier Invoice act.supplierAccountChargesInvoice
Supplier Letter act.supplierDocumentLetter
Supplier Order act.supplierOrder
Supplier Remittance act.supplierAccountPayment
Task act.customerTask
Till Balance act.tillBalance
Work in Progress Charges WORK_IN_PROGRESS_CHARGES

 

To determine the available fields to use in the report, looking at the corresponding archetypes (see Administration|Archetypes).

For example, the act.customerAppointment has the following nodes:

        <node name="id" path="/id" type="java.lang.Long" hidden="true" readOnly="true" />
        <node name="name" type="java.lang.String" path="/name" hidden="true" minCardinality="1" derived="true"
            derivedValue="'Appointment'" />
        <node name="customer" path="/participations" type="java.util.HashSet" minCardinality="1" maxCardinality="1"
            filter="participation.customer" />
        <node name="patient" path="/participations" type="java.util.HashSet" minCardinality="0" maxCardinality="1"
            filter="participation.patient" />
        <node name="appointmentType" path="/participations" type="java.util.HashSet" minCardinality="1" maxCardinality="1"
            filter="participation.appointmentType" />
        <node name="startTime" path="/activityStartTime" type="java.util.Date" minCardinality="1" />
        <node name="endTime" path="/activityEndTime" type="java.util.Date" minCardinality="1" />

Each of these nodes may be used in reports as follows:

Node JasperReports Word MERGEFIELD/OpenOffice User Field
Field Expression Class
id $F{id} java.lang.Long id
name $F{name} java.lang.String name
customer $F{customer.entity.name} java.lang.String customer.entity.name
patient $F{patient.entity.name} java.lang.String patient.entity.name
appointmentType $F{appointmentType.entity.name} java.lang.String appointmentType.entity.name
startTime $F{startTime} java.util.Date startTime
endTime $F{endTime} java.util.Date endTime

Where a node refers to an archetype (e.g. the customer node is a collection of participation.customer), you can use "." to drill down on the nodes of that archetype.

In the above, "customer.entity.name" means:

  1. retrieve the object associated with "customer.entity"; and
  2. return its name node

To flesh this out a little, let us consider the act.customerAccountChargesInvoice and the party.customerperson archetypes which display (in part) as follows:

If you look at the Path column you can see 8 types of entries as follows:

Type Name Path Access via
Simple amount /total total
Simple/Detail reference /details/reference reference
Participation location /participations location.entity.xxx
SourceAct items /sourceActRelationships items.target.xxx
TargetAct reverses /targetActRelationships reverses.source.xxx
EntityLink practice /entityLinks practice.target.xxx
Contact contacts /contacts [function]
Classification tax /classifications [function]
Lookup title /details/title title
title.xxx
Lookup Local status /status status
status.xxx

In the above xxx indicates one nodes of the entity, target or source - eg location.entity.name - the way to figure out whether it should be entity or target or source is to look at the archetype for the coupling archetype, eg participation.location, actRelationship.customerAccountInvoiceItem, entityLink.customerLocation.

The [function] entry indicates that for these nodes (which can have multiple occurances - eg a customer can have multiple contacts), one needs to use one of the party:get() functions to access the information.

For items which have their values constrained by either one of the Lookups (eg title) or a set of local settings in the archetype (eg status) then using the simple reference (eg title or status) will access the stored value (eg MRS or IN_PROGRESS).  However, you can also used the .xxx form as follows:

  • title.code -> MRS
  • title.name -> Mrs
  • title.id -> 123  (the id of the lookup)
  • title.shortName -> lookup.personTitle (the archetype)
  • title.displayName -> the display name of the lookup
  • status.code -> IN_PROGRESS
  • status.name -> In Progress

Application Fields

The following fields are available to all reports1, and represent the current selections in the application, if any.  Note that if on the Workflow|Scheduling or |Work Lists screen you select an appointment or task, these become the current aqppointment or task.  However, the fact that the associated customer and patient details are displayed in the left panel does NOT mean that these become the current customer and patient.  The current customer and patient are those displayed on the Customers|Information and Patients|Information screens.

These fields may also be used in XPath expressions, by prefixing the field name with a $ (i.e. they are available in expressions as variables).

 

Field Archetype Description
OpenVPMS.patient party.patientpet The current patient
OpenVPMS.customer party.customerperson The current customer
OpenVPMS.practice party.organisationPractice The current practice
OpenVPMS.location party.organisationLocation The current practice location
OpenVPMS.stockLocation party.organisationStockLocation The current stock location
OpenVPMS.supplier party.supplier* The current supplier
OpenVPMS.product product.* The current product
OpenVPMS.deposit party.organisationDeposit The current deposit account
OpenVPMS.till party.organisationTill The current till
OpenVPMS.clinician security.user The current clinician
OpenVPMS.user security.user The current user
OpenVPMS.invoice act.customerAccountChargesInvoice

The current invoice. Only valid:

  • if in checkin, consult, checkout workflows
  • if an invoice is selected in the charges workspace
OpenVPMS.visit act.patientClinicalEvent

The visit for the current patient. Only valid:

  • if a patient visit is selected
  • if in the checkin, consult, or checkout workflow
OpenVPMS.appointment act.customerAppointment

The current appointment. Only valid:

  • when checking, consulting or checking out using an appointment
  • if an appointment is selected
OpenVPMS.task act.customerTask The current task. Only valid:
  • when consulting or checking out using a task
  • if a task is selected

1 With the exception of JasperReports SQL sub-reports

Field Samples
Field JasperReports Word MERGEFIELD/OpenOffice User Field
Field Expression Class
Practice name $F{OpenVPMS.practice.name} java.lang.String OpenVPMS.practice.name
Customer first name $F{OpenVPMS.customer.firstName} java.lang.String OpenVPMS.customer.firstName
Customer last name $F{OpenVPMS.customer.lastName} java.lang.String OpenVPMS.customer.lastName
Patient identifier $F{OpenVPMS.patient.id} java.lang.Long OpenVPMS.patient.id
Appointment date/time $F{OpenVPMS.appointment.startTime} java.util.Date OpenVPMS.appointment.startTime
User name $F{OpenVPMS.user.name} java.lang.String OpenVPMS.user.name

Expression Samples

Description Expression
Practice telephone [party:getTelephone($OpenVPMS.practice)]
Practice Location address [party:getCorrespondenceAddress($OpenVPMS.location)]
The current appointment start time as date with 'No current ...' check [expr:var( 'OpenVPMS.appointment.startTime', 'No current appointment')]
The current appointment start time as long date/time [date:formatDateTime( $OpenVPMS.appointment.startTime, "long")]
The current appointment start time like 'Monday 16 March at 9:45 AM' with 'No current …' check [expr:if(boolean(expr:var( 'OpenVPMS.appointment.startTime')), date:format(expr:var( 'OpenVPMS.appointment.startTime'), "EEEE d MMMM 'at' K:mm a"),'No current appointment')]

Note that the expr:var() function needs the name of the variable to test (eg 'OpenVPMS.appointment.startTime') whereas the date:format functions needs the actual variable, eg $OpenVPMS.appointment.startTime or

expr:var( 'OpenVPMS.appointment.startTime').

Application Fields as Report Parameters

JasperReports queries support parameters using $P{parameter name} syntax.

To use Application Fields as parameters, reference the field within a parameter's Default Value Expression.

E.g. to pass the current customer identifier, create a parameter with the following settings:

  • Name: customerId
  • Class: java.lang.String
  • Is For Prompting: Yes
  • Default Value Expression: "$OpenVPMS.customer.id"

Note that Class must be java.lang.String to avoid compilation errors, and that the parameter must be prompted for otherwise the $OpenVPMS.... will not be replaced with its current value.

If there is no current item (ie customer in the above case) then the parameter will be initialised to null.  Hence if the parameter was set as follows:

then the SQL code should be like the following - note the comparison to the string "0" to handle the 'all' case:

and for the display of the parameter in the report, you might want to use an expression like the following so that the 'no current' case is clearly identified:

($P{customerID}==null)||($P{customerID}.compareTo("")==0)?"--NONE--":$P{customerID}

 

Special Reports

 

These are special reports that are generated by running queries that:

  • derive values
  • return partial objects
  • return multiple objects

For CUSTOMER_BALANCE, the fields are:

Field

Type

Description

customer.objectReference org.openvpms.component .business.domain.im.common .IMObjectReference The customer reference
customer.name java.lang.String The customer name
balance java.math.BigDecimal The customer balance
overdueBalance java.math.BigDecimal The customer overdue balance
creditBalance java.math.BigDecimal The customer credit balance
lastPaymentDate java.util.Date The customer's last payment date
lastPaymentAmount java.math.BigDecimal The customer's last payment amount
lastInvoiceDate java.util.Date The customer's last invoice date
lastInvoiceAmount java.math.BigDecimal The customer's last invoice amount
unbilledAmount java.math.BigDecimal The customer's unbilled amount

For GROUPED_REMINDERS, the fields are:

Field Type Description
customer party.customerperson The reminder customer
patient party.patientpet The reminder patient
reminderType entity.reminderType The reminder type
product product.* The reminder product
clinician security.user The reminder clinician
startTime java.util.Date The reminder start date
endTime java.util.Date The reminder due date
reminderCount java.lang.Integer The reminder count
act act.patientReminder The reminder act

For WORK_IN_PROGRESS_CHARGES, the report is supplied with Invoices, Credits and Counter charges (act.customerAccountChargesInvoice, act.customerAccountChargesCredit, and act.customerAccountChargesCounter archetypes respectively), that have an In Progress, Complete or On Hold status.

The available fields are therefore the nodes present in each of these archetypes.

JasperReports Expressions

JasperReports can evaluate xpath expressions by declaring a variable that uses the EVALUATE() function. This takes a single argument, the expression to evaluate e.g.:

EVALUATE("party:getAccountBalance(.)")

Report parameters can be accessed by the function by prefixing their names with $P. SQL-based JasperReports can also access the report fields, by prefixing their names with $F. e.g.:

EVALUATE("product:price($F.productId, $F.unitPrice, $P.includeTax)")

The above calls the product:price() function, supplying the values of the productId and unitPrice fields, and the includeTax parameter.

The EVALUATE() function is not supported in reports that use Sort Fields, due to a JasperReports limitation. It will evaluate to null.

As a workaround:

  • remove Sort Fields. For:
    • SQL reports, perform the sorting within the SQL statement.
    • sub-reports created using ${dataSource}.getDataSource(node), specify the sort fields e.g:
$P{dataSource}.getDataSource("items", new String[]{"target.product.entity.name", "target.startTime"})
  • define a field that uses the legacy [] notation instead of a variable using EVALUATE e.g.:
[document:text(., 'note')]

Reports and Documents

Complete

If you do need to create of modify documents and reports, the following should be useful.

OpenVPMS uses two 'vehicles' to generate printed (or pdf) output: OpenOffice (specifically its 'soffice' component) and JasperReports. Note that since OpenOffice can handle Microsoft Word documents, you can happily use Word rather than Open Office Writer to prepare letters and forms.

Which of these two is used depends on the document content set for the document template. (See Administration|Templates and Create/Edit Template.) If the document content is a .jrxml file, then JasperReports is used, if it is an .odt or .doc or .docx file then OpenOffice is used.

To create and edit the .jrxml files you use JasperSoft's Studio (which has superseded iReports but which can still be used if desired).

Note that JasperReports is used for any document that has more complex datasets such as invoices, statements, reports etc as these typically have multiple rows of data and require groupings and other data processing functions not available in OpenOffice. These are also rarely changed except during implementation.

OpenOffice is used for customer, supplier and patient documents. These are more likely to be modified and added to by the practice so a standard word processor editor is more appropriate.

The reports and forms/letters/documents get data in two ways:

  • Reports (ie things run from the Reporting|Reports menu) are all handled by JasperReports. These MUST have their Report Type set to 'Report' in their document template. The report parameters (if any) are passed as 'Parameters' and the 'datasource' is set to access the MySQL database.  The report then uses SQL to extract the required information from the MySQL database. Selection criteria and other parameters are entered via a report criteria screen.
     
  • Forms, letters, and system documents & reports (ie invoices & statements etc) may be handled by either JasperReports (for the complicated ones) or OpenOffice. For these the Report Type in their document templates will always be other than 'Report', eg 'Customer Invoice', 'Patient Letter', 'Customer Statement' etc. In both cases an appropriate dataset is made available - and this is determined by the Report Type. For OpenOffice (or M/S Word) this is accessed via merge fields, ie the facility that is commonly used in word processors to do mail merge. For JasperReports, the 'datasource' is set to access this dataset. In both cases the field names are the same. Note that the term 'field name' is a little misleading - as well as things that look like names such as customer.entity.name and patient.entity.species, you can use more complicated expressions like [openvpms:get(party:getPatientOwner(.),'lastName')] and [macro:eval('standardConditions')]. Expressions are always enclosed by square brackets.

    The available field names are documented here; the available expressions here. In addition http://www.openvpms.org/document-merging-open-office-writer provides a useful 'cheat-sheet'.

    Input parameters (commonly user input to letters) are entered via a parameter input screen.

 

Open Office Notes
The simplest way to generate a new .odt template is to use the sample templates included in the distribution.  These call out almost all the available fields and you can copy the required fields from the sample document.

Microsoft Word Notes
The simplest way to generate a new .doc (or .docx) template is to use the sample templates included in the distribution.  These call out almost all the available fields and you can copy the required fields from the sample document.

Note that although Word supports conditional fields, these are not implemented by the Open Office component used by OpenVPMS. Hence if you need conditional fields (eg to switch between 'him' and 'her' based on the patient's sex) then you will either need to use .odt templates. Alternatively you use the macro:eval function to run a macro that will return his or her depending on the sex.

Studio Notes
The following is not intended to be 'how to use Studio' but rather a set of notes that may help you when you are examining an existing report and trying to understand how it works.

Field names: For reports, when the datasource is the MySQL database, the field names are the names of the fields returned by the SQL query. Otherwise the datasource is a data collection and the field names are used the access the data collection - either via simple archetype dot notation (eg customer.entity.name), or via xpath expressions enclosed in square brackets (eg [party:getPartyFullName(.)] ).  While the former feels quite normal - ie using $F{customer.entity.name} is a reasonable syntax, the latter appears peculiar - $F{[party:getPartyFullName(.)]} does not look like a normal way to access something.  However, it works - what is happening is that the OpenVPMS code examines the name of the field, sees that it starts with '[' and ends with ']' and knows to interpret the contents as an xpath expression.

Sorting and Grouping: The Grouping facility assumes that the records are appropriately sorted. That is, if you use grouping to organise the output by patient/date/product type then the data must be sorted in this order - defining the groups does not do the sorting for you. For SQL based reports, you do the sorting in the SQL query. Otherwise you can do it either in the datasource specification (see below) or using the inbuilt facility - this is accessed via the Sort Fields entry in the Outline window
.

or alternatively via the Sorting tab in the Dataset and Query Dialog window (accessed via the icon)

Note that using the inbuilt sort, you can sort using fields (including ones that are xpath expressions) and variables, whereas in the datasource specification (see below) you can only sort by node names. Hence it is normal to do all the sorting here and omit all sort fields from the datasource specification.

Sub-reports: [Note that in contrast with 1.8 and earlier releases, sub-reports are now supported in all bands.] When using sub-reports you must specify the datasource for the sub-report in the main report. If the main report is using the MySQL database as the datasource, then the datasource part of the sub-report field in the main report will be set like the following:

However, if the main report is not using MySQL as the datasource (ie this is the sub-report for Customer Invoices or Customer Statements) then the datasource part of the sub-report field in the main report will be set like the following:

The datasource expression can also have a second argument as follows:

 $P{dataSource}.getDataSource("items", new String[]{"target.patient.entity.name", "target.startTime"}) 

Here, the first argument "items" specifies the node in the report's data source (eg act.customerAccountChargesInvoice for an invoice), and hence this accesses the invoice's items. The strings in the second argument specify the names of the nodes to sort the data by. Note that these must be node names, they cannot be xpath expressions. Hence, as indicated earlier sorting is normally done in the report itself rather than in the getDataSource call.

Now the 'items' node of the act.customerAccountChargesInvoice archetype is a collection of actRelationship.customerAccountInvoiceItem archetypes, and in these the node named 'target' is the collection of act.customerAccountInvoiceItem archetypes which are the invoice line items.

Hence in the sub-report, the field names are target.xxx where xxx is the node within the act.customerAccountInvoiceItem archetype.

In some cases we want to invoke a subreport just once - this is done in the invoice and other templates to invoke the letterhead and address block subreports. So here we pass a node such as 'customer' or 'patient'. This works for the letterhead and address block subreports because (unlike the invoice items case) the subreport contains nothing dependent on the data source and only things like OpenVPMS.location.letterhead.target.logoFile and [party:getTelephone(party:getLetterheadContacts($OpenVPMS.location))] that are independent of the data source.

NOTE that the Subreport Expression contains the name of the Content of subreport - not the template name.  Hence if you upate say the Invoice Items template with a modified content file (say InvoiceItems-BE-1.jxrml) then the Invoice template will not be able to find the items content because you have changed its name. That is, if you are editing the content of a subreport, you must not change the name of the content file.

Furthermore you should not have multiple templates that have content of the same name - IF one of the templates is a subreport. This is because when the subreport content is used when the report is run, it is highly likely that the wrong one will used since there are multiple content files with the same name.

Studio Preview: If you building a report that uses the MySQL datasource, then you can use Studio's Preview facility. To set this up you need to add the datasource.

Click the New Data Adaptor button:

First select a location to save the data adaptor XML file that is being built:

Press Next and select the Database JDBC Connection:

Then press Next to create a new 'Database JDBC connection' and then set the details as follows:

and then use the Driver Classpath tab to set the location of the mySQL connector jar:

You will need to adjust the C:\OpenVPMS\Current-release to match your <OPENVPMS-HOME> location.

Then press Finish.

You will find that when using the Preview facility that a common error is to leave the Data Adaptor set to its default of 'One Empty Record' - the symptom is that the report finds no data.  If this happens, check that you have the data adaptor set correctly.

 

 

 

Email Letterhead Support
If reports and documents are set up to be printed on letterhead paper, then if they are emailed rather than printed, one needs a facility to insert the letterhead when the item is being emailed but not if it is being printed.

This is achieved through the IsEmail property which is supported for OpenOffice and JasperReports templates.

To use it in OpenOffice templates:

  1. Create a new field by going Insert -> Fields -> Other -> User Field
  2. In Name, enter "IsEmail" (without quotes)
  3. In Value, enter "unset" (without quotes)
  4. Click on the green tick
  5. Create a section to display when printing by going Insert ->Section
  6. Name it "Print Letterhead"
  7. Tick the Hide box
  8. Enter: IsEmail == "true" in the With Condition box
  9. Click OK
  10. Repeat 5-9 for a section named "Email Letterhead" but enter IsEmail == "false" in the With Condition Box.

The "cartrophen first reminder.odt" and "desex first reminder.odt" templates in the release distribution demonstrate this. 

To use it in JasperReports templates:

  1. Add a Boolean parameter, IsEmail
  2. For elements that should only be displayed when emailing, set their "Print When Expression" expression to: $P{IsEmail}.equals(Boolean.TRUE)
  3. For elements that should only be displayed when printing/previwing, set their "Print When Expression" expression to: $P{IsEmail}.equals(Boolean.FALSE)

Any of the JasperReports in the release distribution illustrate this.

Searching

Complete

OpenVPMS supports wildcard searches as outlined in Wildcards

In many cases, wildcards are automatically added to Search criteria, so that any record with a name that contains the criteria is returned.  E.g. searching for a diagnosis with oedema might return:

Blepharoedema
Hypersensitivity (allergic) skin disorder - angioedema
Myxoedema
Pulmonary oedema
Pulmonary oedema - cardiogenic
Peripheral oedema
Pulmonary oedema - non-cardiogenic
Lymphoedema

This is not true of customer, patient or product searches; here the default behaviour is to return records with names that start with the criteria. E.g. searching for a customer named Smith won't return records with the name Goldsmith. This can be changed by prefixing the criteria with a *. E.g. *smith

To make contains searches the default for customers, patients or products, the QueryFactory.properties file in <TOMCAT_HOME>/webapps/openvpms/WEB-INF/classes can be changed.

#
# Uncomment the following two lines to make substring searches for customers the default.
# Note that for large no.s of customers, this could affect performance
#
#party.customer*               org.openvpms.web.component.im.query.CustomerQuery,contains=true
#party.organisationOTC         org.openvpms.web.component.im.query.CustomerQuery,contains=true

#
# Uncomment the following line to make substring searches for patients the default.
# Note that for large no.s of patients, this could affect performance
#
#party.patient*                org.openvpms.web.component.im.query.PatientQuery,contains=true

#
# Uncomment the following line to make substring searches for products the default.
#
#product.*                     org.openvpms.web.component.im.product.ProductQuery,contains=true

E.g., the following enables contains searches for all of them:

#
# Uncomment the following two lines to make substring searches for customers the default.
# Note that for large no.s of customers, this could affect performance
#
party.customer*               org.openvpms.web.component.im.query.CustomerQuery,contains=true
party.organisationOTC         org.openvpms.web.component.im.query.CustomerQuery,contains=true

#
# Uncomment the following line to make substring searches for patients the default.
# Note that for large no.s of patients, this could affect performance
#
party.patient*                org.openvpms.web.component.im.query.PatientQuery,contains=true

#
# Uncomment the following line to make substring searches for products the default.
#
product.*                     org.openvpms.web.component.im.product.ProductQuery,contains=true

Note that:

  • Enabling customers or patient searches could adversely affect performance. In the worst case scenario, every customer or patient will be scanned for matches.
  • Any change won't be picked up until either the web application or Tomcat is restarted.
  • The change will be need to be re-applied each time the web application is deployed.

 

Setup

Complete

This section contains topic relevant to setting up the system.

Note that if you do edit Administration|Organisation items (say to change an email address), then the new values will not become available until the next time you log on (because these organisation settings are fetched once at logon time to improve performance).

Email

Complete

To get email to work you need to do the following:

Use Administration|Organisation|Mail Server to define at least one Mail Server by setting the various parameters (ie Mail Host, Port, Username, Password, and Connection Security).

For the Practice, set the default mail server.  This is used if one is not set for a Practice Location, and is also used by the email-to-SMS gateway.

If a Practice Location needs its own Mail Server record, define one for it, and set this for the Practice Location. You may want to do this for situations where you are sending mail from a gmail address specific to the location, and you want to use the gmail smtp server for this gmail address (so that gmail does not raise warning flags).

Then define the Email contact(s), and if appropriate, add different ones for each applicable purpose (eg Billing, Correspondence, Reminder). Note that you can set the Email contacts at either the Practice or Location level. If you set them at the Location level, these will be used in preference to the those set at the Practice level.

 

If you are having problems, you can enable debugging by editing the mailSender bean in :

$TOMCAT_HOME/webapps/openvpms/WEB-INF/openvpms-web-app.xml

Change

 <bean id="mailSender" class="org.openvpms.web.component.service.MailService" scope="prototype"/> 

to

<bean id="mailSender" class="org.openvpms.web.component.service.MailService" scope="prototype">
    <property name="javaMailProperties">
       <props>
           <prop key="mail.smtp.debug">true</prop>
       </props>
    </property>
</bean>   

You can then look in the log at $TOMCAT_HOME/openvpms.log for the debug output.

Multiple systems

Complete

You may want to run multiple OpenVPMS systems hosted in the one server, either for test and production systems, or in cases where multiple practices share the same server.

Note that if you are running multiple systems, it is important that you do not get confused about which system you are using.  You can use a different screen colour for each system (see here for how to do this). You should also use different user login names and passwords (so as to prevent an unthinking person signing in to the wrong system). You should also set different database user names and passwords for each system.

One way to run multiple systems is of course to run each in its own virtual machine with these hosted on the one piece of hardware.

However, you can also host multiple systems on the one server.  (Note however that if you use the ESCI facility, then you cannot host multiple systems on the one server.) The way to set this up is as follows:

1. install the first system as per the instructions in the readme.txt file.

2. for the next OpenVPMS system, install the OpenVPMS software in its own folder/directory, now referred to as <OPENVPMS_HOME_X>

3. the database access is defined in the file <OPENVPMS_HOME_X>/conf/hibernate.properties, specifically the three lines

hibernate.connection.url=jdbc:mysql://localhost:3306/openvpms
hibernate.connection.username=openvpms
hibernate.connection.password=openvpms

Hence for this OpenVPMS system we need to change the database name in the first line from openvpms to say openvpmsX. The user name and password should be changed to say openvpmsU and openvpmsP to decrease the likelihood of you getting confused and doing database operations on the wrong database.

To create the database, we need to edit the file <OPENVPMS_HOME_X>/db/create.sql so it reads as follows:

#
# Script to create the openvpmsX database, and add a single user 'openvpms',
# with all privileges
#

CREATE DATABASE `openvpmsX` /*!40100 DEFAULT CHARACTER SET utf8 */;

GRANT ALL PRIVILEGES ON openvpmsX.* TO 'openvpmsU'@'localhost'
    IDENTIFIED BY 'openvpmsP' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON openvpmsX.* TO 'openvpmsU'@'%'
    IDENTIFIED BY 'openvpmsP' WITH GRANT OPTION;

COMMIT;

where "openvmsX" is the name of the new database, "openvpmsU" the user name, and "openvpmsP" the password. You can now create the database as per the readme.txt, ie do

  > cd <OPENVPMS_HOME_X>/db
  > mysql -u admin -p < createdb.sql

You can now populate the database as per the readme.txt steps, or you can simply dump the contents of the base openvpms database, and then restore this into the new openvpmsX database.

4. Finally we need to set up the Tomcat application.  The easiest way to do this is to first copy the <TOMCAT_HOME>/webapps/openvpms directory to <TOMCAT_HOME>/webapps/openvpmsX.  You then need to edit two files as follows:
  a) in  <TOMCAT_HOME>/webapps/openvpmsX/WEB-INF/web.xml, the webAppRootKey value needs to be set to "openvpmsX" as per the following

    <!-- Needed by spring if you want to deploy app more than once as different name. Change value
      -  to something unique -->
    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>openvpmsX</param-value>
    </context-param>

  b) edit <TOMCAT_HOME>/webapps/openvpmsX/WEB-INF/classes/hibernate.properties so it matches <OPENVPMS_HOME_X>/conf/hibernate.properties - see step 3 above.

Now restart Tomcat and you can then access the new system at http://localhost:8080/openvpmsX/app

 

5. Repeat steps 2-4 for each addition system that you require.

Other countries/jurisdictions

Complete

While most of the country dependent settings (such as tax and currency) can be set within the application itself (for example via Administration|Lookups|Country and Administration|Organisation|Practice), some setup needs to be done outside the application.  This section documents the available adjustments.

Rabies Tags

If you use Rabies Tags in your country/jurisdiction, you will need to enable them. You will need to modify the party.patientPet archetype. The best way to do this is to modify the file party.patientpet.adl and then use Administration|Archetypes to import the modified version. This file is located in <OpenVPMS-Home>update\archetypes\org\openvpms\archetype\patient. You should of course save the modified file in a different place. Change the lines

  <!-- For jurisdictions that use rabies tags, uncomment the following -->
  <!--
  <propertyMap name="archetype">
      <property name="shortName" value="entityIdentity.rabiesTag"/>
  </propertyMap>
  -->

to

  <!-- For we use rabies tags -->
  <propertyMap name="archetype">
      <property name="shortName" value="entityIdentity.rabiesTag"/>
  </propertyMap>

Pet Tags

Pet Tags are enabled in the standard release.  If you do not use these in your country/jurisdiction, you can do the opposite of the above - ie comment out the pet tags, ie change

    <propertyMap name="archetype">
         <property name="shortName"
                   value="entityIdentity.petTag"/>
    </propertyMap>

to

    <!-- suppress pet tags   
    <propertyMap name="archetype">
         <property name="shortName"
                   value="entityIdentity.petTag"/>
    </propertyMap>
    -->

 

 

Propercasing

Complete

Warning - this requires appropriate technical skills.

There are two ways of adjusting the propercasing facility: modifying the appropriate archetype to turn it off for a specific field; and editing the properties file.  For the first, modify the appropriate node in the archetype to remove the propercase Assertion Descriptor. For the second, proceed as follows.

If you want to adjust how propercasing is performed on various words, you need to edit (after saving a copy) the file propercase.properties in the folder <TOMCAT HOME>\webapps\openvpms\WEB-INF\classes\localisation

Each line of the file has the format <keyword>.N = <string> where <keyword> is one of the keywords shown in the table below, N is a digit or digits, and <string> is the propercase version the string.

Keyword Meaning Examples
space Strings that must appear surround by spaces. space.1 = &
spaceBefore Strings that must appear with a space before them. spaceBefore.1 = (
spaceAfter Strings that must appear with a space after them. spaceAfter.1 = )
spaceAfter.2 = .
exceptions Strings that are to be cased as given ignoring other case rules.

exceptions.1 =  von
exceptions.2 =  van
exceptions.3 =  de
exceptions.4 =  la
exceptions.5 =  da
exceptions.6 =  di
exceptions.7 =  PO Box
exceptions.8 =  La Trobe
exceptions.9 =  Macquarie
exceptions.10 =  GPO
exceptions.14 =  1st
exceptions.15 =  2nd
exceptions.16 =  3rd
...
exceptions.22 =  9th
exceptions.23 =  0th
exceptions.24 =  ADEC
exceptions.26 =  ALB
exceptions.27 =  ALP
exceptions.28 =  ALT
exceptions.29 =  APTT
exceptions.30 =  AST
exceptions.31 =  AVID
...
exceptions.153 = Macaw
exceptions.154 = Mackeral

startsWith Strings that must appear with the specified case at the start of a word. Where they appear, they force capitalisation of the next character in the word. startsWith.1 = Mac
startsWith.2 = Mc
startsWith.3 = d'
startsWith.4 = (
startsWith.5 = `
startsWith.6 = "
contains Strings that must appear with the specified case anywhere in a word. Where they appear, they force capitalisation of the next character in the word. contains.1 = -
contains.2 = '
contains.3 = 0
contains.4 = 1
contains.5 = 2
contains.6 = 3
etc for each digit
endsWith Strings that must appear with the specified case at the end of a word. endsWith.1 = 's

Hence the "startsWith.1 = Mac" would force Macaw to MacAw but for the "exceptions.153 = Macaw".

Note that you can functionally 'comment out' an entry by adding a leading # (or any other character) because this changes the key from say 'startsWith' to '#startsWith' which will not be recognised and will be ignored.

SMS

Complete

OpenVPMS supports SMS via provider-specific plugins, or using email-to-SMS gateways.

SMS Plugins

Clickatell

A plugin is included for Clickatell that enables SMS statuses to be tracked. This requires:

  1. a Clickatell account
  2. a Clickatell REST API integration
  3. plugin support enabled, if required
  4. the plugin to be installed; and
  5. configured

1. Clickatell account

Clickatell accounts can be obtained at https://www.clickatell.com/sign-up/

2. Clickatell REST API Integration

To create a Clickatell REST API:

  1. Go to https://portal.clickatell.com/
  2. On the left panel, click SMS - Configure SMS
  3. Click Create new integration
  4. Enter a Name and Description
  5. Under API Type, click REST
  6. Click Next, and fill out any additional features.
  7. Save the integration.
  8. Make a note of the API Key. This is required by the plugin.

NOTE: Two-way messaging can be enabled but the plugin is unable to receive replies.

3. Enable Plugin Support

Plugin support is provided in Administration - System - Plugins.

See the corresponding help for instructions on enabling plugins.

4. Install the Clickatell plugin

To install the plugin:

  1. Go to Administration - System - Plugins
  2. Click Install Plugin
  3. Upload the Clickatell plugin from <OPENVPMS_HOME>/plugins/available/openvpms-clickatell-plugin.jar
    For OpenVPMS 2.2, the plugin is named openvpms-clickatell-plugin-2.2.jar
  4. once uploaded it should appear in the list of plugins as Clickatell OpenVPMS plugin, with a status of Active
  5. Log-out/in. This is required as the plugin archetypes aren't visible

5. Configure the Clickatell Plugin

To configure the plugin:

  1. Go to Administration - Organisation
  2. Click New - Clickatell
    Fill out the fields: 
  • API Key - the API key generated by 2.8 above
  • Country Prefix - the country code, e.g. 61 for Australia, 44 for the UK, etc
  • Area Prefix - the digit used to prefix the area code, i.e. 0 for Australia
     

A description of the remaining fields is available at Administration - Organisation - Clickatell.

  1. Click Apply
  2. Locate the Practice
  3. Click Edit
  4. In the SMS field select the Clickatell configuration
  5. Click Apply
  6. Log-out/in. This is required as the Practice change only takes effect on login.

Email-to-SMS gateways

 

For email-to-SMS gateways, the Practice must be configured with a Mail Server.
This Mail Server should not be configured to add footers to outgoing emails, as they may be appended to SMS messages. This can:

  • increase the cost of sending an SMS
  • cause the SMS provider to discard the message, if it is too long

Having done that you can proceed with the SMS setup discussed below.

Two email-to-SMS gateways are supported out of the box:

To sign up, go to: https://www.smsglobal.com/mxt-sign-up/
SMSGlobal allows you to send a small number of test messages for free after you register.

Now use Administration - Organisation - SMS Configuration: SMSGlobal Email2SMS

  • Clickatell mail-to-SMS gateway (http://www.clickatell.com )
    This is only available for Clickatell users who registered prior to 2016.
    For newer users and additional features, the Clickatell plugin above should be used.

Clickatell allows you to send a small number of test messages for free after you register but sends a preformatted SMS until you pay.
To sign up:

After signing up, logon and click the 'Manage My Products' tab. Then click 'SMTP [Email to SMS]'  link the click "Submit and Get API ID". The API ID is needed when configuring OpenVPMS.

Now use Administration - Organisation - SMS Configuration: Clickatell SMTP Connection
 

If you want to use another provider, then you should be able to do so using the Generic Gateway. You will need some knowledge of the gateway message format requirements and xpath expressions.
See Administration - Organisation - SMS Configuration: Generic Email Gateway

 

The SMSGlobal and Clickatell configuration screens hide the underlying detail, and indeed it is possible to configure an SMSGlobal or Clickatell gateway using the Generic configuration screens.  Similarly, it is possible to create a tailored screen for another vendor.  If you want to do this see here.

Once configured, these must be linked to the practice using Administration - Organisation - Practice.

 

Times, Dates and Language

Complete

This page discusses the problems of localisation.

Time
The time in OpenVPMS is set from the time in the 'server' machine - ie the one running the MySQL database and Tomcat application.  If the user and the server are all in the same timezone, then there is no problem.

However, if you are using a hosting service somewhere else, then it may be necessary to set the server time to match the local time where your users are. [For example the OpenVPMS demo system runs on a server with its time set to GMT. If you log onto this from say Sydney, then early in the day you will find that 'today' on the server (and thus the default date on invoices you create) will be yesterday your time because GMT is 10 hours behind AEST.]

If you have users spread across multiple timezones, then you will need to educate those in the 'non-home' time zones that theirs will be different.  Thus if you have a practice spread across the NSW/Queensland border but with headquarters in NSW, in summer your Surfers Paradise branch will be running an hour behind.  In this case you probably want to run the appointment schedule for the Surfers branch on local time, but the timestamps on any activity will be NSW, not Queensland time. 

Date Format
The date format used is set in the <TOMCAT_HOME>/webapps/openvpms/WEB-INF/classes/localisation/messages.properties file (or the local version - see Language below).

Specifically, if you need to use say a US date format, then you need to adjust the settings in this file. Note that as well as the date formats, you can also adjust the numeric formats if needed.

Note that messages.properties settings affect the display on the screen. See below for Reports and Documents.

Language
OpenVPMS uses standard java i18n support so if you name your message properties file according to your locale settings, eg messages_fr.properties for France, then it will be used instead of the standard messages.properties.

Note that you can do minor language tweaks by editing the message.properties file. For example if you think that Organisation should really be Organization then you can change it here. [Though it would be better to create a message.properties-us file which includes both the spelling adjustments and the mm/dd/yy date formats.]

Reports and Documents
The standard reports and documents that are generated from Document Templates using JasperReports based content have been written to be locale sensitive for both dates and currencies. The locale used is that set for the user running the Tomcat application.

The letters and forms which use Open Office based content are not locale sensitive.  The format of dates is as follows:

  • With User Fields like 'patient.entity.dateOfBirth' and 'startTime', these return the date as a string from OpenVPMS and the format of this date depends on the messages.properties date format setting.
  • With Date Fields, these need to be explicitly formatted as you require.

Style - Colours

Complete

For most things you can change the display colour via the appropriate Administration screen - for example Users to set the clinician colour on the scheduling and work list screens.  However, for three things you have to change files in the styles directory.

The files default.stylesheet and default.properties, are located in the <TOMCAT_HOME>/webapps/openvpms/WEB-INF/classes/style folder. It is sensible to make a backup copy of these files before editing them. Having saved the file(s) you will need to restart Tomcat to get the changes to have effect.

Note that it may be better to use the site over-ride facility - see Style - Site.

The colours are set as Hex codes - see the colour block at the bottom of this page.

Appointment/Task Status
You can change the colours used to highlight the status of appointments on the scheduling screen and tasks on the work list screen.

This can be done by overriding the following from default.properties:

#
# Schedule status colours
#
schedule.pending.colour = '#ffffff'
schedule.checkedin.colour = '#dbf714'
schedule.inprogress.colour = '#ffcccc'
schedule.completed.colour = '#ccffff'
schedule.cancelled.colour = '#cc99ff'
schedule.billed.colour = '#ccffcc'
schedule.admitted.colour = '#ffcc99'

 

Screen Colours
If you want to change the standard OpenVPMS green background on the screens to another colour, in the file default.properties, look for the line containing theme.colour  = '#339933'. Change the 339933 to the get the required colour.  In the same part of the file, you will also find the title, button and selection colours as well as the colours used for the various medical history items.

Reminder Status
You can change the standard green/orange/red settings for the reminder not due/due/overdue status.

In the file default.properties, look for the line containing reminder.notdue.colour.  This and the due and overdue lines set the colours. Change as required - but note that this will not change the colour of the red bell icon used to warn of an overdue reminder.

History Colours
If you want to change the colours of items on the Medical Records screen, in the file default.properties, look for the line containing "# Patient history colours" - the following lines set the colours for the different items.

Sample Colours
The sample block below shows the hex codes of the set of 'web-safe' colours. You will find 'OpenVPMS Green' in the second column, 10 down.  See also this forum post for a tool to compare colours.

Style - Column Widths

Complete

You can adjust the size of some column widths to suit local usage by overriding properties in the default.properties file. This is done by adding the property to a file named site.properties in the <TOMCAT_HOME>/webapps/openvpms/WEB-INF/classes/style folder. Having saved the file you will need to restart Tomcat to get the changes to have effect.

Medical Records: Clinician Width
You can change the size of the Clinician field (shown if you set the 'Show Clinician in History Items' option for the Practice). You may want to either increase this to show long names, or decrease it if you use just initials.

The width is controlled by the history.clinician.width setting.

Selector Field Width
You can change the size of the 'selector' fields - ie those with the binocular icon following them. You may want to do this if you find that the standard size is often too narrow to show all the data.

The width is controlled by the selector.width setting.

Style - Labels

Complete

 

The default for label alignment is left so that things look as follows:

However, you can change this to right so that the above becomes:

To change the label alignment you need to edit default.properties, located in <TOMCAT_HOME>/webapps/openvpms/WEB-INF/classes/style/default.properties- and having edited it (after first taking a backup copy) you need to restart Tomcat to get the changes to have effect.

Go to the section on Label alignment. i.e.:

 #
# Label alignment.
# This specifies the horizontal label alignment when:
# . editing and viewing objects
# . inputting report parameters
# Possible values are 'left' and 'right'
label.align = 'left'
  

and change 'left' to 'right'.

Note that it may be better to use the site over-ride facility - see Style - Site.

Style - Site

Complete

Instead of customising default.stylesheet and default.properties located in the <TOMCAT_HOME>/webapps/openvpms/WEB-INF/classes/style directory, you can place these changes into files named site.stylesheet and site.properties in the same directory, and they will override the default values. For site.stylesheet, enclose all styles in a root <stylesheet> element. For example:

 <stylesheet>
    <style name="SomeLayout" type="nextapp.echo2.app.SplitPane">
        <properties>
            <property name="resizable" value="false"/>
            <property name="separatorPosition" value="${SomeLayout.separatorPosition}"/>
            <property name="separatorHeight" value="0px"/>
        </properties>
    </style>
    <style name="SomeOtherLayout" type="nextapp.echo2.app.SplitPane">
        <properties>
    </style>
</stylesheet> 

However, it is important to understand how the facility works.  There are two problems:

1. styles cannot refer to styles defined in different stylesheets

So you can't have a base-name attribute in site.stylesheet that refers to a style defined in default.stylsheet. You need to either:

  • incorporate the original style in the custom style
  • copy the original style to site.stylesheet

2. styles that have the same name must all be copied

If a style name appears for different classes (e.g. "default" for nextapp.echo2.app.Label, and nextapp.echo2.app.WindowPane), and you want to customise the Label version, you have to copy all other occurences of "default" as well. This is due to a bug/feature in the echo2 framework, that replaces all instances of a style when merging stylesheets.

Raised as https://openvpms.atlassian.net/browse/OVPMS-1387

Toolbox

Complete

Toolbox is a command line tool for performing administrative functions in OpenVPMS.

It is invoked using the toolbox command in the <OPENVPMS_HOME>/bin directory. e.g.:

> cd <OPENVPMS_HOME>/bin
> toolbox
Usage: toolbox [COMMAND]
Commands:
  configure        Configure openvpms.properties
  database         Create or update the database
  archetype        Load or compare archetypes
  war              Create the web archive
  template         Load report templates
  user             Set passwords, enable/disable users
  plugin           Enable/disable plugins
  ssl              Check SSL connectivity

The options are as follows:

Configure

Configure openvpms.properties.

This:

  • prompts for database connection properties:
    • If there is a default value, it will be surrounded by square brackets.
    • To keep the default value, press enter.
  • generates openvpms.key, if not present
    This is used to encrypt and decrypt 3rd-party passwords.
  • updates the openvpms.properties configuration file in <OPENVPMS_HOME>/conf

E.g.:

> toolbox configure

Database URL [jdbc:mysql://localhost:3306/openvpms?useSSL=false]:
Database user [openvpms]:
Database password: apasswd
Reporting database URL [jdbc:mysql://localhost:3306/openvpms?useSSL=false]:
Reporting database user [openvpms]:
Reporting database password [apasswd]:

The file ../conf/openvpms.properties should have restrictive permissions to protect passwords

Take a secure backup of the file ../conf/openvpms.properties
This needs to be kept for subsequent updates.

If the MySQL database is on a different host to that running Tomcat, replace localhost in the Database URL with the correct host name or IP address.

Database

Create
 

Create the database.

This:

  • creates the database specified by db.url in the <OPENVPMS_HOME>/conf/openvpms.properties file
  • creates the user corresponding to the db.username and db.password
  • loads archetypes

E.g:

> toolbox database --create -u <admin-user> -p <admin-password>

Created openvpms
Archetypes successfully loaded

Update

Updates the database to the latest version.

E.g:

> toolbox database --update
Has the database been backed up? [Y/n] Y
Updating to 2.1.0.6 - OVPMS-2223 ... 00:00.077s
Updating to 2.1.0.7 - OBF-257 ... 00:00.015s
Updating to 2.1.0.8 - OBF-258 ... 00:00.004s
Updating to 2.1.0.9 - OVPMS-2082 ... 00:00.084s
Updating to 2.1.0.10 - OVPMS 2233 ... 00:00.025s
Updating to 2.1.0.11 - OVPMS-428 ... 00:00.085s
Updating to 2.1.0.12 - OVPMS 428 ... 00:00.836s
Updating to 2.1.0.13 - OVPMS-2241 ... 00:02.175s
Updating to 2.1.0.14 - OVPMS-2194 ... 00:00.007s
Updating to 2.1.0.15 - OBF-266 ... 00:00.073s
Updating to 2.1.0.16 - OBF-264 ... 00:00.032s
Updating to 2.1.0.17 - OVPMS-2292 ... 00:00.003s
Updating to 2.1.0.18 - OVPMS-2048 ... 00:00.004s
Updating to 2.1.0.19 - OVPMS-2346 ... 00:00.006s
Updating to 2.1.0.20 - OBF-269 ... 00:00.004s
Updating to 2.1.0.21 - OVPMS-2354 ... 00:00.004s
Database 'openvpms' updated from version 2.1.0.5 to 2.1.0.21 in 00:00:05.108

Version

Displays the database version.
E.g.:

> toolbox database --version
Database 'openvpms' is at version 2.0.0.6

Info

Displays database migration information.

E.g.

> toolbox database --info
+----------+-------------+---------------------+---------+
| Version  | Description | Installed on        | State   |
+----------+-------------+---------------------+---------+
| 2.0.0.1  | OVPMS-2045  |                     | <Baseln |
| 2.0.0.2  | OVPMS-2114  | 2019-07-25 14:18:45 | Success |
| 2.0.0.3  | OVPMS-2121  | 2019-07-25 14:18:45 | Success |
| 2.0.0.4  | OVPMS-2128  | 2019-07-25 14:18:45 | Success |
| 2.0.0.5  | OVPMS-2134  | 2019-07-25 14:18:45 | Success |
| 2.0.0.6  | OVPMS-2151  | 2019-07-25 14:18:45 | Success |
| 2.1.0.1  | OVPMS-2159  |                     | Pending |
| 2.1.0.2  | OVPMS-2188  |                     | Pending |
+----------+-------------+---------------------+---------+

The above indicates that:

  • the first database version to be installed was 2.0.0.1.
  • five subsequent migration scripts have been successfully applied.
  • there are two migration scripts that need to be applied to update to the latest OpenVPMS version.

By convention, the Description column refers to the JIRA related to the migration.

Archetype

Load

The toolbox archetype --load command loads archetypes from the <OPENVPMS_HOME>/archetypes directory.

E.g.:

> toolbox archetype --load

The OpenVPMS web application must be restarted after running this command.

List

List archetypes.

List archetypes in the database

> toolbox archetype --list

This is the same as running:

> toolbox archetype --list db

List archetypes in a directory

> toolbox archetype --list ../archetypes

By default, this will recurse subdirectories. Recursion can be disabled by specifying --no-recurse

Verbose output

To get more information, add the --verbose flag:

> toolbox archetype --list --verbose
Retrieving archetype descriptors from: database
Found 564 descriptors
...

 

Diff

Compare archetypes.

Compare a directory with archetypes in the database

> toolbox archetype --diff ../archetypes db

Compare an archetype file with a prior version in the database

> toolbox archetype --diff --verbose db ../archetype/org/openvpms/archetype/contact/contact.location.adl

Compare two directories containing archetypes

> toolbox archetype --diff  2.1/archetypes 2.2/archetypes

War

Create the web archive.

This generates openvpms.war using the openvpms.properties located in <OPENVPMS_HOME>/conf/

E.g.:

> toolbox war

Created ..\webapps\openvpms.war

The file ..\webapps\openvpms.war should have restrictive permissions to protect passwords

Changing the name

By default, the war will be named openvpms.war. This can be changed using the --name argument. E.g.:

> toolbox war --name demo
Created ..\webapps\demo.war

Logging output will be directed to files based on the specified name. Given the name "demo", logging output will be written to:

  • <TOMCAT_HOME>/logs/demo.log
  • <TOMCAT_HOME>/logs/demo-full.log

Template

Load

Load templates.

Templates are divided into two types:
•    document templates - Invoices, Receipts etc
•    report templates -  reports run from Reporting - Reports

These are located in the <OPENVPMS_HOME>/reports directory.

There are 3 sizes of templates supported: A4, A5 and Letter (i.e. US-Letter).
Reports are only available in A4 and Letter size.

E.g.:

> toolbox template  --load --size A4 --all
Loaded 'Counter Sale'
Loaded 'Credit'
Loaded 'Credit Adjustment'
Loaded 'Debit Adjustment'
Loaded 'Estimate'
Loaded 'Estimate Items'
Loaded 'Estimate Items-PT'
Loaded 'Invoice'
Loaded 'Invoice Items'
...
Loaded 'Stocktake List Report'
Loaded 'HL7 Messages Report'
Loaded 'Insurance Claims Report'

Load all templates

A4

> toolbox template --load --all --size A4

A5

Reports aren't available in A5 format, so reports must be loaded in A4 or Letter format.

> toolbox template --load documents --size A5
> toolbox template --load reports --size A4

US-Letter

> toolbox template --load --all --size Letter

Load all document templates

A4

> toolbox template --load documents --size A4

A5

> toolbox template --load documents --size A5

US-Letter

> toolbox template --load documents --size Letter

Load all report templates

A4

> toolbox template --load reports --size A4

US-Letter

> toolbox template --load reports --size Letter

Load individual templates

A4

> toolbox template --load 'Invoice' 'Invoice Items' 'Invoice Items-PT' --size A4

A5

> toolbox template --load 'Invoice' 'Invoice Items' 'Invoice Items-PT' --size A5

US-Letter

> toolbox template --load 'Invoice' 'Invoice Items' 'Invoice Items-PT' --size Letter

User

User operations.
 

NOTE: changes made using these commands may not be seen immediately in the application, due to caching.
This can be avoided by making changes when Tomcat is not running.

Set Password

Sets the password for the specified user.

E.g.:

toolbox user --setpassword admin -p
Enter value for -p (password):
Password updated

The password can be specified on the command line after the -p option, but for security should be input at the prompt.

Enable

Enables the specified user.

E.g.:

> toolbox user --enable vet
User enabled

Disable

Disables a user.

This prevents login. E.g.:

> toolbox user --disable vet
User disabled

Note that disabling users that are required for background jobs (i.e. the Practice Service User), can prevent OpenVPMS from starting up.

Plugin

Enable

Enable plugins. E.g.:

> toolbox plugin --enable
Plugins enabled. If OpenVPMS is already running it needs to be restarted.

Disable

Disable plugins. E.g.:

> toolbox plugin --disable
Plugins disabled. If OpenVPMS is already running it needs to be restarted.

SSL

Check

 Check SSL connectivity.

This can be used to diagnose SSL certificate issues for external services.

E.g.:

> toolbox ssl --check smtp.gmail.com 465
Connecting to smtp.gmail.com port 465
Successfully connected

To run the check multiple times, use the -n argument. E.g.:

> toolbox ssl --check smtp.gmail.com 465 -n 5
Connecting to smtp.gmail.com port 465
1... Successfully connected
2... Successfully connected
3... Successfully connected
4... Successfully connected
5... Successfully connected
5 of 5 calls were successful (100.0%)

 

Tuning

Complete

This section covers areas that affect the performance of the system.  

Tomcat

The memory available to Tomcat affects the amount of caching the OpenVPMS web application can use to improve response times.

The amount of memory currently used can be monitored via the Memory tab of  Administration - System - Diagnostics. If Use is near 100% this indicates that the memory available to Tomcat should be increased.

The closer it gets to 100% use, the more cache shedding occurs. This can result in reduced response times.
 

Caching

OpenVPMS caches objects such as appointments, tasks, and lookups to improve performance. If these caches are too small, the database will have to be queried more often, reducing response times.

Caches can be monitored via Administration - System - Caches.

Note that if too much memory is allocated to caches, this can cause cache shedding, reducing response times.

MySQL

The main factor affecting MySQL performance is the memory allocated to the innodb_buffer_pool_size. This should be set as large as possible.

For a discussion on sizing the innodb_buffer_pool_size, see this Stack Overflow answer to the question 'How large should be innodb_buffer_pool_size'.

Hardware Selection

As always, the general advice is to buy the fastest you can afford. Adding more memory will improve performance provided that MySQL is configured with large buffers.

Till Balances and Bank Deposits

OpenVPMS adds all payments and refunds to a Till Balance for the Till assocated with the payment or refund. A Till Balance accumulates payments and refunds until it is cleared as part of the Till Balancing process.

Cleared Till Balances are added to a Bank Deposit, which accumulates them until it is deposited.

Even if a practice doesn't use OpenVPMS for accounting, these processes still need to be performed on a regular basis to stop individual Till Balances and Bank Deposits from growing too large. Large Till Balances in particular will affect response times when saving payments and refunds.

 

Medical Records Retrieval

The standard system can perform slowly when retrieving medical records for a patient with a long history. The apparent performance can be improved by limiting the number of visits retrieved for each query of the medical history. The standard system retrieves the complete medical history and then pages it out 20 visits at a time.

One can change this behaviour by limiting the number of visits on each query. If this is set to a number less than 20, then each 'page' of the medical history will display just that number of visits, and as you page through the history, a new query will be issued to get the next block of visits.

To limit the number of visits retrieved on each query to say 5, create a file called QueryFactory.properties containing one record as follows:

 act.patientClinicalEvent org.openvpms.web.workspace.patient.history.PatientHistoryQuery,maxResults=5  

This file needs to be placed in the folder <TOMCAT_HOME>/webapps/openvpms/WEB_INF/classes

 

 

 

Installing OpenVPMS

Complete

This section describes how to install OpenVPMS.

The required software is documented in Requirements.

There are three installation procedures:

  1. New Installation - to install for the first time
  2. Upgrading an existing system
  3. You have an existing system, but want to upgrade to a new machine

If you are doing a new install, you should also read:

Other useful information can be found in the following:

Browser Compatibility

Complete

OpenVPMS is designed to be used with Firefox, Chrome, Safari or Microsoft Edge.

The Context Sensitive Help facility provides help when you press Alt-F1 on most screens.

By default, the help is displayed in a separate browser window. If you want it displayed in a tab rather than a new window, try the following:

  • Firefox: install the 'Open Link in New Tab' add-on
  • Chrome: install the 'One Window' extension
  • Safari: select Preferences|Tabs|Open pages in tabs instead of windows: Always

Note that both Context Sensitive Help and Print Previews are treated as pop-ups by browsers and may be blocked. You will need to enable pop-ups for your OpenVPMS site.

 

Data Migration

Complete

OpenVPMS doesn't directly support data migration from other veterinary practice systems.

It does however provide a plugin for Pentaho Data Integration (PDI) that can be used to get data into OpenVPMS.

The plugin works with PDI 9. This can be obtained from here.

Extract this zip file to a directory. This will be referred to as <PDI_HOME>.

To install the OpenVPMSLoader plugin:

  1. Remove any existing openvpms-pentaho-plugin directory from <PDI_HOME>/plugin
  2. Extract <OPENVPMS_HOME>/import/plugin/openvpms-pentaho-plugin.zip to     <PDI_HOME>/plugins
    This should automatically create a subdirectory under plugins named openvpms-pentaho-plugin
  3. Copy the MySQL JDBC connector from <OPENVPMS_HOME>/lib to <PDI_HOME>lib

 

See also Implementors Forum|Data Migration

Locale and Fonts - Unix

Complete

Locale

The reports and documents in the release package make use of the system's locale to get the appropriate date and currency formats and to select the appropriate resource bundle. Many unix systems use the standard en_US.UTF-8 locale. To change the locale on a ubuntu system you can use:

sudo apt-get install language-pack-en-base
sudo nano /etc/default/locale   to set the required locale

then log out and in again (and restart Tomcat if necessary using sudo service tomcat7 restart).

The locale being used is shown on the Help screen.

Fonts

NOTE: the following discussion applies ONLY to reports and documents that use jrxml content. For Forms and Letters that use Open Office odt (and Microsoft Word .doc) based content, you can happily use any font installed on the system. However, if you are creating odt/doc content on a Windows system but your OpenVPMS server is running on a unix system, then the fonts you use may get remapped. For example 'Bradley Hand ITC' will be mapped to 'URW Chancery L'. If you need specific fonts installed on your unbuntu server, see here.

***UPDATE for 1.9.1***

In the 1.9.1 release all standard reports have been converted to use the DejaVu fonts. Because these are built into JasperSoft Reports, all will work with no problems. If you build or use custom reports you should ensure that these use the DejaVu fonts rather than the default San Serif. (Look at the Style|Base section with JaspersoftStudio in any standard report to see how this is done.)

***End 1.9.1 - keep reading for 1.9 and prior ***

The reports and documents in the release package have all been developed in a Windows system. The fonts are almost without exception set to Sans Serif.  In a Windows system this maps to the Arial font.

However on unix systems it normally maps to the DejaVu fonts. Although these look like Arial, they have slightly bigger font width metrics, and as a result sometimes the text does not fit in the allowed space.

That is, you get effects like the following where the words 'From Date' and 'Method' have been truncated - and also 'Report' is missing from the title.

instead of:

The fix is to replace the DejaVu fonts with the Liberation fonts. These are a set of Sans Serif, Serif and Monospaced fonts designed to have the same font metrics as the Microsoft Arial, Time Roman and Courier New fonts.

Since JasperReports uses the Java fonts we need to do two things:

  1. install the Liberation fonts
  2. change Java's fontconfig to map the Sans Serif, Serif and Monospaced fonts to the Liberation ones rather than the DejaVu ones

On a Ubuntu systems you can install the Liberation fonts using:
  sudo apt-get install fonts-liberation

To change the font mapping, you need to edit the appropriate fontconfig file. In the <JAVA_HOME>/jre/lib directory you will find the following fontconfig files:

fontconfig.RedHat.5.bfc
fontconfig.RedHat.5.properties.src
fontconfig.RedHat.6.bfc
fontconfig.RedHat.6.properties.src
fontconfig.SuSE.10.bfc
fontconfig.SuSE.10.properties.src
fontconfig.SuSE.11.bfc
fontconfig.SuSE.11.properties.src
fontconfig.Turbo.bfc
fontconfig.Turbo.properties.src
fontconfig.Ubuntu.properties
fontconfig.bfc
fontconfig.properties.src

For a Ubuntu system, the one to edit is fontconfig.Ubuntu.properties.

To make things easier, the modified file is attached to this post named fontconfig.Ubuntu.properties.txt

After you modify the file, you will need to restart Tomcat to have it take effect.

Locale and Fonts - Windows

Complete

Locale

The reports and documents in the release package make use of the system's locale to get the appropriate date and currency formats and to select the appropriate resource bundle

Note that the locale used by OpenVPMS is that seen by the Java environment used by Tomcat and that this can be different from that you see when you log on as a Windows user. The locale being used is displayed on the Help screen. For how to set/check the Java locale see here.

If you run Tomcat under a user account, then you need to check the locale set for that account.

However, if you run Tomcat under the system account (the normal setup) then you need to ensure that the locale set for the 'Welcome Screen and System accounts' is as required. If not, on the Copy Settings window, click the 'Welcome screen and system account' box and press OK. Note also that it is the 'Format:' setting that determines the date and currency formats.

If you change the region settings, then you MUST restart Tomcat for the change to take affect.

Fonts

***UPDATE for 1.9.1***

In the 1.9.1 release all standard reports have been converted to use the DejaVu fonts. Because these are built into JasperSoft Reports, all will work with no problems. If you build or use custom reports you should ensure that these use the DejaVu fonts rather than the default San Serif. (Look at the Style|Base section with JaspersoftStudio in any standard report to see how this is done.)

***End 1.9.1 update ***

The reports and documents in the release package have all been developed in a Windows system, and thus in general you do not have to worry about fonts. The Sans Serif font set in all the standard reports and documents will map to Arial.

NOTE: the following discussion applies ONLY to reports and documents that use jrxml content. For Forms and Letters that use Open Office odt (and Microsoft Word .doc) based content, you can happily use any font installed on the system.

However, if you do want to use another font (for example if you need to support Chinese characters when printing drug labels) then you need to understand that the fonts available to Jaspersoft Studio that you can choose from when creating or editing jrxml content are NOT necessarily available to OpenVPMS when it is generating the report/document. This is because when generating the jrxml based report/document, OpenVPMS only has access to a) the fonts mapped by <JAVA-HOME>\lib\fontconfig.properties; and b) those held in jar files in the <TOMCAT-HOME>\lib folder.

Hence if you need a non-standard font you will need to create a jar file containing it and place this in <TOMCAT-HOME>\lib.

To do this, first using Windows Explorer, copy the fonts you want to a new folder, say c:\temp\fonts - in the following I copied Comic Sans MS (which includes 4 files) and Arial Unicode MS Regular and you should have:  

Now start JasperSoft Studio and use Window|Preferences|Jaspersoft Studio|Fonts to get:

Click the 'Add From Path' button and specify the folder in which you saved the fonts, then click Finish to get:

Now click on both the fonts to select them and then press the Export button. Specify the file name you want (say MyOpenVPMSfonts) and press Save. You can then Cancel the above window to dismiss it.

In your c:\temp\fonts folder there will now be MyOpenVPMSfonts.jar which you can copy to <TOMCAT-HOME>\lib  (eg C:\Program Files\Apache Software Foundation\Tomcat 7.0\lib). After you restart Tomcat, your new fonts will be used when you generate reports and documents that use them.

New Installation

Complete

The following describes how to install OpenVPMS from scratch and assumes that you have downloaded it and unpacked its zip file.

If you have not installed the other required software, see Requirements.

The headings below are:

Note that in the following the directory or folder separator character is shown as /, following unix conventions. On Windows, replace / with \. e.g. given:
  <OPENVPMS_HOME>/bin
change to:
  <OPENVPMS_HOME>\bin

Directory structure

The OpenVPMS installation has a single top-level directory named:
   openvpms-release-XXX
where XXX indicates the version.

This will be referred to as <OPENVPMS_HOME> in the remainder of this document. This directory has the following sub-directories:

Name Contents
archetypes archetype definitions
bin tools used to configure and load data into OpenVPMS
conf configuration files for the tools in ../bin
import data to import into OpenVPMS
legacy-migration scripts used to migrate from releases prior to OpenVPMS 1.9.
lib jars used by the tools in ../bin
reports document templates for reporting
plugins plugin support
webapps  the OpenVPMS web applications

 

 

 

 

 

 

 

 

NOTE: the OpenVPMS installation directory should be secured to prevent unauthorised user access.

MySQL connector

The MySQL Connector/J JDBC driver needs to be downloaded from:
    http://dev.mysql.com/downloads/connector/j/5.1.html
   
It is typically named mysql-connector-java-5.1.<x>.zip or mysql-connector-java-5.1.<x>.tar.gz where <x> represents the minor version number.

The JDBC driver in the archive is named:
    mysql-connector-java-5.1.<x>-bin.jar.

This needs to be copied to:

  • the Apache Tomcat library directory: <TOMCAT_HOME>/lib
  • the OpenVPMS library directory:  <OPENVPMS_HOME>/lib

In the above, <TOMCAT_HOME> refers to the directory where Apache Tomcat is   installed. On Windows, this will be something like:
    C:\Program Files\Apache Software Foundation\Tomcat 7.0

Database setup

To create the OpenVPMS MySQL database:

  1. run toolbox configure to configure the database connection properties
  2. run toolbox database --create to create the database
  3. run dataload to import data into the database

1. Run 'toolbox configure'
 

The toolbox configure command:

  • is run from the <OPENVPMS_HOME>/bin directory
  • prompts for database connection properties:
    • If there is a default value, it will be surround by square brackets.
    • To keep the default value, press enter.
  • updates the openvpms.properties configuration file in <OPENVPMS_HOME>/conf

E.g.:

  > cd <OPENVPMS_HOME>/bin
  > toolbox configure

  Database URL [jdbc:mysql://localhost:3306/openvpms?useSSL=false]:
  Database user [openvpms]:
  Database password: apasswd
  Reporting database URL [jdbc:mysql://localhost:3306/openvpms?useSSL=false]:
  Reporting database user [openvpms]:
  Reporting database password [apasswd]:

  The file ../conf/openvpms.properties should have restrictive permissions to protect passwords

  Take a secure backup of the file ../conf/openvpms.properties
  This needs to be kept for subsequent updates.

If the MySQL database is on a different host to that running Tomcat, replace localhost in the Database URL with the correct host name or IP address.

2. Run 'toolbox database --create'

The toolbox database --create command:

  • is run from the <OPENVPMS_HOME>/bin directory
  • creates the database corresponding to the Database URL specified
  • creates the user corresponding to the Database user and password specified
  • loads archetypes
  > cd <OPENVPMS_HOME>/bin
  > toolbox database --create -u <admin-user> -p <admin-password>

    Created openvpms
    Archetypes successfully loaded

 

NOTES:

  • replace <admin-user> with a user that has administrator privileges in MySQL and <admin-password> with their password
  • If the MySQL database is a different host to that running Tomcat,use the mysql utility to grant access using the command:
GRANT ALL PRIVILEGES ON <database-name>.* TO '<user-name>'@'%' IDENTIFIED BY '<user-password>' WITH GRANT OPTION;

Replace <database-name>, <user-name> and <user-password> with the corresponding values entered during toolbox configure.

To improve security, the '%' should be replaced with the host that Tomcat will connect from.

3. Run dataload

 

The dataload command provides two options:

  • base - loads a base database in preparation for data migration
  • setup - contains a default setup suitable for a new installation
  > cd <OPENVPMS_HOME>/bin
  > dataload setup

4. Set administrator password

The dataload command creates a default administration user named admin with password admin.

This should be secured by providing a new password e.g.:

  > cd <OPENVPMS_HOME>/bin
  > toolbox user --setpassword admin -p somestrongpassword

Document and Report Templates

The templates used for document (ie invoices, payments etc.) and reports, are located in:
      <OPENVPMS_HOME>/reports

These need to be loaded prior to use. This can be done using the toolbox template --load command.
There are 3 sizes of templates supported: A4, A5 and Letter (i.e. US-Letter).

To load all A4 templates:

> cd <OPENVPMS_HOME>/bin
> toolbox template --load --size A4 --all
Loaded 'Counter Sale'
Loaded 'Credit'
Loaded 'Credit Adjustment'
Loaded 'Debit Adjustment'
Loaded 'Estimate'
Loaded 'Estimate Items'
Loaded 'Estimate Items-PT'
Loaded 'Invoice'
Loaded 'Invoice Items'
Loaded 'Invoice Items-P
...
Loaded 'Stock Movement Report'
Loaded 'Stock Reorder Report'
Loaded 'Stock Valuation Report'
Loaded 'Stocktake Export Report'
Loaded 'Stocktake List Report'
Loaded 'HL7 Messages Report'
Loaded 'Insurance Claims Report'

 

NOTES:

  • If a template with the same name has been already loaded, it will be replaced. More precisely, templates with the same ORIGINAL name AND same content name will be replaced. Hence, if you have a template named Invoice, with content invoice-BE.jrxml, this will not be replaced but a new template named Invoice with content Invoice.jrxml will be created. However, a template named Invoice with content Invoice.jrxml which has been renamed to 'My Invoice' will be overwritten with the original name and new content.
  • Not all templates are available in all formats, however a complete set is loaded. Thus if you load the A5 document set you will find that a few templates are in A4 format.
  • If you plan to use A5 for only a restricted set of documents (eg only invoices and receipts) then you should load the A4 set, and then update the content of those templates that you want to use A5 stationary. See here.
  • Three drug label sizes are available, Diskette, Shipping, and Video Top. All the document template sets (A4, A5, Letter) load the Diskette sized label. If you need one of the others, then you can load it from <OPENVPMS-HOME>\reports\Patient\Labels\Shipping or ...\Video Top.  These folders contain a readme.txt file specifying  the label dimensions.
  • Not everything is loaded. For example the Samples and the Patient Reminder Post Cards are not.

After installation, templates can be updated using via Administration|Templates.

Templates may be customised if necessary - those that have content with a:

  • .doc or .odt extension can be customised in OpenOffice Writer or Microsoft Word
  • .jrxml extension can be customised in Jaspersoft Studio

Customising of the .odt template content will be required to:

  1. change the paper size from A4 to Letter if you loaded the Letter template set
  2. insert your logo etc

Customising of the .jrxml template content is not generally required - the localisation is done using the Letterhead facility.

See also Introduction|Reporting, Reference|Reports and Forms, and Administration|Templates.

Web application installation

To install the OpenVPMS web application:

  1. Generate the web archive (war) using:
    > cd <OPENVPMS_HOME>/bin
    > ./toolbox war
    
    Created ../webapps/openvpms.war
    
    The file ../webapps/openvpms.war should have restrictive permissions to protect passwords
    
    
  2. Copy <OPENVPMS_HOME>/webapps/openvpms.war to the <TOMCAT_HOME>/webapps  directory.
  3. Start Apache Tomcat if it is not running

OpenOffice installation

OpenVPMS uses OpenOffice to perform reporting, printing and document conversion.
Install it as per your platform's requirements and then:

  1. Add it to the PATH of the user that runs Apache Tomcat.
    The installation path differs by platform and OpenOffice version. For OpenOffice 4 on Windows, the default installation path is:
     

           C:\Program Files (x86)\OpenOffice 4\program

    Windows users can find instructions for changing the PATH here.      

  2. Verify it can be run as that user. From a command prompt, enter:
          soffice
    This should start OpenOffice.

Testing the installation

To test the installation, open up a web browser and enter the address:

      http://localhost:8080/openvpms/login

Login to OpenVPMS using user admin and the password set above.

 

Optional steps

OpenVPMS ships with optional data that can be loaded as required. This includes:

  • VeNom codes
  • Australian states and suburbs

Note that having loaded these (as with any external changes to the database) you should restart Tomcat to ensure that its caches do not hold obsolete information.

 

VeNom codes

 

The VeNom codes are standardised codes for classifying veterinary data. OpenVPMS can use VeNom:

VeNom codes can all be loaded using:

> cd <OPENVPMS_HOME>/bin
> dataload -d ../import/data/VeNom

To load specific codes, see below.

Loading VeNom presenting complaints

> cd <OPENVPMS_HOME>/bin
> dataload -f ../import/data/VeNom/presentingComplaint.xml

Loading VeNom diagnoses

> cd <OPENVPMS_HOME>/bin
> dataload -f ../import/data/VeNom/diagnosis.xml

Loading VeNom visit reasons

> cd <OPENVPMS_HOME>/bin
> dataload -f ../import/data/VeNom/visitReason.xml

Australian states and suburbs

These can be loaded using:

> cd <OPENVPMS_HOME>/bin
> dataload -f ../import/data/postcodesAU.xml

 

Adding users

The installation includes a single administrator user named 'admin' that has authorities to perform all operations.

New users can be added in the web application at Administration - Users by clicking the New button.

Users have categories and roles that determine what they can do.
E.g., clinicians should be assigned:

  • the Clinician category
  • the Clinician, Insurance Claims and Base Role roles

See Concepts - Users for more details.

 

 

 

Requirements

Complete

OpenVPMS can be installed on either a unix system (most commonly a Ubuntu* server), or a Windows system.  For Windows, for small practices you can install on a desktop or laptop running Windows 7, 8 or 10; for larger practices it may be better to use a Windows Server operating system.

*NOTE: OpenVPMS requires MySQL 5.5, which is included in Ubuntu 14.04. Later releases include MySQL 5.6 or MySQL 5.7 which are only supported via configuration changes.

Both Java and MySQL are available in 32 and 64 bit versions.
If your system has more than 4GB of memory, use the 64 bit version.

Server Software

Java

OpenVPMS may be run using Java 8 or Java 11. Java 11 is preferred, as Java 8 is reaching end-of-life.

There are multiple providers:
 

Java 8

The mimum supported version of Java 8 is Java 8 update 161.
Earlier versions may not include the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files. These are required for strong password encryption. If Java is already installed, its version can be determined by running java -version  e.g.:

> java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

Java 11

There are a number of locale changes in Java 11, compared to Java 8.
This causes differences in formatting for date functions that use the LONG, MEDIUM and SHORT date formats, or include MMM (e.g., MMM yyyy). This will affect JasperReports in particular.
E.g. in Java 8, a MEDIUM date format in the en_AU locale would display:

20/09/2006

whereas in Java 11 displays:

20 Sep. 2006

The Java 8 functionality can be retained by passing the following argument to java:
 

-Djava.locale.providers=COMPAT,CLDR

When using the standard Tomcat scripts, this can be done by setting the CATALINA_OPTS environment variable:

Windows
In a setenv.bat script in the same directory as catalina.bat, add:

set CATALINA_OPTS=-Djava.locale.providers=COMPAT,CLDR

Unix
In a setenv.sh script in the same directory as catalina.sh, add:

export CATALINA_OPTS=-Djava.locale.providers=COMPAT,CLDR

Tomcat

Both Tomcat 8.x or 9.x are supported.

See https://tomcat.apache.org/download-80.cgi
On Windows, select the 32-bit/64-bit Windows Service Installer
 

MySQL

MySQL 5.5 is supported natively.
MySQL 5.7 may be used with configuration changes.

MySQL 5.5

See http://dev.mysql.com/downloads/mysql/5.5.html#downloads

Download the MySQL Community Server 'Generally Available (GA) Release'.
 

MySQL 5.7

See https://dev.mysql.com/downloads/mysql/5.7.html#downloads
Download the MySQL Community Server 'Generally Available (GA) Release'.

The sql_mode must be changed to remove ONLY_FULL_GROUP_BY. This is done by configuring the server options file, or via MySQL Workbench.

On Windows, the MySQL installer may require that the Microsoft .Net Framework 4 be installed. This is available from:
http://www.microsoft.com/en-au/download/details.aspx?id=17851
 

NOTE: when upgrading from an earlier MySQL release, see the relevant MySQL manual for migrating the MySQL data e.g.:

MySQL:

  • should be on the same host as Tomcat
  • should accept connections on port 3306
  • include the following lines in my.ini
    max_allowed_packet=16M
    innodb_file_per_table
    character-set-server = utf8
    innodb_buffer_pool_size = 512M

NOTES:

  • If character-set-server is not set to utf8, some characters may not be stored correctly. E.g, μ may be replaced with ?
  • The innodb_buffer_pool_size value should be seen as a minimum only.  See Memory below.

MySQL Connector/J JDBC driver

See http://dev.mysql.com/downloads/connector/j/5.1.html

This may already be included in the MySQL server installation.

OpenOffice

OpenOffice 4.0.x or higher
See http://www.openoffice.org/download/

NOTE: several users have indicated that LibreOffice 5 is not 100% compatible with OpenOffice. Fields may not merge correctly, and documents created in LibreOffice may look different when printed via OpenVPMS.
 

Memory

A host with 4GB memory is the minimum recommended size for a server running OpenVPMS, with at least:

  • 1024M allocated to Tomcat
  • 1024M allocated to MySQL via the innodb_buffer_pool_size property

 

To set Tomcat's memory allocation, see How do I adjust memory settings?

Also see:

Locale and Fonts

For unix systems see Unix Locale and Fonts
For windows systems see Windows Locale and Fonts

Workstation Software

If you wish to use the External Edit facility then the following software is required on all workstations that will edit documents in OpenVPMS:

See http://www.openoffice.org/download/

Optional Software

Security

Complete

This page addresses various security related matters.

Database passwords

The database user name and password is configured via the toolbox configure command which stores the configuration in:

<OPENVPMS_HOME>/conf/openvpms.properties
 

When the database is created, these are used to create a corresponding MySQL database user.

If the database user name or password is changed*:

  • toolbox configure needs to be re-run to update the openvpms.properties file
  • toolbox war needs to be re-run to package the web application with the updated openvpms.properties
  • the openvpms.war file needs to be redeployed

* For information on setting the MSQL password see:

  https://dev.mysql.com/doc/refman/5.5/en/set-password.html

Administrator password

The default installation creates an OpenVPMS user named 'admin', with password 'admin'. This should be changed using either:

  • toolbox user --setpassword admin -p somestrongpassword
    
  • Administration - Users in the web application

User passwords

User passwords can be configured using:

  • toolbox user --setpassword admin -p somestrongpassword
    
  • Administration - Users in the web application

There is little restriction on what passwords may be entered, but it is recommended that strong passwords are used.

 

File permissions

The OpenVPMS and Tomcat installation directories should only be accessible to a single user with a strong password.

These directories contain files that could enable an attacker to gain access to the OpenVPMS web application, or the MySQL database.

 

Subscription

Complete

OpenVPMS relies on user subscriptions to fund development.

Your subscription status is displayed on the OpenVPMS login screen. If you have not paid, a link to a payment page is displayed. On payment, a subscription key will be mailed to you.

If you have a current subscription, you can request a subscription key by emailing a copy of your receipt to subscription[at]openvpms[dot]org.

To update your subscription status, edit the Practice in the Administration|Organisation workspace and upload the new subscription key.

Upgrade an existing system

Complete

This section details the procedure to be used when upgrading to a new release of OpenVPMS.

The headings below are:

Having installed the new release, you may want to look at the Implementation Checklist page.

Note that in the following the directory or folder separator character is shown as /, following unix conventions. On Windows, replace / with \. e.g. given:
  <OPENVPMS_HOME>/bin
change to:
  <OPENVPMS_HOME>\bin

Release Notes

Release Notes are provided for sub-releases (eg 1.8.1, 1.9.1 etc). If you are upgrading to a sub-release then you should consult the release notes on the download page at http://www.openvpms.org/download

Requirements

The software required to run OpenVPMS may change between releases.

Check Requirements to ensure you have the necessary software.

Preparation

Backup

Back up your database prior to performing the upgrade.

This can be done using the mysqldump tool. e.g.:

> mysqldump -u openvpms -p openvpms --result-file openvpms.sql

NOTE: It is good practice to ensure that the backup can be restored to a different server, prior to performing any upgrade.

See also How To|Administration|Backup.

Disk Space

Database migration can require as much disk space as the largest table in the database. As a rule of thumb, ensure there is at least as much disk free as the database currently occupies.

The current database size can be determined using the following SQL query:

SELECT table_schema 'database',
       ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) 'size (MB)'
FROM information_schema.tables
WHERE table_schema = 'openvpms';

This displays the size in megabytes. To display it in gigabytes, use:

SELECT table_schema 'database',
       ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2) 'size (GB)'
FROM information_schema.tables
WHERE table_schema = 'openvpms';

(Replace 'openvpms' with the actual database name).

Time

Allow time for the migration to take place. On large databases, migration may take several hours.

In practices with limited windows for downtime, do a trial migration on a different host to estimate how long will be needed to perform the real migration.

Migration time may be reduced by making innodb_buffer_pool_size as large as possible for the duration of the migration.

 

Directories

These instructions assume that:

  1. The previous OpenVPMS installation is available in <OPENVPMS_PREV>.
     e.g. on Windows:
        c:\OpenVPMS\openvpms-release-2.1

  2. The new installation will be located in <OPENVPMS_HOME>.
     e.g. on Windows:
        c:\OpenVPMS\openvpms-release-2.2

NOTE: the OpenVPMS version can be excluded from the path name, for example c:\OpenVPMS-Current Release - when upgrading you can rename this to say 'Current Release prev' . This can simplify upgrades by removing the need to change custom scripts that contain the installation path.

The previous installation should be retained until:

  •   settings have been migrated to the new installation
  •   the migration has been verified to be successful

 

MySQL connector

Copy the MySQL JDBC driver mysql-connector-java-5.1.<x>-bin.jar from <OPENVPMS_PREV>/lib to <OPENVPMS_HOME>/lib

Configuration

Starting with OpenVPMS 2.2, there is an openvpms.properties configuration file located in the <OPENVPMS_HOME>/conf directory.

This contains:

  • database connection details
  • password decryption information

This is created or updated using:

> cd <OPENVPMS_HOME>/bin
> toolbox configure

 

This file needs to be preserved between releases in order to decrypt passwords.

When upgrading, copy the openvpms.properties from the prior installation to the new installation i.e. from <OPENVPMS_PREV>/conf to <OPENVPMS_HOME>/conf.

 

Database migration

Migrating from 1.9 or later

If you are upgrading from OpenVPMS 1.9 or a later release, then database migration is accomplished using the toolbox utility. Run the following in a shell prompt:

> cd <OPENVPMS_HOME>/bin
> toolbox database --update

Migrating from 1.8 or earlier

Upgrading from a version of OpenVPMS earlier than 1.9 requires that data migration scripts first be run to bring the database up to 1.9, and then you can use the toolbox utility as above. 

This migration must be performed using MySQL 5.1 or 5.5.

The scripts are located in the <OPENVPMS_HOME>/legacy-migration directory. With the exception of the 1.5 to 1.6 release (where there was no change to the database structure), there is one sql script per release.

The sql scripts are:
     migrate-1.0-to-1.1.sql
     migrate-1.1-to-1.2.sql
     migrate-1.2-to-1.3.sql
     migrate-1.3-to-1.4.sql
     migrate-1.4-to-1.5.sql
     migrate-1.6-to-1.7.sql
     migrate-1.7-to-1.8.sql
     migrate-1.8-to-1.9.sql

You need to run each relevant one in turn using the mysql utility.

Hence if you are upgrading from OpenVPMS 1.8, run:
     > mysql -u openvpms -p openvpms < migrate-1.8-to-1.9.sql

If you are upgrading from OpenVPMS 1.7, run:
     > mysql -u openvpms -p openvpms < migrate-1.7-to-1.8.sql
     > mysql -u openvpms -p openvpms < migrate-1.7-to-1.9.sql

If you are upgrading from OpenVPMS 1.5 or 1.6, run:
I    > mysql -u openvpms -p openvpms < migrate-1.6-to-1.7.sql
     > mysql -u openvpms -p openvpms < migrate-1.7-to-1.8.sql
     > mysql -u openvpms -p openvpms < migrate-1.8-to-1.9.sql

If you are upgrading from OpenVPMS 1.0 - you need the lot, so run:
     > mysql -u openvpms -p openvpms < migrate-1.0-to-1.1.sql
     > mysql -u openvpms -p openvpms < migrate-1.1-to-1.2.sql
     > mysql -u openvpms -p openvpms < migrate-1.2-to-1.3.sql
     > mysql -u openvpms -p openvpms < migrate-1.3-to-1.4.sql
     > mysql -u openvpms -p openvpms < migrate-1.4-to-1.5.sql
     > mysql -u openvpms -p openvpms < migrate-1.6-to-1.7.sql
     > mysql -u openvpms -p openvpms < migrate-1.7-to-1.8.sql
     > mysql -u openvpms -p openvpms < migrate-1.8-to-1.9.sql

Migration Notes

  1. The mysql command will prompt for a password. You can enter the password by including it directly following the '-p' - so if the password is say 'Opv1234' then you can use:
      > mysql -u openvpms -pOpv1234 openvpms < migrate-1.8-to-1.9.sql
  2. If you want re-assurance that something is happening you can add the -v (verbose) option, ie:
      > mysql -v -u openvpms -pOpv1234 openvpms < migrate-1.8-to-1.9.sql
    If you want all the details, use -v -v -v, ie:
      > mysql -v -v -v -u openvpms -pOpv1234 openvpms < migrate-1.8-to-1.9.sql
  3. If you are 're-migrating', i.e. you have an existing database that you are restoring a backup into, see Upgrade to a new machine for instructions to recreate and restore the database. This is necessary to avoid data corruption.

NOTE: With a large database, the 1.8 to 1.9 migration takes some time and using the -v or -v -v -v option is useful to reassure yourself that something is happening.

Replication

If you are replicating your OpenVPMS database, you must ensure that row-based replication is used. The migration scripts are not compatible with statement-based replication.

Load archetypes

Load the latest archetypes using:

> cd <OPENVPMS_HOME>/bin
> toolbox archetype --load

Web application

The web application needs to be created with the properties from <OPENVPMS_HOME>/conf/openvpms.properties.

This is done using the toolbox war command i.e.:

> cd <OPENVPMS_HOME>/bin
> toolbox war

Created ..\webapps\openvpms.war

The file ..\webapps\openvpms.war should have restrictive permissions to protect passwords

 

The existing web application should be removed before installing the new version.

To do this:

  1. Shut down Apache Tomcat if it is already running.
  2. Delete or move directory: <TOMCAT_HOME>/webapps/openvpms
    Do not move it to another directory under <TOMCAT_HOME>/webapps/ as Tomcat will continue to launch it.
  3. Delete the file:      <TOMCAT_HOME>/webapps/openvpms.war
  4. Delete the directory: <TOMCAT_HOME>/work/Catalina/localhost/openvpms
  5. Copy <OPENVPMS_HOME>/webapps/openvpms.war to the directory <TOMCAT_HOME>/webapps
  6. Start Apache Tomcat - this will extract <TOMCAT_HOME>/webapps/openvpms.war and build <TOMCAT_HOME>/webapps/openvpms

Customisation

If you use customised versions of the standard archetypes, or have added archetypes, these will need to be loaded.

For modified versions of the standard archetypes, be sure to incorporate any changes that have been made.

You should then use archload to load these archetypes - or if you have only a few, use Administration|Archetypes|Import.

If you have customised versions of propercase.properties, help.properties, or messages.properties you need to install these in
  <TOMCAT_HOME>/webapps/openvpms/WEB-INF/classes/localisation

You can simply overwrite the default propercase.properties with your own version.

However, help.properties and messages.properties will need to be edited to bring your adjustments into the current versions.
 
If you have a customised default.stylesheet, then the version in
  <TOMCAT_HOME>/webapps/openvpms/WEB-INF/classes/style
will need to be edited to incorporate your changes.
 
Now restart Apache Tomcat so the above customisations get picked up and login and see that things are as they should be.

HL7

Sites using HL7 in OpenVPMS 1.8 need to manually edit their HL7 Connectors to include a mapping. A mapping for Cubex is provided.

Document & Report Templates

To take advantage of the new and revised templates, they need to be loaded.

Templates are divided into two types:
•    document templates - Invoices, Receipts etc
•    report templates -  reports run from Reporting - Reports

It is strongly recommended that all sites run the latest versions of the standard reports.

If a site is using:

  • standard document and report templates, then the latest versions can be loaded as per a new installation. This will replace existing templates, and add any new templates.
  • custom document or report templates, then templates can be selectively loaded to avoid replacing customised ones

After loading, obsolete templates may need to be manually removed.

Selectively loading templates

Templates can be selectively loaded:

  1. by type
  2. by name
  3. by creating a templates file that only loads the desired files
  4. manually, by editing the appropriate Document Template (via Administration|Templates|Document Templates), and uploading the appropriate content file from <OPENVPMS_HOME>/reports

Loading templates by type

Document and report templates can be loaded separately. This can be useful if a site has customised one and not the other.

Document templates can be loaded using:

  > cd <OPENVPMS_HOME>/bin
  > toolbox template --load --size <size> documents

where size is one of A4, A5, or Letter.

Report templates can be loaded using:

  > cd <OPENVPMS_HOME>/bin
  > toolbox template --load --size <size> reports

where size is one of A4, or Letter.

In both cases, these will:

  • replace existing Document Templates with the same Content name
  • create new Document Templates where there is no existing template E.g. an existing Document Template named:
  1. My Invoice with Content named Invoice.jrxml will be replaced by the standard Invoice with Content named Invoice.jrxml
  2. Invoice with Content named Custom Invoice.jrxml, will not be replaced.The standard Invoice with Content named Invoice.jrxml will be loaded, and one must be manually deleted using Administration|Templates|Document Templates|Delete.

Loading templates by name

To load a subset of the available templates, specify them by name e.g.:

 

  > cd <OPENVPMS_HOME>/bin
  > toolbox template --load --size A4 'Invoice' 'Invoice Items' 'Invoice Items-PT'
  Loaded 'Invoice'
  Loaded 'Invoice Items'
  Loaded 'Invoice Items-PT'

 

Creating a templates file to load specific templates

To create a templates file that loads only the desired files, copy an existing templates xml file, and remove the lines that do not apply.

This will prevent standard templates replacing existing custom templates.
E.g., to exclude loading A4 invoices:

  1. copy <OPENVPMS_HOME>/reports/documents-A4.xml to mydocuments.xml
  2. remove or comment out the lines for the invoice templates that have been customised. (To aid this process you will find that the templates are grouped by sub-type in the xml file.) To comment them out, enclose the appropriate template lines by <!-- and --> - for example:
    <!--
    <template name="Invoice" archetype="act.customerAccountChargesInvoice" reportType="CUSTOMER"
              description="Invoice " path="Customer/Invoice/A5/Invoice.jrxml" mimeType="text/xml"
              docType="document.other"/>
    <template name="Invoice Items" archetype="SUBREPORT" reportType="CUSTOMER" description="Invoice Items "
              path="Customer/Invoice/A5/Invoice Items.jrxml" mimeType="text/xml" docType="document.other"/>
    -->

  3. load the templates

> cd <OPENVPMS_HOME>/bin
> toolbox template --load --file  ../reports/mydocuments.xml --all

Restart Tomcat after loading templates to ensure that its caches do not contain obsolete information.

See also Obsolete Document Templates.

Obsolete Document Templates

Complete

Some document templates have been either renamed, had their content name changed, or are no longer used.

Changes from 1.9 to 2.0

If you have upgraded from 1.9 and you have used the templateload utility to load the 2.0 template set, then no action is required as no templates became obsolete.

Changes from 1.8 to 1.9

If you have upgraded from 1.8 and you have used the templateload utility to load the 1.9 template set, then the following templates can be deleted as they are no longer used:

Name Content
Counter Sale Items Counter Sale Items.jrxml
Credit Items Credit Items.jrxml
Debtors - Current - SubReport2 Debtors - Current - SubReport2.jrxml
Supplier Credit Items Supplier Credit Items.jrxml
Pharmacy Return Items Pharmacy Return Items.jrxml
Refund Items Refund Items.jrxml

Changes from 1.7 to 1.8

If you have upgraded from 1.7 and you used the templateload utility to load the 1.8 or 1.9 template set, then, unless you have manually deleted them, you will have obsolete 1.7 document templates in your system. The table below lists those templates that can be deleted.

NOTE:

  1. If you have customised versions of some templates and when customising them you did NOT change the content name (eg your Invoice template still uses content named "invoice A4.jrxml") then obviously you should not delete the template.
  2. The list below includes both the A5 and A4 template sets, and if you loaded the A4 set, then you will not have the A5 versions of some templates (eg, Counter Sale, Credit, Invoice, etc), and vice versa if you loaded the A5 set.


Name Content
Appointment Appointment A5.jrxml
Bank Deposit Bank Deposit A4.jrxml
Counter Sale countersale a4.jrxml
Counter Sale countersale a5.jrxml
Counter Sale Items countersaleItems.jrxml
Counter Sale Items countersaleItemsA5.jrxml
Credit credit a4.jrxml
Credit credit a5.jrxml
Credit Adjustment Credit Adjustment A5.jrxml
Credit Items creditItems.jrxml
Credit Items creditItemsA5.jrxml
Customer Account Balance Report customerAccountBalance.jrxml
Debit Adjustment Debit Adjustment A5.jrxml
Desexing Certificate desexing certificate a4.odt
Desexing Certificate desexing certificate a5.odt
Drug Label label Dymo.jrxml
Estimate Estimate A4.jrxml
Estimate Estimate A5.jrxml
Estimate Items Estimate Items A4.jrxml
Estimate Items Estimate Items A5.jrxml
Grouped Reminders Report grouped reminders a4.jrxml
Invoice invoice a4.jrxml
Invoice invoice a5.jrxml
Invoice Items invoiceitems.jrxml
Invoice Items invoiceitemsa5.jrxml
Invoice Reminders invoiceRemindersA4.jrxml
Invoice Reminders invoiceRemindersA5.jrxml
Message message a4.jrxml
Order Items orderItems.jrxml
Patient Clinical Event patientClinicalEvent a4.jrxml
Patient Clinical Event patientClinicalEvent a5.jrxml
Patient Image patientDocumentImage.jrxml
Patient Reminders Report patientReminders.jrxml
Receipt receipt a4.jrxml
Receipt receipt a5.jrxml
Receipt Items receiptItems.jrxml
Receipt Items receiptItemsA5.jrxml
Refund Refund A5.jrxml
Refund Items Refund Items A5.jrxml
Reminder Cartrophen First cartrophen first reminder.odt
Reminder Desexing First desex first reminder.odt
Reminder Vaccination First vaccination first reminder.odt
Reminder Vaccination Puppy and Kitten First vaccination puppy kitten first reminder.odt
Reminder Vaccination Second vaccination second reminder.odt
Statement statement A4.jrxml
Statement statement A5.jrxml
Statement Items statementItems A5.jrxml
Statement Items statementItems.jrxml
Stock Adjustment Stock Adjustment A4.jrxml
Stock Adjustment Items Stock Adjustment Items A4.jrxml
Stock Take List Report stock take list.jrxml
Stock Transfer Stock Transfer A4.jrxml
Stock Transfer Items Stock Transfer Items A4.jrxml
Supplier Credit Supplier Credit A5.jrxml
Supplier Credit Items Supplier Credit Items A5.jrxml
Supplier Invoice Supplier Invoice A5.jrxml
Supplier Invoice Items Supplier Invoice Items A5.jrxml
Supplier Refund Supplier Refund A5.jrxml
Supplier Refund Items Supplier Refund Items A5.jrxml
Supplier Remittance Supplier Remittance A5.jrxml
Supplier Remittance Items Supplier Remittance Items A5.jrxml
Task Task A5.jrxml
Till Balance TillBalance.jrxml
Vaccination Certificate vaccination certificate a4.odt
Vaccination Certificate vaccination certificate a5.odt
Work In Progress Report workInProgress.jrxml

 

Upgrade to a new machine

Complete

If you have an existing system but you are installing OpenVPMS on a new machine, you essentially go through the steps for a new install, but instead of creating a new openpms database, you restore your existing one, and then migrate that to the new release.

The steps are as follows:

  1. Backup the existing database. See Upgrade|Preparation.
  2. Perform the New Installation steps, stopping at the Database Setup step
  3. Set up openvpms.properties
  4. Create an empty OpenVPMS database
  5. Restore the backup
  6. Perform the Upgrade Installation step: Migrate the database
  7. Perform the New Installation step: OpenOffice installation
  8. Perform the remaining Upgrade Installation steps, starting at Load Archetypes

Set up openvpms.properties

If the existing database is from OpenVPMS 2.2 or higher, the openvpms.properties file needs to be copied from the existing installation to the new installation.

This is located in <OPENVPMS_HOME>/conf.

If the existing database is from an earlier release, openvpms.properties needs to be configured. See Run 'toolbox configure'.

 

Creating an empty OpenVPMS database

To create an OpenVPMS database, run the following in a shell prompt:

> cd <OPENVPMS_HOME>/bin
> toolbox database --create --empty -u <admin-user> -p <admin-password>
Created openvpms

Replace <admin-user> with a user that has administrator privileges in MySQL and <admin-password> with their password.

If the OpenVPMS database already exists on the new server, this step will fail with the error message:

Cannot create openvpms as it already exists

The database should dropped and the command run again. Failure to do so may result in the database containing different versions of OpenVPMS tables. This can affect upgrades, and cause data corruption.

This:

  • creates the database corresponding to the Database URL specified by the toolbox configure command
  • creates the user corresponding to the Database user and password specified by the toolbox configure command
    This user only has privileges to connect from localhost.

 

If the MySQL database is a different host to that running Tomcat, use the mysql utility to grant access using the command:

GRANT ALL PRIVILEGES ON <database-name>.* TO '<user-name>'@'%' IDENTIFIED BY '<user-password>' WITH GRANT OPTION;

Replace <database-name>, <user-name> and <user-password> with the corresponding values entered during toolbox configure.

To improve security, the '%' should be replaced with the host that Tomcat will connect from.

 

Restoring the backup

Once the database is created, the mysql utility can be used to restore the backup onto the new machine.  This is done using the command:

  > mysql -u <admin-user> -p openvpms < openvpms.sql

where:

  • <admin-user> is the name of the MySQL administrator user
  • openvpms.sql is the dump from the old machine.

 

Dropping the database
 

If the database to restore a backup to already exists, it should be dropped first.

Only perform this step if the Creating an empty OpenVPMS database step failed.
 

Dropping the database destroys any data present, so ensure there is a backup before proceeding.

 


> mysql -u <admin-user> -p
> drop schema openvpms;
    Query OK, 46 rows affected (1.04 sec)
> quit

New in 2.2

Complete

The following is a list of new features and improvements in the 2.2 release. You should also check Known Issues and the Implementation Checklist.

Features in this release include:

IDEXX VetConnect PLUS integration

OpenVPMS can now submit orders directly to IDEXX VetConnect PLUS, and receive the results. Orders can be submitted to IDEXX Reference Laboratories, or IDEXX VetLab Stations.

For more details, see How To - Online Investigations with IDEXX VetConnect

Zoetis VetScan FUSE integration

OpenVPMS can now submit orders directly to Zoetis VetScan FUSE, and receive the results.
Contact Zoetis for details.

Laboratory enhancements

Investigations

Investigations now support:

Plugin Support

OpenVPMS now provides an API to support laboratory provider plugins. This provides:

Charging

Invoice and Estimate credit items

Invoices and Estimates can now include credits, by entering negative quantities. This:

To support discounting, products included by templates can now have negative quantities.

Charge Reporting

Work In Progress

The Work In Progress workspace has moved from Reporting - Work In Progress to Reporting - Charges.

This now:

Search

A new Search facility has been added to Reporting - Charges to search for charges by:

Insurance

Gap claims with pre-payments
 

Gap claims may now contain invoices where payment has already been made, so long as at least one invoice in the claim is unpaid or part paid.
Previously, all invoices had to be unpaid. This prevented gap claims where a deposit had been collected.

Insurance claims at Check Out

There is now a Practice option,  Insurance Claim at Check Out to determine if insurance claims should be made during Check Out. This applies to those patients with insurance policies.
This provides the options:

Payments

 

Audited editing of payment types on finalised payments

 

Administrators can now edit finalised customer payments to change payment types.
This can be done via Customer - Accounts or Reporting - Till Balancing.

Default Payment Type

A default payment type can now be configured using the Default Payment Type option on the Practice. This can be used to preselect the type of payment to that most used by the practice e.g. Cash, Credit, Cheque, EFT.

Patients

Unlimited Note length

Patient Note and Addendum records are now effectively of unlimited length. Previously they were limited to 5000 characters.

Communications in patient history summary

Communications can now be summarised in Patients - Medical Records - Summary.

This:

Communication records are for informational purposes only, so they:

New Communication records can be created using the Log button.

The display of Communication records can be enabled or disabled with the Show Communications preference.

Patient Colour in Summary

The patient colour is now displayed in the summary panel beneath the patient breed, if present on a patient.

Products

Price History

This release includes improved support for maintaining a history of product prices:

Price Notes

Product prices now include a Notes field. These can be used to note why a price has been changed. For Unit Prices created:

Stock Import/Export permissions

Stock Import and Export is now available to users with Stock Manager role, not just administrators.

Tests

Products can now charge individual Tests, allowing for better charge capture.
These replace Investigation Types on the product.

SMS

Reporting

SMS messages are now queued for delivery to SMS providers. If a provider is not available, messages will be retried until sent, or they expire.

The status of messages can be viewed in the Workflow - Messaging - SMS workspace.

Clickatell plugin

A new Clickatell plugin is available for the Clickatell SMS REST service.

This supports monitoring status changes to messages, something not possible with the existing Clickatell support via the Clickatell SMTP Connection.

See Reference - Setup - SMS for more details.

Reports

Estimates Report with invoice information

The Estimates Report available in Reporting - Reports has been updated to include:

These can be used to improve estimates by showing under or overquoting.

Note that estimates done prior to OpenVPMS 2.2 have no relationship to their invoice, so no invoice information will be shown for these.

Due Patient Reminder Report

A new Due Patient Reminder Reminder has been added to Reporting - Reports.

This supports listing all patient reminders due between two dates, optionally filtered by Reminder Type.

 

Scheduled Reports

Calculated date parameter offsets

Calculated date parameters in Scheduled Reports may now have an offset, expressed in days, weeks, months or years.  E.g.:

  • Today - 3 Months
subtracts three months from the current date
  • Start Of Month + 1 Years
adds one year to the first day of the current month

Report name formatting

The file and email attachment name of Scheduled Reports can now be specified using the Report Name and Report Name Format options.

This overrides the default name determined by the report.

This can be used to help distinguish results when the same report is used by multiple Scheduled Reports.

User Interface

Customer account records and estimate email attachments

Customer account records and estimates can now be attached to emails via the Attach button in the Write email window.

Create and update user information

The user that created and last updated an object is now displayed.

This information is available for:

Administration

ESCI

ESCI inboxes can now be viewed and administered.  This includes the ability to:

 

Implementation Checklist

Complete

The following is a checklist for existing users upgrading to the 2.2 release and is aimed at both the person doing the upgrade and the administrators responsible for systems operations. 

It provides a list of things that you may need to do in order to take advantages of the new features in this release.

Default Country

To ensure addresses are sent to IDEXX with the correct country, ensure that your country lookup is marked as default:

  • Go to Administration -> Lookups
  • Select Country in the Type dropdown
  • Verify you have a country lookup (e.g. Australia), with Default ticked

Template updates

Document templates

The following document templates were updated:

  • reports/Customer/Counter Sale/<size>/Counter Sale.jrxml
    See OVPMS-2241, OVPMS-2249
  • reports/Customer/Credit/<size>/Credit.jrxml
    See OVPMS-2241, OVPMS-2249
  • reports/Customer/Credit Adjustment/<size>/Credit Adjustment.jrxml
    See OVPMS-2241
  • reports/Customer/Debit Adjustment/<size>/Debit Adjustment.jrxml
    See OVPMS-2241
  • reports/Customer/Estimate/<size>/Estimate.jrxml
    See OVPMS-2241, OVPMS-2249
  • reports/Customer/Estimate/<size>/Estimate Items.jrxml
    See OVPMS-2137
  • reports/Customer/Estimate/<size>/Estimate Items-PT.jrxml
    See OVPMS-2137
  • reports/Customer/Invoice/<size>/Invoice.jrxml
    See OVPMS-2212, OVPMS-2241, OVPMS-2249
  • reports/Customer/Invoice/<size>/Invoice Items.jrxml
    See OVPMS-2137, OVPMS-2212
  • reports/Customer/Invoice/<size>/Invoice Items-PT.jrxml
    See OVPMS-2137, OVPMS-2212
  • reports/Customer/Receipt/<size>/Receipt.jrxml
    See OVPMS-2241, OVPMS-2249
  • reports/Customer/Refund/<size>/Refund.jrxml
    See OVPMS-2241, OVPMS-2249
  • reports/Customer/Statement/<size>/Statement.jrxml
    See OVPMS-2249
  • reports/Letterhead/<size>/Letterhead AddressBlock.jrxml
    See OVPMS-2372
  • reports/Letterhead/A5/Letterhead AddressBlock-A5.jrxml
    See OVPMS-2372
  • reports/Patient/Insurance/<size>/Insurance Claim.jrxml
    See OVPMS-2241
  • reports/Patient/Insurance/<size>/Insurance Claim Invoice.jrxml
    See OVPMS-2241, OVPMS-2249, OVPMS-2341
  • reports/Patient/Insurance/<size>/Insurance Claim Medical Records.jrxml
    See OVPMS-2283, OVPMS-2292
  • reports/Patient/Medical Records/<size>/Medical Records.jrxml
    See OVPMS-2283, OVPMS-2292
  • reports/Patient/Medical Records/<size>/Problems.jrxml
    See OVPMS-2292
  • reports/Product/Stock Adjustment/<size>/Stock Adjustment.jrxml
    See OVPMS-2241, OVPMS-2249
  • reports/Product/Stock Transfer/<size>/Stock Transfer.jrxml
    See OVPMS-2241
  • reports/Reporting/Bank Deposit/<size>/Bank Deposit.jrxml
    See OVPMS-2241
  • reports/Reporting/Charges/Search/<size>/Charges.jrxml
    See OVPMS-2239
  • reports/Reporting/Till Balancing/<size>/Till Balance.jrxml
    See OVPMS-2241
  • reports/Supplier/Credit/<size>/Supplier Credit.jrxml
    See OVPMS-2241
  • reports/Supplier/Delivery/<size>/Delivery.jrxml
    See OVPMS-2048, OVPMS-2241
  • reports/Supplier/Invoice/<size>/Supplier Invoice.jrxml
    See OVPMS-2241
  • reports/Supplier/Order/<size>/Order.jrxml
    See OVPMS-2241
  • reports/Supplier/Refund/<size>/Supplier Refund.jrxml
    See OVPMS-2241
  • reports/Supplier/Remittance/<size>/Supplier Remittance.jrxml
    See OVPMS-2241
  • reports/Supplier/Return/<size>/Supplier Return.jrxml
    See OVPMS-2241
  • reports/Workflow/Appointment/<size>/Appointment.jrxml
    See OVPMS-2241
  • reports/Customer Order/Pharmacy Order/<size>/Pharmacy Order.jrxml
    See OVPMS-2241
  • reports/Customer Order/Pharmacy Return/<size>/Pharmacy Return.jrxml
    See OVPMS-2241
  • reports/Workflow/Message/<size>/Audit Message.jrxml
    See OVPMS-2363
  • reports/Workflow/Message/<size>/Message.jrxml
    See OVPMS-2363
  • reports/Workflow/Message/<size>/System Message.jrxml
    See OVPMS-2363
  • reports/Workflow/Task/<size>/Task.jrxml
    See OVPMS-2241

For sites using standard templates, these can be loaded using:

toolbox template --load documents --size <size>

where <size> may be A4, A5 or Letter. This will load all document templates, so should not be run on sites that customise these. Sites that customise these should refer to the following sections for specific changes.

Report templates

The following report templates were created or updated:

  • reports/Reporting/Charges/Work In Progress/<size>/Work In Progress.jrxml
    See OVPMS-2239
  • reports/Reporting/Reminders/<size>/Patient Reminders.jrxml
    See OVPMS-2300
  • reports/Reporting/Reports/Customer/<size>/Customer Acquisition Report.jrxml
    See OVPMS-2245
  • reports/Reporting/Reports/Customer/<size>/Customer Referral Report.jrxml
    See OVPMS-2241
  • reports/Reporting/Reports/Customer/<size>/Customer Retention Report.jrxml
    See OVPMS-2241
  • reports/Reporting/Reports/Customer/<size>/Estimates Report.jrxml
    See OVPMS-2332
  • reports/Reporting/Reports/Customer/<size>/Estimates Report subreport.jrxml
    See OVPMS-2332
  • reports/Reporting/Reports/Financial/<size>/Key Performance Indicators.jrxml
    See OVPMS-2241
  • reports/Reporting/Reports/Financial/<size>/Practice Summary_CountVisitsLocation.jrxml
    See OVPMS-2241
  • reports/Reporting/Reports/Financial/<size>/Practice Summary_IncomeByClinician.jrxml
    See OVPMS-2241
  • reports/Reporting/Reports/Financial/<size>/Practice Summary_PaymentsByLocation.jrxml
    See OVPMS-2241
  • reports/Reporting/Reports/Patient/<size>/Due Patient Reminder Report.jrxml
    See OVPMS-2386
  • reports/Reporting/Reports/Patient/<size>/Patient Acquisition Report.jrxml
    See OVPMS-2241
  • reports/Reporting/Reports/Patient/<size>/Patient History Search.jrxml
    See OVPMS-2292

For sites using standard templates, these can be loaded using:

toolbox template --load reports --size <size>

where <size> may be A4, or Letter. This will load all report templates, so should not be run on sites that customise these. Sites that customise these should refer to the following sections for specific changes.

Medical Records and Insurance Claim Medical Records

The Medical Records.jrxml and Insurance Claim Medical Records.jrxml templates have been updated to:

  • display notes > 5000 characters.
  • include times

These can be loaded using:

toolbox template --load "Medical Records" "Insurance Claim Medical Records" --size <size>

For sites that customise these, the field $F{note} needs to be replaced with a variable $V{note}, with the expression:

$F{shortName}.equals("act.patientClinicalNote") 
   || $F{shortName}.equals("act.patientClinicalAddendum") 
? EVALUATE("document:text(., 'note')") 
: null

See:

Problems

The Problems.jrxml template has been modified in order to display notes > 5000 characters.

This can be loaded using:

toolbox template --load "Problems" --size <size>

where <size> may be A4, A5 or Letter.

For sites that customise this, the field $F{note} needs to be replaced with a variable $V{note}, with the expression:

$F{shortName}.equals("act.patientClinicalNote") 
   || $F{shortName}.equals("act.patientClinicalAddendum") 
? EVALUATE("document:text(., 'note')") 
: null

See OVPMS-2292

Author changes

Each primary object now tracks who created or updated it. The author node that was present on acts is no longer supported.

Where a template previously used:

author.entity.name

it should now use:

createdBy.name

Where a site customises any of the above document or report templates, they will need to be updated to replace uses of author.entity.name with createdBy.name and reloaded.

 

See OVPMS-2241

Customer and patient createdDate

Templates that use the party.customerperson or party.patientpet createdDate field should instead use created.

Reports that query the createdDate from the entity_details table should instead use entities.created.

See OVPMS-2241

Patient History Search

The Patient History Search.jrxml report has been modified in order to support notes > 5000 characters.

This can be loaded using:

toolbox template --load "Patient History Search" --size <size>

where <size> may be A4, Letter.

See OVPMS-2292

 

Known Issues

Complete

This page documents any known issues that may cause problems. Note that it does not list problems reported against earlier releases of OpenVPMS that are not yet resolved, but rather issues that may cause you problems with this release.

Lost space character using Email Template

If you create an Email Template using an Open Office odt document as its content, and that document contains two adjacent User Fields separated by one space, eg

(here shown after using Ctrl-F9 to reveal the field content)

Then when this shows in the email you may see "Dear MrBloggs" rather than the expected "Dear Mr Bloggs".

The work-around is either to replace the space by a non-breaking space (entered using Ctrl-Shift-space on Windows or Option-Space on a Mac) or use two spaces instead of one. [In the second case, normal HTML processing will replace consecutive spaces by a single space.]

External Edit triggers security dialog each time it runs

If you use the External Edit facility to edit an Open Office document, AND you are using Java 8 update 112 or later then a Java security check window appears each time you use External Edit and its 'do not show this again' checkbox does not work. See also OVPMS-1889

Audit info

Audit info popups display on top of dialogs. To avoid this, click off the audit info before opening dialogs.

Plugins

Removing a plugin from the deploy/ directory may not uninstall it.

Preferences

Incomplete document

The Preferences window is used to set user preferences.

The tabs are as follows:

General

General preferences. These include:

Summary

Customer and patient summary preferences. These include:

Charges

Charge and estimate preferences. These include:

Patient History

Patient history preferences. These include:

Scheduling

Scheduling preferences. These include:

Work Lists

Work List preferences. The include:

 

Troubleshooting

Complete

This page documents issues that may be encountered using OpenVPMS and how to resolve them.

Error Messages

Failed to save <object>. It may have been changed by another user

This error occurs when two users edit the same object at the same time. When the second user saves their changes, OpenVPMS rejects them, to avoid the first user's changes being lost.

Failed to create document
Failed to export document

These errors typically indicate an issue connecting to the OpenOffice service.

On Windows, try terminating the soffice.bin and soffice.exe processes.

On Unix, try terminating the soffice.bin and soffice processes.

Failed to start OpenOffice service: Cannot run program "soffice.exe"

This error occurs when OpenOffice cannot be found in the path. The OpenOffice program directory must be in the PATH environment variable of the user that launches Tomcat.

See the Windows Installation for instructions on how to configure this for Windows.

Failed to start OpenOffice service: failed to connect after 10 attempts

This error occurs when OpenOffice can be launched by OpenVPMS, but does not respond to requests.

This can occur if:

  1. there is an existing OpenOffice process that is not responding
    On Windows, try terminating the soffice.bin and soffice.exe processes.

    On Unix, try terminating the soffice.bin and soffice processes.

  2. OpenOffice doesn't have permissions to save the user profile
    On Unix installations, OpenOffice tries to save the user profile in the home directory of the user running Tomcat, typically in a sub-directory named .openoffice.org.

    If the home directory is not writeable, OpenOffice will not respond to requests.

To get the home directory of the Tomcat user:

> grep tomcat /etc/passwd | cut -d ":" -f6
/usr/share/tomcat8

To check the ownership and permissions:

> ls -ld /usr/share/tomcat8
drwxr-xr-x 9 root root 4096 Apr  3 03:12 /usr/share/tomcat8

Rather than change group/other permissions, it may be more secure to simply grant ownership to the Tomcat user, whilst keeping the existing group. E.g.:

> chown tomcat8 /usr/share/tomcat8

A synchronization error has occurred

The message 'A synchronization error has occurred.  Click "Ok" to re-synchronize.' will be displayed if you manage to open two OpenVPMS sessions with the same app number.  ie normally the URL will be http://localhost:8080/openvpme/app/1
If you click the "Open new browser window" icon at the top right of the screen, this will create a new window with a unique URL, eg http://localhost:8080/openvpms/app/2 and this will work happily. However, if you open a second browser window or tab with same URL, then the synchronization error will occur.

Note that you can also get a synchronisation error if you have multiple windows open and you log out and in before all windows have expired.  Fior example if you do the following:

  1. log in to window 1: URL = http://localhost:8080/openvpms/app/1
  2. open new window 2: URL = http://localhost:8080/openvpms/app/2
  3. log out of window 2
  4. log in to window 2: URL = http://localhost:8080/openvpms/app/1
  5. switch to window 1, and click something. You should get a synchronization error, if the window hasn't expired with a "Your session has been inactive for too long" message.

If you do get the error, just close one of the duplicate windows.

Unable to connect / This site can't be reached

If messages like these are displayed by the browser when trying to log in to OpenVPMS, verify that that Tomcat is running.

Tomcat

Tomcat no longer starts on Windows

If Tomcat no longer starts on Windows, a Java update may have uninstalled the Java Virtual Machine it was using.
If this is the case:

The Apache Tomcat 8.0 Tomcat8 service terminated with the following service-specific error:
Incorrect function.
[2020-09-02 17:23:32] [info]  [23444] Commons Daemon procrun (1.1.0.0 64-bit) started
[2020-09-02 17:23:32] [info]  [23444] Running 'Tomcat8' Service...
[2020-09-02 17:23:32] [info]  [51384] Starting service...
[2020-09-02 17:23:32] [error] [51384] Failed creating Java C:\Program Files\Java\jre1.8.0_260\bin\server\jvm.dll
[2020-09-02 17:23:32] [error] [51384] The system cannot find the path specified.
[2020-09-02 17:23:32] [error] [51384] ServiceStart returned 1
[2020-09-02 17:23:32] [error] [51384] The system cannot find the path specified.
[2020-09-02 17:23:32] [info]  [23444] Run service finished.
[2020-09-02 17:23:32] [info]  [23444] Commons Daemon procrun finished

To correct the problem:

  1. Go to C:\Program Files\Apache Software Foundation\Tomcat 8.0\bin directory
  2. Run Tomcat8w.exe
  3. On the Java tab, change the path to the new location of the Java Virtual Machine
  4. On the General tab, click Start to start the service

The logs

When things go wrong, it may be helpful to look in the logs. There are two of these: openvpms.log and openvpms-full.log, and they are located in the <TOMCAT-HOME>/logs directory. A given event is written to both, with more detail in the full log. You can also control what is logged by editing the file <TOMCAT-HOME>/webapps/openvpms/WEB-INF/classes/log4j.properties and then using the 'Re-load Log4j configuration' button on the Administration|System screen.

The openvpms.log will contain just the error or warning - for example:

07 Jul 2016 09:28:16,243  WARN LookupMacros,http-bio-8080-exec-4:250 - admin - org.openvpms.macro.MacroException: Failed to evaluate expression='date:format(date:add(java.util.Date.new(),'-30d),'yyyy-MM-dd HH:mm:ss')' for macro=@tt

The openvpms-full.log will contain the above followed by a large amount of trace information - for example:

The trace information is of little use to most of us, but this will be normally followed by as 'Caused by' entry such as:

With luck, you should be able to look at the 'caused by' information and work out what went wrong. [In the above, the problem is that the date:add()'s second argument should be '-30d' - ie its closing quote character is missing.]