惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
AWS News Blog
AWS News Blog
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
F
Full Disclosure
H
Help Net Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
A
About on SuperTechFans
J
Java Code Geeks
Jina AI
Jina AI
GbyAI
GbyAI
酷 壳 – CoolShell
酷 壳 – CoolShell
爱范儿
爱范儿
美团技术团队
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Latest news
Latest news
Vercel News
Vercel News
博客园 - 【当耐特】
P
Privacy & Cybersecurity Law Blog
P
Proofpoint News Feed
阮一峰的网络日志
阮一峰的网络日志
V
Vulnerabilities – Threatpost
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
D
Docker
Microsoft Security Blog
Microsoft Security Blog
博客园_首页
S
Securelist
WordPress大学
WordPress大学
S
Secure Thoughts
博客园 - 聂微东
Cloudbric
Cloudbric
Help Net Security
Help Net Security
腾讯CDC
T
Threat Research - Cisco Blogs
T
Tor Project blog
L
LINUX DO - 热门话题
Project Zero
Project Zero
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
N
Netflix TechBlog - Medium
小众软件
小众软件
Cyberwarzone
Cyberwarzone
量子位
MyScale Blog
MyScale Blog
W
WeLiveSecurity
MongoDB | Blog
MongoDB | Blog
I
InfoQ
M
MIT News - Artificial intelligence

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
Why ROU Asset Depreciation Checks Fail When Schedule And Journal Logic Drift
Adam Benn · 2026-06-01 · via DEV Community

The depreciation problem usually gets reported as a journal problem.

Someone sees a depreciation expense that looks off. The export no longer ties cleanly. The journal layer gets blamed first. In practice, the bug is usually upstream by the time anyone opens the journal tab.

Most IFRS 16 depreciation failures are drift failures. The schedule still looks plausible. The closing ROU asset is still in the right ballpark. What broke was one of the connections underneath it:

  • the liability was remeasured and the ROU asset changed, but the depreciation profile stayed on the old run
  • the period boundaries changed, but the model still spread depreciation as though every future slice were identical
  • the schedule and the journals were no longer sourcing the same values
  • someone edited history and the downstream outputs stopped agreeing

If you want a quick live reference point, start with the IFRS 16 calculator. The supported workflow exposes the ROU schedule and journal outputs separately, which makes this class of drift easier to spot.

The formula is rarely the real failure

At a whiteboard, ROU depreciation looks uncomplicated.

The asset is recognised at commencement. Then it is depreciated through time. In the common straight-line case, the carrying amount is spread across the remaining depreciation horizon.

That description is true, but it skips the parts that usually fail in code.

The implementation problem is not "can we divide by the number of periods?" It is "what exactly is the carrying amount at this boundary, what periods are still left, and what event has already changed the asset before we calculate the next charge?"

That is why the public IFRS 16 calculation guide separates the ROU asset side from the liability side. The lease liability unwinds through interest and payment logic. The ROU asset follows carrying amount and depreciation logic. They interact at remeasurement events, but they are not the same pipeline.

If a model treats depreciation as a leftover of the liability schedule, drift becomes likely.

Drift path 1: the liability changes but depreciation stays on the old profile

This is the classic failure mode.

The lease is remeasured. Future payments change. The liability is rebuilt correctly. The ROU asset is adjusted. Then the depreciation logic keeps running on the original schedule.

From a technical point of view, that means the model applied the event to the asset balance but did not reset the future depreciation horizon from the event date.

That is not a cosmetic issue. It produces the wrong carrying amount in every later period.

The supported site wording is clear on the intended behavior: when CPI, modification, or reassessment events are applied in the supported workflow, the ROU asset is adjusted and depreciation is recalculated prospectively over the remaining periods.

The word that matters is prospectively.

You do not rewrite historical depreciation rows. You do not run a catch-up patch across prior months. You take the revised carrying amount at the event boundary and recompute the forward depreciation profile from there.

If a model misses that reset, the schedule and journals can both keep looking tidy for a while. They just stop being right.

Drift path 2: the model flattens periods that are not actually flat

Another common mistake is assuming straight-line means identical future rows regardless of period geometry.

That is only safe when the future slices are actually uniform.

The current calculator implementation is more careful than that. It builds remaining period weights first, then applies the current opening ROU balance across those remaining weighted periods. In other words, it does not blindly assume every future slice has the same size. It allocates the current balance across the remaining period fractions.

That matters because a schedule with irregular edges, partial periods, or event-driven resets can still be straight-line in concept while needing an explicit weighting rule in implementation.

If one layer assumes simple equal periods and another layer uses actual remaining period fractions, your depreciation checks will drift even though both developers believe they built straight-line logic.

This is one of the reasons a technical team should document the depreciation rule more precisely than "ROU divided by remaining months."

Drift path 3: the schedule and journals stop sharing one source

This is where a lot of review pain begins.

The schedule might be right. The journal might be right. But if they are not generated from the same canonical values, tie-out becomes fragile.

The export layer in this repo makes the control expectation explicit. It normalizes checks into named laws such as:

  • Commencement law for the opening ROU asset
  • ROU law for schedule movement versus journals
  • Depreciation law for schedule depreciation versus journal depreciation

The plain-English rule for the depreciation law is blunt: compare schedule depreciation to journal depreciation, and pass only when the canonical cent values match exactly.

That is the correct posture.

If one output uses rounded values, another uses a different source column, and a third uses a manual adjustment path, you do not have one depreciation result. You have three approximations of it.

Drift path 4: history gets reopened

Some depreciation bugs are not event bugs. They are edit bugs.

Someone changes an old opening balance. Someone patches an accumulated depreciation figure directly. Someone inserts a manual correction row but does not propagate the same change through the journals.

That kind of change can make a file look repaired while actually making it less reviewable.

A depreciation schedule should behave like a forward chain. Once a boundary is passed, later values should follow from preserved history plus explicit new events. If a model allows quiet edits to old rows, the later schedule may still total correctly while the review trail is gone.

That is why deterministic outputs matter. The useful question is not whether the latest closing balance looks plausible. It is whether you can still explain every period jump from preserved inputs, visible event rules, and the related journal entries.

The minimum checks a model needs

If you are building or reviewing an IFRS 16 depreciation flow, the minimum validation layer should do more than check that depreciation is non-negative.

I would want at least these checks:

1. Opening ROU - depreciation = closing ROU for each period unless a visible period-boundary adjustment is applied first.
2. If a CPI, modification, or reassessment delta hits the period, the opening ROU for that period includes the delta before depreciation is computed.
3. Total schedule depreciation = total depreciation journal debits.
4. ROU movement in the schedule = ROU and accumulated-depreciation journal movement.
5. If opening ROU is driven to zero or below, future depreciation is zero and the asset does not go negative.

Those checks are not academic. They are what stop a schedule from drifting quietly after a valid event.

The audit side of the site says the same thing in reviewer language: verify the initial ROU amount, trace depreciation through the period, confirm supported changes adjusted the asset and reset depreciation over the remaining term, then agree journals to schedules.

That is just a human-readable version of the same control problem.

A fast debug sequence when the depreciation check fails

When a depreciation tie-out fails, avoid debugging from the journal first. Start higher up.

Use this order:

  1. Confirm the opening ROU balance for the failing period.
  2. Check whether an event adjustment should have been applied at that period boundary.
  3. Confirm the remaining depreciation horizon after that boundary.
  4. Recompute the expected depreciation from the current balance and the remaining weighted periods.
  5. Compare the schedule result to the journal result.
  6. If they differ, find the first place where schedule and journal sourcing diverged.

That sequence is faster because it follows the dependency chain. If the opening balance is wrong, the journal comparison is just downstream noise.

If the issue turns out to be evidence rather than calculation, remember that Excel export is available on Pro. That helps when the debugging session needs a reviewable workbook rather than a browser screenshot.

Reviewability is more useful than neatness

Teams often want depreciation outputs to look simple. That is understandable. But a neat file is not always a reviewable one.

The stronger goal is a file where a reviewer can answer four questions without rebuilding the whole model:

  • where did opening ROU come from?
  • what event changed it, if any?
  • how was the current depreciation charge derived?
  • does the journal agree to that same charge?

If the model can answer those four questions cleanly, the depreciation layer is probably healthy.

If it cannot, the problem is not that the reviewer is being difficult. The problem is that the schedule, event logic, and journals are no longer proving each other.

If you want to test the supported behavior against a live run, use the IFRS 16 calculator, then compare the output shape to the methodology and the broader IFRS 16 calculation guide. The point is not to admire the depreciation formula. It is to catch the moment when that formula stopped living in one deterministic pipeline.

Which depreciation check usually fails first in your review process: the closing balance movement, the event reset, or the journal tie-out?

This is general IFRS 16 education, not accounting advice. Review unusual facts, policy judgments, and unsupported workflows with your adviser or auditor.