fix(mcp): surface BFL 5 kap 6 § underlag requirements in voucher and transaction tooling (#1844)
* fix(mcp): surface BFL 5 kap 6 § underlag requirements in voucher and transaction tooling Addresses a user report that the MCP surface treats document anchoring as optional convenience while the law treats it as mandatory: - create_voucher: description and inbox_item_id reframed as the compliant path for received handlingar; staging without a document now carries an advisory compliance_warning in the preview and a WARNING in the message (never blocks: IB/migration vouchers legitimately lack a kvitto). - High-risk approval guidance now tells the agent to surface any preview compliance_warning alongside the 5 kap 5 § irreversibility. - Approval-flow copy is scope-aware: staging responses and list_pending_operations explain that keys without pending_operations:approve (SoD) approve at /pending instead of hunting for a tool their catalog hides. - categorize/create/bulk_book transactions: state that a transaction models a cash-account movement and point cashless events (privat utlagg) at create_voucher instead of silently fabricating a bank line. - link_document_to_voucher: signposts the pre-posting inbox path. - /pending VoucherPreview shows an attn line when document_attached=false. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(mcp): entity-neutral utlagg hint, coherent no-document envelope, real attn styling Addresses the skeptic refutations on da811a58f: - categorize_transaction: drop the 6540/2893 example; 2893 is AB-only (EF books egen insattning 2013/2018 per category-mapping.ts) and a static description cannot know the entity type. - create_voucher: when inbox_item_id is supplied but the item has no stored document (document_id NULL, ON DELETE SET NULL), the will-text no longer claims an OCR attach and the compliance warning gets an inbox variant instead of a dead-end 'restage with inbox_item_id'. Pinned by a new test. - /pending VoucherPreview: use the AttnLine component (the bare 'attn' class does not exist) and conditional wording so IB/internal vouchers are not falsely flagged under BFL 5 kap 6 \u00a7. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(mcp): exempt IB vouchers from the underlag warning; UI mirrors the staged warning Swedish accounting review round 2: the warning keyed off document_attached alone, so migrated IB entries (and the /pending card for any old no-document row) were falsely flagged under BFL 5 kap 6 \u00a7. Staging now skips the complianceNote when is_opening_balance=true, and VoucherPreview gates on the staged compliance_warning instead of overloading document_attached, so the server owns the policy in one place. Pinned by a new IB test. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(mcp): trim two descriptions to fit the tools/list payload ceiling after merging main PR #1846 spent the 59,950 headroom; the merged state crossed by 7 tokens. Dropped the redundant filter enumeration from list_pending_operations (the schema documents the filters) and the dims-bags aside from bulk_book_transactions (the lines schema documents the bags). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
d2251736a2
commit
4d6dd68df4
@@ -9,6 +9,7 @@
|
||||
|
||||
import { Fragment, createContext, useContext } from 'react'
|
||||
import { cn, formatCurrency } from '@/lib/utils'
|
||||
import { AttnLine } from '@/components/ui/attn-line'
|
||||
import { VTH_CLASS, VTD_CLASS } from '@/components/ui/dry-table'
|
||||
import type { PendingOperation } from '@/types'
|
||||
import { AttachDocumentPreview } from '@/components/bookkeeping/AttachDocumentPreview'
|
||||
@@ -295,9 +296,24 @@ function VoucherPreview({ data }: { data: Record<string, unknown> }) {
|
||||
const lines = (data.lines as VoucherLine[]) || []
|
||||
const totalDebit = data.total_debit as number | undefined
|
||||
const totalCredit = data.total_credit as number | undefined
|
||||
// Advisory, mirrors the MCP staging warning: a verifikat for a received
|
||||
// handling must carry the handling itself (BFL 5 kap 6 §). Gated on the
|
||||
// staged compliance_warning, not on document_attached: the server decides
|
||||
// when the warning applies (IB entries are exempt there), so this stays a
|
||||
// mirror instead of a second, looser policy. Older ops without the field
|
||||
// render unchanged. The wording stays conditional ("om ... avser en
|
||||
// mottagen handling"): internal entries (accruals, FX) legitimately lack
|
||||
// a kvitto, and flagging them as deficient would be wrong.
|
||||
const missingUnderlag = typeof data.compliance_warning === 'string'
|
||||
|
||||
return (
|
||||
<div className="space-y-3 text-sm">
|
||||
{missingUnderlag && (
|
||||
<AttnLine>
|
||||
Underlag saknas: om verifikatet avser en mottagen handling ska handlingen användas som
|
||||
verifikation (BFL 5 kap 6 §).
|
||||
</AttnLine>
|
||||
)}
|
||||
<div className="grid grid-cols-2 gap-x-4 gap-y-1">
|
||||
<span className="text-muted-foreground">Datum</span>
|
||||
<span className="font-mono">{String(data.entry_date ?? '')}</span>
|
||||
|
||||
Reference in New Issue
Block a user