Implementation Checklist

The following is a checklist for existing users upgrading to the 1.9 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.  They are in no particular order. Note that the totally new features (such as the Dose Calculation) are not included here.

  • Revised reports and documents - some reports and most documents have been corrected and/or revised. Many documents have been revised to make use of the Letterhead & Document Control facility. You should load the new templates. See also below regarding changes you need to your customised reports and documents.
  • Because clinican names in reports and documents are now shown using short, medium or long formats (see the Practice), you should edit the User records for each of your clinicians to set their titles, first and last names, and qualifications. You may want to adjust the User Name Format expressions depending on the convention you use for setting the user's Full Name and Description fields. For example if you use 'short names' with the Full Name set to JB and the Description set to 'Dr Joe Bloggs' then you will want to change the expression for the 'Title and Name' record from
concat(expr:concatIf($title,' '),
             expr:ifempty(expr:concatIf($firstName, ' ', $lastName), $name))


concat(expr:concatIf($title,' '),
             expr:ifempty(expr:concatIf($firstName, ' ', $lastName), $description))

If you do this, then those clinicians whose title, names and qualifications are not set (eg all the old inactive ones) will get displayed as you require.

  • If you want to make use of the new Letterhead & Document Control facility, then you will need to create the required Letterhead record(s) and specify them in the Practice Location records. You may also need to modify the file in the resource bundle.
  • Since the standard invoice, credit, counter sale and statement documents now make use of the new Printed Name field in the Unit Of Measure lookup, you should set this for UOM's of items measured by weight or volume.
  • If you want completed/cancelled appointments to be shown with strike-through text, you need to enable this for each Schedule View
  • If you want to use VeNom appointment and visit reason codes then you need to load them
  • If you want users to be able to set their own Preferences then you must edit each user via Administration|Users to enable Preferences for them.
  • If you want to display templates and product types on Invoices, Counter Sales, Credits and Estimates, then you may want to enable these by default via Preferences
  • If you use IDEXX Lablink, you should consider setting up the integration to automate things
  • If you have multiple practice locations and having the correct location set is important to you (so that sales etc are correctly assigned to the appropriate location and the practice location is correctly set for new customers) then you should implement location specific logos using the Logo facility in the Practice Location. By careful use of colour blocks you can indicate for example whether customers should be created with the current practice location.  For example

    The second practice location has only been created because it uses different default printers.  However, the red block indicates that customers should not be created with this practice location - but rather 'Creature Comforts'.

512px wide X 30px height works well

  • If you operate in a country with a low value currency and you want your prices rounded to say the nearest dollar, or 20c, then you should read Prices - Rounding
  • If you need to have some products only available via templates, you will need to set the 'Use only in Templates' flag for these products.
  • If you use export and import facility to adjust product prices, note that all prices are now tax-exclusive.
  • To add Microchips, Pet Tags or Rabies Tags to a patient when the corresponding product is invoiced, select the appropriate Patient Identity on the medication, merchandise, or service product. Note that Rabies Tags must be enabled on the patient; this is done by editing the party.patientpet archetype.
  • The document loader utility and the integrated facility have been enhanced with an error directory, and as a result you may want to either review how you use the docloader utility or (recommended) switch to the integrated facility.
  • If you were previously using some sort of 'Blockout' appointment, you will want to switch to using the new Calendar Block facility. This switch-over will include:
    • staff education to use the new Block button on the Workflow|Scheduling screen
    • deactivating any 'blockout' appointment types that you have via Administration|Types|Appointment Type - note that when you do this that any 'blockout' appointments will now be shown without colour in the schedule
    • deactivating any 'blockout related' Visit Reasons that you have (eg ~Lunch, ~Staff Meeting, ~Off Duty) via Administration|Lookups|Visit Reason
    • creating the various Calendar Block Types that you will need using Administration|Types|Calendar Block Type - such as Lunch, Staff Meeting, and Off Duty
  • Staff education:
  1. You may want to inform staff about the effects of the Charge Auto Save feature - see Data Entry - Conflicting Updates.
  2. You will want to inform them of the Alt-V shortcut for printing a preview - far easier than  pressing the Print button and then the Preview button.
  3. You should discuss the Preferences facility and the improvement of the My Recent/Alt-Y facility.
  4. If you are used to using macros to generate text in emails, you need to inform staff that one can no longer enter the macro code in the text and have it expand. Instead you need to either press Alt-M to get the Macro Select screen, or if you know the macro code, press Ctrl-M or click the macro button to enter the macro code:
  5. You may want to warn staff that Investigations now have an Order Status (to track the status of the lab request) as well as a Status (to track the investigation status). See here.
  • Mail Server records: the migration process will create Mail Server records from the data previously set for each Practice Location. If you have multiple locations you will have multiple mail server records, some or all of which will be identical. To simplify any future maintenance, you may wish to have only as many different mail server records as are needed - ie choose one of the created ones as the 'standard' one (and if necessary change its name), then edit all the Practice Locations to use this standard one, and then delete the now unused ones.
  • Schedules: these now have a mandatory Location field that sets the location for any SMS Appointment Reminders. Even if you do not intend to use the automatic SMS Appointment reminder system, if you do have SMS enabled at the Practice level, you will need to have the Location set for each Schedule using Administration|Organisation|Schedule. If you do not set this, then when you click the Remind button on the Workflow|Scheduling screen, you will get the message “Cannot determine the practice location of the appointment”.
    The database migration script endeavours to set the location, but will not be able to do this if a view is linked to multiple locations.
  • Roles: Prior to 1.9 you could create a 'look only' user who had no authorities at all. They could log in and look at things but could not make any changes. If you have a user like this, then they now must have the following authorities to be able to log on: Entity Links Create, Entity Links Save,  Preferences Entity Create, and Preferences Entity Save.
  • The changes related to OVPMS-1567OVPMS-1569, and OVPMS-1570  require changes to SQL based reports that use the entityRelationship.productStockLocation, entityRelationship.productSupplier and entityRelationship.productTypeProduct archetypes.
    The standard reports have been upgraded, but you will need to update any custom reports that you have.

    The following SQL query will find any reports in the system that need modification:

select name, description, file_name, reportType, Type, active
from (select da.file_name,, e.description,,
      ed1.value as reportType, ed2.value as Type, convert(uncompress(
        doc.contents)) using utf8) as contents
from document_acts da
join documents doc on doc.document_id = da.document_id
join participations p
    on p.act_id = da.document_act_id
        and p.arch_short_name = "participation.document"
join entities e
    on e.entity_id = p.entity_id
    and e.arch_short_name = "entity.documentTemplate"
join entity_details ed1 on ed1.entity_id = e.entity_id and = 'reportType'        
join entity_details ed2 on ed2.entity_id = e.entity_id and = 'archetype'        
where da.mime_type = 'text/xml' and da.file_name like "%.jrxml") as doc
where doc.contents like "%entityRelationship.productStockLocation%"
    or doc.contents like "%entityRelationship.productSupplier%"
    or doc.contents like "%entityRelationship.productTypeProduct%"
    or doc.contents like "%.entity.type.source%";

If you first load the standard reports (see top bullet above), and then run the above query, this will identify your customised report that need upgrading.

Custom reports that use entityRelationship.productStockLocation need to be updated:

  • replace entityRelationship.productStockLocation with entityLink.productStockLocation

E.g. change:

left outer join entity_relationships s
          on s.source_id = e.entity_id and s.arch_short_name = "entityRelationship.productStockLocation"
     left join entity_relationship_details d2
          on s.entity_relationship_id = d2.entity_relationship_id and = "quantity"


left outer join entity_links s 
     on s.source_id = e.entity_id and s.arch_short_name = "entityLink.productStockLocation"
left join entity_link_details d2 
     on = and = "quantity"

Custom reports that use entityRelationship.productSupplier need to be updated:

  • replace entityRelationship.productSupplier with entityLink.productSupplier

E.g. change:

join entity_relationships productSupplier 
    on product.entity_id = productSupplier.source_id
        and productSupplier.arch_short_name = "entityRelationship.productSupplier"


join entity_links productSupplier
    on product.entity_id = productSupplier.source_id
        and productSupplier.arch_short_name = "entityLink.productSupplier"

You may also find that reports that need to be adjusted as above, also access the entity_relationship_details table. In this case you will need to change all of 'entity_relationship_details' to 'entity_link_details' and change 'entity_relationship_id' to 'id' as per the productStockLocation example above.

E.g. change:

left join entity_relationship_details psd 
   on psd.entity_relationship_id = productSupplier.entity_relationship_id 
   and = 'preferred'


left join entity_link_details psd 
    on = and = 'preferred'


Custom reports that use entityRelationship.productTypeProduct need to be updated:

  • replace entityRelationship.productTypeProduct with entityLink.productType
  • switch source and target

E.g. change:

left join entity_relationships r
       on e.entity_id = r.target_id and r.arch_short_name = "entityRelationship.productTypeProduct"
left join entities pt
       on r.source_id = pt.entity_id


left join entity_links r
       on e.entity_id = r.source_id and r.arch_short_name = "entityLink.productType"
left join entities pt
       on r.target_id = pt.entity_id

Custom reports that refer to product.entity.type.source as a field or within expressions should instead use
References to template.entity.type.source should instead use


Syndicate content