LTT Engine Room · Internal

Expense / Claims App Standard

One standard for every claims build.
v1
24-Jun-26
LTT_ExpenseApp_Standard.md
LTT Outsourced CFO Sdn. Bhd.

LTT Expense App — Build Standard & Handoff Kit

A reusable standard for producing a client expense listing, the interactive dashboard (App.html), and the commission report — consistently, every time.

Kit files - LTT_ExpenseApp_Template.html — the branded app shell. Reuse as-is; only swap the data block. - LTT_ExpenseApp_Standard.md — this document (rules + brand + the paste-in prompt).


1. What we produce (deliverables)

  1. <Client>_<Year>_ExpenseListing.xlsx — 4 sheets:
  2. 1-Expense Listing — every line, coded, with columns: No. | Date | Supplier/Payee | Bill/Ref No. | Description | Amount (RM) | A/C Code | LTT Account Name | Source | Incl? | Flag/Review.
  3. 2-Summary by A_C Code — SUMIFS/COUNTIFS by code, Incl?=Y only, grand total.
  4. 3-TNG Transactions — every Touch 'n Go line + toll/parking/reload reconciliation.
  5. 4-Notes & Review — assumptions, drawings treatment, flags, gaps.
  6. App.html — self-contained dashboard (Summary / Listing / TNG / Notes tabs).
  7. CommissionReport.html — commission split by purpose, by recipient & year, with source-receipt image previews.

Every deliverable must be self-contained (no internet needed) and carry zero Excel formula errors.


2. Inputs (from the client's Google Drive)


3. LTT account-code map (the standard coding)

Category Code LTT account name
Food & drink (restaurants, cafes, kopitiam) 96701000 IE - Food, & beverages
Bars / alcohol / clubs 96691000 IE - Entertainment
Petrol / fuel 96848100 IE - TRV - Petrol
Parking / valet 96848200 IE - TRV - Parking fee
Touch 'n Go (reloads) 96848300 IE - TRV - Touch N Go
Toll 96848400 IE - TRV - Toll charges
Grab / taxi / transport 96848900 IE - TRV - Transportation
Hotel / Airbnb 96849200 IE - TRV - Hotel accomodation
Groceries / household / personal shopping 96711000 PE - General supplies, groceries, & household exp.
Pharmacy / medical / clinic / TCM / dental 96711100 PE - Pharmacy items, health, & medical supplies
Nails / beauty / spa / other personal 96791000 PE - Other personal general exp.
Phone / internet (Maxis, Hotlink, Digi, wifi) 96841000 PE - Telephone, & telecommunication exp.
Car service / tyres / windscreen / wiper 96859000 IE - MVE - Upkeep of motor vehicle
Donations 94681000 NOE - Donation
Software / subscriptions (Zoom, CapCut, etc.) 92831000 IE - Software exp., & subscription
Advertising / marketing print (Meta ads, flyers) 95651000 SDE - Advertisement
Commission / referral fees 95671000 SDE - Commission
Postage / courier (Pos, EasyParcel) 92802000 IE - Postage, & courier
Electricity (TNB) 92691000 IE - Electricity
Water (Air Selangor / SAJ) 92871000 IE - Water
Training / seminar 92842000 IE - Training, & seminar
General service / office maintenance 92713000 IE - General exp.
S/P Drawings (kept OUT of P&L) 11210300 S/P C/A - Drawings

4. Processing rules (apply every time)

Include-in-total flag (Incl?) — the P&L total sums only Incl?=Y. Set Incl?=N for: - TNG reloads (code 96848300) — reloads are funding, not an expense. - S/P Drawings (code 11210300) — kept out of the P&L (see below). - Duplicates — a cross-source paper+digital pair of the same item, or duplicate e-Receipts (e.g. an order-confirmation + a tax receipt for the same purchase).

S/P Drawings (code 11210300, Incl?=N) — money out that is not a P&L expense: - Income tax (LHDN) and EPF (KWSP) payments. - Nirvana lot transfer / purchase — payments for buying/transferring memorial lots (identified from the receipt's Recipient Reference; see commission rules).

Touch 'n Go — list every transaction on sheet 3. In the P&L: - Claim actual toll + parking usage (aggregate lines: Toll → 96848400, Parking → 96848200). - Exclude reloads (funding). Dedupe duplicate statement files by (cardholder, date, time, desc, amount). - Note: TNG parking and paper parking receipts can overlap — flag for reconciliation.

Commission split (95671000) — CIMB/Public Bank transfer slips carry a Recipient Reference the payer typed. Read it (pdftotext on the PDF, or read_file_content) and split: - Reference contains lot / subsale / harmony / gracious → Lot transfer/purchase → S/P Drawings (11210300, out of P&L). - Reference contains referral / referrer / commission (any spelling), or an AIA referrer fee → Referral/commission → 95671000. - training / party / billing / other → Others — review individually.

USD receipts — keep the original; convert to RM at an estimated rate (state it, e.g. 4.50) and flag "replace with actual payment-date rate".

Flags — always surface, never silently drop: illegible OCR amounts, auto-classified F&B, unknown card-terminal merchants, password-protected/unreadable source files.


5. Brand standard (LTT / client identity)

Palette (CSS variables):

--green:#3E6B51;  --green2:#56806A;  --sage:#9DB6A3;  --sun:#E0703A;
--ink:#2C2925;    --bg:#F6F3EE;      --card:#ffffff;  --line:#E7E0D5;  --mut:#857c6e;
--warn:#FBEEDD;   --warnln:#E6B877;  --excl:#F7E2D2;  --good:#E7F0E8;

Logo emblem (inline SVG — leaf fan + sunrise):

<svg class="emblem" viewBox="0 0 120 104" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(60,86)">
<path d="M0,0 C-6.5,-13 -6.5,-38 0,-52 C6.5,-38 6.5,-13 0,0 Z" transform="rotate(-46)" fill="#9DB6A3"/>
<path d="M0,0 C-6.5,-13 -6.5,-38 0,-52 C6.5,-38 6.5,-13 0,0 Z" transform="rotate(-23)" fill="#56806A"/>
<path d="M0,0 C-6.5,-13 -6.5,-38 0,-52 C6.5,-38 6.5,-13 0,0 Z" transform="rotate(0)"   fill="#3E6B51"/>
<path d="M0,0 C-6.5,-13 -6.5,-38 0,-52 C6.5,-38 6.5,-13 0,0 Z" transform="rotate(23)"  fill="#56806A"/>
<path d="M0,0 C-6.5,-13 -6.5,-38 0,-52 C6.5,-38 6.5,-13 0,0 Z" transform="rotate(46)"  fill="#9DB6A3"/></g>
<path d="M43,88 A17,17 0 0 1 77,88 Z" fill="#E0703A"/>
<rect x="36" y="88" width="48" height="3.2" rx="1.6" fill="#E0703A"/>
</svg>

(If the client sends a real logo PNG, base64-embed it in the header instead — keep the same palette.)


6. App data schema (what the template expects)

The dashboard reads one JSON block (<script id="DATA">). Produce it from the workbook:

listing[] : {no, date "YYYY-MM-DD", payee, ref, desc, amt (number|null),
             code, acct, src, incl ("Y"|"N"), flag}
summary[] : {code, acct, cnt, tot}     // Incl=Y rows only, per LTT code
grand     : {cnt, tot}                  // P&L total (Incl=Y only)
drawings  : {items, total}              // S/P Drawings kept OUT of P&L
tng[]     : {card, stmt, date, time, desc,
             type ("Toll"|"Parking"|"Reload"|"Purchase"|"Other"), amt}

To reuse the template: open LTT_ExpenseApp_Template.html, replace the JSON in the DATA block, and change the <h1> wordmark + subtitle to the client/year. Nothing else changes.


7. Copy–paste prompt for the next chat

Build a client expense listing to LTT internal standard, following the LTT Expense App Build Standard.

Client: [name]. Year: [YYYY]. Google Drive source folders: - e-Receipts: [path] - Scanned hardcopy bills: [path] - Touch 'n Go statements: [path] - Chart of accounts: LTTmy_ChartofAC-SP-Imp-220223.xlsx

Do this: 1. Extract — parse e-Receipt filenames (vendor/date/ref/amount; don't OCR them); OCR the scanned bills (many receipts per scan) and every TNG transaction. Use subagents in parallel for the OCR so the raw text stays out of the main context. 2. Code every line to the LTT chart using the standard map (Food 96701000, Petrol 96848100, Parking 96848200, Toll 96848400, TNG reload 96848300, Transport 96848900, Entertainment 96691000, Groceries/household 96711000, Pharmacy 96711100, Personal 96791000, Telco 96841000, Motor-vehicle upkeep 96859000, Donation 94681000, Software 92831000, Advertising 95651000, Commission 95671000, Postage 92802000, Electricity 92691000, Water 92871000, Training 92842000, General 92713000, S/P Drawings 11210300). 3. Apply the rules: Incl?=Y feeds the P&L total; set Incl?=N for TNG reloads, duplicates, and S/P Drawings. Treat income tax/EPF and Nirvana lot transfers/purchases as S/P Drawings (11210300, out of P&L). For TNG, claim actual toll+parking, exclude reloads, dedupe duplicate statements. For commission payments, read each transfer slip's Recipient Reference and split into lot transfer→drawings, referral/commission→95671000, others→review. Convert USD at a stated estimated rate and flag. Never silently drop anything — flag illegible/duplicate/uncertain items. 4. Build <Client>_<Year>_ExpenseListing.xlsx (4 sheets: Listing, Summary by code [SUMIFS, Incl=Y only], TNG Transactions [+ reconciliation], Notes), then recalculate formulas and confirm zero errors. 5. Build the dashboard by reusing LTT_ExpenseApp_Template.html: emit the DATA JSON (schema in the Build Standard §6) from the workbook, drop it into the template, and set the header to the client/year. Keep the LTT brand (palette + leaf/sunrise logo) unchanged. 6. If commission/lot payments exist, also build a commission report grouped by purpose → recipient → year, with each source receipt rendered to an embedded JPG preview.

Ask me to confirm: the nature of any commission/lot payments, income-tax/EPF treatment, and business-use proportion of personal-looking items, before finalising.


Prepared as an internal LTT standard. Review and adapt paths/rates per engagement.

ler.lttcfo.ai/appclaim