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.
- ~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)
- 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
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
| Table | Scope | Usage |
|---|---|---|
TRIGGER_DISABLE | Global — disables all triggers | Bulk data imports, migration scripts, emergency fixes |
TRIGGER_DISABLE_OVGE | Used by some OVGE-related SPs | Selective suppression during SP-driven updates |
TRIGGER_DISABLE_OVNA | Used by some OVNA-related SPs | Batch name record processing |
TRIGGER_DISABLE_SUPPOVGE | Used by SUPPLEMENTAL_ABSD_OVGE triggers | Suppresses SUPPLEMENTAL_ABSD_OVGE trigger |
3. Universal 10-Step Pattern
Nearly every ABSD_ UPDATE/INSERT trigger follows this structure:
IF NOT EXISTS (SELECT * FROM TRIGGER_DISABLE) BEGINAll logic is inside this block. If the table is not empty, the trigger silently exits.
@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)).
IF UPDATE(fieldname) BEGIN ... EXEC @TESTVAL=valXxx @PASSEDDATA, @RETMESSAGE OUTPUT; IF @TESTVAL <> 0 BEGIN RAISERROR ... ROLLBACK RETURN END ENDThese run outside the cursor — validated once for the entire rowset. Cross-field validations may also appear here (e.g., codebook lookups, constraint checks).
SELECT LRNO, SEQNO FROM inserted (or just LRNO for single-keyed tables). This handles multi-row operations correctly.
UPDATE 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).
DELETE 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).
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).
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.
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)
| Field | Type | Format | Example | Source |
|---|---|---|---|---|
J06_AUTHOR | CHAR(3) | 3-char uppercase initials | JDS | RIGHT of SYSTEM_USER after '\' — e.g. DOMAIN\jds → JDS |
J06_LNCHDATE | CHAR(6) | YYMMDD | 260503 | Computed from GETDATE() |
J06_LNCHTIME | CHAR(6) | HHMMSS | 143025 | Only set by some triggers (OVDOC, OVSMC, HIST); optional |
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:
| SEQNO | Meaning |
|---|---|
'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:
- Existing history is re-sequenced upward:
'01'→'02','02'→'03', etc. - The current
'00'record is duplicated to'01'. - The
'00'record is updated with the new values.
'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_SecondaryGroupingsby 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 | @Notes | Meaning |
|---|---|---|---|---|
No row in deleted for this LRNO | 1 | 1 (if SEQNO='00') | null or 'DOC Added' etc. | New record inserted as current |
No row in deleted for this LRNO | 1 | 0 (if SEQNO≠'00') | 'Made historical' | New historical record inserted directly (e.g. backfill) |
Row exists in deleted | 0 | 1 (if SEQNO='00') | null | Normal current-record update |
Row exists in deleted | 0 | 0 (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 = '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.
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.
| Column | Source Table | Source Field(s) | Trigger |
|---|---|---|---|
CALLSIGN | ABSD_OVGE | B01_CALLSIGN | ABSD_OVGE_Update |
OFFICIALNO | ABSD_OVGE | B02_OFFNO | ABSD_OVGE_Update |
FISHINGNO | ABSD_OVGE | B10_FISHNO | ABSD_OVGE_Update |
LUPD | ABSD_OVGE | J06_LNCHDATE change | ABSD_OVGE_Update |
VESSELNAME | ABSD_OVNA | G01_NAME (SEQNO='00') | ABSD_OVNA_Update |
VESSELTYPE | ABSD_OVTY → ABSD_CBSD | CBSD.DECODE_A for INT_BASIC | ABSD_OVTY_Update |
TWENTYBYTESHIPTYPE | ABSD_OVTY | Concatenated 20-byte type code | ABSD_OVTY_Update |
STATUSCODE | ABSD_HIST | A02_STS (SEQNO='00') | ABSD_HIST_Update |
STATUS | ABSD_HIST → ABSD_CBUB1 | CBUB1.TRUD for FLDI='19' | ABSD_HIST_Update |
FLAG | ABSD_HIFL | B04_CNTY (SEQNO='00') | ABSD_HIFL_Update |
PORT | ABSD_HIFL | B04_TOWN (SEQNO='00') | ABSD_HIFL_Update |
PORTNAME | ABSD_HIFL → VWPORTDECODE | VWPORTDECODE.TOWNNAME | ABSD_HIFL_Update |
FLAGNAME | ABSD_HIFL → VWCOUNTRYDECODE | VWCOUNTRYDECODE.ALLNAMES | ABSD_HIFL_Update |
classsearch | ABSD_HILC → vwClass | vwClass.classsearch | ABSD_HILC_Update |
ClassList | ABSD_HILC → fnclasslist() | Function result | ABSD_HILC_Update |
LOA | ABSD_HILE | LOA if >0, else LBP if >0, else REG | ABSD_HILE_Update |
DOCCODE | ABSD_OVDOC → ABSD_OWGE | OWCODE; SHNAME; NATY1 (SEQNO='00') | ABSD_OVDOC_Update |
DOCCOMPANY | ABSD_OVDOC → ABSD_OWGE | ABSD_OWGE.SHNAME | ABSD_OVDOC_Update |
DOCCOD | ABSD_OVDOC → ABSD_OWGE | ABSD_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 value | Meaning |
|---|---|
0 | Valid — proceed |
1 | Invalid — trigger raises error and rolls back |
| (any) | NULL input always passes (returns 0) — null is a valid state unless explicitly checked |
| SP | Validates | Typical Field Types |
|---|---|---|
valStandard1 | Confidence code: C/D/E/G/L/X | *_VER fields |
valStandard2 | 2-char alphanumeric (blank passes) | Nav aid codes, source codes |
valStandard2NoNull | 2-char alphanumeric (blank fails) | Required 2-char codes |
valStandard4 | YYMMDD 6-char date (older version) | Legacy EFD fields |
valStandard4_new | YYMMDD 6-char date (current version) | Most *_EFD fields |
valStandard8 | Numeric string | *_SRCE (source code) fields |
valStandard9new | YYYYMMDD 8-char date with full calendar validation | A03_EFD, LRCL_EFD, DOC dates |
valStandard10_new | YYYYMMDD 8-char date (used by ABSD_HIST for A02_EFD) | Status effective dates |
valStandardYN | 'Y' or 'N' (null passes) | Y/N indicator fields |
valStandardYMD | Flexible date (used by ABSD_OVCA) | F14_EFD casualty date |
valStandardAlpha | Alpha characters only | B11_ANSBK_CODE |
SELECT @RETMESSAGE = 'fieldname ' + @RETMESSAGE -- prefix with field name RAISERROR (@RETMESSAGE, 16, 1) ROLLBACK TRANSACTION RETURNAll validation errors result in a full transaction rollback. There is no partial save.
11. Trigger File Index
Core Vessel Tables
| Table | Trigger(s) | Description | Doc |
|---|---|---|---|
| ABSD_OVGE | ABSD_OVGE_Update, ShipDel | Vessel general: callsign, official no., navigation aids, DOB, publication status, builder | 10b |
| ABSD_OVNA | ABSD_OVNA_Update, ABSD_OVNA_DELETE | Vessel names: name history, type sync, flag copy | 10b |
| ABSD_OVTY | ABSD_OVTY_Update, ABSD_OVTY_DELETE | Vessel type: 20-byte type code, star rating, OVTY cross-checks | 10b |
| ABSD_OVCA | ABSD_OVCA_Update | Casualty annotation: F14_EFD, F14_NOTES | 10b |
| ABSD_OVCS | ABSD_OVCS_Update | Classification society codes (CBUB1 FLDI='57' lookup) | 10b |
| ABSD_OVDOC | ABSD_OVDOC_Update, ABSD_OVDOC_DELETE | DOC issuing company: OWCODE, SHIP_SEARCH DOCCODE/DOCCOMPANY/DOCCOD | 10b |
| ABSD_OVSMC | ABSD_OVSMC_Update | SMC issuing company: OWCODE annotation | 10b |
Status & Flag History Tables
| Table | Trigger(s) | Description | Doc |
|---|---|---|---|
| ABSD_HIST | ABSD_HIST_Update, ABSD_HIST_DELETE | Status history: A02_STS, SMC/DOC auto-create, NB email, FSW pages, quarter markers, OWNC/OWST rebuild, thruster status sync | 10c |
| ABSD_HIFL | ABSD_HIFL_Update, ABSD_HIFL_DELETE | Flag history: B04_CNTY, port, EFD propagation to OVGE, registration field nulling on flag change | 10c |
| ABSD_HILC | ABSD_HILC_Update, ABSD_HILC_DELETE | LR class: LRCL_IND, classsearch update, spClassNotationMiningAdd/Delete | 10c |
| ABSD_HILE | ABSD_HILE_Update, ABSD_HILE_DELETE | External dimensions: LOA/LBP/REG validation via spValidateLengths; LOA waterfall to SHIP_SEARCH | 10c |
Ownership History Tables
| Table | Trigger(s) | Description | Doc |
|---|---|---|---|
| ABSD_HIOW | ABSD_HIOW_Update, ABSD_HIOW_DELETE | Registered owner history: H01_OWNER_CODE, OWNC rebuild, OWST recompute | 10d |
| ABSD_HIMA | ABSD_HIMA_Update, ABSD_HIMA_DELETE | Ship manager history: H02_MANAGER, OWNC rebuild, OWST recompute | 10d |
| ABSD_HISM | HISMUpdate, ABSD_HISM_DELETE | Ship management company history | 10d |
| ABSD_HIOP | HIOP_Trigger, ABSD_HIOP_DELETE | Operator history | 10d |
| ABSD_HIPP | ABSD_HIPP_Update, ABSD_HIPP_DELETE | P&I club history | 10d |
| ABSD_HIGBO | ABSD_HIGBO_Update, GBO_UPD | Beneficial owner history | 10d |
| ABSD_HITP | ABSD_HITP_Update, ABSD_HITP_DELETE | Technical manager history | 10d |
| ABSD_HITL | ABSD_HITL_Update, ABSD_HITL_DELETE | Time charterer history | 10d |
| ABSD_HIDR | ABSD_HIDR_Update, ABSD_HIDR_DELETE | Draft/deadweight: C07_DL cross-checks | 10d |
Machinery Tables
| Table | Trigger(s) | Description | Doc |
|---|---|---|---|
| ABSD_HIMO | ABSD_HIMO_Update, ABSD_HIMO_DELETE | Main engine: status sync, machinery validation | 10e |
| ABSD_HIMT | ABSD_HIMT_Update, ABSD_HIMT_DELETE | Main engine type | 10e |
| ABSD_HIGE | ABSD_HIGE_Update, ABSD_HIGE_DELETE | Generator engines | 10e |
| ABSD_MATH | ABSD_MATH_Update, ABSD_MATH_DELETE | Thruster: e95_thst_stat status sync | 10e |
| ABSD_MAAU | ABSD_MAAU_Update, ABSD_MAAU_DELETE | Auxiliary engine | 10e |
| ABSD_AUX_ENG_MAN | ABSD_AUX_ENG_MAN_Update, _DELETE | Aux engine manufacturer | 10e |
| ABSD_MABO/MABU/MAEM1-3/MAGR/MAPR/MASP/MAST | Multiple | Various machinery sub-tables | 10e |
FU* Cargo & Capacity Tables
| Table Range | Description | Doc |
|---|---|---|
| ABSD_FUCA1/2, FUCO1/2, FUDI1-4, FUDO1/2 | Cargo hold dimensions, types | 10f |
| ABSD_FUGE, FUHA1/2, FULC, FULI1-3 | Gear, hatches, liquids, liquid capacity | 10f |
| ABSD_FUOF, FURO1/2, FUSF/FUSF2, FUSP, FUST1/2 | Oil fuel, RO-RO, special features, stability | 10f |
| ABSD_FUTO, FUUN1/2 | Tons, units | 10f |
Structure Tables
| Table | Description | Doc |
|---|---|---|
| ABSD_STSE | Steel sections: C01_EFD cross-checks for OVNA, keel laid date | 10g |
| ABSD_STGE, STDE, STKE, STST, STAL | Structure geometry, deck, keel, stern, other structural | 10g |
| ABSD_HIBR, HIPR, HIBBC, HIPC, HIPM, HIPS, HIPU, HISE | Breadth, propeller, bow thruster, pumps, service | 10g |
| ABSD_HIFC1/2 | Fire class | 10g |
| ABSD_HIDE | Deadweight table | 10g |
| ABSD_HIDR | Draft/draught | 10g |
| ABSD_TANKER | Tanker-specific fields | 10g |
| ABSD_LRSC/LRSU/LRWD/LRGE/LREQ1-4/LRHI/LRHN | LR survey records | 10g |
| ABSD_HRXR | Hazardous materials cross-reference | 10g |
Casualty Tables
| Table | Description | Doc |
|---|---|---|
| ABSD_CADI | Casualty detail (main) | 10h |
| ABSD_CACO, CACT, CAGC, CAGE1/2, CALA, CAPO, CAPR | Casualty sub-tables | 10h |
| ABSD_HAAD, HACO | Hazard/accident sub-tables | 10h |
Company / Owner Tables
| Table | Description | Doc |
|---|---|---|
| ABSD_OWGE | Owner/company general: OWGE_Update, OWGE_DELETE | 10i |
| ABSD_OWNA, OWAD1/2, OWAN, OWCA, OWCN, OWCO, OWDC, OWIN, OWNC, OWNER_EXCEPTIONS, OWSH, OWST, OWXR | Address, name, contact, ship relationships | 10i |
Codebook Tables
| Table | Description | Doc |
|---|---|---|
| ABSD_CBUB1 | Universal codebook: Insert + Update triggers maintain CBUB1 integrity | 10j |
| ABSD_CBCA, CBCONOTE, CBCOROOT, CBFT, CBPPNAME, CBPPROOT, CBPPSTRE | Various codebook tables | 10j |
| tblStatCode5, tblFlexible_Bucket, tblFlexible_Bucket_CB, tblStars | Configuration/lookup tables | 10j |
SUPPLEMENTAL_ABSD_* Tables
| Table | Description | Doc |
|---|---|---|
| SUPPLEMENTAL_ABSD_OVGE | MMSI, FISHNO20, additional vessel general fields | 10k |
| SUPPLEMENTAL_ABSD_OVTY | STAT5CODE for type validation | 10k |
| SUPPLEMENTAL_ABSD_HIFL | CALLSIGN mirror, MMSI | 10k |
| SUPPLEMENTAL_ABSD_HIMA | Manager supplemental fields | 10k |
| SUPPLEMENTAL_ABSD_NCON | NB email indicator, RELEASEDATE, COMMQTR, LQTR, CQTR | 10k |
| SUPPLEMENTAL_ABSD_STSE | Completion date supplemental | 10k |
| SUPPLEMENTAL_ABSD_STDE, CADI, CBCOROOT, CBCY, FUDI1/2, FUGE, FUUN1, HIFC1, HITL | Various supplemental tables | 10k |
Misc & Annotation Tables
| Table | Description | Doc |
|---|---|---|
| ABSD_NCON, NCON_CONFI, NCNAME, NCOWNER, NCSHIP | Newcon vessel/company flags | 10l |
| ABSD_SALE | Sale/scrap records: tblFSWSalesPage maintenance | 10l |
| ABSD_PandI | P&I insurance: ABSD_PandI_Update | 10l |
| ABSD_PARALLEL_REG | Parallel registry records | 10l |
| ABSD_CLASS, FOR_CLASS | Classification records | 10l |
| ABSD_SPAN, SPTM, SUBSHIP, SUNDRY, FREEFORM, FABNOTE, PREFAB, PLAN | Miscellaneous vessel sub-tables | 10l |
| tblChanges, tblAnnotationLogGeneral | Annotation table triggers (self-maintenance) | 10l |
| ABSD_CHARTERER, QUALSHIP, THIRDPARTY_IDENTITY, PERSONNEL | Charterer, qualification, personnel | 10l |
| ABSD_SOURCE, BUILDERS, HITM, HITS, HITT, FTME, FTNT, FTQY | Source, builder, type, survey tables | 10l |
| ofac_sdn2, QH_ShipsOwner_Data, tblFairplayCountryUniqueIMO, tblFSWNBPage, tblFSWSalesPage | External data / integration tables | 10l |
12. Documentation Files
| File | Contents |
|---|---|
| 10a | This file — architecture, universal patterns, guard tables, J06, SEQNO model, annotation system, index |
| 10b | OVGE, OVNA, OVTY, OVCA, OVCS, OVDOC, OVSMC — vessel core identity triggers with all business rules |
| 10c | HIST, HIFL, HILC, HILE — status, flag, class, dimensions triggers |
| 10d | HIOW, HIMA, HISM, HIOP, HIPP, HIGBO, HITP, HITL, HIDR — ownership chain triggers |
| 10e | HIMO, HIMT, HIGE, MATH, MAAU, and MA* series — machinery triggers |
| 10f | FU* series — cargo capacity and hold triggers |
| 10g | ST*, LR*, HIBR, HIDR, HIPR, TANKER and structural triggers |
| 10h | CA* series — casualty triggers |
| 10i | OW* series — company/owner triggers |
| 10j | CB*, tbl* — codebook and lookup table triggers |
| 10k | SUPPLEMENTAL_ABSD_* — all supplemental table triggers |
| 10l | Miscellaneous: NCON, SALE, annotation tables, external, integration |