Provide a NHI db field and NHI Form field to track NZ's "National Health Index" number.

Installs: 307

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 3

Forks: 1

Open Issues: 0


v0.1.0 2017-09-26 21:05 UTC

This package is not auto-updated.

Last update: 2024-04-14 02:50:42 UTC


A Silverstipe module to provide a NHI db field and NHI Form field to track NZ's "National Health Index" number.

Build Status


  • Custom DB field type
  • Custom form field type with basic pattern validation and checksum validation.
  • Consistently save NHI in all caps.


  • PHP 5.4 or greater (tested with up to PHP 7.1)
  • silverstripe/framework:^3.0
  • silverstripe/cms:^3.0


composer require webtorque/silverstripe-nhi-field:^0.0


To specify a NHI db field on a DataObject:

class Patient extends DataObject {
    private static $db = [
        'NationalHealthIndex' => 'NHI',

The NHI field type is equivalent to Varchar(7). When scaffolding a form, any NHI db field will autmatically use the NHIField form field instead of TextField.

Validating an NHI

Just use the NHIField in your form and validate your Form normally.

$nhiField = NHIField::create(
    $name = 'nhi',                      // required
    $title = 'National Health Index',   // optional
    $value = 'CGC2720',                 // optional
    $form = null,                       // optional
    $html5pattern = false               // optional, output an `html5` pattern attribute

NHIField is a simple extension of TextField with the following alteration:

  • The maxlength is automatically set to 7.
  • When setting the value of the field, it will automatically be converted to uppercase.
  • The value is validated with a basic regex and with a checksum as specified by the NHI standard.
  • You can ouput an html5 pattern attribute with $nhiField->setHtml5Pattern(true);.

For testing purposes, checksum validation can be disabled by setting the disable_checksum_validation flag on the NHIField config.

if (Director::isDev()) {
    NHIField::config()->disable_checksum_validation = true;