Use “Move a tag” in Recued. Puts a tag inside a different one. Everything recorded under it follows automatically — no transaction is rewritten.
Move a tag
Use “Move a tag” in Recued. Puts a tag inside a different one. Everything recorded under it follows automatically — no transaction is rewritten.
Complete workflow
Use Ledger book in Recued for accounting, double entry, budget, and records. It includes 44 built-in actions and 15 ready-to-run workflows. Actions that change data use Recued's approval controls.
You are viewing one recipe in this workflow. Installing it opens the complete pack so its other recipes and background automations arrive together.
Use “Records runtime” in Recued. It helps you complete this workflow using the connections and settings you choose.
Use “The accounts” in Recued. Every account with its id — what you post to, and what anything else in this workflow needs before it can name one.
Use “The tags” in Recued. Every tag with its id and how deep it sits — the trees you can spend against, and the ids the rest of the pack takes.
Use “What it all comes to” in Recued. Each currency's balance read exactly, then converted at rates you give and added up.
Use “Every budget at once” in Recued. All your budgets for a period, each counting everything under its tag — in four queries, however many budgets you have.
Show all 16 recipes
Use “How a budget is doing” in Recued. What a budget has left, counting everything under its tag at any depth.
Use “What went under a tag” in Recued. Everything spent under one tag, including every tag beneath it, at any depth.
Use “The lines under a tag” in Recued. Every transaction line under a tag and everything beneath it — the lines themselves, not a total. With a CSV to copy.
Use “Open an account” in Recued. Adds an account to your chart. Its currency is fixed here and every line posted to it inherits it.
Use “Post an entry” in Recued. One entry, any number of legs, written in a single all-or-nothing transaction. It will not post unless the legs sum to zero.
Use “Add a tag” in Recued. Adds a tag anywhere in your tree, at any depth. The tag and its place in the tree are written together or not at all.
Use “Tag a month of lines” in Recued. One tree at a time: every line in a period on one page, with a picker in the tag cell.
Use “Tag a transaction line” in Recued. Sets which tags a line belongs to, one per tree. Each tag and every tag above it counts the full amount.
Use “Set a budget” in Recued. A cap on a tag for one period. It counts everything under that tag, at any depth.
Use “Delete a tag” in Recued. Removes a tag and everything beneath it. Refuses while anything is still tagged with it.
The money follows, and nothing is rewritten
"Groceries should sit under Household, not Food." One move, and every transaction ever tagged Groceries now rolls up under Household — because spending points at the tag, and the tag's identity does not change. Not one recorded transaction is touched.
That is the whole reason the tree is stored as ancestry rather than as a path. A path would have to be copied onto every tagged transaction to make rollups cheap, and then this operation rewrites thousands of rows instead of a handful.
⛔ Detach and re-attach land together. One tag.restructure batch, so there is no moment where the tag hangs under both parents or under neither. A half-done move leaves a tag reachable from some ancestors and not others, and every rollup above it disagrees with every other.
⛔ It moves a tag with NOTHING UNDER IT
A tag that has children is refused, and this is a real limit rather than a policy.
Re-attaching a subtree means writing one edge for every (new ancestor × moved descendant) pair — a CROSS PRODUCT of two lists known only while the recipe runs. A recipe has foreach over one array and nothing that pairs two, so that set cannot be produced. Doing it a batch at a time would leave the tree half-moved between batches, which is worse than not offering it.
⚠ This is specifically a cross product, not "anything involving two lists". Folding many rows into one row per key IS expressible — group_by takes an aggregate and budget-board uses it to do every budget in three queries. Grouping collapses one list; a cross product builds a bigger one, and only the second is out of reach.
What to do instead: move the children out first, move the parent, move them back. Tedious and completely safe — every step is one of these.
⛔ Moving a tag into a DIFFERENT TREE is refused. A tree is a dimension — person -> department -> division is one thing, a project tree is another — and a tag that changed dimension would silently reclassify every transaction ever tagged with it. That is a re-tag, not a move.
⚠ Moving a tag under one of its own descendants is refused too. That would make it its own ancestor, and every rollup beneath would recurse.
It needs FULL access at install
⛔ This recipe is DENIED if the pack was installed with write access — pick all. It drives a batch operation whose allow-list contains a delete (tag.restructure — moving a tag deletes its old closure edges), and a batch's risk floor is the union of everything it may do, so the whole operation is classed destructive. write does not grant that.
⚠ The refusal is operation_not_granted at the gateway, which reads like a bug in the recipe rather than a scope you chose at install. It is not something the recipe can detect and explain for you — the denial happens before its first step runs.
How it works
Inspect the data fetches, transforms, gates, and output this recipe runs.
Settings
Configurable at install. Defaults shown — change them anytime in Recued.
tag id
setting
=
[object Object]
new parent id
setting
=
[object Object]