Различить отсутствующий файл, пустой BLOB и готовое вложение

Данные получены настоящими запросами через native-расширение cubrid. После наблюдений собственные учебные объекты удалены.

Результат выполнения
НаблюдениеРезультат
id=10Файл не приложен (SQL NULL)
id=20Пустой файл, 0 байт
id=30Готовая квитанция, 3 байта
Разных состояний3
Файлattachment-states.csv
Полученные строки и дополнительные наблюдения
{
    "states": [
        {
            "id": 10,
            "status": "missing",
            "bytes": null,
            "bytes64": null,
            "data_hex": null
        },
        {
            "id": 20,
            "status": "empty",
            "bytes": 0,
            "bytes64": "0",
            "data_hex": ""
        },
        {
            "id": 30,
            "status": "ready",
            "bytes": 3,
            "bytes64": "3",
            "data_hex": "4f4b0a"
        }
    ],
    "policy": {
        "missing": "Запросить файл",
        "empty": "Уточнить пустой шаблон",
        "ready": "Разрешить просмотр после проверки прав"
    }
}

result.json содержит те же данные; metrics.json — проверки. Реквизиты входа в эти файлы не записываются.