Media > AI活用ユースケース > 品質管理 > 船会社が英文の燃料受領書(BDN)と燃料の分析報告書を読み取り、性状の値を燃料台帳に転記して、注文した規格との差と硫黄分の規制値の超過を拾う

船会社が英文の燃料受領書(BDN)と燃料の分析報告書を読み取り、性状の値を燃料台帳に転記して、注文した規格との差と硫黄分の規制値の超過を拾う

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

補油のたびに届く英文の燃料受領書(BDN)と、試料を分析した英文の分析報告書を読み取り、性状の値を燃料台帳に写します。受領書の申告と分析値の差、注文した規格の上限を超える項目、硫黄分の規制値の超過を拾って担当者に回します。

サマリー
AIサービス
AWS Textract/Azure AI/Google Document AI
連携・自動化
Python
対象業界
商社/物流
対象部門
品質管理/購買
対象業務
データ入力・転記/内容確認・チェック
主な課題
入力作業が多い/判断に時間がかかる/確認ミスが多い
AIで行う処理
読み取り(OCR)
主な効果
入力漏れ削減/判断支援/工数削減
導入難易度
★★★★☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
必須
現在工数
30h/月
AI導入後
9h/月
想定削減
70%
年間削減
252h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 本船から届いた受領書の写しを開き、船名・港・日付・油種・数量・密度・硫黄分・試料の封印番号を燃料台帳に写す
  2. 数日後に届いた分析報告書を開き、どの補油の試料かを封印番号と船名で探し当てる
  3. 分析報告書の表から、項目ごとの結果を燃料台帳の分析の欄に写す
  4. 注文のメールを探し、指定した規格の版と等級を確かめ、その等級の上限を規格表から探す
  5. 項目ごとに分析値と上限を見比べ、超えている項目に印を付ける
  6. 受領書の密度・硫黄分と分析値の差を計算する
  7. その船の航路と排ガス洗浄装置の有無から、硫黄分の規制値に収まるかを見る
  8. 疑いがあれば技術部と運航管理に相談し、本船への連絡と供給業者への申し立てを検討する
導入後(After)
  1. 人本船から届いた受領書と、分析機関から届いた報告書を、ファイル名に船名と補油日を付けて受付フォルダに置く
  2. 自動保存をきっかけに処理が動き、形式・サイズ・文字の大きさを確かめる
  3. 自動AWS Textract が書類を読み、質問への答え・表・キーと値・全文を信頼度つきで返す
  4. 自動試料の封印番号と船名・補油日で、受領書と分析報告書を結び付ける
  5. 自動分析の表の項目名を自社の項目表にそろえ、単位と書き方をそろえる
  6. 自動注文の行から規格の版と等級を引き、自社の上限表で項目ごとに照らす
  7. 自動受領書の申告と分析値の差、硫黄分と使う海域の規制値を規則で判定する
  8. 自動燃料台帳に「確認待ち」の行を作り、判定と根拠を付け、上限を超えた項目があれば担当者に即時に知らせる
  9. 人担当者が、超過・差・読み取りの怪しい項目が出た行だけを開き、書類の画像で確かめる
  10. 人超過があれば技術部・運航管理と相談し、本船への連絡と供給業者への申し立てを決める
各工程の詳しい説明を読む
  1. 本船から届いた受領書の写しを開き、船名・港・日付・油種・数量・密度・硫黄分・試料の封印番号を燃料台帳に写す
  2. 数日後に届いた分析報告書を開き、どの補油の試料かを封印番号と船名で探し当てる
  3. 分析報告書の表から、項目ごとの結果を燃料台帳の分析の欄に写す
  4. 注文のメールを探し、指定した規格の版と等級を確かめ、その等級の上限を規格表から探す
  5. 項目ごとに分析値と上限を見比べ、超えている項目に印を付ける
  6. 受領書の密度・硫黄分と分析値の差を計算する
  7. その船の航路と排ガス洗浄装置の有無から、硫黄分の規制値に収まるかを見る
  8. 疑いがあれば技術部と運航管理に相談し、本船への連絡と供給業者への申し立てを検討する

(a)分析報告書の転記が重い。 1通に十数〜数十の項目があり、単位や小数点の位置を間違えずに写すだけで時間がかかります。「0.47」を「0.74」と写す誤りは、台帳の上では目立ちません。

(b)規格の版と上限を探すのに時間がかかる。 注文で指定した版と等級はメールの中にあり、上限は規格表の中にあります。分析報告書の「規格の上限」の欄を写して済ませると、注文と違う版の上限で判定することになります。

(c)規格外に気づくのが遅れる。 2番から7番を後回しにすると、本船が燃料を使い始めてから規格外が分かります。

(d)供給業者ごとの傾向が見えない。 台帳の分析の欄は埋まっていたりいなかったりで、同じ供給業者が同じ項目で上限すれすれを続けていても、誰も気づきません。

  1. 【人】 本船から届いた受領書と、分析機関から届いた報告書を、ファイル名に船名と補油日を付けて受付フォルダに置く
  2. 【自動】 保存をきっかけに処理が動き、形式・サイズ・文字の大きさを確かめる
  3. 【自動】 AWS Textract が書類を読み、質問への答え・表・キーと値・全文を信頼度つきで返す
  4. 【自動】 試料の封印番号と船名・補油日で、受領書と分析報告書を結び付ける
  5. 【自動】 分析の表の項目名を自社の項目表にそろえ、単位と書き方をそろえる
  6. 【自動】 注文の行から規格の版と等級を引き、自社の上限表で項目ごとに照らす
  7. 【自動】 受領書の申告と分析値の差、硫黄分と使う海域の規制値を規則で判定する
  8. 【自動】 燃料台帳に「確認待ち」の行を作り、判定と根拠を付け、上限を超えた項目があれば担当者に即時に知らせる
  9. 【人】 担当者が、超過・差・読み取りの怪しい項目が出た行だけを開き、書類の画像で確かめる
  10. 【人】 超過があれば技術部・運航管理と相談し、本船への連絡と供給業者への申し立てを決める

9番目が、この設計の分かれ目です。 人が見るのは、上限を超えた項目、申告と分析の差が大きい項目、読み取りに自信が無い項目がある行だけです。

6番目で分析報告書の判定の欄を使わないのも、意図してのことです。 照らす基準は注文したときの版と等級で、分析機関の欄の値は参考として並べるだけにします。

02今回想定するシステム構成

構成図
受領書(本船から)/分析報告書(分析機関から)
   │  担当者がファイル名に船名と補油日を付ける
   ▼【トリガー】受付フォルダ(Amazon S3)への保存
AWS Lambda
   ├──▶ 形式・サイズ・解像度の確認
   ▼
AWS Textract(StartDocumentAnalysis:QUERIES・TABLES・FORMS)
   │   質問への答え・表・キーと値・全文を信頼度つきで返す
   ▼  完了の通知(Amazon SNS)
AWS Lambda(Python)
   │   ① 封印番号で受領書と分析報告書を結び付ける
   │   ② 項目名・単位をそろえる
   │   ③ 注文の版と等級の上限、規制値、申告値と照らす
   ▼
燃料台帳に「確認待ち」の行(判定と根拠つき)
   ▼
【人が超過・差・読み取り不安のものだけ確認】
   └──▶ 本船への連絡/申し立ての検討/台帳の確定
役割想定する製品代替候補
OCRAWS Textract(AnalyzeDocument の非同期処理。QUERIES・TABLES・FORMS)Azure AI Document Intelligence、Google Document AI
差異計算注文の規格の上限・規制値・受領書の申告値との照合(Python。AWS Lambda で動かす)─
連携AWS Lambda(S3 への保存を起点に読み取りを始め、結果を台帳へ書く)Amazon EventBridge
保管Amazon S3(書類と読み取り結果)社内のファイルサーバー
通知Amazon SNS(読み取りの完了と、超過の知らせ)Amazon SQS

燃料台帳と注文の記録は、新しく足すものではありません。 台帳に分析の欄と判定の欄を足し、注文のたびに「規格の版と等級」を台帳の注文の行に書く運用に変えます。 これが無いと、照らす基準がありません。

新しく作るのは、自社の上限表と項目表の2つです。 上限表は「規格の版・等級・項目ごとの上限」で、技術部が規格の原本から作ります。項目表は「Sulphur」「Sulfur」「S」のような分析機関ごとの言い方を自社の項目にそろえる表です。

土台になるのは AWS Textract の文書分析です。 全文に加えて、キーと値、表、「質問(Queries)」への答えを返します。表はセル・結合セル・列見出し・表の題と脚注まで分けて返るため、分析報告書の「項目名・単位・結果・上限」の表を行ごとに取り出せます。 一方で、質問による抽出と手書きの認識は英語だけで、日本語の書類は読めません。

03どうやって実装するのか

Step1

処理の起点を決める

受付フォルダ(Amazon S3)に書類が保存されたことを起点にします。 分析報告書は届いた日に照合しないと、本船が燃料を使い始めてしまいます。ガイダンスも、可能であれば分析が終わるまで燃料を使わないことを勧めています。 定時の実行ではなく、届いたその場で動かします。

ファイルは担当者が <船名>_<補油日>_BDN.pdf、<船名>_<補油日>_LAB.pdf の形にして置きます。 末尾で書類の種類を分けます。分析報告書だけが先に届いても止めず、受領書が届いた時点で結び付けをやり直します。

S3 への保存を AWS Lambda が受け、StartDocumentAnalysis を呼びます。分析報告書は2〜3ページのことがあるため、非同期にそろえます。 ClientRequestToken にファイルから作った値を入れると、二度置いても同じ JobId が返り、二重に読みません。 完了は Amazon SNS に届き、GetDocumentAnalysis で結果を取ります。結果は既定で7日間しか取れないため、すぐ S3 に保存します。

Step2

入力データを集める

データ中身取得元
燃料受領書船名・港・日付・油種・数量・密度・硫黄分・試料の封印番号受付フォルダ(S3)
分析報告書試料の封印番号・船名・採取日・分析機関・項目ごとの結果の表受付フォルダ(S3)
注文の行船名・補油の予定日・供給業者・油種・規格の版と等級・硫黄分の上限燃料台帳の注文の行
自社の上限表規格の版・等級・項目ごとの上限と下限技術部が規格の原本から作る表
項目表分析機関ごとの項目名・単位の言い方と、自社の項目の対応燃料品質の担当が育てる表
船の情報排ガス洗浄装置の有無、次の航海で通る排出規制海域運航管理の船舶一覧と航海計画
判定の決まり申告と分析の差を「差あり」とする幅、上限の近くを「要注意」とする幅燃料調達チームと技術部が決めた表

質を決めるのは、上限表と項目表です。 上限表が無ければ照らす基準がなく、項目表が無ければ「Sulfur」と「Sulphur」が別の項目になります。項目表は最初は空で始め、確認のたびに1行ずつ足していきます。

上限の近くを「要注意」とする幅を持つのは、試験には精度があるからです。 ガイダンスは、燃料の試験の結果が誤っている場合があり、ISO 4259 の精度の範囲内でも規格外と判定されることがあると注意しています。幅の値は技術部が決めます。

Step3

データの取得方法を決める

読み取りは StartDocumentAnalysis に FeatureTypes として QUERIES、TABLES、FORMS を指定して行います。全文の行と単語は、指定した機能にかかわらず返ります。

取るものどの機能で何に使うか
質問への答えQUERIES封印番号・船名・日付・分析機関など、報告書の頭にある項目
表TABLES分析の結果の表。行ごとに項目名・単位・結果・上限を取る
キーと値FORMS受領書の「Density at 15°C」のように見出しと値が並ぶ欄
全文の行と単語常に返る質問の答えの位置の確かめと、「Off-spec」などの語を探す材料

分析の結果は質問ではなく表で取ります。 項目が数十あり、1ページ30問という質問の上限に収まらないうえ、表なら列見出しで「結果」と「上限」の列を分けて取れるからです。 表の CELL には行と列の位置と列見出しの印が付くので、列見出しが「Result」の列を結果、「Limit」「Max」の列を報告書の上限として読みます。

質問は対象のページを指定しないと、既定で1ページ目にしか当たりません。 分析報告書の封印番号は1ページ目にあることが多いですが、**2ページ目の末尾に署名と封印番号を書く書式もあるため、Pages: ["*"] を付けます。**

Step4

AIへ渡す前に整形する

  1. 形式の確認 … JPEG、PNG、PDF、TIFF であること。XFA形式のPDFは扱えません
  2. パスワードの確認 … PDFはパスワード保護不可です。分析機関のポータルから落とした報告書にパスワードが付いていれば、解除したものを取り直します
  3. サイズと寸法の確認 … 非同期の処理で JPEG と PNG は10MB、PDF と TIFF は500MB・3,000ページまで、画像はどの辺も10,000ピクセル以下です。本船が撮った受領書の写真は縮小します
  4. 文字の大きさの確認 … 文字の高さが15ピクセル(150 DPIで8ポイント相当)を下回ると検出されません。分析の表は小さな字なので、縮小しすぎません
  5. 書類の種類の確認 … ファイル名の末尾と、全文の「Bunker Delivery Note」「Test Report」「Certificate of Analysis」などの語が合うかを見ます
  6. 重複の確認 … 同じ封印番号の分析報告書が既にあれば止めます。再分析の報告書のこともあるので、差し替えか重複かを担当者に聞きます
Step5

AIに処理させる

させるのは、2つの書類から決まった項目の値を読み取り、根拠の位置と信頼度を添えることだけです。 結び付けと照合は、読み取りの後にプログラムの規則が行います。

読み取る項目どの書類から読み取れないときの扱い
試料の封印番号受領書・分析報告書の両方見つからなければ not_found。結び付けができない
船名・補油日・港両方合わなければ mismatch
油種・等級受領書(報告書にも書かれていれば両方)読めなければ unreadable
密度・硫黄分受領書の申告値単位が読めなければ unit_unknown
分析の結果分析報告書の表の各行項目表に無い項目名は unmapped
報告書の上限と判定分析報告書の表の上限の列と判定の欄参考として残すだけ

封印番号を両方の書類から独立して読むのが、この表でいちばん大事なところです。 船名と補油日だけで結び付けると、同じ日に2種類の燃料を補油した場合や、再分析の報告書が届いた場合に、別の試料の結果を結び付けてしまいます。

させないこと理由
規格や規制に適合するかの結論版・等級・海域・装置で決まる。規則で判定し、人が確かめる
燃料を使うか、申し立てるかの判断本船の安全と供給業者との関係に関わる。人が決める
読めなかった値の補完受領書の申告値や前回の分析値で埋めない
報告書の上限の採用版が注文と同じとは限らない。上限は自社の表から引く
Step6

指示内容を固定する

AWS Textract への指示は、英語の質問の一覧です。分析報告書には次の質問を当てます。

QueriesConfig:
  Queries:
    - Text: "What is the sample seal number?"
      Alias: SEAL_NO
      Pages: ["*"]
    - Text: "What is the name of the vessel?"
      Alias: VESSEL
      Pages: ["*"]
    - Text: "What is the date of sampling or bunkering?"
      Alias: SAMPLE_DATE
      Pages: ["*"]
    - Text: "What is the port of bunkering?"
      Alias: PORT
      Pages: ["*"]
    - Text: "What is the fuel grade?"
      Alias: GRADE
      Pages: ["*"]
    - Text: "Which specification and edition was used for evaluation?"
      Alias: SPEC_USED
      Pages: ["*"]
    - Text: "What is the name of the laboratory?"
      Alias: LAB
      Pages: ["*"]

受領書には、船名・港・日付・供給業者・油種・数量・密度・硫黄分・封印番号の9問を当てます。SPEC_USED は、分析機関がどの版で判定したかを知るための質問です。 注文の版と違えば、報告書の判定の欄が当てにならないことが分かります。

受け取った答えと表に対して、プログラムの側で次の決まりを当てます。これが実質的な「指示」です。

【答えと表の扱いの決まり】
1. 答えが空の項目は not_found とする。受領書や前回の値で埋めない。
2. 信頼度が決めた値を下回る項目は unreadable とし、値は参考として残す。
3. 封印番号は英数字と記号をそのまま比べる。1文字でも違えば結び付けず、
   船名と補油日が合っていても link_status を unmatched とする。
4. 表は列見出しで列を決める。「Result」を結果、「Limit」「Max」「Min」を
   報告書の上限・下限、「Unit」を単位とする。見出しが無い表は
   cannot_parse とし、列の位置で決めない。
5. 項目名は項目表で自社の項目にそろえる。表に無い名前は unmapped とし、
   似た名前に寄せない。
6. 結果に「<」「>」が付いた値(例:<0.10)は、記号と数値を分けて残す。
   記号を外して数値として比べない。
7. 単位を自社の単位にそろえる。密度は kg/m3、硫黄分は % m/m を基準とし、
   換算の決まりに無い単位は unit_unknown とする。
8. 上限との比較は自社の上限表の値で行う。報告書の上限の列は参考として並べ、
   比べる相手にしない。
9. 上限との差が「要注意」の幅の中なら near_limit とし、
   超えていれば over_limit とする。

3番目と8番目が、この構成の罠です。 封印番号が合わないのに船名と日付で結び付けると、別の試料の分析値で台帳が埋まります。 報告書の上限で比べると、注文と違う版で「適合」になります。

Step7

出力形式を固定する

結び付けと照合の結果を、補油1回ごとに次の形のJSONにまとめて台帳へ渡します。

{
  "bunkering_id": "VESSELB_2026-10-08",
  "order_ref": "BO-2026-1187",
  "link_status": "linked | waiting_lab | unmatched",
  "seal_no": { "bdn": "", "lab": "" },
  "spec": { "ordered": "ISO 8217:2017 RMG 380", "lab_used": "" },
  "results": [
    { "item": "sulphur", "lab_name": "Sulphur", "unit": "% m/m",
      "lab_value": 0.47, "qualifier": "", "bdn_value": 0.45,
      "limit_own": 0.50, "limit_lab": 0.50, "confidence": 0, "page": 1,
      "status": "within | near_limit | over_limit | unmapped | unreadable" }
  ],
  "declared_vs_lab": [
    { "item": "density_15c", "bdn": 0, "lab": 0, "diff": 0,
      "result": "within | over_tolerance | cannot_check" }
  ],
  "sulphur_check": { "basis": "global | eca | scrubber",
    "result": "within | over_limit | cannot_check" },
  "verdict": "confirm | review | urgent"
}

1つ目の理由は、results に自社の上限と報告書の上限を並べて持てることです。 2つがずれていれば、版の違いがその場で見えます。

2つ目は、link_status で結び付けの状態を独立して持てることです。 分析報告書がまだ届いていない補油は waiting_lab のまま台帳に置き、何日待っているかを数えられます。

verdict条件担当者の扱い
confirm結び付けが linked、全項目が within、申告と分析の差が幅の内一覧で流し見て確定
reviewnear_limit・unmapped・unreadable・unit_unknown・unmatched のどれかがある書類の画像で確かめる
urgentover_limit が1つでもある、または硫黄分が規制値を超える当日中に技術部・運航管理と相談

urgent を分けるのは、本船が燃料を使い始めている可能性があるからです。

Step8

システムへ連携する

つなぎ先方式内容
受付フォルダ(S3)保存の通知で Lambda を起動受領書と分析報告書の受け付け
AWS TextractStartDocumentAnalysis と GetDocumentAnalysis書類の読み取り
燃料台帳読み取りと、「確認待ち」の行の書き込み注文の行を引き、判定つきの行を作る
上限表・項目表・船舶一覧読み取りのみ上限・項目名・海域を引く
担当者への連絡メールまたはチャットurgent の行だけを即時に知らせる

燃料台帳へ書くのは「確認待ち」の行まで、本船にも供給業者にも何も送りません。 本船に燃料の使用を控えるよう伝えるか、供給業者に申し立てるかは、技術部と運航管理が決めて人が連絡します。 読み違い1つで本船の運航が止まる経路を作らないためです。

Step9

人が確認する

人が開くのは review と urgent の行だけです。 全件を開く設計にすると、第10章の9.0時間には収まりません。

  1. urgent を先に見る … 分析報告書の画像で、超えた項目の結果と単位を自分の目で読み直します。読み取りの誤りで urgent になっていないかを最初に確かめます
  2. 版と等級を確かめる … 注文の版と分析機関の版が違えば、技術部に上限の読み方を確かめます
  3. near_limit の扱いを決める … 試験の精度を踏まえ、再分析を頼むかを技術部と決めます
  4. unmapped の項目名を項目表に足す … 同じ調べものを二度しないための作業です
  5. 確定する … 読み取りの値と直した値の両方を残します
Step10

例外に対処する

起きること対応
封印番号が書類の間で合わないunmatched。本船に試料の封印の記録を確かめてもらう
分析報告書が届かないwaiting_lab のまま置き、決めた日数を過ぎたら担当者に知らせる
再分析の報告書が届いた同じ封印番号の2通目。差し替えにせず両方を残し、担当者が扱いを決める
同じ日に2種類の燃料を補油した受領書と報告書が2組。封印番号で組を分ける
表の列見出しが読めないcannot_parse。列の位置で決めずに人へ
パスワード付きのPDFPDFは保護されていてはいけない。解除したものを取り直す
読み取りが失敗した受付フォルダに残し、成功したときだけ処理済みへ移す
Step11

記録を残す

  • 受領書と分析報告書の元のファイル、AWS Textract の結果の全文(JSON)と JobId
  • そろえた後の値とそろえ方の記録、照合の結果とそのときの上限表・項目表・航海計画の版
  • 担当者が直した項目と直す前の値、urgent の扱いを決めた人と内容
  • 供給業者ごと・項目ごとの near_limit と over_limit の件数

最後の行が、調達の見直しの材料になります。 ガイダンスも、燃料の試験のデータは硫黄分などの品質についての供給業者ごとの傾向を明らかにする上で有益としています。

04実装レベルの3段階

最小構成:コンソールで書類を1通ずつ読ませ、結果を手で台帳に写す / 書類の読み取り
半自動化:上記+S3 への保存を起点に読み取り、封印番号で結び付けて一覧に書き出す / 読み取り・結び付け・一覧化
本格構成:上記+注文の版と等級の上限・規制値・申告値と照らし、判定つきで台帳に行を作る / 読み取り・結び付け・照合・判定

最小構成は、確かめるための段階です。 半自動化で、1件40分が22分程度になります。 転記と結び付けは自動になりますが、注文の版を探して上限と見比べる作業が残ります。本格構成で12分になり、この段階が本記事の想定です。 差が大きいのは、上限表を一度作れば、版と等級を探す作業が毎回の手作業でなくなるからです。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、項目名の言い方のばらつきと、封印番号の読めない受領書の傾向が先に分かります。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
3 名
月間件数
45 件
1件あたり現在時間
40 分
1件あたり導入後時間
12 分
現在  45件 × 40分 ÷ 60 = 30 時間/月
導入後 45件 × 12分 ÷ 60 = 9 時間/月
月間削減時間
21h
削減率
70%
年間削減時間
252h
年間金額換算(時間単価4,500円)
113万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 外航船を20〜40隻運航・管理し、補油のたびに試料を分析機関に送って分析報告書を受け取っている船会社・船舶管理会社。受領書と分析報告書を別々のメールで受け取り、燃料の担当者が性状の値を燃料台帳に手で写し、注文した規格の上限と目で見比べている場合。分析の結果が届く前に燃料を使い始めることが多く、規格外に気づくのが遅れた経験がある会社。供給業者ごとの品質の傾向を、次の調達先の選び方に使いたい会社。
向いていない
  1. 補油が月に数回で、分析報告書も数通しかない場合。燃料の分析を行わず、受領書の数字だけで運用している場合(照らす相手が無い)。受領書や分析報告書が英語以外で発行されることが多い場合(AWS Textract の質問による抽出は英語のみ)。なお、燃料が規制や契約の仕様に適合するかの最終的な判断、燃料を使うかどうか、供給業者への申し立ての可否は、この構成では行いません。

07最小構成で試す方法

  1. 過去の補油から15組の受領書と分析報告書を選ぶ(分析機関が違うものを混ぜ、上限を超えた項目があったものを入れる)
  2. AWS のコンソールで AWS Textract の文書分析を開き、質問と表を指定して1通ずつ読ませる
  3. 表の行ごとの結果を写し、当時の燃料台帳の分析の欄と見比べる
  4. 列を取り違えた行(上限の列を結果として読んだなど)と、読めなかった行に印を付ける
  5. 封印番号が両方の書類から読めたかを数える

15組は必ずやってください。 規則を書く前に、「分析報告書の表を、列見出しで正しく分けられるか」を確かめます。

出てきた内容判断
表の結果が当時の台帳の値と合ったS3 と Lambda の連携に進む
結果と上限の列を取り違えた列見出しの言い方を項目表に足す。構成は有効
封印番号が読めない受領書が多い本船の写し方と、受領書の書き方の確認が先

08実装時につまずきやすいポイント

問題対策
別の試料の結果が結び付く封印番号で結び付け、合わなければ unmatched
報告書の上限で「適合」になる上限は自社の表から引く。 報告書の上限は参考
結果と上限の列を取り違える列見出しで決め、見出しが無ければ cannot_parse
「<0.10」が0.10として比べられる記号と数値を分けて残す
2ページ目の封印番号が空で返る質問は既定で1ページ目だけ。 Pages: ["*"] を付ける
「Sulfur」と「Sulphur」が別の項目になる項目表で自社の項目にそろえる
再分析の報告書で上書きされる同じ封印番号の2通目は両方残す
本船への連絡が自動で飛ぶ送らない。 技術部と運航管理が決めて人が連絡する

上の3行が、この構成の失敗のほとんどです。 どれも「値は入っているのに、照らす相手が違う」形で、結び付けと基準を自社の側で決めているかどうかで、運用に乗るかが決まります。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 船名と船の位置(補油した港と日付)、燃料の数量と性状、供給業者と分析機関との取引の内容、そして注文の記録にある燃料の単価と取引条件です。

  1. 読み取りに送るのは書類だけにする … 注文の単価や取引条件は読み取りに要りません。照合は Lambda の側で行い、AWS Textract に送るのは受領書と分析報告書の画像だけにします
  2. 結果の保管先を自社の S3 にする … 非同期の処理の結果は、既定では AWS Textract の側の領域に暗号化されて7日間保管されます。OutputConfig で自社の S3 に出します
  3. 本船への連絡と申し立てを自動で送らない … 出すのは判定までです。燃料を使うかどうかは本船の安全に直結します
  4. この構成は規格と規制への適合を判定しません … ガイダンスは、燃料の購入の契約は、旗国・寄港国・沿岸国による遵守・執行の判断について MARPOL 条約附属書VIの要件に優先しないとしています。この構成が出すのは、分析の値と自社の表の比較だけです。 適合するか、燃料を使ってよいかは、技術部・運航管理と船長・機関長が決めます
  5. 上限表の版を管理する … 規格の版が変わると上限も変わります。上限表を直したら版を上げ、過去の判定はそのときの版で残します

誤りが起きた場合のリスクは、規格外を見落とすことと、規格外でないものを申し立てることの2つです。 前者は別の試料を結び付けたり報告書の上限で比べたりすると起き、後者は単位や「<」の扱いを誤ると起きます。どちらも「結び付けと基準を自社で決め、決まらないものを人に回す」設計で防ぎます。

10まず何から始めるか

1週目:注文の行に規格の版と等級を書く

注文を出したときに、船名・補油の予定日・供給業者・油種・規格の版と等級・硫黄分の上限を台帳に1行作る運用に変えます。あわせて、本船に受領書の封印番号の欄を写真に必ず写すよう頼みます。

2週目:15組で試す

過去の受領書と分析報告書を15組選び、AWS のコンソールで質問と表を指定して読ませます。結果と上限の列を取り違えていないか、封印番号が両方から読めるかを最優先で見ます。

3週目:上限表と判定の決まりを作る

技術部が、よく注文する版と等級の上限表を作ります。 すべての等級を一度に作る必要はなく、注文の多い数等級から始めます。「要注意」の幅と、申告と分析の差の幅も決めます。

4週目:受付フォルダから結び付けまでをつなぐ

S3 への保存で Lambda を動かし、AWS Textract で読み、封印番号で結び付けて一覧に書き出すところまで作ります。この時点では照合をせず、results の一覧だけを見ます。

2か月目: 上限表との照合を足し、verdict を出します。review と urgent の件数を毎週数え、項目表に行を足していきます。3か月目以降: 規制値の判定を足し、1件40分が何分になったかを実測します。供給業者ごとの near_limit と over_limit の件数を、次の調達先の選び方に使い始めた時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-15/最終更新:2026-10-23
確認した内容情報源確認日
対応する形式が JPEG・PNG・PDF・TIFF で XFA 形式の PDF は不可なこと。非同期は JPEG と PNG が10MB、PDF と TIFF が500MB・3,000ページまでであること。PDFはパスワード保護不可。画像は各辺10,000ピクセル以下。質問は1ページあたり同期15問・非同期30問まで。質問は英語の文書のみ、手書きは英語のみ。文字の高さの下限が15ピクセル(150 DPIで8ポイント相当)AWS: Set Quotas in Amazon Textract2026-10-15
質問の答えが QUERY と QUERY_RESULT のブロックで返り、別名・信頼度・位置・答えの文字列を持ち、答えが無ければ空になることAWS: Queries2026-10-15
表がセル・結合セル・列見出し・表の題・脚注に分けて返り、CELL が行と列の位置と COLUMN_HEADER などの種類を持つことAWS: Tables2026-10-15
質問の対象のページを指定しないと既定で ["1"] になり、* で全ページを指定できることAWS: Query(API Reference)2026-10-15
非同期の処理が StartDocumentAnalysis で始まり、完了が SNS に通知され、GetDocumentAnalysis で結果を取ること。ClientRequestToken で同じ JobId が返ること。結果は既定で7日間保管され、OutputConfig で自社の S3 に出せることAWS: Calling Amazon Textract Asynchronous Operations2026-10-15
ISO 8217 を基準に燃料を指定する場合に使う版を明記すること。供給業者が MARPOL 条約附属書VI第18規則に従い BDN を提供すること。補油の過程で代表試料を採り、分析で契約の仕様への適合を確かめることが推奨され、可能であれば分析が終わるまで燃料を使わないことが推奨されること。試験のデータが供給業者ごとの傾向を明らかにする上で有益で、ISO 4259 の範囲内でも規格外と判定されうること。契約が MARPOL 条約附属書VIの遵守・執行の判断に優先しないこと。少量の汚染で0.10%の燃料が不適合になりうること国土交通省: 燃料油購入者/使用者向けベストプラクティスに関するガイダンス(仮訳)2026-10-15
船舶の燃料油の硫黄分濃度の上限を3.5%以下から0.5%以下とする規制の開始が2020年1月と決まったこと国土交通省: SOx規制への対応について2026-10-15

燃料が規格や規制に適合するか、燃料を使ってよいか、供給業者に申し立てるかは、技術部・運航管理と船長・機関長、必要に応じて船級協会や旗国の当局に確かめて決めてください。 本記事は上記の公開情報で確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-1671)についてのご相談はこちらから。

AI活用について相談する
目次