Odoo Month End Close
erpipe-org/mcp-odoo
Drive a month-end accounting close on Odoo through odoo-mcp — AR/AP aging, open-item and draft-invoice review, reconciliation checklists, and chatter documentation — with human sign-off at every…
Sales register: customer, invoice, gross amount, discount, VAT and TDS, net receivable, credit terms and balance.
$ npx skills add sickn33/agentic-awesome-skills --skill sales-accounting -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install sickn33/agentic-awesome-skills sales-accounting --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/sickn33/agentic-awesome-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/sales-accounting .claude/skills/sales-accounting && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "sales-accounting" agent skill from https://github.com/sickn33/agentic-awesome-skills/tree/main/skills/sales-accounting into .claude/skills/sales-accounting/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sales-accounting", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/sickn33/agentic-awesome-skills/tree/main/skills/sales-accountingType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add sickn33/agentic-awesome-skills --skill sales-accounting -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install sickn33/agentic-awesome-skills sales-accounting --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sickn33/agentic-awesome-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/sales-accounting .agents/skills/sales-accounting && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "sales-accounting" agent skill from https://github.com/sickn33/agentic-awesome-skills/tree/main/skills/sales-accounting into .agents/skills/sales-accounting/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sales-accounting", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sickn33/agentic-awesome-skills --skill sales-accounting -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install sickn33/agentic-awesome-skills sales-accounting --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sickn33/agentic-awesome-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/sales-accounting .cursor/skills/sales-accounting && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "sales-accounting" agent skill from https://github.com/sickn33/agentic-awesome-skills/tree/main/skills/sales-accounting into .cursor/skills/sales-accounting/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sales-accounting", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/sickn33/agentic-awesome-skills.git --path skills/sales-accounting--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add sickn33/agentic-awesome-skills --skill sales-accounting -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install sickn33/agentic-awesome-skills sales-accounting --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sickn33/agentic-awesome-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/sales-accounting .gemini/skills/sales-accounting && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "sales-accounting" agent skill from https://github.com/sickn33/agentic-awesome-skills/tree/main/skills/sales-accounting into .gemini/skills/sales-accounting/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sales-accounting", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install sickn33/agentic-awesome-skills sales-accountingInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add sickn33/agentic-awesome-skills --skill sales-accounting -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/sickn33/agentic-awesome-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/sales-accounting .github/skills/sales-accounting && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "sales-accounting" agent skill from https://github.com/sickn33/agentic-awesome-skills/tree/main/skills/sales-accounting into .github/skills/sales-accounting/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sales-accounting", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sickn33/agentic-awesome-skills --skill sales-accounting -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install sickn33/agentic-awesome-skills sales-accounting --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sickn33/agentic-awesome-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/sales-accounting .opencode/skills/sales-accounting && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "sales-accounting" agent skill from https://github.com/sickn33/agentic-awesome-skills/tree/main/skills/sales-accounting into .opencode/skills/sales-accounting/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sales-accounting", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
sales-accountingSales register: customer, invoice, gross amount, discount, VAT and TDS, net receivable, credit terms and balance.
Sales Accounting is an agent skill from sickn33/agentic-awesome-skills. Sales register: customer, invoice, gross amount, discount, VAT and TDS, net receivable, credit terms and balance. Use for sales accounting.
Its SKILL.md is about 6.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/common-pitfalls.md`, `references/related-skills.md` and `references/reusable-prompt.md`).
It sits in Business, Finance & HR, covering Accounting and bookkeeping and Forms and invoices. The repository describes itself as: AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,400+ agentic skills. Includes… The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit b84d35a. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are yaml, csv, sql, json and markdown).
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
json-schema.orgFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Sales Accounting loads about 6.4k tokens when it runs, and up to ~7.1k if it reads all its reference files. Until then it costs about 39 tokens; SKILL.md has 2,537 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from sickn33/agentic-awesome-skills at commit b84d35a, republished under its MIT licence (© sickn33). 2,537 words, ~6,378 tokens.
.claude/skills/sales-accounting/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.What it is: Sales invoices, the receivables they create, and the documents that support them.
Works out the smallest useful Sales Accounting setup for the business in front of it, then builds it only when asked. The default output is a short recommendation, not a spreadsheet. Artifacts - CSV, SQL DDL, JSON Schema, Notion mapping - are produced on request, from one field list so they cannot drift apart.
Scope of one row. This is a single-table skill and one row is one invoice carrying
one line item. It is deliberately not a multi-line billing engine. An invoice with
several items either becomes several rows that repeat the same Invoice Number, or is
kept in a separate line table alongside this one - whichever the business actually needs.
Decide that in Step 2, do not assume it.
Everything is conditional. Not every sale is on credit, not every invoice has an order or a challan, not every sale attracts VAT, and not every customer deducts TDS. Those fields exist to record what was confirmed; they are left unset when the answer is "not applicable" or "not known". Never fill them with a default to make the row look complete.
Layer: Layer 3: Record. Fits: Starter stage. Table code: n/a.
Also use it when the user describes invoicing, billing or tracking who has paid, or the same process happening in a spreadsheet, a document or someone's inbox.
Do not use it for: customer collections, tax filing, or legal advice. This skill produces empty templates only - it never holds or processes real customer or financial data.
Follow the shared execution contract. The module-specific rules below define only domain fields, decisions, calculations, and safety constraints.
Read the request and pick the intent before asking anything.
Then read everything the user has already said and work out which single missing answer would actually change the recommendation. If the request already contains enough to recommend, do not ask anything yet - go to Step 4. If the user is describing a problem rather than requesting a build, answer it first; a question is not owed.
Never open with a fixed question such as "How are sales invoices raised today?" when the request has already answered it.
Treat ambiguous replies as unanswered and ask which explicit option the user means. Record unknown values as Unknown; Unknown is not zero. A record must not be Done when a required check fails.
Skip anything the user already answered, in any earlier message. Ask the rest one at a time, and stop as soon as the remaining answers would not change the output.
Never invent an answer. If the user does not know, record it as unknown and carry on.
Hold the answers in this shape. It stays internal - it is not shown to the user unless they ask, and it never carries a value the user did not give.
module: sales-accounting
intent: null # setup | advice | review | fix | build | convert | export
scale: null # Starter | Growth | Scale, only if the answer changes it
areas:
"Volume": null
"Documents": null
"Taxes and credit": null
"Current process": null
"Outcome": null
requested_outputs: [] # csv | sql | json | notion | xlsx - requested formats only
confirmed_facts: [] # only what the user actually said
open_questions: [] # the unanswered ones, in the order worth askingBuild an already requested artifact without asking again. For advice-only requests, give a short recommendation and offer the relevant artifact. Use conditional language and name what is conditional.
Recommended approach: One invoice register, one row per invoice with a single line item. Link the sales order, delivery challan and source document only where the business actually raises them. Record VAT and TDS rates only where they were confirmed. For credit sales, add the credit terms, due date, amount received, balance, a payment status and an aging status; leave those unset for cash sales.
Why this one: A sales register that stops at the invoice total loses the receivable. Splitting payment state from aging state is what turns billing into a collections list - "paid" and "overdue" are different questions and one field cannot answer both.
Workflow: Documents prepared (where used) → Invoice issued → VAT register updated (where VAT applies) → Recorded → Receivable confirmed against the debtor ledger
Once the user asks for it, derive the fields from the confirmed context and emit the requested artifacts. For machine-readable text, keep prose outside the data; for files, provide a usable link. Report material validation failures or limitations separately.
A selected Notion output is rendered by notion-manual-import, so route the
Notion step there. When the user selects Notion, hand that step to
@notion-manual-import: it holds the CSV, the property
mapping, the import steps and the verification checklist, and it renders the Field
Reference below instead of defining a table of its own. Do not restate the mapping
here and do not improvise the import steps. Manual CSV and mapping outputs need no
connection. For requested workspace changes, follow the shared contract: verify actual
tool access and the target before writing. A user saying "connected" is not tool evidence.
Never ask for a Notion password or token.
The SQL below is written in PostgreSQL-flavoured DDL. SERIAL PRIMARY KEY and
TIMESTAMP DEFAULT NOW() are PostgreSQL-specific; on another engine use that engine's
identity column and default-timestamp syntax. created_at and updated_at are maintained
by the database and are not business fields - leave them out of the CSV, JSON Schema and
Notion mapping.
Sales Number,Customer,Customer PAN/VAT,Sales Order,Delivery Challan,Invoice Number,Invoice Date,Item Description,Quantity,UOM,Rate,Gross Amount,Discount,Taxable Value,VAT Rate %,VAT Amount,TDS Rate %,TDS Amount,Invoice Total,Net Receivable,Credit Terms (Days),Due Date,Payment Status,Aging Status,Amount Received,Balance,Ledger Account,Source Document,VAT Register Updated,Entry Verified,Prepared By,Notes,Sales ID
SAL-2026-0033,Example Customer Ltd,ZZZZZ0000Z,SO-2026-0094,DC-2026-0911,INV-2026-0733,2026-08-16,Corrugated carton packs printed,800,Nos,142.50,114000.00,2280.00,111720.00,18,20109.60,2,2234.40,131829.60,129595.20,30,2026-09-15,Part Paid,Overdue,50000.00,79595.20,Sales - Cartons,DOC-2026-0455,Done,In progress,Example Preparer,Credit sale net 30; order raised for this customer only.,-- PostgreSQL-flavoured DDL. See the note above for other engines.
CREATE TABLE sales_accounting (
sales_number VARCHAR(255),
customer VARCHAR(255),
customer_pan_vat VARCHAR(255),
sales_order VARCHAR(255), -- relation -> sales order database
delivery_challan VARCHAR(255), -- relation -> delivery challan database
invoice_number VARCHAR(255),
invoice_date DATE NOT NULL,
item_description VARCHAR(255),
quantity NUMERIC NOT NULL,
uom VARCHAR(100) NOT NULL,
rate NUMERIC(14,2) NOT NULL,
gross_amount NUMERIC(14,2) NOT NULL,
discount NUMERIC(14,2) NOT NULL,
taxable_value NUMERIC(14,2) NOT NULL,
vat_rate_pct NUMERIC,
vat_amount NUMERIC(14,2),
tds_rate_pct NUMERIC,
tds_amount NUMERIC(14,2),
invoice_total NUMERIC(14,2) NOT NULL,
net_receivable NUMERIC(14,2) NOT NULL,
credit_terms_days NUMERIC,
due_date DATE,
payment_status VARCHAR(100) NOT NULL,
aging_status VARCHAR(100) NOT NULL,
amount_received NUMERIC(14,2) NOT NULL,
balance NUMERIC(14,2) NOT NULL,
ledger_account VARCHAR(255),
source_document VARCHAR(255), -- relation -> source document register
vat_register_updated VARCHAR(100) NOT NULL,
entry_verified VARCHAR(100) NOT NULL,
prepared_by VARCHAR(255),
notes TEXT,
sales_id SERIAL PRIMARY KEY,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Sales Accounting",
"type": "object",
"additionalProperties": false,
"properties": {
"Sales Number": { "type": "string" },
"Customer": { "type": "string" },
"Customer PAN/VAT": { "type": "string" },
"Sales Order": { "type": "string" },
"Delivery Challan": { "type": "string" },
"Invoice Number": { "type": "string" },
"Invoice Date": { "type": "string", "format": "date" },
"Item Description": { "type": "string" },
"Quantity": { "type": "number" },
"UOM": { "type": "string" },
"Rate": { "type": "number" },
"Gross Amount": { "type": "number" },
"Discount": { "type": "number" },
"Taxable Value": { "type": "number" },
"VAT Rate %": { "type": "number" },
"VAT Amount": { "type": "number" },
"TDS Rate %": { "type": "number" },
"TDS Amount": { "type": "number" },
"Invoice Total": { "type": "number" },
"Net Receivable": { "type": "number" },
"Credit Terms (Days)": { "type": "number" },
"Due Date": { "type": "string", "format": "date" },
"Payment Status": { "type": "string" },
"Aging Status": { "type": "string" },
"Amount Received": { "type": "number" },
"Balance": { "type": "number" },
"Ledger Account": { "type": "string" },
"Source Document": { "type": "string" },
"VAT Register Updated": { "type": "string" },
"Entry Verified": { "type": "string" },
"Prepared By": { "type": "string" },
"Notes": { "type": "string" },
"Sales ID": { "type": "integer" }
},
"required": [
"Invoice Date",
"Quantity",
"UOM",
"Rate",
"Gross Amount",
"Discount",
"Taxable Value",
"Invoice Total",
"Net Receivable",
"Payment Status",
"Aging Status",
"Amount Received",
"Balance",
"VAT Register Updated",
"Entry Verified"
]
}| CSV column | Notion property | Set after import |
|---|---|---|
| Sales Number | Title | Use as the database title |
| Customer | Text | Leave as Text |
| Customer PAN/VAT | Text | Leave as Text |
| Sales Order | Relation (link to the sales order database) | Convert to Relation, link to the sales order database |
| Delivery Challan | Relation (link to the delivery challan database) | Convert to Relation, link to the delivery challan database |
| Invoice Number | Text | Leave as Text |
| Invoice Date | Date | Convert to Date |
| Item Description | Text | Leave as Text |
| Quantity | Number | Convert to Number |
| UOM | Select (add options after import) | Convert to Select, add options: "Nos", "Kg", "Litre", "Metre", "Set", "Hour", "Box", "Packet" |
| Rate | Number (format: currency) | Convert to Number, set format to Currency |
| Gross Amount | Number (format: currency) | Convert to Number, set format to Currency |
| Discount | Number (format: currency) | Convert to Number, set format to Currency |
| Taxable Value | Number (format: currency) | Convert to Number, set format to Currency |
| VAT Rate % | Number | Convert to Number |
| VAT Amount | Number (format: currency) | Convert to Number, set format to Currency |
| TDS Rate % | Number | Convert to Number |
| TDS Amount | Number (format: currency) | Convert to Number, set format to Currency |
| Invoice Total | Number (format: currency) | Convert to Number, set format to Currency |
| Net Receivable | Number (format: currency) | Convert to Number, set format to Currency |
| Credit Terms (Days) | Number | Convert to Number |
| Due Date | Date | Convert to Date |
| Payment Status | Select (add options after import) | Convert to Select, add options: "Unpaid", "Part Paid", "Paid", "Written Off" |
| Aging Status | Select (add options after import) | Convert to Select, add options: "Current", "Due Soon", "Overdue" |
| Amount Received | Number (format: currency) | Convert to Number, set format to Currency |
| Balance | Number (format: currency) | Convert to Number, set format to Currency |
| Ledger Account | Text | Leave as Text |
| Source Document | Relation (link to the source document register) | Convert to Relation, link to the source document register |
| VAT Register Updated | Select (add options after import) | Convert to Select, add options: "Not started", "In progress", "Blocked", "Done", "Cancelled" |
| Entry Verified | Select (add options after import) | Convert to Select, add options: "Not started", "In progress", "Blocked", "Done", "Cancelled" |
| Prepared By | Text | Leave as Text |
| Notes | Text | Leave as Text |
| Sales ID | Text (preserve source ID) | Keep imported IDs as Text; optionally add a separate Unique ID property |The rows above are documentation examples only. Emit empty templates unless the user explicitly requests examples. Money stays currency, dates stay date,
and anything pointing at another table stays relation.
| # | Field | Type | SQL | JSON Schema | Notion | CSV example |
|---|---|---|---|---|---|---|
| 1 | Sales Number | text | VARCHAR(255) | string | Text | SAL-2026-0033 |
| 2 | Customer | text | VARCHAR(255) | string | Text | Example Customer Ltd |
| 3 | Customer PAN/VAT | text | VARCHAR(255) | string | Text | ZZZZZ0000Z |
| 4 | Sales Order | relation | VARCHAR(255) | string | Relation (link to the sales order database) | SO-2026-0094 |
| 5 | Delivery Challan | relation | VARCHAR(255) | string | Relation (link to the delivery challan database) | DC-2026-0911 |
| 6 | Invoice Number | text | VARCHAR(255) | string | Text | INV-2026-0733 |
| 7 | Invoice Date | date | DATE | string, format: date | Date | 2026-08-16 |
| 8 | Item Description | text | VARCHAR(255) | string | Text | Corrugated carton packs printed |
| 9 | Quantity | number | NUMERIC | number | Number | 800 |
| 10 | UOM | select | VARCHAR(100) | string | Select (add options after import) | Nos |
| 11 | Rate | currency | NUMERIC(14,2) | number | Number (format: currency) | 142.50 |
| 12 | Gross Amount | currency | NUMERIC(14,2) | number | Number (format: currency) | 114000.00 |
| 13 | Discount | currency | NUMERIC(14,2) | number | Number (format: currency) | 2280.00 |
| 14 | Taxable Value | currency | NUMERIC(14,2) | number | Number (format: currency) | 111720.00 |
| 15 | VAT Rate % | number | NUMERIC | number | Number | 18 |
| 16 | VAT Amount | currency | NUMERIC(14,2) | number | Number (format: currency) | 20109.60 |
| 17 | TDS Rate % | number | NUMERIC | number | Number | 2 |
| 18 | TDS Amount | currency | NUMERIC(14,2) | number | Number (format: currency) | 2234.40 |
| 19 | Invoice Total | currency | NUMERIC(14,2) | number | Number (format: currency) | 131829.60 |
| 20 | Net Receivable | currency | NUMERIC(14,2) | number | Number (format: currency) | 129595.20 |
| 21 | Credit Terms (Days) | number | NUMERIC | number | Number | 30 |
| 22 | Due Date | date | DATE | string, format: date | Date | 2026-09-15 |
| 23 | Payment Status | select | VARCHAR(100) | string | Select (add options after import) | Part Paid |
| 24 | Aging Status | select | VARCHAR(100) | string | Select (add options after import) | Overdue |
| 25 | Amount Received | currency | NUMERIC(14,2) | number | Number (format: currency) | 50000.00 |
| 26 | Balance | currency | NUMERIC(14,2) | number | Number (format: currency) | 79595.20 |
| 27 | Ledger Account | text | VARCHAR(255) | string | Text | Sales - Cartons |
| 28 | Source Document | relation | VARCHAR(255) | string | Relation (link to the source document register) | DOC-2026-0455 |
| 29 | VAT Register Updated | select | VARCHAR(100) | string | Select (add options after import) | Done |
| 30 | Entry Verified | select | VARCHAR(100) | string | Select (add options after import) | In progress |
| 31 | Prepared By | text | VARCHAR(255) | string | Text | Example Preparer |
| 32 | Notes | long_text | TEXT | string | Text | Credit sale net 30; order raised for this customer only. |
| 33 | Sales ID | id | SERIAL PRIMARY KEY | integer | Text (preserve source ID) | (blank) |
The table above is the single source of truth. The CSV, SQL, JSON Schema and Notion mapping are all derived from it - never edit one without the others.
How the amounts relate, so a reviewer can check any row:
Gross Amount = Quantity x RateTaxable Value = Gross Amount - DiscountInvoice Total = Taxable Value + VAT Amount (equals Taxable Value when no VAT applies)Net Receivable = Invoice Total - TDS Amount (equals Invoice Total when no TDS applies)Balance = Net Receivable - Amount ReceivedDue Date = Invoice Date + Credit Terms (Days); both stay unset on a cash saleVAT Rate %, VAT Amount, TDS Rate %, TDS Amount, Credit Terms (Days) and
Due Date are optional. Set them only from a confirmed answer, and never carry a rate as a
universal default - a TDS rate belongs to a specific customer, contract and jurisdiction,
and VAT applicability is a fact about the business and the supply.
Payment Status is what has been received: Unpaid, Part Paid, Paid, Written Off.
Aging Status is how late it is against Due Date: Current, Due Soon, Overdue,
assessed as at the reporting date. They are separate because an invoice can be fully paid
and no longer aging, or unpaid and long overdue.
Sales Number is the internal reference used inside the business; Invoice Number is the
number the customer is given. They are different things and both are useful, so both are
kept - but if the business only has one, drop Sales Number and keep the invoice number.
Sales ID is an internal database identifier only. It exists so the target database can
address a row, it is left blank in the example, and it is not a business reference - do not
print it on an invoice or quote it to a customer.
UOM
Nos | Kg | Litre | Metre | Set | Hour | Box | PacketPayment Status
Unpaid | Part Paid | Paid | Written OffAging Status
Current | Due Soon | OverdueVAT Register Updated
Not started | In progress | Blocked | Done | CancelledEntry Verified
Not started | In progress | Blocked | Done | CancelledLink fields: Sales Order, Delivery Challan, Source Document
All three are optional. Many invoices carry none of them, and a cash sale usually carries none. Leave the cell unset rather than inventing a reference.
Sales Order -> the sales order database. Links to the order this invoice was raised
against, where the business raises orders at all.Delivery Challan -> the delivery challan database. Links to the challan evidencing
despatch, where the business issues them at all.Source Document -> the source document filing register (source-document-filing).
Links to the filed invoice and its supporting papers.Each is a genuine link to a named database, not a typed reference. If the business does not
run that register, keep the field as text and say so, rather than labelling plain text a
relation.
Prompt
We issue credit invoices and nobody can tell which customers have actually paid.Context first - one question per message, nothing already answered:
Q: Roughly how many lines does one invoice usually carry? A: Usually one, sometimes two.
Q: Do you always raise an order and a challan? A: Order only for bigger customers. No challan at all.
Q: Is VAT charged, and do any customers deduct TDS? A: VAT yes. TDS only two customers, different rates.
Recommended next step - offered, not built:
Based on what you have confirmed: one invoice register, one row per invoice. Because most of your invoices carry a single line, this stays a single table; for the two-item invoices, either add a second row repeating the invoice number or keep a separate line table - tell me which, and the build follows that choice.
Sales order links only where you raise one, so that field is optional. No challan field is worth carrying since you do not issue them - say the word and it comes out.
VAT applies, so the rate and amount are recorded. TDS stays optional, recorded per customer at whatever rate that customer actually deducts, rather than a fixed rate.
For your credit sales, credit terms, due date, amount received and balance, plus a payment status and a separate aging status - paid and overdue are different questions.
Workflow: Order raised where needed → Invoice issued → VAT register updated → Recorded → Receivable confirmed against the debtor ledger
Want the CSV, SQL DDL, JSON Schema and Notion mapping for this?
relation for anything that genuinely points at another table, text only for free text.currency, never text. Dates are date, never free text.Sales ID is a database identifier, not a business reference.Confidential.See the Common Pitfalls reference for the full guidance.
© sickn33, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files (references) in skills/sales-accounting of sickn33/agentic-awesome-skills.
Open the folder on GitHubat commit b84d35a
We found 5 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in sickn33/agentic-awesome-skills, which our catalogue first saw on October 7, 2026.
Sales Accounting next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Sales Accounting this skillsickn33/agentic-awesome-skills | 47k | 1 repos | ~6.4k | Automated safety check: Pass | MIT | |
| Odoo Month End Closeerpipe-org/mcp-odoo | 421 | — | ~753 | Automated safety check: Pass | MIT | |
| Journalkazukinagata/shinkoku | 365 | — | ~2.3k | Automated safety check: Pass | MIT | |
| Invoice Organizerdavila7/claude-code-templates | 33k | 12 repos | ~2.9k | Automated safety check: Pass | MIT | |
| Compte De ResultatWellApp-ai/Well | 345 | — | ~602 | Automated safety check: Pass | MIT | |
| Invoice Po Reconciliationpnp/sharepoint-skills | 133 | — | ~1.4k | Automated safety check: Pass | MIT |
erpipe-org/mcp-odoo
Drive a month-end accounting close on Odoo through odoo-mcp — AR/AP aging, open-item and draft-invoice review, reconciliation checklists, and chatter documentation — with human sign-off at every…
kazukinagata/shinkoku
This skill should be used when the user wants to record bookkeeping entries (仕訳), import transaction data from CSV files, receipts, or invoices, or manage their general ledger.
davila7/claude-code-templates
Automatically organizes invoices and receipts for tax preparation by reading messy files, extracting key information, renaming them consistently, and sorting them into logical folders.
WellApp-ai/Well
Build a profit & loss statement (compte de résultat / income statement) from a Well workspace.
pnp/sharepoint-skills
Reconciles one or more user-selected invoice files against matching purchase orders in the Purchase Order library.
WellApp-ai/Well
Run a month-end (or period) close checklist against a Well workspace — verify everything is reconciled and posted before the books are closed.
sickn33/agentic-awesome-skills
Implements an interface in one of two named color modes, iridescent white or colorful black, from a parameterized starter that reports measured color intensity.
sickn33/agentic-awesome-skills
Saves a user's project decisions, rules and preferences into a project-local mdbase so later sessions and other agents can recover the intent.
sickn33/agentic-awesome-skills
Keeps project decisions, research and verified results available across coding-agent sessions through LWC memory, a document Wiki graph and a CodeGraph code index.
sickn33/agentic-awesome-skills
Guides an agent through assessing its own owner for cofounder fit, publishing an approved profile, and ranking complementary profiles other agents published for their owners.
sickn33/agentic-awesome-skills
Integracao com WhatsApp Business Cloud API (Meta). An agent skill from sickn33/agentic-awesome-skills.
sickn33/agentic-awesome-skills
Acts as a proxy for the Cline CLI, dispatching coding tasks one at a time, monitoring runs by hard evidence, relaying decisions to you and learning per-project preferences.
Categories
Sales register: customer, invoice, gross amount, discount, VAT and TDS, net receivable, credit terms and balance. Sales Accounting is an agent skill from sickn33/agentic-awesome-skills. Sales register: customer, invoice, gross amount, discount, VAT and TDS, net receivable, credit terms and balance.
Sales Accounting fits situations like: sales accounting; tasks that involve Accounting and bookkeeping; tasks that involve Forms and invoices.
Run `npx skills add sickn33/agentic-awesome-skills --skill sales-accounting -a claude-code`. Or copy the skill folder (skills/sales-accounting in sickn33/agentic-awesome-skills) into .claude/skills/sales-accounting in your project. Claude Code loads it when a task matches its description.
Run `npx skills add sickn33/agentic-awesome-skills --skill sales-accounting -a codex`. Or copy the skill folder (skills/sales-accounting in sickn33/agentic-awesome-skills) into .agents/skills/sales-accounting in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add sickn33/agentic-awesome-skills --skill sales-accounting -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/sales-accounting, .gemini/skills/sales-accounting, .github/skills/sales-accounting and .opencode/skills/sales-accounting in your project.
SKILL.md names no scripts, command-line tools or credentials: Sales Accounting is instructions for the agent only.
SKILL.md names 1 domain. In commands or code: json-schema.org; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Sales Accounting is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.4k tokens (SKILL.md is roughly 26k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 732 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Sales Accounting: Odoo Month End Close (erpipe-org/mcp-odoo, 421 stars), Journal (kazukinagata/shinkoku, 365 stars), Invoice Organizer (davila7/claude-code-templates, 33k stars) and Compte De Resultat (WellApp-ai/Well, 345 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
sickn33 (a GitHub user) maintains it in sickn33/agentic-awesome-skills, which has 47,405 GitHub stars. The repository holds 1,497 skills in this directory. The repository was last updated on October 9, 2026.
Source: sickn33/agentic-awesome-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.