AIで備品の貸出・返却台帳を確認する方法|部分返却・期限・記録不明を分ける

架空の貸出5件・備品6点を照合。個体IDを残し、部分返却、現在の未返却、返却済みの遅延履歴、記録不明を区別します。

AIものさし編集部

AIで備品の貸出・返却台帳を確認するときは、同じ型番の品物と、実際に貸した個体を分けます。本体だけ戻って付属品が残る場合もあるため、貸出案件の「返却済み」という一欄だけで完了を決めません。

この記事では、架空の貸出5件・備品6点から、返却確認済み、記録上の未返却、返却記録の不明を整理します。作るのは担当者が確認する一覧です。実物の所在、台帳取得、AI処理、利用者への連絡は検証していません。

貸出IDと、実際の個体IDを残す

型番や品名は、同じ種類の別個体にも付きます。同型のプロジェクターが二つあっても、一方の返却記録で両方を返却済みにしません。貸出IDと個体IDの列の組を使い、どの案件でどの個体を貸したかを追えるようにします。

本体と電源アダプターを一緒に貸すなら、貸出時の構成品を残します。この例では、アダプターにも独自の個体IDを付けます。これは説明用の社内管理IDで、外部の識別規格へ適合すると主張するものではありません。個体識別しない消耗品や、数量単位で管理する備品へそのまま同じ方法を適用しません。

照合前には台帳の版、集計時点、貸出時の構成品、返却を確認した記録をそろえます。返却予定日と実際の返却日を一つの列へ上書きすると、予定と結果を分けられなくなるため、両方を保持します。

この例の期限と、記録の意味を決める

集計時点は2026年10月20日17時、日本時間です。返却予定日は同じ日本の暦日で管理し、予定日当日の終了までは期限超過にしない、という架空の運用条件を置きます。時刻指定の返却条件、営業日への繰越、実在の契約条件は含めません。

「記録上未返却」は、集計時点までの記録を確認して返却記録がない状態です。「記録不明」は、返却されたか判断する記録を確認できていない状態です。空欄という見た目だけで両者を同じにしません。どちらも実物が手元にないと現地確認した意味ではありません。

表は横にスクロールできます

元行貸出個体内容返却予定日集計時点の返却記録
R01L01E01プロジェクターA本体2026-10-1910月19日返却確認済み
R02L01E02A用電源アダプター2026-10-19記録上未返却
R03L02E03ノートPC2026-10-20記録上未返却
R04L03E04カメラ2026-10-1810月19日返却確認済み
R05L04E05スピーカー未記載記録上未返却
R06L05E06同型のプロジェクターB2026-10-19記録不明

すべて架空の行です。E01とE06は同型でも別個体です。L01は2点を一緒に貸した案件で、E01の返却だけでは構成品がそろいません。

現在の残りと、遅れて返った履歴を分ける

表は横にスクロールできます

元行今回の整理理由・次の確認
R01返却確認済み予定日と同日に返却した記録
R02記録上未返却・期限超過予定日が集計日の前日。アダプターの記録を確認
R03記録上未返却・本日期限当日のため、この条件ではまだ期限超過にしない
R04返却確認済み・遅延履歴あり予定日の翌日に返却。現在の未返却へ入れない
R05記録上未返却・期限不明予定日がないため、期限超過かを判定できない
R06返却状態不明返却記録の確認を先に行う。未返却や紛失と断定しない

R04は予定日に対して1暦日遅い記録ですが、すでに返却を確認しています。現在の未返却一覧へ混ぜて督促対象にしません。この差は、今回の日付条件での履歴であり、違約金、責任、利用者の評価を決めるものではありません。

R06は予定日が過ぎていても、返却状態が分からないため「期限超過で未返却」とは言いません。また、プロジェクターAが返ったから同型のBも返ったという推定はできません。個体IDと元行へ戻って、記録を確認します。

部分返却は、案件数と点数を分けて数える

L01の構成品はE01・E02の2点です。返却確認済み1点、記録上未返却1点なので、案件全体は「一部返却」として残します。全体が未返却とも、全体が返却済みとも書きません。

6点全体では、返却確認済み2点、記録上未返却3点、返却状態不明1点です。記録上未返却の3点の内訳は、期限超過1点、本日期限1点、期限不明1点になります。期限不明を期限超過0日へ変えたり、不明1点を未返却3点へ足したりしないでください。

表は横にスクロールできます

数える対象この例の値
貸出案件5件
貸した個体6点
返却確認済み2点
記録上未返却3点:期限超過1、本日期限1、期限不明1
返却状態不明1点
一部返却の案件L01の1件:構成品2点中1点が返却確認済み

「貸出5件のうち未返却3件」と、点数の3を案件数へ読み替えないようにします。この例では記録上未返却の3点がL01・L02・L04に分かれていますが、別の台帳では一つの案件に複数点が残ることもあります。数える単位を列名へ残してください。

返却確認済みという記録から、点検合格、破損なし、データ消去完了、次の人へ貸出可能とも推定しません。受領、状態点検、再貸出の判断が別工程なら、それぞれの記録を確認します。

固定例の日付と状態を検算する

次のPythonでは、日付をYYYY-MM-DDからdateへ変換し、集計日と比較します。Python公式資料は、この形式の変換と日付の大小比較を説明しています。ただし、予定日当日は超過にしないという業務条件は本稿の架空例です。Python:dateオブジェクト(新しいタブで開く)

from collections import Counter
from datetime import date

as_of = date.fromisoformat("2026-10-20")
# row, loan, asset, due, return-record-state, returned-date
rows = [
    ("R01", "L01", "E01", "2026-10-19", "RETURNED", "2026-10-19"),
    ("R02", "L01", "E02", "2026-10-19", "NOT_RETURNED", None),
    ("R03", "L02", "E03", "2026-10-20", "NOT_RETURNED", None),
    ("R04", "L03", "E04", "2026-10-18", "RETURNED", "2026-10-19"),
    ("R05", "L04", "E05", None, "NOT_RETURNED", None),
    ("R06", "L05", "E06", "2026-10-19", "UNKNOWN", None),
]

def classify(row):
    _, _, _, due_text, state, returned_text = row
    due = date.fromisoformat(due_text) if due_text else None
    if state == "UNKNOWN":
        return "UNKNOWN"
    if state == "RETURNED":
        assert date.fromisoformat(returned_text) <= as_of
        return "RETURNED"
    assert state == "NOT_RETURNED" and returned_text is None
    if due is None:
        return "DUE_UNKNOWN"
    if due < as_of:
        return "OVERDUE"
    return "DUE_TODAY" if due == as_of else "NOT_DUE"

status = {row[0]: classify(row) for row in rows}
assert status == {
    "R01": "RETURNED", "R02": "OVERDUE", "R03": "DUE_TODAY",
    "R04": "RETURNED", "R05": "DUE_UNKNOWN", "R06": "UNKNOWN",
}
assert Counter(status.values()) == {
    "RETURNED": 2, "OVERDUE": 1, "DUE_TODAY": 1,
    "DUE_UNKNOWN": 1, "UNKNOWN": 1,
}
late_returned = [row[0] for row in rows
                 if row[4] == "RETURNED" and row[3] is not None
                 and date.fromisoformat(row[5]) > date.fromisoformat(row[3])]
assert late_returned == ["R04"]
l01 = [row for row in rows if row[1] == "L01"]
assert len(l01) == 2
assert sum(status[row[0]] == "RETURNED" for row in l01) == 1
print(status, "late_returned", late_returned)

掲載例をローカルで実行し、別の検算でも元行別の状態、L01の構成品2点、R04の1暦日の差を照合しました。コードは実台帳の読込みや、重複行、貸出開始前の返却、全種類の矛盾を検出する汎用処理ではありません。実務では貸出と個体のキー、日付、記録状態の整合性を別に検査します。

日付だけの比較を、時刻指定の貸出へ流用しません。返却期限が17時なら同日18時の扱いが変わり、拠点の時間帯が異なれば基準となる日も確認が必要です。時刻がない台帳から時刻を推測して埋めないでください。

AIには、確認対象と不足を返させる

架空の貸出5件・個体6点の台帳を確認してください。
集計時点は2026年10月20日17時、日本時間です。
予定日は日本の暦日で、予定日当日は期限超過にしない例の条件です。
貸出IDと個体IDを残し、本体だけの返却でセット全体を完了にしないでください。
返却確認済み、記録上未返却、返却記録不明を区別してください。
返却済みの遅延履歴を現在の未返却へ混ぜないでください。
予定日未記載を0日遅延へ変えず、返却記録不明を未返却や紛失と断定しないでください。
出力:元行別の確認表、案件数と点数を分けた集計、確認質問。
台帳更新、利用者への送信、料金計算、責任の判定は行いません。

この依頼と状態表は手製で、AIによる実行結果ではありません。確認質問は「E02の返却記録は追加されているか」「L04の正式な予定日は何日か」「E06の記録はどこで確認できるか」です。質問を作ったことと、実際に確認して解決したことを分けて残します。

元行へ戻れる一覧を作ったら、記録確認が必要な対象と、条件に基づく期限確認が必要な対象を担当者へ渡します。台帳の空欄を埋めるために返却日を作らず、現物確認や記録の補足後に新しい版で再集計してください。

参考資料

公式資料の確認日:2026年10月20日。備品、個体ID、貸出、期限条件、台帳、依頼文は独自の架空例です。掲載コード、状態別点数、部分返却、暦日の差をローカルで検査しました。実物、実台帳、AI処理、点検、データ消去、再貸出、連絡、契約・料金、画面表示は未検証です。

質問から自分に合うAIを探す