Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.appliedaifoundation.org/llms.txt

Use this file to discover all available pages before exploring further.

Every spare on board started life as a Purchase Requisition. Between PR and the spare being installed there are seven or eight stages — approval, vendor quote, PO release, supplier production, freight booking, forwarder consolidation, port delivery, vessel receipt. A defect that’s been “awaiting parts” for ninety days is almost always stuck somewhere in that chain. The Procurement Surveillance pipeline does two things: it tracks every active PO through the funnel, and it surfaces the structural problems — aged POs, supplier underperformance, budget overrun — that systematically slow the funnel down.

Where the data comes from

SourceWhat it provides
Vessel ERP (procurement module)PR, PO, approval chain, supplier, invoice, payment status
Freight forwarder integrationsConsignment tracking, ETA, customs status
ERP supplier masterApproval status, contracts, payment terms
Currency reference feedsFX rates for invoice reconciliation
Email correspondence (chasing)Supplier acknowledgements, ETA updates, dispute threads
Procurement data is mostly ERP-internal. The forwarder layer adds external visibility for the in-transit stage; the email pipeline (Email Surveillance) provides the chase-and-response thread for any PO sitting beyond its stage threshold.

The funnel

   PR raised  ──▶  PO approved  ──▶  Supplier confirms  ──▶
   Goods ready  ──▶  Forwarder picks up  ──▶  Vessel receives  ──▶
   Invoice cleared
Each transition has a stage threshold:
StageThresholdWhat “stuck” means
PR → PO approval5 daysProbably an authority-limit or budget-code issue
PO → supplier confirmation3 daysSupplier didn’t acknowledge — chase needed
Supplier → goods readyper quoted lead-timeProduction / stock issue
Goods → forwarder pickup14 daysForwarder consolidation gap
Forwarder → vesselper route ETAIn transit
Vessel receipt → invoice clearance7 daysDocumentation / accounting
The pipeline computes time-in-stage for every active PO: Tstage(PO)=texittenterT_\text{stage}(\text{PO}) = t_\text{exit} - t_\text{enter} A PO sitting beyond the stage threshold is flagged. The aggregate of stuck POs across stages is the funnel-health view.

Three views, three questions

View 1 — Forwarders backlog

POs with forwarders that haven’t yet reached the vessel:
“What’s in transit, when does it arrive, and is anything safety-critical on board?”
The view sorts by ETA and surfaces safety-critical items at the top regardless of ETA. A safety-critical spare delayed by a week is a different conversation than a routine stores order delayed by a week.

View 2 — Open POs older than 180 days

This is the structural-problem view:
“What is so old that something is fundamentally wrong with how this PO is being handled?”
A PO older than 180 days is rarely just “still in transit”. It’s almost always one of:
  • Cancelled but not closed — the actual order was cancelled, but the PO record never got updated
  • Supplier abandoned — supplier stopped responding, no follow-up
  • Wrong vessel — PO raised against the wrong vessel and never noticed
  • Partial delivery dispute — some items delivered, dispute on the rest, PO held open
  • Forgotten — nothing actually happened
This view is the highest-leverage list — most items can be closed with a single phone call, and the closure rate jumps immediately.

View 3 — Purchase log

End-to-end log from PR raise to invoice clearance:
“For audit and analytics — when did each thing happen?”
This is the structured record the other two views aggregate from. A reviewer rarely reads it in full, but it’s the source of truth when there’s a question about a specific PO’s history.

Supplier scorecards

Per supplier, the pipeline tracks: On-time %=Non-timeNtotal×100\text{On-time \%} = \frac{N_\text{on-time}}{N_\text{total}} \times 100 \bar{T}_\text{lead} = \frac{1}{N}\sum_{i=1}^{N} (t_\text{delivered}_i - t_\text{ordered}_i) Plus quality issues per shipment and recent escalations. A scorecard below 70% on-time triggers a renegotiation flag. The supplier-quality dimension matters because the same supplier delivering late on five vessels is a fleet-wide problem, not a per-vessel one. The pipeline aggregates supplier metrics across the fleet.

Budget compliance

Per category (technical / stores / lube / victualling / repairs / etc.): Variance %=ActualBudgetBudget×100\text{Variance \%} = \frac{\text{Actual} - \text{Budget}}{\text{Budget}} \times 100 Variance over 10% is flagged; over 25% triggers escalation. Cross-references the financial pipeline for the year-end forecast view.

Safety-critical pipeline

Items tagged safety-critical get a separate timeline. Any delay against ETA is treated as critical regardless of magnitude. The pipeline assembles a daily list:
ItemVesselSupplierStageDays in stageETA
Lifeboat winch motorPOSUNSchat-HardingForwarder222026-05-12
Fire-pump impellerOCEANWärtsiläGoods ready3TBD
EEBD canister x4NEXUSDragerVessel receipt1delivered, awaiting receipt
The list is short by design — most safety-critical items move quickly. Anything sitting on this list more than a few days is escalation-worthy.

Implementation reference

The 180-day filter, condensed:
# Filter POs older than 180 days that are still open
threshold_date = datetime.utcnow() - timedelta(days=180)

aged_pos = po_collection.aggregate([
    {"$match": {
        "imo": {"$in": active_imos},
        "status": {"$nin": ["CLOSED", "CANCELLED", "INVOICED"]},
        "prRaisedDate": {"$lte": threshold_date}
    }},
    {"$addFields": {
        "ageDays": {
            "$divide": [
                {"$subtract": [datetime.utcnow(), "$prRaisedDate"]},
                1000 * 60 * 60 * 24
            ]
        }
    }},
    {"$sort": {"ageDays": -1}},
])
The “with forwarders” view joins POs with the forwarder-tracking collection on the consignment number, then surfaces ETA and safety-critical flag. The full purchase log does the same but across every stage transition.

Worked example: a vessel-level sweep

MV POSUN, weekly procurement review:
ViewCountNotable
Forwarders backlog182 safety-critical (one delayed 22 days vs ETA)
Open > 180 days116 likely “cancelled but not closed”, 3 supplier abandoned, 2 partial-delivery disputes
Aged at approval stage4Awaiting authority approval > 7 days
Budget varianceTechnical +18%, Stores +6%Technical category over threshold
Supplier scorecards (failing)2Vendor X 62% on-time, Vendor Y 71% on-time
Verdict: HIGH on the technical-budget overrun + the safety-critical lifeboat-winch delay. The pipeline:
  1. Flags the lifeboat-winch motor as the immediate action — supplier and forwarder need a chase today.
  2. Generates the 11-PO close-out list with predicted disposition for each.
  3. Routes the budget overrun to the financial pipeline for variance attribution and year-end forecast.
  4. Flags Vendor X for renegotiation review.

Closure-rate trend

Same logic as the defects pipeline: Closure rate=NPOs closed in periodNopen at start+Nopened in period\text{Closure rate} = \frac{N_\text{POs closed in period}}{N_\text{open at start} + N_\text{opened in period}} A falling closure rate combined with rising aged-PO count is the structural drift indicator.

What the senior review contains

  1. Headline — open PO count, value, aged count, closure rate, safety-critical pipeline status.
  2. Safety-critical list — every safety-critical PO not yet on board, with stage and ETA.
  3. Aged POs — close-out candidates with predicted disposition.
  4. Forwarders backlog — what’s in transit and when it arrives.
  5. Budget compliance — per-category variance, with cross-link to financial review.
  6. Supplier scorecards — failing suppliers with renegotiation recommendation.
  7. Closure-rate trend — chart and verdict.
  8. Recommendations — prioritised by leverage; close-outs and chase-ups separated from supplier renegotiation.
  9. Escalation decision — to whom, and why.

Escalation triggers

TriggerSeverity
Safety-critical item delayed against ETACRITICAL
Budget overrun above 25% in any categoryHIGH
Supplier on-time below 70% with active POsHIGH
PO awaiting approval more than 14 daysHIGH
Stuck delivery more than 30 days with no updateCRITICAL
Aged-PO count rising for 2+ consecutive periodsHIGH

Why old POs accumulate

A PO that should have been closed three months ago is rarely an in-flight issue. Most are administrative — the goods arrived, were installed, the engineer logged the spare, and nobody updated the PO record. The pipeline’s 180-day filter exists because below 90 days the noise is too high (legitimately in-transit POs are common); below 180 the structural problems are isolated; above 180, the structural problems dominate.
The fastest improvement in procurement metrics on most vessels is closing aged POs. They’re already done; they just need to be marked done. A 30-minute review with the chief engineer typically clears half the backlog.

References

Templates: purchase-management

Purchase-management suite — POs with forwarders, open POs older than 180 days, and the end-to-end purchase log.

Related: Financial

Budget variance attribution and year-end forecast — same numbers, different audience.

Related: Defects

“Awaiting parts” defects unblock when the corresponding PO advances — defects and procurement compose.

Related: PMS

Critical-spare stockouts surface in PMS Summary and drive procurement priority.