html
SOLPDT 1.1 | APPENDIX F
WRITE-OFF PROTOCOL | NMA TERMINATION

Приложение F: Протокол списания нематериальных активов
Write-off Protocol

Стандарт: SOLPDT 1.1 — Agentic Trust Layer Extension

F.1. Назначение

Настоящее приложение определяет протокол автоматического списания нематериальных активов (НМА) в экосистеме SOLPDT при наступлении событий, прекращающих действие аттестата доверия sig.a. Документ устанавливает:

  • Связь между техническим механизмом TRL (Trust Revocation List) и бухгалтерским списанием
  • Триггеры и условия, инициирующие процедуру списания
  • Пошаговый алгоритм обработки события отзыва доверия
  • Механизм Grace Period для защиты от ложных срабатываний
  • Формат данных, передаваемых в ERP-систему для автоматического формирования проводок

Протокол обеспечивает соответствие требованиям ФСБУ 14/2022 (п. 41) и IAS 38 (п. 112) в части выбытия и обесценения активов.

F.2. Основания для списания

F.2.1. Классификация событий прекращения признания НМА

В соответствии с ФСБУ 14/2022 и IAS 38, нематериальный актив подлежит списанию с баланса при прекращении его признания. В экосистеме SOLPDT такими событиями являются:

Код событияНаименованиеСтатус TRLОснование по ФСБУ 14/2022
TRL_PROTOCOL_FRAUDДоказанная попытка двойной траты или подделки Payload-V2PERMANENTУтрата контроля (пп. «б» п. 4)
TRL_COMPLIANCE_VIOLATIONПопадание оператора агента в санкционные спискиPERMANENTПрекращение использования вследствие регуляторных ограничений
TRL_SKILLS_INCONSISTENCYРасхождение данных skills.json с блокчейн-историейSUSPENDED → PERMANENTУтрата способности приносить экономические выгоды
TRL_CRITICAL_DRIFTPDT-Score ниже 0.4 на протяжении 3 расчётных цикловSUSPENDED → PERMANENTУтрата способности приносить экономические выгоды (пп. «в» п. 4)
TRL_STAKE_EXHAUSTEDПолное исчерпание залогового депозита при слэшингеPERMANENTПрекращение контроля вследствие экономической несостоятельности агента
TRL_LICENSOR_REVOCATIONОтзыв DAT Лицензиара Корневым узломPERMANENTАннулирование аттестации всех агентов данного Лицензиара

F.2.2. Юридические последствия

При наступлении любого из перечисленных событий актив перестаёт соответствовать критериям признания НМА:

  • Утрата контроля: sig.a аннулируется, агент более не может формировать доверенные транзакции
  • Отсутствие будущих экономических выгод: транзакции агента не принимаются экосистемой, доходы прекращаются
  • Идентифицируемость прекращена: запись в TRL делает актив «токсичным» для контрагентов

F.3. Процедура списания

F.3.1. Общая схема

┌─────────────────────────────────────────────────────────────────────┐ │ ОБНАРУЖЕНИЕ ТРИГГЕРА │ │ (CGW / Мониторинг TRL / Отчёт оракула) │ └───────────────────────────────────┬─────────────────────────────────┘ ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ ФИКСАЦИЯ В TRL (Trust Revocation List) │ │ Статус: SUSPENDED | PERMANENT │ │ ID записи: TRL-YYYY-NNNNN │ └───────────────────────────────────┬─────────────────────────────────┘ ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ GRACE PERIOD (период ожидания) │ │ Длительность: 24 часа (86 400 секунд) │ │ Возможность оспаривания Лицензиаром │ └───────────────────────────────────┬─────────────────────────────────┘ ▼ ┌───────────────┴───────────────┐ ▼ ▼ ┌───────────────────┐ ┌───────────────────┐ │ ОТМЕНА (CANCEL) │ │ ПОДТВЕРЖДЕНИЕ │ │ Ошибочное │ │ (CONFIRM) │ │ срабатывание │ │ Нарушение │ └─────────┬─────────┘ │ подтверждено │ │ └─────────┬─────────┘ ▼ ▼ ┌───────────────────┐ ┌───────────────────┐ │ ВОССТАНОВЛЕНИЕ │ │ СПИСАНИЕ АКТИВА │ │ TRL: RESTORED │ │ (WRITE-OFF) │ │ sig.a активна │ └───────────────────┘ └───────────────────┘

F.3.2. Пошаговый алгоритм

Шаг 1. Обнаружение триггера

Триггер может быть обнаружен следующими компонентами:

КомпонентТип обнаруживаемых событий
Compliance-Gateway (CGW)AML-нарушения, санкционные списки
PDT-EngineКритическое падение PDT-Score
Мониторинг skills.jsonРасхождение заявленных и фактических метрик
Корневой узел / ЛицензиарРучное внесение при форс-мажоре

Шаг 2. Фиксация в TRL

При обнаружении триггера в реестр отозванного доверия (TRL) вносится запись со следующими полями:

{
  "trl_entry_id": "TRL-2026-00158",
  "agent_pubkey": "A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v",
  "status": "SUSPENDED",
  "reason_code": "TRL_CRITICAL_DRIFT",
  "reason_details": {
    "pdt_score_current": 0.32,
    "pdt_score_threshold": 0.4,
    "cycles_below_threshold": 3,
    "last_valid_tx": "2026-04-01T12:00:00Z"
  },
  "reported_by": "PDT-Engine-01",
  "reported_at": "2026-04-09T10:30:00Z",
  "grace_period_ends_at": "2026-04-10T10:30:00Z",
  "licensor_dat_ref": "DAT-888-REGIONAL-NODE-05"
}

Шаг 3. Grace Period (период ожидания)

Длительность: 24 часа (86 400 секунд) с момента reported_at.

В течение этого периода:

  • Транзакции агента временно блокируются (статус SUSPENDED)
  • Лицензиар может инициировать процедуру апелляции
  • Бухгалтерское списание не производится
  • nma в Payload-V2 временно сбрасывается в false, но актив остаётся на балансе с пометкой «под вопросом»

Возможные действия в Grace Period:

ИнициаторДействиеРезультат
ЛицензиарПодтверждение нарушенияНемедленный переход к Шагу 4
ЛицензиарОспаривание с доказательствамиОтмена записи TRL → RESTORED
СистемаИстечение 24 часов без оспариванияАвтоматический переход к Шагу 4

Шаг 4. Списание актива (Write-off)

При подтверждении нарушения или истечении Grace Period выполняется:

4.1. Обновление статуса TRL

{
  "trl_entry_id": "TRL-2026-00158",
  "status": "PERMANENT",
  "confirmed_at": "2026-04-10T10:30:00Z",
  "confirmed_by": "SYSTEM_AUTO"
}

4.2. Обновление метаданных Payload-V2

В блоке accounting_asset_details производятся следующие изменения:

{
  "impairment_test": {
    "last_test_timestamp": "2026-04-10T10:30:00Z",
    "last_test_result": "written_off",
    "write_off_reason": "TRL_CRITICAL_DRIFT",
    "write_off_trl_ref": "TRL-2026-00158"
  }
}

4.3. Обнуление балансовой стоимости

Остаточная стоимость (NBV) принудительно устанавливается в 0. Накопленная амортизация становится равной первоначальной стоимости за вычетом ликвидационной.

4.4. Отзыв sig.a

Подпись sig.a аннулируется. Любая проверка через https://solpdt.com/verify возвращает статус TRUST_REVOKED.

4.5. Слэшинг (если применимо)

При наличии неуплаченных обязательств или умышленного нарушения залоговый депозит (stake_account) изымается в пользу пострадавшей стороны или сжигается.

Шаг 5. Формирование первичного документа

Compliance-Gateway автоматически формирует Акт списания НМА (шаблон — Приложение H) и направляет его в ERP-систему организации через настроенный sync_endpoint_url.

F.4. Техническая реализация в смарт-контракте

F.4.1. Обновление состояния актива при слэшинге

use anchor_lang::prelude::*;

#[derive(AnchorSerialize, AnchorDeserialize, Clone, PartialEq, Eq)]
pub enum AssetStatus {
    Active,
    Suspended,
    WrittenOff,
}

#[account]
pub struct AssetAccount {
    pub agent_pubkey: Pubkey,
    pub initial_cost: u64,
    pub current_nbv: u64,
    pub accumulated_amortization: u64,
    pub status: AssetStatus,
    pub sig_a: String,                    // Authoritative Attestation
    pub trl_entry_id: Option,     // Ссылка на запись в TRL
    pub suspended_at: Option,        // Unix-время приостановки
    pub written_off_at: Option,      // Unix-время списания
    pub write_off_reason: Option, // Код причины
}

/// Обработчик события списания актива.
/// Вызывается после подтверждения нарушения и истечения Grace Period.
pub fn write_off_asset(ctx: Context<WriteOffAsset>, reason_code: String) -> Result<()> {
    let asset = &mut ctx.accounts.asset_account;
    let clock = Clock::get()?;
    
    // Проверка, что актив ещё не списан
    require!(
        asset.status != AssetStatus::WrittenOff,
        ErrorCode::AssetAlreadyWrittenOff
    );
    
    // Обнуление стоимости
    asset.current_nbv = 0;
    asset.accumulated_amortization = asset.initial_cost;
    
    // Обновление статуса
    asset.status = AssetStatus::WrittenOff;
    asset.written_off_at = Some(clock.unix_timestamp);
    asset.write_off_reason = Some(reason_code);
    
    // Аннулирование подписи (помечается как невалидная)
    asset.sig_a = String::from("REVOKED");
    
    // Эмиссия события для off-chain систем
    emit!(AssetWrittenOffEvent {
        agent_pubkey: asset.agent_pubkey,
        written_off_at: clock.unix_timestamp,
        reason: reason_code,
        trl_entry_id: asset.trl_entry_id.clone(),
    });
    
    Ok(())
}

#[event]
pub struct AssetWrittenOffEvent {
    pub agent_pubkey: Pubkey,
    pub written_off_at: i64,
    pub reason: String,
    pub trl_entry_id: Option,
}

#[error_code]
pub enum ErrorCode {
    #[msg("Актив уже списан")]
    AssetAlreadyWrittenOff,
}

F.4.2. Обработка Grace Period

/// Проверяет, истёк ли Grace Period для приостановленного актива.
/// Вызывается периодически или при попытке совершения транзакции.
pub fn check_grace_period_expired(
    suspended_at: i64,
    current_timestamp: i64,
    grace_period_seconds: i64,
) -> bool {
    current_timestamp >= suspended_at + grace_period_seconds
}

/// Переводит актив из SUSPENDED в WRITTEN_OFF после истечения Grace Period.
pub fn finalize_suspension(ctx: Context<FinalizeSuspension>) -> Result<()> {
    let asset = &mut ctx.accounts.asset_account;
    let clock = Clock::get()?;
    
    require!(
        asset.status == AssetStatus::Suspended,
        ErrorCode::AssetNotSuspended
    );
    
    let suspended_at = asset.suspended_at.ok_or(ErrorCode::MissingSuspendedAt)?;
    const GRACE_PERIOD_SECONDS: i64 = 86_400; // 24 часа
    
    require!(
        check_grace_period_expired(suspended_at, clock.unix_timestamp, GRACE_PERIOD_SECONDS),
        ErrorCode::GracePeriodNotExpired
    );
    
    // Автоматическое списание
    write_off_asset(
        ctx.accounts.as_write_off_context(),
        String::from("TRL_GRACE_PERIOD_EXPIRED")
    )?;
    
    Ok(())
}

F.5. Бухгалтерские проводки при списании

F.5.1. Стандартная проводка (линейная амортизация)

При списании НМА формируется следующая бухгалтерская запись:

ДебетКредитСуммаОснование
Счёт 05 (Амортизация НМА)Счёт 04 (НМА)Накопленная амортизацияСписание амортизации
Счёт 91.02 (Прочие расходы)Счёт 04 (НМА)Остаточная стоимостьУбыток от списания
Пример: Актив: первоначальная стоимость 150 000 ₽, накопленная амортизация 50 000 ₽, остаточная стоимость 100 000 ₽.
ДебетКредитСумма
050450 000 ₽
91.0204100 000 ₽

Итого: счёт 04 закрыт, в прочих расходах отражён убыток 100 000 ₽.

F.5.2. Проводка при слэшинге (экономическое наказание)

Если списание сопровождается изъятием залогового депозита:

ДебетКредитСуммаОснование
91.02 (Прочие расходы) 58 (Финансовые вложения)Сумма изъятого залогаПотеря депозита при слэшинге

F.5.3. Налоговые последствия

В соответствии с НК РФ:

  • Налог на прибыль: убыток от списания НМА включается в состав внереализационных расходов (ст. 265 НК РФ)
  • НДС: при списании НМА восстановление НДС не требуется, если актив не использовался в облагаемой деятельности на момент списания

F.6. Процедура апелляции и восстановления

F.6.1. Условия восстановления

Выход из TRL и восстановление статуса nma: true возможны только через переаттестацию у Лицензиара (или, в исключительных случаях, у Корневого узла).

УсловиеДоказательство
Устранение причины отзываPDT-Score восстановлен выше 0.7 / skills.json синхронизирован / кошелёк легитимизирован
Повторный AML-скринингПройден с риском ≤ 7/10
Методологический аудитПодтверждение соответствия FEBA/SOL
Погашение задолженности (если применимо)Транзакция погашения в Solana

F.6.2. Процедура восстановления

/// Восстанавливает актив после успешной переаттестации.
pub fn restore_asset(ctx: Context<RestoreAsset>, new_sig_a: String) -> Result<()> {
    let asset = &mut ctx.accounts.asset_account;
    let clock = Clock::get()?;
    
    require!(
        asset.status == AssetStatus::WrittenOff || asset.status == AssetStatus::Suspended,
        ErrorCode::AssetNotRevoked
    );
    
    // Восстановление стоимости (из истории или заново)
    // ВАЖНО: первоначальная стоимость не меняется,
    // но срок полезного использования может быть скорректирован
    
    asset.status = AssetStatus::Active;
    asset.sig_a = new_sig_a;
    asset.suspended_at = None;
    asset.written_off_at = None;
    asset.write_off_reason = None;
    
    // Обновление записи в TRL
    asset.trl_entry_id = None;
    
    emit!(AssetRestoredEvent {
        agent_pubkey: asset.agent_pubkey,
        restored_at: clock.unix_timestamp,
        new_sig_a,
    });
    
    Ok(())
}

F.6.3. Бухгалтерские последствия восстановления

Согласно ФСБУ 14/2022, восстановление ранее списанного НМА не допускается. Актив должен быть принят к учёту заново:

  • Формируется новая инвентарная карточка
  • Устанавливается новая первоначальная стоимость (определяется Лицензиаром)
  • Устанавливается новый срок полезного использования
  • Предыдущая история списания сохраняется в аудиторском следе

F.7. Аудиторский след (Audit Trail)

F.7.1. Данные, фиксируемые при списании

Для обеспечения возможности внешнего аудита при списании фиксируются:

ДанныеИсточникХранение
trl_entry_idTRLБлокчейн
write_off_reasonСмарт-контрактБлокчейн
written_off_atUnix-времяБлокчейн
nbv_before_write_offСостояние до списанияИстория аккаунта
accumulated_amortizationСостояние до списанияИстория аккаунта
tx_hashХеш транзакции списанияSolana Explorer

F.7.2. Формирование аудиторского отчёта

Аудитор может проверить легитимность списания, используя чек-лист из Приложения G: Чек-лист аудитора (Auditor Checklist).

F.8. Интеграция с ERP-системой

F.8.1. Формат уведомления о списании

При наступлении события WRITTEN_OFF Compliance-Gateway отправляет на sync_endpoint_url следующий JSON:

{
  "event_type": "ASSET_WRITTEN_OFF",
  "event_id": "WO-2026-00158",
  "timestamp": "2026-04-10T10:30:00Z",
  "asset": {
    "inventory_number": "SOL-PDT-2026-042",
    "agent_pubkey": "A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v",
    "initial_cost": 150000.00,
    "currency": "RUB",
    "accumulated_amortization": 50000.00,
    "nbv_before_write_off": 100000.00,
    "write_off_amount": 100000.00
  },
  "reason": {
    "code": "TRL_CRITICAL_DRIFT",
    "description": "PDT-Score ниже 0.4 на протяжении 3 расчётных циклов",
    "trl_entry_id": "TRL-2026-00158"
  },
  "transaction": {
    "tx_hash": "5kP9xYtZv7wK1LmNpQ2rS5tU8vW2xYz4A6B8C0D",
    "slot": 123456789,
    "block_time": "2026-04-10T10:30:00Z"
  },
  "audit_uri": "https://solpdt.com/audit/wo-2026-00158"
}

F.8.2. XML-формат для 1С:Предприятие

<?xml version="1.0" encoding="UTF-8"?>
<SOLPDT_WriteOff>
  <EventID>WO-2026-00158</EventID>
  <EventDate>2026-04-10T10:30:00</EventDate>
  <InventoryNumber>SOL-PDT-2026-042</InventoryNumber>
  <AssetName>Цифровое право / AI-Agent Payload</AssetName>
  <InitialCost>150000.00</InitialCost>
  <AccumulatedAmortization>50000.00</AccumulatedAmortization>
  <WriteOffAmount>100000.00</WriteOffAmount>
  <ReasonCode>TRL_CRITICAL_DRIFT</ReasonCode>
  <ReasonDescription>PDT-Score ниже 0.4 на протяжении 3 расчётных циклов</ReasonDescription>
  <TRL_EntryID>TRL-2026-00158</TRL_EntryID>
  <Solana_TxHash>5kP9xYtZv7wK1LmNpQ2rS5tU8vW2xYz4A6B8C0D</Solana_TxHash>
  <AuditURI>https://solpdt.com/audit/wo-2026-00158</AuditURI>
  <AccountingEntry>
    <Debit account="05" amount="50000.00"/>
    <Credit account="04" amount="50000.00"/>
    <Debit account="91.02" amount="100000.00"/>
    <Credit account="04" amount="100000.00"/>
  </AccountingEntry>
</SOLPDT_WriteOff>

F.9. Чек-лист для бухгалтера при списании

ПроверкаКритерийПодтверждающий документ
1Основание для списанияНаличие записи в TRL со статусом PERMANENTВыписка из TRL
2Истечение Grace PeriodПрошло ≥ 24 часов с момента reported_atСистемный лог
3Остаточная стоимостьКорректно рассчитана на момент списанияПриложение E
4Накопленная амортизацияСоответствует учётным даннымОборотно-сальдовая ведомость
5Первичный документСформирован Акт списания НМАПриложение H
6ПроводкиСоответствуют учётной политикеЖурнал проводок
7Налоговый учётУбыток включён во внереализационные расходыНалоговый регистр

F.10. Глоссарий терминов

ТерминОпределение
TRL (Trust Revocation List)Реестр отозванного доверия — децентрализованный список агентов, чей статус доверия аннулирован
Слэшинг (Slashing)Механизм экономического наказания — изъятие залогового депозита при подтверждении умышленного нарушения
Grace PeriodПериод ожидания (24 часа) между приостановкой и окончательным списанием, предназначенный для оспаривания
NBV (Net Book Value)Остаточная балансовая стоимость актива
Permanent DelegateМеханизм Token-2022 в Solana, позволяющий протоколу управлять токенами (изымать, блокировать)
DAT (Digital Access Token)Цифровой допуск, выдаваемый Корневым узлом Лицензиарам для права верификации агентов

КОРНЕВОЙ УЗЕЛ (СОЗДАТЕЛЬ СТАНДАРТА): Юрий Соколов (SOL Trust Network)
КОНТАКТЫ: standards@solpdt.com