LinenBalance: Laundry Piece Movement Reconciliation
Pricing
$0.50 / completed product packet
LinenBalance: Laundry Piece Movement Reconciliation
Reconcile recorded laundry piece movements against opening balances. Download account closings, movement lineage and unresolved rows. Missing required openings stay UNKNOWN; no inferred inventory.
Pricing
$0.50 / completed product packet
Rating
0.0
(0)
Developer
US Tech Automations
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 hours ago
Last modified
Categories
Share
LinenBalance
LinenBalance is for a commercial laundry or linen service that already records integer piece counts (openings and movements) and needs a period close: per-account incoming, outgoing, net, and closing, with UNKNOWN when an opening is missing. It does not connect to a plant system, infer wash yield, attribute theft, raise invoices, or guess unmatched events.
The Actor produces a downloadable reconciliation packet from the records you supply.
What you get
A ZIP of the original engine files (leaf names only):
report.json— status, summary, tables, findings, provenance.input.json— the exact input used.accounts.csv— per account / SKU / unit: opening, in, out, net, closing, whether closing is known.unresolved.csv— movements that could not be matched (for example a reversal of an unknown id).movement-lineage.csv— every movement, UTC time, and whether it posted in the period.opening-close.json,policy.json— snapshot and applied policy.manifest.json,hashes.json— content hashes.drilldown.html,styles.css— portable offline viewer using the shared USTA shell and current stylesheet (familydomain-tools).README.txt— package legend.
Adapter status is the engine status: PASS or UNKNOWN. Missing openings on a tracked account stay UNKNOWN. The adapter never upgrades that to PASS. Invalid input raises ValueError (it does not emit a FAIL ZIP).
Limits (from the engine)
- Movement types:
dispatch,receipt,disposal,correction,adjustment,reversal. - Quantities are integers. Booleans, fractions, and non-finite numbers are rejected. Absolute quantity at most 10^12. At most 200,000 rows per openings or movements list. Identifier strings at most 4,096 characters. Nesting depth 16.
- Every timestamp must include an explicit UTC offset (or
Z). Naive local times are rejected. - Period, if present, is half-open
[start, end). policy.tracked_accountsnames accounts whose absolute closing must be known forPASS. A missing opening is never treated as zero.- Matching is exact and user-controlled. No wash-yield inference, unequal-count matching, theft attribution, invoicing, or system integration.
- Adapter input is a JSON object of at most 1 MiB. Unknown top-level fields are rejected.
This is not hardware certification, domain certification, a laundry-system integration, or a professional assurance of inventory.
Complete input example
example.json matches samples/valid.json. Paste this object into the payload JSON field:
{"movements": [{"destination": "PLANT","movement_id": "D-0001","quantity": 35,"sku": "BATH_TOWEL","source": "CLIENT_A","timestamp": "2026-01-05T08:00:00-05:00","type": "dispatch","unit": "pieces"},{"destination": "CLIENT_A","movement_id": "R-0001","quantity": 20,"sku": "BATH_TOWEL","source": "PLANT","timestamp": "2026-01-06T08:00:00-05:00","type": "receipt","unit": "pieces"}],"openings": [{"account": "CLIENT_A","quantity": 100,"sku": "BATH_TOWEL","unit": "pieces"}],"policy": {"period": {"end": "2026-02-01T00:00:00-05:00","start": "2026-01-01T00:00:00-05:00"},"timezone": "America/New_York","tracked_accounts": ["CLIENT_A"]}}
Under these rows, CLIENT_A closing is 85 (100 + 20 − 35). samples/unknown.json has movements on CLIENT_B with no opening: status stays UNKNOWN. samples/invalid.json (boolean quantity) is refused.
Cloud hosting
When you run this Actor, the JSON you submit is sent to Apify’s cloud and stored under your Apify account. It is not a local-only run. You control retention in that account. There is no lasting service-level agreement in this package.
Run and download
- Review the supported input and try the included synthetic example. Replace payload with your authorized records. For API runs, send an object with a single payload field containing that input.
- Run the Actor. Open Status and coverage to inspect the result.
- For a completed result, open Download completed ZIP or the artifact link in the dataset. Save and extract the ZIP before Apify retention expires. Open the HTML report where provided; retain the JSON and CSV evidence.
Price and unsuccessful runs
$0.50 per completed packet, with one packet per run and no start fee. A retry of the same run reuses the packet and the same billing identity. Starting a separate run is a separate request. Invalid input or an incomplete UNKNOWN result produces a diagnostic without a completed-packet charge. A completed conflict or shortage report can still require manual review; PASS does not mean every business problem was resolved.
The minimum run budget is $0.50. The example is a normal run and follows the same price; it is not a free preview promise. Apify handles account billing. These files are not permanent storage: download them promptly.
Access and support
Your input and output are processed on Apify under the run owner's account. Use authorized data and opaque IDs; do not upload passwords or sensitive personal records. Treat artifact URLs as access-bearing links and share them only intentionally. The USTA report may fetch the Satoshi font; it does not upload your report. For a product issue, use this Actor's Issues tab with the run ID and a redacted example. Never post private input or access-bearing links in a public issue.