10a — Triggers: Architecture & Universal Patterns

LR Maritime Database — ABSD_ Schema — Comprehensive Reference

1. Architecture Overview

The ABSD_ schema uses SQL Server triggers as its sole mechanism for referential integrity, field validation, audit, and cross-table synchronization. There are no foreign-key constraints. Every constraint is enforced in T-SQL trigger code.

Scale
  • ~254 trigger files across ~200 tables
  • Both UPDATE/INSERT triggers and separate DELETE triggers
  • Plus supplemental triggers on SUPPLEMENTAL_ABSD_* tables
  • Triggers on annotation tables (tblChanges, tblAnnotationLogGeneral)
  • Triggers on external tables (ofac_sdn2, QH_ShipsOwner_Data)
Responsibilities
  • Field-level validation (valXxx SPs)
  • Cross-table referential integrity (codebook lookups)
  • Cross-field business rules (e.g., LOA ≥ LBP ≥ REG)
  • J06 audit stamp on ABSD_OVGE
  • Staging table refresh (*_UPDATES)
  • Primary and secondary annotation creation
  • ABSD_SHIP_SEARCH denormalized index maintenance
  • Status-driven cascade actions
Key design decision: All referential integrity is implemented in triggers rather than FK constraints because the legacy mainframe data import process requires bulk-loading rows that may temporarily violate constraints. Triggers can be disabled during imports; FK constraints cannot be selectively disabled per-session.

2. Guard Tables — When Triggers Fire

Every trigger body begins with a guard check. The trigger executes only when the guard table is empty.

IF NOT EXISTS (SELECT * FROM TRIGGER_DISABLE)
BEGIN
  -- all trigger logic
END
TableScopeUsage
TRIGGER_DISABLEGlobal — disables all triggersBulk data imports, migration scripts, emergency fixes
TRIGGER_DISABLE_OVGEUsed by some OVGE-related SPsSelective suppression during SP-driven updates
TRIGGER_DISABLE_OVNAUsed by some OVNA-related SPsBatch name record processing
TRIGGER_DISABLE_SUPPOVGEUsed by SUPPLEMENTAL_ABSD_OVGE triggersSuppresses SUPPLEMENTAL_ABSD_OVGE trigger
Risk: If a session inserts a row into TRIGGER_DISABLE and dies before removing it, all validation and audit is silently disabled for all subsequent sessions until the row is manually removed.

3. Universal 10-Step Pattern

Nearly every ABSD_ UPDATE/INSERT trigger follows this structure:

1
Guard checkIF NOT EXISTS (SELECT * FROM TRIGGER_DISABLE) BEGIN
All logic is inside this block. If the table is not empty, the trigger silently exits.
2
Variable declarations@TESTVAL INT, @PASSEDDATA VARCHAR(20), @RETMESSAGE VARCHAR(254), plus annotation variables (@Initials, @Source, @SourceRef, @FilingRef, @Grouping, @ShipwatchCol, @Englishfield) and history variables (@IsNew BIT, @IsCurrent BIT, @Notes VARCHAR(100)).
3
Field-level validationIF UPDATE(fieldname) BEGIN ... EXEC @TESTVAL=valXxx @PASSEDDATA, @RETMESSAGE OUTPUT; IF @TESTVAL <> 0 BEGIN RAISERROR ... ROLLBACK RETURN END END
These run outside the cursor — validated once for the entire rowset. Cross-field validations may also appear here (e.g., codebook lookups, constraint checks).
4
Cursor loop — Most triggers wrap the remaining logic in an INSENSITIVE cursor iterating over SELECT LRNO, SEQNO FROM inserted (or just LRNO for single-keyed tables). This handles multi-row operations correctly.
5
J06 audit stampUPDATE ABSD_OVGE SET J06_AUTHOR=..., J06_LNCHDATE=... WHERE LRNO IN (SELECT LRNO FROM inserted)
Every table that modifies ship data writes the initiating user's 3-char initials and today's YYMMDD date back to ABSD_OVGE. Some triggers also set J06_LNCHTIME (HHMMSS).
6
Staging table refreshDELETE FROM [table]_UPDATES WHERE LRNO IN (SELECT LRNO FROM inserted); INSERT [table]_UPDATES SELECT * FROM [table] WHERE LRNO IN (SELECT LRNO FROM inserted)
Mirrors the current row(s) into the corresponding *_UPDATES table for downstream consumers (interfaces, replication feeds).
7
Business logic cascades (table-specific) — Status-driven actions, cross-table field synchronization (e.g., ABSD_OVNA.SHP_ACT_ST ← ABSD_HIST.A02_STS), denormalized field copies, related table auto-creation.
8
Primary annotations (tblChanges) — Field-by-field annotation inserts for fields that warrant individual change tracking. Each field gets its English label via spGetEnglishFieldName. Old value comes from deleted pseudo-table; new value from inserted. The @Notes field carries context ('Made historical', 'Historical amendment', or null for current records).
9
Secondary annotations (tblAnnotationLogGeneral) — Group-level annotation: a single INSERT maps the table+field to a named grouping from indAnnotation_SecondaryGroupings, recording that the change happened without recording the specific value. Usually fires unconditionally (not gated on specific fields). Used for Shipwatch and downstream reporting.
10
ABSD_SHIP_SEARCH update — Set-based or cursor-based UPDATE to the denormalized search index. Only fires for SEQNO='00' (current record). Updates specific columns corresponding to the changed field(s).

4. J06 Audit Fields

All ship-related changes are time-stamped on ABSD_OVGE — the master vessel record — regardless of which table was actually modified. This gives a single "last touched" timestamp per vessel.

UPDATE ABSD_OVGE
SET
  J06_AUTHOR   = UPPER(LEFT(RIGHT(system_user, LEN(system_user) - CHARINDEX('\', system_user)), 3)),
  J06_LNCHDATE = RIGHT(YEAR(GETDATE()), 2)
               + REPLICATE('0', 2 - LEN(MONTH(GETDATE()))) + CAST(MONTH(GETDATE()) AS VARCHAR(2))
               + REPLICATE('0', 2 - LEN(DAY(GETDATE())))   + CAST(DAY(GETDATE())   AS VARCHAR(2))
WHERE ABSD_OVGE.LRNO IN (SELECT LRNO FROM inserted)
FieldTypeFormatExampleSource
J06_AUTHORCHAR(3)3-char uppercase initialsJDSRIGHT of SYSTEM_USER after '\' — e.g. DOMAIN\jds → JDS
J06_LNCHDATECHAR(6)YYMMDD260503Computed from GETDATE()
J06_LNCHTIMECHAR(6)HHMMSS143025Only set by some triggers (OVDOC, OVSMC, HIST); optional
Conditional J06 in ABSD_HIST: The HIST trigger checks whether J06 has already been set to the current user/date before updating, to avoid overwriting when multiple records fire in one transaction: IF NOT (SELECT Count(*) FROM ABSD_OVGE WHERE J06_AUTHOR = ... AND J06_LNCHDATE = ... AND LRNO = @CURR_RECORD) > 0

5. SEQNO History Model

Most ABSD_ tables storing historical snapshots use a SEQNO CHAR(2) key alongside LRNO:

SEQNOMeaning
'00'Current record — the live, active value
'01'Most recent historical record (most recent past state)
'02', '03', …Older historical records in descending recency
'95'Special slot used by ABSD_HIFL only (flag) — a temporary holding slot during the "make historical" re-sequencing process

When a record is made historical:

  1. Existing history is re-sequenced upward: '01'→'02', '02'→'03', etc.
  2. The current '00' record is duplicated to '01'.
  3. The '00' record is updated with the new values.
HIFL exception: ABSD_HIFL uses a '95' intermediate slot during re-sequencing because the flag record's composite key (LRNO+SEQNO) includes a codebook-validated country code, and re-sequencing requires temporarily stepping outside the normal sequence range to avoid collisions.

6. Annotation System

Primary Annotations — tblChanges

Field-specific change log. One row per field change per update.

  • LRNo: vessel identifier (or null for company records)
  • CompanyNo: owcode for company-side changes
  • ChangeType: human-readable field label (from spGetEnglishFieldName)
  • OldValue / NewValue: before/after values
  • Notes: 'Made historical', 'Historical amendment', or null/specific message
  • Source: user's source code — if @Source='TECH', the record's own Source field is used instead
  • UserInitials: 3-char initials from spGetUserSettings
  • FilingRef / SourceRef: free-text reference fields from user settings

Secondary Annotations — tblAnnotationLogGeneral

Group-level change indicator. One row per trigger firing (regardless of which specific field changed).

  • Grouping: named group (e.g., 'Flag', 'Name', 'Status') — looked up from indAnnotation_SecondaryGroupings by Tablename+Fieldname
  • ShipwatchCol: column name in Shipwatch for this group
  • UserInitials: 3-char initials
  • LRNo / CompanyNo: vessel or company reference
  • UpdateDate: GETDATE() — some triggers include this, some omit it

Secondary annotations fire unconditionally (no IF UPDATE gate) in most triggers — every write to the table generates a secondary annotation entry.

-- Primary annotation example
exec spGetEnglishFieldName 'absd_hist', 'A02_STS', @EnglishField output
INSERT INTO tblChanges (LRNo, CompanyNo, EffDate, ChangeType, UserInitials, Source, SourceRef,
    FilingRef, Confidential, FollowUpDate, FollowUpAssignedTo, FollowUpDone,
    OldValue, NewValue, Notes, ExtraData)
select i.LRNo, null, Cast(getdate() as varchar), @Englishfield, @Initials, @Source,
    @SourceRef, @FilingRef, 0, null, null, null,
    OLDVALUE = case @IsNew
        when 1 then case @IsCurrent when 1 then null else i.A02_STS end
        else d.A02_STS end,
    i.A02_STS, @Notes, null
from inserted i left join deleted d on i.lrno = d.lrno and i.seqno = d.seqno
    where i.LRNO = @CURR_RECORD AND i.SEQNO = @CURR_SEQ
-- Secondary annotation example
select @Grouping = Grouping, @ShipWAtchCol = shipWatchCOl from indAnnotation_SecondaryGroupings
where Tablename = 'ABSD_HIST' and Fieldname = 'A02_EFD'

insert into tblAnnotationLogGeneral (Grouping, ShipwatchCol, UserInitials, LRNo, COmpanyNo)
values (@Grouping, @ShipwatchCol, @Initials, @CURR_RECORD, null)

7. IsNew / IsCurrent / Notes Logic

Every trigger that writes primary annotations determines the change context from the pseudo-tables:

Condition@IsNew@IsCurrent@NotesMeaning
No row in deleted for this LRNO11 (if SEQNO='00')null or 'DOC Added' etc.New record inserted as current
No row in deleted for this LRNO10 (if SEQNO≠'00')'Made historical'New historical record inserted directly (e.g. backfill)
Row exists in deleted01 (if SEQNO='00')nullNormal current-record update
Row exists in deleted00 (if SEQNO≠'00')'Historical amendment'Retroactive change to a historical record
-- IsNew detection
select @IDno = LRNO from deleted where LRNO = @CURR_RECORD
if isnull(@idno,'') = ''
    set @IsNew = 1
else
    set @IsNew = 0

-- IsCurrent detection
select @CurrentSeq = @CURR_SEQ
if @CurrentSeq = '00'
    set @IsCurrent = 1
else
    set @IsCurrent = 0

OldValue logic in primary annotations:

OLDVALUE = case @IsNew
    when 1 then
        case @IsCurrent
            when 1 then null         -- new current: no prior value
            else i.<field>           -- new historical: treat new value as the "old" (it IS the old value)
        end
    else d.<field>                   -- update: get old value from deleted pseudo-table
end
Source override: When @Source = 'TECH' (electronic/automated update), some triggers substitute the record's own Source field (i.Source) into the annotation rather than the user's setting. This preserves the original data source in the audit trail. Pattern: SOURCE = Case @Source when 'TECH' then i.Source else @Source end

8. Staging Tables (*_UPDATES)

Every ABSD_ table with a trigger has a corresponding *_UPDATES staging table (e.g., ABSD_OVGE_UPDATES, ABSD_OVNA_UPDATES). The trigger maintains these tables to mirror the current committed state of the row.

-- Standard staging pattern
IF EXISTS (SELECT * FROM ABSD_OVGE_UPDATES WHERE LRNO IN (SELECT LRNO FROM inserted))
    DELETE FROM ABSD_OVGE_UPDATES WHERE LRNO IN (SELECT LRNO FROM inserted)
INSERT ABSD_OVGE_UPDATES
    SELECT * FROM ABSD_OVGE WHERE LRNO IN (SELECT LRNO FROM inserted)

Purpose: Downstream systems (interfaces, replication consumers) poll the *_UPDATES tables rather than the main tables. This decouples consumption from the source table and provides a stable snapshot of recently modified rows.

Note: For ABSD_HIST, the staging pattern copies all HIST rows for the LRNO, not just the updated row: INSERT ABSD_HIST_UPDATES SELECT * FROM ABSD_HIST WHERE LRNO = @CURR_RECORD. This ensures consumers see the full history snapshot.

9. ABSD_SHIP_SEARCH Maintenance

ABSD_SHIP_SEARCH is a denormalized search index updated by triggers across many tables. It stores a single row per vessel containing key searchable values extracted from disparate tables.

ColumnSource TableSource Field(s)Trigger
CALLSIGNABSD_OVGEB01_CALLSIGNABSD_OVGE_Update
OFFICIALNOABSD_OVGEB02_OFFNOABSD_OVGE_Update
FISHINGNOABSD_OVGEB10_FISHNOABSD_OVGE_Update
LUPDABSD_OVGEJ06_LNCHDATE changeABSD_OVGE_Update
VESSELNAMEABSD_OVNAG01_NAME (SEQNO='00')ABSD_OVNA_Update
VESSELTYPEABSD_OVTY → ABSD_CBSDCBSD.DECODE_A for INT_BASICABSD_OVTY_Update
TWENTYBYTESHIPTYPEABSD_OVTYConcatenated 20-byte type codeABSD_OVTY_Update
STATUSCODEABSD_HISTA02_STS (SEQNO='00')ABSD_HIST_Update
STATUSABSD_HIST → ABSD_CBUB1CBUB1.TRUD for FLDI='19'ABSD_HIST_Update
FLAGABSD_HIFLB04_CNTY (SEQNO='00')ABSD_HIFL_Update
PORTABSD_HIFLB04_TOWN (SEQNO='00')ABSD_HIFL_Update
PORTNAMEABSD_HIFL → VWPORTDECODEVWPORTDECODE.TOWNNAMEABSD_HIFL_Update
FLAGNAMEABSD_HIFL → VWCOUNTRYDECODEVWCOUNTRYDECODE.ALLNAMESABSD_HIFL_Update
classsearchABSD_HILC → vwClassvwClass.classsearchABSD_HILC_Update
ClassListABSD_HILC → fnclasslist()Function resultABSD_HILC_Update
LOAABSD_HILELOA if >0, else LBP if >0, else REGABSD_HILE_Update
DOCCODEABSD_OVDOC → ABSD_OWGEOWCODE; SHNAME; NATY1 (SEQNO='00')ABSD_OVDOC_Update
DOCCOMPANYABSD_OVDOC → ABSD_OWGEABSD_OWGE.SHNAMEABSD_OVDOC_Update
DOCCODABSD_OVDOC → ABSD_OWGEABSD_OWGE.NATY1 (flag/nationality)ABSD_OVDOC_Update

LOA priority waterfall (ABSD_HILE → ABSD_SHIP_SEARCH.LOA):

LOA = CASE WHEN C02_LOA > 0 THEN C02_LOA
           WHEN C02_LBP > 0 THEN C02_LBP
           ELSE C02_REG
      END

10. Validation SP Conventions

All field validation is delegated to stored procedures. The return convention is consistent across all val* SPs:

Return valueMeaning
0Valid — proceed
1Invalid — trigger raises error and rolls back
(any)NULL input always passes (returns 0) — null is a valid state unless explicitly checked
SPValidatesTypical Field Types
valStandard1Confidence code: C/D/E/G/L/X*_VER fields
valStandard22-char alphanumeric (blank passes)Nav aid codes, source codes
valStandard2NoNull2-char alphanumeric (blank fails)Required 2-char codes
valStandard4YYMMDD 6-char date (older version)Legacy EFD fields
valStandard4_newYYMMDD 6-char date (current version)Most *_EFD fields
valStandard8Numeric string*_SRCE (source code) fields
valStandard9newYYYYMMDD 8-char date with full calendar validationA03_EFD, LRCL_EFD, DOC dates
valStandard10_newYYYYMMDD 8-char date (used by ABSD_HIST for A02_EFD)Status effective dates
valStandardYN'Y' or 'N' (null passes)Y/N indicator fields
valStandardYMDFlexible date (used by ABSD_OVCA)F14_EFD casualty date
valStandardAlphaAlpha characters onlyB11_ANSBK_CODE
Pattern when validation fails:
SELECT @RETMESSAGE = 'fieldname ' + @RETMESSAGE  -- prefix with field name
RAISERROR (@RETMESSAGE, 16, 1)
ROLLBACK TRANSACTION
RETURN
All validation errors result in a full transaction rollback. There is no partial save.

11. Trigger File Index

Core Vessel Tables

TableTrigger(s)DescriptionDoc
ABSD_OVGEABSD_OVGE_Update, ShipDelVessel general: callsign, official no., navigation aids, DOB, publication status, builder10b
ABSD_OVNAABSD_OVNA_Update, ABSD_OVNA_DELETEVessel names: name history, type sync, flag copy10b
ABSD_OVTYABSD_OVTY_Update, ABSD_OVTY_DELETEVessel type: 20-byte type code, star rating, OVTY cross-checks10b
ABSD_OVCAABSD_OVCA_UpdateCasualty annotation: F14_EFD, F14_NOTES10b
ABSD_OVCSABSD_OVCS_UpdateClassification society codes (CBUB1 FLDI='57' lookup)10b
ABSD_OVDOCABSD_OVDOC_Update, ABSD_OVDOC_DELETEDOC issuing company: OWCODE, SHIP_SEARCH DOCCODE/DOCCOMPANY/DOCCOD10b
ABSD_OVSMCABSD_OVSMC_UpdateSMC issuing company: OWCODE annotation10b

Status & Flag History Tables

TableTrigger(s)DescriptionDoc
ABSD_HISTABSD_HIST_Update, ABSD_HIST_DELETEStatus history: A02_STS, SMC/DOC auto-create, NB email, FSW pages, quarter markers, OWNC/OWST rebuild, thruster status sync10c
ABSD_HIFLABSD_HIFL_Update, ABSD_HIFL_DELETEFlag history: B04_CNTY, port, EFD propagation to OVGE, registration field nulling on flag change10c
ABSD_HILCABSD_HILC_Update, ABSD_HILC_DELETELR class: LRCL_IND, classsearch update, spClassNotationMiningAdd/Delete10c
ABSD_HILEABSD_HILE_Update, ABSD_HILE_DELETEExternal dimensions: LOA/LBP/REG validation via spValidateLengths; LOA waterfall to SHIP_SEARCH10c

Ownership History Tables

TableTrigger(s)DescriptionDoc
ABSD_HIOWABSD_HIOW_Update, ABSD_HIOW_DELETERegistered owner history: H01_OWNER_CODE, OWNC rebuild, OWST recompute10d
ABSD_HIMAABSD_HIMA_Update, ABSD_HIMA_DELETEShip manager history: H02_MANAGER, OWNC rebuild, OWST recompute10d
ABSD_HISMHISMUpdate, ABSD_HISM_DELETEShip management company history10d
ABSD_HIOPHIOP_Trigger, ABSD_HIOP_DELETEOperator history10d
ABSD_HIPPABSD_HIPP_Update, ABSD_HIPP_DELETEP&I club history10d
ABSD_HIGBOABSD_HIGBO_Update, GBO_UPDBeneficial owner history10d
ABSD_HITPABSD_HITP_Update, ABSD_HITP_DELETETechnical manager history10d
ABSD_HITLABSD_HITL_Update, ABSD_HITL_DELETETime charterer history10d
ABSD_HIDRABSD_HIDR_Update, ABSD_HIDR_DELETEDraft/deadweight: C07_DL cross-checks10d

Machinery Tables

TableTrigger(s)DescriptionDoc
ABSD_HIMOABSD_HIMO_Update, ABSD_HIMO_DELETEMain engine: status sync, machinery validation10e
ABSD_HIMTABSD_HIMT_Update, ABSD_HIMT_DELETEMain engine type10e
ABSD_HIGEABSD_HIGE_Update, ABSD_HIGE_DELETEGenerator engines10e
ABSD_MATHABSD_MATH_Update, ABSD_MATH_DELETEThruster: e95_thst_stat status sync10e
ABSD_MAAUABSD_MAAU_Update, ABSD_MAAU_DELETEAuxiliary engine10e
ABSD_AUX_ENG_MANABSD_AUX_ENG_MAN_Update, _DELETEAux engine manufacturer10e
ABSD_MABO/MABU/MAEM1-3/MAGR/MAPR/MASP/MASTMultipleVarious machinery sub-tables10e

FU* Cargo & Capacity Tables

Table RangeDescriptionDoc
ABSD_FUCA1/2, FUCO1/2, FUDI1-4, FUDO1/2Cargo hold dimensions, types10f
ABSD_FUGE, FUHA1/2, FULC, FULI1-3Gear, hatches, liquids, liquid capacity10f
ABSD_FUOF, FURO1/2, FUSF/FUSF2, FUSP, FUST1/2Oil fuel, RO-RO, special features, stability10f
ABSD_FUTO, FUUN1/2Tons, units10f

Structure Tables

TableDescriptionDoc
ABSD_STSESteel sections: C01_EFD cross-checks for OVNA, keel laid date10g
ABSD_STGE, STDE, STKE, STST, STALStructure geometry, deck, keel, stern, other structural10g
ABSD_HIBR, HIPR, HIBBC, HIPC, HIPM, HIPS, HIPU, HISEBreadth, propeller, bow thruster, pumps, service10g
ABSD_HIFC1/2Fire class10g
ABSD_HIDEDeadweight table10g
ABSD_HIDRDraft/draught10g
ABSD_TANKERTanker-specific fields10g
ABSD_LRSC/LRSU/LRWD/LRGE/LREQ1-4/LRHI/LRHNLR survey records10g
ABSD_HRXRHazardous materials cross-reference10g

Casualty Tables

TableDescriptionDoc
ABSD_CADICasualty detail (main)10h
ABSD_CACO, CACT, CAGC, CAGE1/2, CALA, CAPO, CAPRCasualty sub-tables10h
ABSD_HAAD, HACOHazard/accident sub-tables10h

Company / Owner Tables

TableDescriptionDoc
ABSD_OWGEOwner/company general: OWGE_Update, OWGE_DELETE10i
ABSD_OWNA, OWAD1/2, OWAN, OWCA, OWCN, OWCO, OWDC, OWIN, OWNC, OWNER_EXCEPTIONS, OWSH, OWST, OWXRAddress, name, contact, ship relationships10i

Codebook Tables

TableDescriptionDoc
ABSD_CBUB1Universal codebook: Insert + Update triggers maintain CBUB1 integrity10j
ABSD_CBCA, CBCONOTE, CBCOROOT, CBFT, CBPPNAME, CBPPROOT, CBPPSTREVarious codebook tables10j
tblStatCode5, tblFlexible_Bucket, tblFlexible_Bucket_CB, tblStarsConfiguration/lookup tables10j

SUPPLEMENTAL_ABSD_* Tables

TableDescriptionDoc
SUPPLEMENTAL_ABSD_OVGEMMSI, FISHNO20, additional vessel general fields10k
SUPPLEMENTAL_ABSD_OVTYSTAT5CODE for type validation10k
SUPPLEMENTAL_ABSD_HIFLCALLSIGN mirror, MMSI10k
SUPPLEMENTAL_ABSD_HIMAManager supplemental fields10k
SUPPLEMENTAL_ABSD_NCONNB email indicator, RELEASEDATE, COMMQTR, LQTR, CQTR10k
SUPPLEMENTAL_ABSD_STSECompletion date supplemental10k
SUPPLEMENTAL_ABSD_STDE, CADI, CBCOROOT, CBCY, FUDI1/2, FUGE, FUUN1, HIFC1, HITLVarious supplemental tables10k

Misc & Annotation Tables

TableDescriptionDoc
ABSD_NCON, NCON_CONFI, NCNAME, NCOWNER, NCSHIPNewcon vessel/company flags10l
ABSD_SALESale/scrap records: tblFSWSalesPage maintenance10l
ABSD_PandIP&I insurance: ABSD_PandI_Update10l
ABSD_PARALLEL_REGParallel registry records10l
ABSD_CLASS, FOR_CLASSClassification records10l
ABSD_SPAN, SPTM, SUBSHIP, SUNDRY, FREEFORM, FABNOTE, PREFAB, PLANMiscellaneous vessel sub-tables10l
tblChanges, tblAnnotationLogGeneralAnnotation table triggers (self-maintenance)10l
ABSD_CHARTERER, QUALSHIP, THIRDPARTY_IDENTITY, PERSONNELCharterer, qualification, personnel10l
ABSD_SOURCE, BUILDERS, HITM, HITS, HITT, FTME, FTNT, FTQYSource, builder, type, survey tables10l
ofac_sdn2, QH_ShipsOwner_Data, tblFairplayCountryUniqueIMO, tblFSWNBPage, tblFSWSalesPageExternal data / integration tables10l

12. Documentation Files

FileContents
10aThis file — architecture, universal patterns, guard tables, J06, SEQNO model, annotation system, index
10bOVGE, OVNA, OVTY, OVCA, OVCS, OVDOC, OVSMC — vessel core identity triggers with all business rules
10cHIST, HIFL, HILC, HILE — status, flag, class, dimensions triggers
10dHIOW, HIMA, HISM, HIOP, HIPP, HIGBO, HITP, HITL, HIDR — ownership chain triggers
10eHIMO, HIMT, HIGE, MATH, MAAU, and MA* series — machinery triggers
10fFU* series — cargo capacity and hold triggers
10gST*, LR*, HIBR, HIDR, HIPR, TANKER and structural triggers
10hCA* series — casualty triggers
10iOW* series — company/owner triggers
10jCB*, tbl* — codebook and lookup table triggers
10kSUPPLEMENTAL_ABSD_* — all supplemental table triggers
10lMiscellaneous: NCON, SALE, annotation tables, external, integration