Skip to main content
Glama
tillbooks

tillbooks

Official

asset_dispose

Dispose a fixed asset (sale, scrap, donation, write-off) by posting the gain/loss journal and permanently excluding it from future depreciation runs.

Instructions

Dispose an active or fully_depreciated fixed asset (H06): the TERMINAL financial event (sale, scrap, donation, write-off, retirement). In ONE atomic transaction it (a) posts ONE balanced GL journal via A02 (source=asset_disposal) clearing the asset cost (Cr) and its accumulated depreciation (Dr), recognising the proceeds (Dr the proceedsAccountId) and the resulting book gain (Cr) or loss (Dr) on the gainLossAccountId; (b) writes ONE append-only asset_transaction (type=disposal, deltaCostRappen = -cost, deltaAccumDeprRappen = -accumulated, proceedsRappen, gainLossRappen) naming that journal; and (c) moves the asset to status=disposed, forces net_book_value_rappen to 0 and stamps disposed_at / disposal_proceeds_rappen (cost and accumulated stay for historical reporting). The gain/loss SIGN is proceedsRappen minus net book value: proceeds above NBV credit the gain account, below NBV debit the loss account, exactly equal writes no gain/loss line. A scrap (proceedsRappen = 0) writes no proceeds line and needs no proceedsAccountId. After success the asset is permanently excluded from every future depreciation run (H03/H04 status filter) and asset_update refuses it with asset_terminal. Refused with not_found (foreign asset, §H-TENANT), asset_already_disposed (a second dispose: first wins, second is refused), asset_archived, asset_not_acquired (a draft has no cost basis), invalid_proceeds, invalid_gain_loss_account, invalid_proceeds_account, or period_locked (disposalDate in a hard-locked A03 period). A wrong disposal is corrected by reversing the journal (A02) plus a compensating asset_transaction, never an un-dispose. Idempotent on idempotencyKey: a replay returns the original {asset, transaction, journalEntry, gainLossRappen} and posts no second journal, appends no second transaction and re-flips no status. CONSEQUENCE: Posts the asset's disposal and the resulting gain or loss; the asset leaves every future depreciation run.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
notesNo
reasonNo
assetIdYes
workspaceIdYes
disposalDateYes
idempotencyKeyYes
proceedsRappenYes
counterpartyNameNo
gainLossAccountIdYes
proceedsAccountIdNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden and does so richly: it specifies the atomic single GL journal posting with exact debit/credit flows, the append-only asset_transaction fields, the status flip, forced net_book_value to 0, permanent exclusion from depreciation, asset_update refusal, all error codes, correction path, and idempotency semantics. This goes far beyond any annotation could.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but earned: it uses a clear (a)/(b)/(c) enumeration of the atomic steps, states gain/loss sign, scrap rules, consequences, error codes, correction, and idempotency in organized order. The opening and final 'CONSEQUENCE' sentence overlap slightly, but for a tool with this complexity every sentence carries operational value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must define the return value, which it does: idempotent replay returns {asset, transaction, journalEntry, gainLossRappen}. It also covers all side effects, failure modes, and post-conditions, making the tool fully callable by an agent without needing additional documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does for the financial core: proceedsRappen sign convention, proceedsAccountId absence for scrap, gainLossAccountId behavior, idempotencyKey replay, and disposalDate's role in period_locked. Notes, reason, and counterpartyName are not explained, but they are peripheral compared to the accounting semantics that the description does add.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Dispose an active or fully_depreciated fixed asset (H06): the TERMINAL financial event (sale, scrap, donation, write-off, retirement).' It distinguishes this from siblings like asset_disposal_preview and asset_disposal_get by emphasizing terminality, so an agent can tell exactly what it does and how it differs without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: it must be called on active or fully depreciated assets, is terminal, and correction is via reversal of the journal plus a compensating asset_transaction, never an un-dispose. It does not explicitly name alternative tools (e.g., asset_disposal_preview) for pre-checking, so no when-not-to-use guidance, but the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools