Yes, it’s been a while. I suppose I’m from the old school who believe “if it ain’t broke, don’t fix it”.
This 30th update of version 3.5 adds a few new security features, adds an import function, and a few user interface tweaks.
Strong password option
There are risks associated with weak passwords and various regulatory bodies require applications to implement a strong password policy. In this update a strong password option was added on the setup dialog.

Selecting the checkbox will thereafter require strong passwords for all users. The password rules, explained within the online help, are as follows:
- Length: 9 to 12 characters
- Case: must contain both lower and upper case letters
- Number: must contain at least one number
- Symbols: must contain at least one symbol
If implementing this option from a previous version, it is important that all user’s current passwords are cleared. Otherwise they will get stuck in an endless loop of the old password not matching the new rules.

On a side note, regarding periodic password changes that other applications force upon the user. The current guidance is that passwords only require changing when there is evidence of compromise.
ADMIN account
In previous version of APK, sensitive functions were protected with a simple password dialog. Users with knowledge of the password could change settings and modify the databases. In version 30 an ADMIN login is now required to access these sensitive functions.
The program will create an ADMIN account when first started after this update.

Click “Yes” to continue. If updating from an older version, it will ask for the OG password to continue. Next, enter your chosen ADMIN password. It is important to choose a password that follows the secure rules and is one that you will remember. It will be extremely difficult to recover the ADMIN password if lost or forgotten.
Inactivity timer
A requirement of some regulatory agencies is that an application close after a period of inactivity. In the case of APK, there is now an optional hard 5 minute timer. After 5 minutes of inactivity, a dialog will appear with a two minute warning that you will be logged out. After another 5 minutes the same dialog will appear with another two minute warning that the application will shut down. Click the OK button to reset the timer.

The inactivity timer is optional and is enabled on the settings dialog.

It is highly recommended that the timer be switched on in a network environment.
Speaking of network considerations, it is also highly recommended that the automatic check for update be turned off in a network implementation. It will then be up to you to periodically check for an update. In case you were not aware, updates are free of charge in perpetuity.

Bulk data import
This function performs bulk addition of users and/or physicians from a spreadsheet into the APK database. The requirements for the source file are spelled out in the online help. After the import routine completes, the dialog will list those records that were imported and also those that were rejected (usually due to duplicate entries).

While on the subject of users, the user name field has increased from the measly 3 to a more reasonable 12 to accommodate more users.
Prescriber lookup changes
This update simplifies the prescriber lookup function. Now you may type a name (or a partial name) in the physician textbox on the patient data tab, then press the Enter key (or click the lookup button) to display the physician list. The closest match to your search will be highlighted. If no match is found, the entire list is displayed. Double click the highlighted text (or click the copy button) to transfer the prescriber name to the patient information tab.
The add/edit/delete functionality has been removed from this dialog. The prescriber database is now solely under control of the ADMIN.
Please note: prescriber lookup is totally optional, you may still free text the physician name.

Added patient lookup by MRN
This didn’t turn out the way I planned. For reasons unknown the exact search option would not work for MRN. I tried a half dozen different approaches. Finally had to resort to a fuzzy search. The result is the MRN search will return either an exact match or a list within which contains the MRN searched for.

Thank you
That’s all for now. Thanks to all for your continued support and suggestions for improving the program.