LR Maritime Database · Trigger Business Rules Reference · Generated from SQL source 2026-05-03
This document covers nine trigger families that manage vessel ownership chain, management, tonnage, and deadweight data. The HIOW trigger is the most architecturally complex trigger in the database (~1,016 lines), orchestrating automatic derivation of beneficial ownership, OWSH relationship maintenance, and cross-table cascades. HISM adds a parallel ISM management layer with its own bidirectional sync with HIMA.
Current registered owner history
Ship manager / bareboat charterer history
ISM ship manager history
Operator history
Group beneficial owner
Beneficial principal (auto-derived)
Technical principal (auto-derived)
Tonnage – Lloyd's (GT/NT)
Deadweight & draught measurements
IF NOT EXISTS (SELECT * FROM TRIGGER_DISABLE)TRIGGER_DISABLE_HIMA WHERE spid=@@spid (per-session, prevents HIOW re-entry), inner TRIGGER_DISABLE (global)TRIGGER_DISABLE, inner TRIGGER_DISABLE_NEWOOMTRIGGER_DISABLE_NEWOOM only (no TRIGGER_DISABLE check!)TRIGGER_DISABLEThe registered owner history trigger is the most complex trigger in the database. It validates EFDs, prevents duplicate/out-of-sequence owner records, maintains three-position OWSH relationship slots, auto-derives the beneficial ownership chain into HIPP/HITP, and recomputes OWST fleet statistics for both old and new owners.
IF NOT EXISTS (SELECT * FROM TRIGGER_DISABLE) BEGIN SET NOCOUNT ON DECLARE INDEX_cursor INSENSITIVE CURSOR FOR SELECT LRNO, SEQNO FROM inserted -- per-row processing via cursor END
Uses a cursor over all (LRNO, SEQNO) pairs in inserted to handle bulk imports correctly. All business logic executes inside the cursor loop.
| Field | Validation SP | Rule | Error |
|---|---|---|---|
H01_EFD | valStandard9Owner_new | YYYYMMDD format; day=0000 allowed; 9999-prefix allowed; calendar valid | RAISERROR + ROLLBACK |
H01_EFD | valStandard9Owner_NODATE | Secondary EFD check — handles no-date sentinel values with SEQNO context | RAISERROR + ROLLBACK |
H01_VER | valStandard1 | Confidence: C/D/E/G/L/X | RAISERROR + ROLLBACK |
H01_SRCE | valStandard8 | Numeric source code | RAISERROR + ROLLBACK |
H01_OWNER_CODE | Manual FK check | Must exist in ABSD_OWGE.OWCODE | "The code - X - is not valid" |
H01_OWNER_CODE changed: checks whether the new owner is identical to the adjacent historical record (self-join on LRNO where SEQNOs are consecutive). Prevents inserting a new historical record with the same owner as its immediate neighbour.H01_EFD is updated. Compares new EFD against the EFD of the next higher SEQNO (upper bound) and the next lower SEQNO (lower bound).LEFT(EFD,4) + REPLACE(REPLACE(SUBSTRING(EFD,5,4),'0000','0001'),'9999','0000') to allow sentinel values 0000 and 9999 at the ends of the sequence.H01_EFD or H01_OWNER_CODE is updated: checks for another SEQNO on the same vessel with identical owner code AND identical EFD.-- Step 1: Insert a per-session guard so HIMA's own trigger doesn't fire recursively INSERT INTO TRIGGER_DISABLE_HIMA (spid) VALUES (@@spid) -- Step 2: Move current HIMA record to history EXEC spMakehimaHistorical @CURR_RECORD -- Step 3: Set current manager to "no manager" sentinel UPDATE ABSD_HIMA SET H02_MANAGER = '9991001' WHERE LRNO=@CURR_RECORD AND SEQNO='00' -- Step 4: Remove the per-session guard DELETE FROM TRIGGER_DISABLE_HIMA WHERE spid = @@spid
deleted) matches the current ABSD_HISM.SHIPMANAGER: calls spMakehimaHistorical and then sets ABSD_HIMA.H02_MANAGER to the HISM SHIPMANAGER value (promotes the ISM ship manager to become the HIMA manager).ABSD_OWSH is the owner ship holdings table. It maintains three relationship position slots (REL1_1, REL1_2, REL1_3) for each owner-vessel pairing.
REL1_1, REL1_2, REL1_3deleted, removes the vessel's LRNO from whichever REL1_x slot contains itvwABSD_OWXR_EDM (updated Dec 2025) — owner cross-reference relationships from EDM; replaces direct ABSD_OWXR table to avoid stale datavwABSD_OWGE_EDM (updated Feb 2026) — owner general data from EDM; replaces direct ABSD_OWGE table-- Level 1: Start with H01_OWNER_CODE from inserted
SET @L1_OWNER = (SELECT H01_OWNER_CODE FROM inserted WHERE SEQNO='00')
-- Level 2: Traverse OWXR for parent relationship
SET @L2_OWNER = (SELECT OWCODE_PARENT FROM vwABSD_OWXR_EDM WHERE OWCODE_CHILD=@L1_OWNER)
-- Level 3: Traverse again
SET @L3_OWNER = (SELECT OWCODE_PARENT FROM vwABSD_OWXR_EDM WHERE OWCODE_CHILD=@L2_OWNER)
-- Beneficial Owner = deepest non-null level that has GROUP_OWGE='A' (active)
-- AND CONF IN ('N', NULL) (not confidential)
-- AND PUBLIND_1 IS set (publicly listed indicator)
inserted) and old owner (from deleted)ABSD_OWNC newcon cross-link for each affected owner codeABSD_HIST.A02_STS IN ('P','O','U','A','F','E') (active statuses)RC (registered owner) set from HIOW owner codedeleted.H01_OWNER_CODE) and the new owner code (from inserted.H01_OWNER_CODE)vwABSD_OWXR_EDM to compute ownership group membershipIRP_OWNED, IRP_MANAGED, IRP_AGENTFOR, RP_AGENTFOR, P_AGENTFOR in ABSD_OWSTUPDATE ABSD_OVGE SET J06_AUTHOR = LEFT(@Initials, 3), J06_LNCHDATE = YYMMDD formula, J06_LNCHTIME = HHMMSS formula WHERE LRNO = inserted.LRNO
| SHIP_SEARCH Column | Source | Condition |
|---|---|---|
OWNERCODE | inserted.H01_OWNER_CODE | SEQNO='00' only |
OWNER | vwABSD_OWGE_EDM.SHNAME for owner code | SEQNO='00' only |
OWNERCOD | vwABSD_OWGE_EDM.NATY1 (nationality code) | SEQNO='00' only |
| Type | Field Trigger | Notes Value | OldValue Source |
|---|---|---|---|
| Primary (tblChanges) | H01_OWNER_CODE | null (current), 'Made historical', 'Historical amendment' | deleted.H01_OWNER_CODE; NoChangeInd=1 (suppress unchanged current) |
| Secondary (tblAnnotationLogGeneral) | Always fires | Group config from indAnnotation_SecondaryGroupings: Tablename='ABSD_HIOW', Fieldname='EFD' | n/a |
The ship manager / bareboat charterer history trigger. Uses a two-level guard to prevent re-entrant firing when called programmatically from the HIOW trigger. Maintains the OWSH manager relationship slots and rebuilds OWNC/OWST on manager changes.
-- Outer guard: per-session lock inserted by HIOW before calling spMakehimaHistorical
IF NOT EXISTS (SELECT * FROM TRIGGER_DISABLE_HIMA WHERE spid = @@spid)
BEGIN
-- Inner guard: global trigger disable
IF NOT EXISTS (SELECT * FROM TRIGGER_DISABLE)
BEGIN
-- all logic here
END
END
spMakehimaHistorical, which updates ABSD_HIMA rows. Without the per-session outer guard, this would cause HIMA's own trigger to fire recursively. The HIOW trigger inserts a row into TRIGGER_DISABLE_HIMA keyed on @@spid before the call and removes it after.
| Field | Validation SP(s) | Rule |
|---|---|---|
H02_EFD | valStandard9new then valStandard9Owner_NODATE | YYYYMMDD, calendar valid; also checks no-date sentinels in SEQNO context. Both must pass. |
H02_VER | valStandard1 | Confidence: C/D/E/G/L/X |
H02_SRCE | valStandard8 | Numeric source code |
H02_MANAGER | Manual FK check | Must exist in ABSD_OWGE.OWCODE |
H02_MANAGER is updated, checks whether the new manager code matches the current registered owner (ABSD_HIOW WHERE SEQNO='00').9991001 (no manager) is exempt from this check.MR)ABSD_OWNC for both the old manager code (deleted) and new manager code (inserted)MR (manager) set from HIMA manager codeA02_STS IN ('P','O','U','A','F','E')deleted.H02_MANAGER) and new manager (from inserted.H02_MANAGER)vwABSD_OWXR_EDM for group membership traversalUpdates ABSD_OVGE.J06_AUTHOR, J06_LNCHDATE, J06_LNCHTIME for all rows in inserted.
| Type | Field Trigger | Notes | Special Behaviour |
|---|---|---|---|
| Primary (tblChanges) | H02_MANAGER | null / 'Made historical' / 'Historical amendment' | NoChangeInd=1: suppresses annotation when value unchanged for current SEQNO |
| Secondary (tblAnnotationLogGeneral) | Always fires | Group: Tablename='ABSD_HIMA', Fieldname='EFD' | — |
ISM Ship Manager history trigger. Maintains a parallel management track specifically for the ISM-designated ship manager. When the SHIPMANAGER changes, automatically synchronises with ABSD_HIMA to keep the management chain consistent.
IF NOT EXISTS (SELECT * FROM TRIGGER_DISABLE)
BEGIN
IF NOT EXISTS (SELECT * FROM TRIGGER_DISABLE_NEWOOM)
BEGIN
-- all logic
END
END
Outer guard is the global TRIGGER_DISABLE. Inner guard is TRIGGER_DISABLE_NEWOOM (new-OOM suppression — used during bulk new owner-operator-manager operations).
| Field | Validation SP | Rule |
|---|---|---|
EFD | valStandard9Owner_NODATE | YYYYMMDD with no-date sentinel handling; SEQNO-aware |
SHIPMANAGER | Manual FK check | Must exist in ABSD_OWGE.OWCODE. Error: "The code - X - is not valid" |
The cursor processes only SEQNO='00' rows. For each current HISM record, it performs the following logic:
spMakeHIMAHistorical (if this is an addition, not correction), then set HIMA.H02_MANAGER = '9991001'spMakeHIMAHistorical (if addition), then update HIMA.H02_MANAGER = new SHIPMANAGER| SHIP_SEARCH Column | Source | Condition |
|---|---|---|
SHIPMANAGERCODE | inserted.SHIPMANAGER | SEQNO='00' only |
SHIPMANAGER | ABSD_OWGE.SHNAME | SEQNO='00' only |
SHIPMANAGERCOD | ABSD_OWGE.NATY1 | SEQNO='00' only |
Updates ABSD_OVGE.J06_AUTHOR, J06_LNCHDATE, J06_LNCHTIME for all rows in inserted.
| Type | Field Trigger | Notes |
|---|---|---|
| Primary (tblChanges) | SHIPMANAGER | Standard IsNew/IsCurrent pattern; Notes: null / 'Made historical' / 'Historical amendment' |
| Secondary (tblAnnotationLogGeneral) | Always fires | Group: Tablename='ABSD_HISM', Fieldname='EFD' |
Operator history trigger. Records the party responsible for the commercial operation of the vessel. Note that this trigger checks TRIGGER_DISABLE_NEWOOM only — it does not check the global TRIGGER_DISABLE table. Consequently, it fires during new-OOM operations only if TRIGGER_DISABLE_NEWOOM is populated.
TRIGGER_DISABLE_NEWOOM (not TRIGGER_DISABLE). Inserting into TRIGGER_DISABLE will NOT suppress HIOP from firing. This appears to be intentional for new-vessel creation workflows.
| Field | Validation SP | Rule |
|---|---|---|
OPERATOR_EFD | valStandard9Owner_NODATE | YYYYMMDD with no-date sentinel handling; SEQNO-aware |
OPERATOR_CODE | Manual FK check | Must exist in ABSD_OWGE.OWCODE. Error: "The code - X - is not valid" |
OPERATOR_CODE IN ('9995154','9991001','9991284','9999996') when the vessel is in a terminal statusABSD_HIST.A02_STS IN ('S','C','R','L','T') (scrapped, cancelled, laid-up, etc.)Uses SYSTEM_USER directly (not @Initials from spGetUserSettings): UPPER(LEFT(RIGHT(SYSTEM_USER, LEN(SYSTEM_USER)-CHARINDEX('\',SYSTEM_USER)),3)). Updates J06_AUTHOR and J06_LNCHDATE only (no J06_LNCHTIME).
| SHIP_SEARCH Column | Source | Condition |
|---|---|---|
OPERATORCODE | inserted.OPERATOR_CODE | SEQNO='00' only |
OPERATOR | ABSD_OWGE.SHNAME | SEQNO='00' only |
OPERATORCOD | ABSD_OWGE.NATY1 | SEQNO='00' only |
| Type | Field Trigger | Notes |
|---|---|---|
| Primary (tblChanges) | OPERATOR_CODE | Standard IsNew/IsCurrent pattern |
| Secondary | None — explicitly noted "no secondary annotations" | |
Group beneficial owner trigger. Records the group-level beneficial owner for a vessel.
--IF NOT EXISTS (SELECT * FROM TRIGGER_DISABLE) AND NOT EXISTS (SELECT * FROM TRIGGER_DISABLE_HIGBO)
The BEGIN that follows executes unconditionally. This trigger cannot be suppressed by either TRIGGER_DISABLE or TRIGGER_DISABLE_HIGBO. All inserts/updates to ABSD_HIGBO will always fire the annotation and J06 logic.
Cursor-based, iterating over all (LRNO, SEQNO) pairs in inserted. No field validation is performed.
GBO_CODE is updated AND the new value differs from the deleted value (anti-noise filter: COUNT(*) WHERE i.GBO_CODE = d.GBO_CODE <> 1)'Group Owner' (does NOT call spGetEnglishFieldName)@IsNew=1 (new record), OldValue is set to i.GBO_CODE (same as NewValue) rather than NULL. This differs from the standard pattern where OldValue would be NULL for new inserts.Updates ABSD_OVGE.J06_AUTHOR, J06_LNCHDATE, J06_LNCHTIME using @Initials from spGetUserSettings.
ABSD_HIGBO does not contribute to ABSD_SHIP_SEARCH columns.
Beneficial principal trigger. ABSD_HIPP is primarily maintained by the HIOW trigger (via the 3-level BO chain derivation). This trigger validates manually-entered updates and maintains the J06 audit stamp.
| Field | Validation SP | Rule |
|---|---|---|
H03_EFD | valStandard9new | YYYYMMDD, calendar valid (8-char). Note: uses valStandard9new, not the Owner variant. |
H03_VER | valStandard1 | Confidence: C/D/E/G/L/X |
H03_SRCE | valStandard8 | Numeric source code |
H03_PPC | Manual FK check (nullable) | When not null: must exist in ABSD_OWGE.OWCODE. Error: "The code in H03_PPC does not match a record in table OWGE" |
J06_AUTHOR + J06_LNCHDATE only (no J06_LNCHTIME). Uses SYSTEM_USER directly (not spGetUserSettings).
| Type | Field Trigger | Notes |
|---|---|---|
| Primary | None | No primary annotation (no tblChanges insert) |
| Secondary (tblAnnotationLogGeneral) | Always fires | Group: Tablename='ABSD_HIPP', Fieldname='H03_EFD' |
ABSD_HIPP does not contribute to ABSD_SHIP_SEARCH columns.
Technical principal trigger. Like HIPP, ABSD_HITP is primarily auto-derived by the HIOW trigger. This trigger validates manual edits and maintains the staging table and J06 audit.
| Field | Validation SP | Rule | Note |
|---|---|---|---|
H04_EFD | valStandard9 | YYYYMMDD, 8 chars | Uses older valStandard9 (not valStandard9new) — no Owner SEQNO context |
H04_VER | valStandard1 | Confidence: C/D/E/G/L/X | |
H04_SRCE | valStandard8 | Numeric source code | |
H04_TPC | Manual FK check (nullable) | When not null: must exist in ABSD_OWGE.OWCODE |
IF EXISTS (SELECT * FROM ABSD_HITP_UPDATES WHERE LRNO IN (SELECT LRNO FROM inserted)) DELETE FROM ABSD_HITP_UPDATES WHERE LRNO IN (SELECT LRNO FROM inserted) INSERT ABSD_HITP_UPDATES SELECT * FROM ABSD_HITP WHERE LRNO IN (SELECT LRNO FROM inserted)
The staging table ABSD_HITP_UPDATES is refreshed with the full set of current HITP rows for each affected LRNO (not just the inserted row).
J06_AUTHOR + J06_LNCHDATE only (no J06_LNCHTIME). Uses SYSTEM_USER directly.
| Type | Notes |
|---|---|
| Primary | None |
| Secondary (tblAnnotationLogGeneral) | Always fires. Group: Tablename='ABSD_HITP', Fieldname='H04_EFD' |
Lloyd's tonnage trigger. Validates gross tonnage (GT) and net tonnage (NT) measurements, enforces GT≥NT (with a ship-type exception for A37A2PC containers), syncs GRT_L to ABSD_OVNA, maintains SHIP_SEARCH, and feeds the staging table.
| Field | Validation | Rule |
|---|---|---|
B07_GROSS | Manual length check | Maximum 7 digits. Error: "B07_GROSS must be a maximum of 7 digits" |
B07_NET | Manual length check | Maximum 7 digits. Error: "B07_NET must be a maximum of 7 digits" |
B07_EFD | valStandard4_new | YYMMDD (6-char), calendar valid |
B07_CC | valStandard4_new | YYMMDD (6-char) |
B07_GR_VER | valStandard1 | Confidence: C/D/E/G/L/X |
B07_NET_VER | valStandard1 | Confidence: C/D/E/G/L/X |
B07_GR_CC + B07_GROSS | valStandard3Num | Numeric pair: CC required when value present |
B07_NET_CC + B07_NET | valStandard3Num | Numeric pair: CC required when value present |
-- Rule removed 23/04/2024 (issue 54060): -- "Remove the rule stopping a user to enter a higher NT value than GT for STAT5CODE='A37A2PC'." -- Implementation: check ABSD_OVTY + tblMasterShipTypeXref -- If vessel's shiptype maps to STAT5CODE='A37A2PC' → skip GT>NT check entirely -- EFD date filter on OVTY also removed 28/05/2024 at Mayank's request
The exception is implemented for both UPDATE(B07_GROSS) and UPDATE(B07_NET) branches.
-- For SEQNO='00' only: SELECT @GROSS = (SELECT B07_GROSS FROM ABSD_HITL WHERE SEQNO='00' AND LRNO=@INDEXLRNO) UPDATE ABSD_OVNA SET GRT_L = @GROSS, INV_GRT_L = @GROSS * -1 WHERE LRNO=@INDEXLRNO AND SEQ_NO='00'
ABSD_OVNA.GRT_L (Lloyd's gross register tonnage) and its inverse INV_GRT_L are kept in sync with HITL. The inverse is used in some aggregation queries.
IF EXISTS (SELECT * FROM ABSD_HITL_UPDATES WHERE LRNO = @INDEXLRNO) DELETE FROM ABSD_HITL_UPDATES WHERE LRNO = @INDEXLRNO INSERT ABSD_HITL_UPDATES SELECT * FROM inserted WHERE LRNO = @INDEXLRNO
Unlike HITP which takes from the base table, HITL_UPDATES is populated from the inserted pseudo-table.
J06_AUTHOR + J06_LNCHDATE only (no J06_LNCHTIME). Uses SYSTEM_USER directly. Run inside the cursor loop, updated per-LRNO.
| SHIP_SEARCH Column | Source | Condition |
|---|---|---|
GT | inserted.B07_GROSS | SEQNO='00' and B07_GROSS or B07_NET updated |
NRT | inserted.B07_NET | SEQNO='00' and B07_GROSS or B07_NET updated |
| Type | Field Trigger | Notes |
|---|---|---|
| Primary (tblChanges) | B07_GROSS, B07_NET | Both annotated separately. OldValue uses @IsNew pattern. Notes is always null (no historical status distinction for tonnage). |
| Secondary (tblAnnotationLogGeneral) | Always fires (per cursor row) | Group: Tablename='ABSD_HITL', Fieldname='B07_EFD' |
Deadweight and draught measurements trigger. Validates DWT/draught values, enforces DWT ≤ displacement cross-check via ABSD_STGE, maintains SHIP_SEARCH, and fires dual secondary annotation groups.
| Field | Validation | Rule |
|---|---|---|
C07_DWTL | Manual length check | Maximum 7 digits. Error: "C07_DWTL must be a maximum of 7 digits" |
C07_DWTS | Manual length check | Maximum 7 digits. Error: "C07_DWTS must be a maximum of 7 digits" |
C07_TYPE | Manual IN check | Must be IN ('F','K','A','S','U','N','Y'). Error: "C07_TYPE must be one of the following values..." |
C07_EFD | valStandard4_new | YYMMDD (6-char), calendar valid |
C07_DL + C07_DL_CC | valStandard3Num | Numeric pair validation |
C07_DWTL + C07_DL_CC | valStandard3Num | Numeric pair validation |
C07_DS + C07_DS_CC | valStandard3Num | Numeric pair validation |
C07_DWTS + C07_DS_CC | valStandard3Num | Numeric pair validation |
ABSD_STGE.C08_DSPLCMNT (displacement tonnage).
If C07_DWTL ≥ C08_DSPLCMNT → RAISERROR "C07_DWTL cannot be greater than or equal to displacement" + ROLLBACK.
This check only fires when C08_DSPLCMNT is non-null and non-zero.
| SHIP_SEARCH Column | Source | Condition |
|---|---|---|
DWT | inserted.C07_DWTL | SEQNO='00' and C07_DWTL updated |
DRAUGHT | inserted.C07_DL | SEQNO='00' and C07_DL updated |
Note: SHIP_SEARCH update in HIDR does NOT filter on SEQNO — it updates for any SEQNO where C07_DWTL or C07_DL has changed. Only SEQNO='00' rows from inserted join to SHIP_SEARCH (via the INNER JOIN), but no explicit SEQNO filter is applied in the WHERE clause before the join.
J06_AUTHOR + J06_LNCHDATE only (no J06_LNCHTIME). Run inside cursor loop per-LRNO.
| Type | Field Trigger | Notes |
|---|---|---|
| Primary (tblChanges) | C07_DWTL, C07_DWTS | Both annotated. OldValue uses @IsNew pattern. Notes always null. |
| Secondary Group 1 | Always fires | Group: Tablename='ABSD_HIDR', Fieldname='C07_SRCE' |
| Secondary Group 2 | Always fires | Group: Tablename='ABSD_HIDR', Fieldname='C07_DWTS' |
Two secondary annotation groups are written for every HIDR update — the only trigger in this family with dual secondary groups.
| Trigger | Guard Type | EFD Validation SP | FK Enforcement | Dup/Seq Check | J06_LNCHTIME | SHIP_SEARCH Columns | Staging Table | Cascades |
|---|---|---|---|---|---|---|---|---|
HIOW |
TRIGGER_DISABLE | valStandard9Owner_new + valStandard9Owner_NODATE | ABSD_OWGE | Dup, Seq, EFD | Yes | OWNERCODE, OWNER, OWNERCOD | — | HIMA fix, OWSH REL, HIPP/HITP derive, OWNC, OWST |
HIMA |
TRIGGER_DISABLE_HIMA(spid) + TRIGGER_DISABLE | valStandard9new + valStandard9Owner_NODATE | ABSD_OWGE | Dup, Seq, EFD | Yes | — | — | OWSH MR, OWNC, OWST |
HISM |
TRIGGER_DISABLE + TRIGGER_DISABLE_NEWOOM | valStandard9Owner_NODATE | ABSD_OWGE | Dup, Seq, EFD | Yes | SHIPMANAGERCODE, SHIPMANAGER, SHIPMANAGERCOD | — | HIMA sync (spMakeHIMAHistorical) |
HIOP |
TRIGGER_DISABLE_NEWOOM only | valStandard9Owner_NODATE | ABSD_OWGE | Dup, Seq, EFD | No | OPERATORCODE, OPERATOR, OPERATORCOD | — | — |
HIGBO |
NONE (commented out) | — | — | — | Yes | — | — | — |
HIPP |
TRIGGER_DISABLE | valStandard9new | ABSD_OWGE (nullable) | — | No | — | — | — |
HITP |
TRIGGER_DISABLE | valStandard9 (older SP) | ABSD_OWGE (nullable) | — | No | — | ABSD_HITP_UPDATES | — |
HITL |
TRIGGER_DISABLE | valStandard4_new | — | GT≥NT | No | GT, NRT | ABSD_HITL_UPDATES | ABSD_OVNA.GRT_L sync |
HIDR |
TRIGGER_DISABLE | valStandard4_new | — | DWTS≤DWTL, DS≤DL, DWTL<DSPLCMNT | No | DWT, DRAUGHT | — | — |
HIOW, HIMA, and HISM form a mutually-dependent management triad where each can trigger changes to the others. The system prevents infinite recursion through:
@@spid before calling spMakehimaHistorical; HIMA's outer guard blocks re-entry; HIOW removes the row afterCalled by both HIOW and HISM triggers when the management structure requires that the current HIMA record be moved to history before updating it. The SP:
Both HIOW and HIMA trigger OWST recomputation. This means a single owner-change event causes two OWST recomputes (old owner + new owner for HIOW; old manager + new manager for HIMA). The OWST fleet statistics represent a point-in-time snapshot that must be kept accurate for portfolio reporting.
| Code | Meaning | Used In |
|---|---|---|
9991001 | "No manager" / self-managed | HIMA.H02_MANAGER when owner=manager auto-fix fires |
9995154 | Obsolete operator code | Blocked in HIOP for active vessels |
9991284 | Obsolete code | Blocked in HIOP; historically blocked in HISM |
9999996 | Blocked operator | Blocked in HIOP |
9999 (in date) | No end date / ongoing | EFD sentinel: treated as 0000 in sequence comparisons |
0000 (MMDD) | Date unknown | EFD sentinel: treated as 0001 in sequence comparisons |