AIで備品の貸出・返却台帳を確認するときは、同じ型番の品物と、実際に貸した個体を分けます。本体だけ戻って付属品が残る場合もあるため、貸出案件の「返却済み」という一欄だけで完了を決めません。
この記事では、架空の貸出5件・備品6点から、返却確認済み、記録上の未返却、返却記録の不明を整理します。作るのは担当者が確認する一覧です。実物の所在、台帳取得、AI処理、利用者への連絡は検証していません。
目次
貸出IDと、実際の個体IDを残す
型番や品名は、同じ種類の別個体にも付きます。同型のプロジェクターが二つあっても、一方の返却記録で両方を返却済みにしません。貸出IDと個体IDの列の組を使い、どの案件でどの個体を貸したかを追えるようにします。
本体と電源アダプターを一緒に貸すなら、貸出時の構成品を残します。この例では、アダプターにも独自の個体IDを付けます。これは説明用の社内管理IDで、外部の識別規格へ適合すると主張するものではありません。個体識別しない消耗品や、数量単位で管理する備品へそのまま同じ方法を適用しません。
照合前には台帳の版、集計時点、貸出時の構成品、返却を確認した記録をそろえます。返却予定日と実際の返却日を一つの列へ上書きすると、予定と結果を分けられなくなるため、両方を保持します。
この例の期限と、記録の意味を決める
集計時点は2026年10月20日17時、日本時間です。返却予定日は同じ日本の暦日で管理し、予定日当日の終了までは期限超過にしない、という架空の運用条件を置きます。時刻指定の返却条件、営業日への繰越、実在の契約条件は含めません。
「記録上未返却」は、集計時点までの記録を確認して返却記録がない状態です。「記録不明」は、返却されたか判断する記録を確認できていない状態です。空欄という見た目だけで両者を同じにしません。どちらも実物が手元にないと現地確認した意味ではありません。
表は横にスクロールできます
| 元行 | 貸出 | 個体 | 内容 | 返却予定日 | 集計時点の返却記録 |
|---|---|---|---|---|---|
| R01 | L01 | E01 | プロジェクターA本体 | 2026-10-19 | 10月19日返却確認済み |
| R02 | L01 | E02 | A用電源アダプター | 2026-10-19 | 記録上未返却 |
| R03 | L02 | E03 | ノートPC | 2026-10-20 | 記録上未返却 |
| R04 | L03 | E04 | カメラ | 2026-10-18 | 10月19日返却確認済み |
| R05 | L04 | E05 | スピーカー | 未記載 | 記録上未返却 |
| R06 | L05 | E06 | 同型のプロジェクターB | 2026-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処理、点検、データ消去、再貸出、連絡、契約・料金、画面表示は未検証です。
