用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/vramrick/openclaw-skills --skill tally-prime命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
全能高级前端研发工程师技能。擅长AI时代前沿技术栈(React最新 + shadcn/ui + Tailwind CSS v4 + TypeScript + Next.js),精通动效库与交互特效开发。采用Glue Code风格快速实现代码,强调高质量产品体验与高度友好的UI视觉规范。在组件调用、交互特效、全局Theme上保持高度规范:绝不重复造轮子,相同逻辑出现两次即封装为组件。具备安全意识,防范各类注入攻击。开发页面具有高度自适应能力,响应式设计贯穿始终。当用户无特殊技术栈要求时,默认采用主流前沿技术栈。
Read, write, append, and list local files in the session's working directory. Use when you need to persist output to disk, read input files, or manipulate file system safely. Supports text files, JSON, CSV, Markdown.
超级简历 WonderCV 出品,3000 万用户信赖。简历分析、段落改写、JD 岗位匹配、自动匹配职位、PDF 导出、AI 求职导师(面试准备/薪资谈判/职业规划/多版本简历策略)。 触发条件:用户提供简历、要求简历点评/打分/反馈、希望改写某个简历部分、 希望将简历与岗位 JD 或校招岗位匹配、咨询求职建议或面试准备,或提到 CV/简历/求职/校招。 不触发条件:用户讨论普通写作(非简历)、询问其他文档, 或讨论与求职和职业发展无关的话题。
基于 SOC 职业分类
正在显示 SKILL.md
| emoji | 🧾 |
| name | tally-prime |
| version | 0.1.0 |
| author | Maxxit |
| description | Interact with TallyPrime running locally to read reports and post accounting entries. |
| disableModelInvocation | false |
| requires | {"env":["TALLY_URL"]} |
| metadata | {"openclaw":{"requiredEnv":["TALLY_URL"],"bins":["curl"],"primaryCredential":"TALLY_URL"}} |
Connect to a locally running TallyPrime instance and perform read/write operations via its XML-over-HTTP API. All requests are HTTP POST to $TALLY_URL (default: http://localhost:9000) with XML body.
TallyPrime must be open and running on the user's machine. There is no cloud API — all communication is local.
Company name: CAs manage multiple companies. Always get the company name from the user — either they'll mention it in their message, or ask them before proceeding. Never assume.
The problem for CAs: You manage 10+ businesses. A client sends a purchase bill PDF on WhatsApp. You have to open Tally, find the right company, check if the vendor ledger exists, create it if not, then manually type every field. This takes 5–10 minutes per invoice.
With this skill: Client sends the PDF to your OpenClaw WhatsApp number. The agent reads the invoice, extracts all fields, checks/creates the vendor ledger, and posts the purchase voucher — in under 30 seconds.
1. Receive PDF/image of purchase invoice via WhatsApp
2. Extract invoice fields using vision (vendor name, GSTIN, date, line items, amounts, tax)
3. Switch to the correct Tally company (ask user if unclear)
4. Check if vendor ledger exists → create it if not (under Sundry Creditors)
5. Check if expense/purchase ledger exists → create if not
6. Check if GST ledger exists → create if not
7. Post Purchase voucher with all ledger entries
8. Confirm back to user with voucher number and summary
YYYYMMDD — no dashes or slashes. March 2, 2026 → 20260302.GUID when creating vouchers to prevent duplicates on retry.AMOUNT is negative (e.g., -50000), ISDEEMEDPOSITIVE = No for creditorsAMOUNT is positive (e.g., 50000), ISDEEMEDPOSITIVE = No"Voucher date is missing" error = date is outside the company's configured financial year. Ask user to check Tally's company period settings."Ledger X does not exist" error = create the ledger first, then retry the voucher.Always verify Tally is running before any operation.
curl -s --max-time 5 "$TALLY_URL"
Expected response:
<RESPONSE>TallyPrime Server is Running</RESPONSE>
If connection is refused or times out, tell the user: "TallyPrime doesn't seem to be running. Please open TallyPrime on your computer and try again."
Before creating any voucher, verify all referenced ledgers exist.
curl -s -X POST "$TALLY_URL" \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0" encoding="utf-8"?>
<ENVELOPE>
<HEADER><TALLYREQUEST>Export Data</TALLYREQUEST></HEADER>
<BODY>
<EXPORTDATA>
<REQUESTDESC>
<REPORTNAME>List of Accounts</REPORTNAME>
<STATICVARIABLES>
<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
<SVCURRENTCOMPANY>COMPANY_NAME</SVCURRENTCOMPANY>
</STATICVARIABLES>
</REQUESTDESC>
</EXPORTDATA>
</BODY>
</ENVELOPE>'
Parse the XML response and grep for <NAME>LEDGER_NAME</NAME> to confirm existence.
Use REPORTNAME=All Masters for all master creation.
curl -s -X POST "$TALLY_URL" \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0" encoding="utf-8"?>
<ENVELOPE>
<HEADER><TALLYREQUEST>Import Data</TALLYREQUEST></HEADER>
<BODY>
<IMPORTDATA>
<REQUESTDESC>
<REPORTNAME>All Masters</REPORTNAME>
<STATICVARIABLES>
<SVCURRENTCOMPANY>COMPANY_NAME</SVCURRENTCOMPANY>
</STATICVARIABLES>
</REQUESTDESC>
<REQUESTDATA>
<TALLYMESSAGE xmlns:UDF="TallyUDF">
<LEDGER NAME="LEDGER_NAME" ACTION="Create">
<NAME>LEDGER_NAME</NAME>
<PARENT>PARENT_GROUP</PARENT>
<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
</LEDGER>
</TALLYMESSAGE>
</REQUESTDATA>
</IMPORTDATA>
</BODY>
</ENVELOPE>'
| Ledger Type | Parent Group | ISDEEMEDPOSITIVE |
|---|---|---|
| Customer (debtor) | Sundry Debtors | Yes |
| Vendor (creditor) | Sundry Creditors | No |
| Sales income | Sales Accounts | No |
| Purchase expense | Purchase Accounts | No |
| Bank account | Bank Accounts | Yes |
| Cash | Cash-in-Hand | Yes |
| GST Output (sales tax) | Duties & Taxes | No |
| GST Input (purchase tax) | Duties & Taxes | Yes |
| Other expense | Indirect Expenses | No |
| Direct cost/COGS | Direct Expenses | No |
Success response:
<RESPONSE><CREATED>1</CREATED><ERRORS>0</ERRORS></RESPONSE>
Use REPORTNAME=Vouchers for all voucher creation.
Use when: A vendor sends a bill/invoice for goods or services purchased.
Accounting entry:
curl -s -X POST "$TALLY_URL" \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0" encoding="utf-8"?>
<ENVELOPE>
<HEADER><TALLYREQUEST>Import Data</TALLYREQUEST></HEADER>
<BODY>
<IMPORTDATA>
<REQUESTDESC>
<REPORTNAME>Vouchers</REPORTNAME>
<STATICVARIABLES>
<SVCURRENTCOMPANY>COMPANY_NAME</SVCURRENTCOMPANY>
</STATICVARIABLES>
</REQUESTDESC>
<REQUESTDATA>
<TALLYMESSAGE xmlns:UDF="TallyUDF">
<VOUCHER VCHTYPE="Purchase" ACTION="Create">
<GUID>UNIQUE_GUID_HERE</GUID>
<DATE>YYYYMMDD</DATE>
<VOUCHERTYPENAME>Purchase</VOUCHERTYPENAME>
<VOUCHERNUMBER>INVOICE_NUMBER</VOUCHERNUMBER>
<NARRATION>Purchase from VENDOR_NAME | Invoice: INVOICE_NUMBER</NARRATION>
<ISINVOICE>Yes</ISINVOICE>
<PARTYLEDGERNAME>VENDOR_LEDGER_NAME</PARTYLEDGERNAME>
<!-- Debit: Purchase/Expense account -->
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>PURCHASE_LEDGER_NAME</LEDGERNAME>
<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
<AMOUNT>-BASE_AMOUNT</AMOUNT>
</ALLLEDGERENTRIES.LIST>
<!-- Debit: GST Input (if applicable, 18% example) -->
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>GST Input Credit</LEDGERNAME>
<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
<AMOUNT>-GST_AMOUNT</AMOUNT>
</ALLLEDGERENTRIES.LIST>
<!-- Credit: Vendor (payable) -->
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>VENDOR_LEDGER_NAME</LEDGERNAME>
<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
<AMOUNT>TOTAL_AMOUNT</AMOUNT>
</ALLLEDGERENTRIES.LIST>
</VOUCHER>
</TALLYMESSAGE>
</REQUESTDATA>
</IMPORTDATA>
</BODY>
</ENVELOPE>'
Amount signs for Purchase voucher:
- Purchase/expense:
AMOUNT = -(base amount)→ e.g.,-42373- GST Input:
AMOUNT = -(gst amount)→ e.g.,-7627- Vendor (credit):
AMOUNT = +(total invoice amount)→ e.g.,50000- All amounts must balance to zero.
Use when: Business raises an invoice to a customer for goods/services sold.
curl -s -X POST "$TALLY_URL" \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0" encoding="utf-8"?>
<ENVELOPE>
<HEADER><TALLYREQUEST>Import Data</TALLYREQUEST></HEADER>
<BODY>
<IMPORTDATA>
<REQUESTDESC>
<REPORTNAME>Vouchers</REPORTNAME>
<STATICVARIABLES>
<SVCURRENTCOMPANY>COMPANY_NAME</SVCURRENTCOMPANY>
</STATICVARIABLES>
</REQUESTDESC>
<REQUESTDATA>
<TALLYMESSAGE xmlns:UDF="TallyUDF">
<VOUCHER VCHTYPE="Sales" ACTION="Create">
<GUID>UNIQUE_GUID_HERE</GUID>
<DATE>YYYYMMDD</DATE>
<VOUCHERTYPENAME>Sales</VOUCHERTYPENAME>
<VOUCHERNUMBER>INVOICE_NUMBER</VOUCHERNUMBER>
<NARRATION>Sales invoice to CUSTOMER_NAME</NARRATION>
<ISINVOICE>Yes</ISINVOICE>
<PARTYLEDGERNAME>CUSTOMER_LEDGER_NAME</PARTYLEDGERNAME>
<!-- Debit: Customer (receivable) -->
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>CUSTOMER_LEDGER_NAME</LEDGERNAME>
<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
<AMOUNT>-TOTAL_AMOUNT</AMOUNT>
</ALLLEDGERENTRIES.LIST>
<!-- Credit: Sales account -->
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>SALES_LEDGER_NAME</LEDGERNAME>
<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
<AMOUNT>BASE_AMOUNT</AMOUNT>
</ALLLEDGERENTRIES.LIST>
<!-- Credit: GST Output (if applicable) -->
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>GST Output</LEDGERNAME>
<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
<AMOUNT>GST_AMOUNT</AMOUNT>
</ALLLEDGERENTRIES.LIST>
</VOUCHER>
</TALLYMESSAGE>
</REQUESTDATA>
</IMPORTDATA>
</BODY>
</ENVELOPE>'
Use when: Business pays a vendor, rent, salary, or any expense.
curl -s -X POST "$TALLY_URL" \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0" encoding="utf-8"?>
<ENVELOPE>
<HEADER><TALLYREQUEST>Import Data</TALLYREQUEST></HEADER>
<BODY>
<IMPORTDATA>
<REQUESTDESC>
<REPORTNAME>Vouchers</REPORTNAME>
<STATICVARIABLES>
<SVCURRENTCOMPANY>COMPANY_NAME</SVCURRENTCOMPANY>
</STATICVARIABLES>
</REQUESTDESC>
<REQUESTDATA>
<TALLYMESSAGE xmlns:UDF="TallyUDF">
<VOUCHER VCHTYPE="Payment" ACTION="Create">
<GUID>UNIQUE_GUID_HERE</GUID>
<DATE>YYYYMMDD</DATE>
<VOUCHERTYPENAME>Payment</VOUCHERTYPENAME>
<NARRATION>Payment to PAYEE_NAME</NARRATION>
<ISINVOICE>No</ISINVOICE>
<PARTYLEDGERNAME>PAYEE_LEDGER_NAME</PARTYLEDGERNAME>
<!-- Debit: Who is being paid -->
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>PAYEE_LEDGER_NAME</LEDGERNAME>
<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
<AMOUNT>-AMOUNT</AMOUNT>
</ALLLEDGERENTRIES.LIST>
<!-- Credit: Bank / Cash (source of payment) -->
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>BANK_OR_CASH_LEDGER</LEDGERNAME>
<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
<AMOUNT>AMOUNT</AMOUNT>
</ALLLEDGERENTRIES.LIST>
</VOUCHER>
</TALLYMESSAGE>
</REQUESTDATA>
</IMPORTDATA>
</BODY>
</ENVELOPE>'
Use when: Business receives money from a customer.
curl -s -X POST "$TALLY_URL" \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0" encoding="utf-8"?>
<ENVELOPE>
<HEADER><TALLYREQUEST>Import Data</TALLYREQUEST></HEADER>
<BODY>
<IMPORTDATA>
<REQUESTDESC>
<REPORTNAME>Vouchers</REPORTNAME>
<STATICVARIABLES>
<SVCURRENTCOMPANY>COMPANY_NAME</SVCURRENTCOMPANY>
</STATICVARIABLES>
</REQUESTDESC>
<REQUESTDATA>
<TALLYMESSAGE xmlns:UDF="TallyUDF">
<VOUCHER VCHTYPE="Receipt" ACTION="Create">
<GUID>UNIQUE_GUID_HERE</GUID>
<DATE>YYYYMMDD</DATE>
<VOUCHERTYPENAME>Receipt</VOUCHERTYPENAME>
<NARRATION>Receipt from CUSTOMER_NAME</NARRATION>
<ISINVOICE>No</ISINVOICE>
<PARTYLEDGERNAME>CUSTOMER_LEDGER_NAME</PARTYLEDGERNAME>
<!-- Debit: Bank / Cash (destination) -->
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>BANK_OR_CASH_LEDGER</LEDGERNAME>
<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
<AMOUNT>-AMOUNT</AMOUNT>
</ALLLEDGERENTRIES.LIST>
<!-- Credit: Customer ledger (reduces receivable) -->
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>CUSTOMER_LEDGER_NAME</LEDGERNAME>
<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
<AMOUNT>AMOUNT</AMOUNT>
</ALLLEDGERENTRIES.LIST>
</VOUCHER>
</TALLYMESSAGE>
</REQUESTDATA>
</IMPORTDATA>
</BODY>
</ENVELOPE>'
Use when: GST adjustments, provisions, depreciation, accruals, or any internal accounting entry.
curl -s -X POST "$TALLY_URL" \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0" encoding="utf-8"?>
<ENVELOPE>
<HEADER><TALLYREQUEST>Import Data</TALLYREQUEST></HEADER>
<BODY>
<IMPORTDATA>
<REQUESTDESC>
<REPORTNAME>Vouchers</REPORTNAME>
<STATICVARIABLES>
<SVCURRENTCOMPANY>COMPANY_NAME</SVCURRENTCOMPANY>
</STATICVARIABLES>
</REQUESTDESC>
<REQUESTDATA>
<TALLYMESSAGE xmlns:UDF="TallyUDF">
<VOUCHER VCHTYPE="Journal" ACTION="Create">
<GUID>UNIQUE_GUID_HERE</GUID>
<DATE>YYYYMMDD</DATE>
<VOUCHERTYPENAME>Journal</VOUCHERTYPENAME>
<NARRATION>NARRATION_TEXT</NARRATION>
<ISINVOICE>No</ISINVOICE>
<!-- Debit entry -->
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>DEBIT_LEDGER</LEDGERNAME>
<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
<AMOUNT>-AMOUNT</AMOUNT>
</ALLLEDGERENTRIES.LIST>
<!-- Credit entry -->
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>CREDIT_LEDGER</LEDGERNAME>
<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
<AMOUNT>AMOUNT</AMOUNT>
</ALLLEDGERENTRIES.LIST>
</VOUCHER>
</TALLYMESSAGE>
</REQUESTDATA>
</IMPORTDATA>
</BODY>
</ENVELOPE>'
curl -s -X POST "$TALLY_URL" \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0" encoding="utf-8"?>
<ENVELOPE>
<HEADER><TALLYREQUEST>Export Data</TALLYREQUEST></HEADER>
<BODY>
<EXPORTDATA>
<REQUESTDESC>
<REPORTNAME>Day Book</REPORTNAME>
<STATICVARIABLES>
<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
<SVCURRENTCOMPANY>COMPANY_NAME</SVCURRENTCOMPANY>
<SVFROMDATE>FROM_DATE_YYYYMMDD</SVFROMDATE>
<SVTODATE>TO_DATE_YYYYMMDD</SVTODATE>
</STATICVARIABLES>
</REQUESTDESC>
</EXPORTDATA>
</BODY>
</ENVELOPE>'
curl -s -X POST "$TALLY_URL" \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0" encoding="utf-8"?>
<ENVELOPE>
<HEADER><TALLYREQUEST>Export Data</TALLYREQUEST></HEADER>
<BODY>
<EXPORTDATA>
<REQUESTDESC>
<REPORTNAME>Balance Sheet</REPORTNAME>
<STATICVARIABLES>
<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
<SVCURRENTCOMPANY>COMPANY_NAME</SVCURRENTCOMPANY>
</STATICVARIABLES>
</REQUESTDESC>
</EXPORTDATA>
</BODY>
</ENVELOPE>'
curl -s -X POST "$TALLY_URL" \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0" encoding="utf-8"?>
<ENVELOPE>
<HEADER><TALLYREQUEST>Export Data</TALLYREQUEST></HEADER>
<BODY>
<EXPORTDATA>
<REQUESTDESC>
<REPORTNAME>Trial Balance</REPORTNAME>
<STATICVARIABLES>
<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
<SVCURRENTCOMPANY>COMPANY_NAME</SVCURRENTCOMPANY>
<SVFROMDATE>FROM_DATE_YYYYMMDD</SVFROMDATE>
<SVTODATE>TO_DATE_YYYYMMDD</SVTODATE>
</STATICVARIABLES>
</REQUESTDESC>
</EXPORTDATA>
</BODY>
</ENVELOPE>'
curl -s -X POST "$TALLY_URL" \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0" encoding="utf-8"?>
<ENVELOPE>
<HEADER><TALLYREQUEST>Export Data</TALLYREQUEST></HEADER>
<BODY>
<EXPORTDATA>
<REQUESTDESC>
<REPORTNAME>Ledger Vouchers</REPORTNAME>
<STATICVARIABLES>
<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
<SVCURRENTCOMPANY>COMPANY_NAME</SVCURRENTCOMPANY>
<SVLEDGERNAME>LEDGER_NAME</SVLEDGERNAME>
<SVFROMDATE>FROM_DATE_YYYYMMDD</SVFROMDATE>
<SVTODATE>TO_DATE_YYYYMMDD</SVTODATE>
</STATICVARIABLES>
</REQUESTDESC>
</EXPORTDATA>
</BODY>
</ENVELOPE>'
Scenario: Client sends a PDF invoice from "Reliance Retail Ltd." for ₹59,000 (₹50,000 base + ₹9,000 GST @ 18%), dated 15-Jan-2026, invoice no. RRL/2026/00123.
Use your vision capability to extract:
Vendor: Reliance Retail Ltd.
Vendor GSTIN: 27AABCR1234A1Z5
Invoice No: RRL/2026/00123
Date: 15-Jan-2026 → 20260115
Base Amount: ₹50,000
GST (18%): ₹9,000
Total: ₹59,000
Description: Office Supplies
Check if these 3 ledgers exist. Create any that are missing:
| Ledger | Group | Action |
|---|---|---|
Reliance Retail Ltd. | Sundry Creditors | Create if missing |
Office Supplies | Purchase Accounts | Create if missing |
GST Input Credit | Duties & Taxes | Create if missing |
curl -s -X POST "$TALLY_URL" \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0" encoding="utf-8"?>
<ENVELOPE>
<HEADER><TALLYREQUEST>Import Data</TALLYREQUEST></HEADER>
<BODY>
<IMPORTDATA>
<REQUESTDESC>
<REPORTNAME>Vouchers</REPORTNAME>
<STATICVARIABLES>
<SVCURRENTCOMPANY>COMPANY_NAME</SVCURRENTCOMPANY>
</STATICVARIABLES>
</REQUESTDESC>
<REQUESTDATA>
<TALLYMESSAGE xmlns:UDF="TallyUDF">
<VOUCHER VCHTYPE="Purchase" ACTION="Create">
<GUID>rrl-2026-00123-purchase</GUID>
<DATE>20260115</DATE>
<VOUCHERTYPENAME>Purchase</VOUCHERTYPENAME>
<VOUCHERNUMBER>RRL/2026/00123</VOUCHERNUMBER>
<NARRATION>Purchase from Reliance Retail Ltd. | Invoice: RRL/2026/00123 | Office Supplies</NARRATION>
<ISINVOICE>Yes</ISINVOICE>
<PARTYLEDGERNAME>Reliance Retail Ltd.</PARTYLEDGERNAME>
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>Office Supplies</LEDGERNAME>
<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
<AMOUNT>-50000</AMOUNT>
</ALLLEDGERENTRIES.LIST>
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>GST Input Credit</LEDGERNAME>
<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
<AMOUNT>-9000</AMOUNT>
</ALLLEDGERENTRIES.LIST>
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>Reliance Retail Ltd.</LEDGERNAME>
<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
<AMOUNT>59000</AMOUNT>
</ALLLEDGERENTRIES.LIST>
</VOUCHER>
</TALLYMESSAGE>
</REQUESTDATA>
</IMPORTDATA>
</BODY>
</ENVELOPE>'
On success (CREATED=1), reply:
✅ Purchase entry booked in Tally
Field Value Company (as confirmed by user) Vendor Reliance Retail Ltd. Invoice No RRL/2026/00123 Date 15 Jan 2026 Base Amount ₹50,000 GST (18%) ₹9,000 Total ₹59,000 The vendor ledger "Reliance Retail Ltd." was created under Sundry Creditors.
| Error Message | Cause | Fix |
|---|---|---|
TallyPrime Server is Running not returned | Tally not open | Tell user to open TallyPrime |
Ledger 'X' does not exist | Ledger missing | Create it via Step 2, then retry |
Voucher date is missing | Date outside company's FY | Ask user: "What financial year is configured in your Tally company?" |
The date X is Out of Range | Same as above | Same fix |
Could not find Report 'X' | Wrong report name | Use exact report names from this skill |
CREATED=0, EXCEPTIONS=1 | Generic data error | Check narration for special characters — escape & as & |
Always generate a unique GUID per voucher to prevent duplicates. A good pattern:
{company-short}-{voucher-type}-{invoice-number}-{date}
Examples:
ape-purchase-rrl202600123-20260115ape-sales-si001-20260302ape-payment-hdfc-20260115If the same GUID is sent twice, Tally will update the existing record instead of creating a duplicate — this makes the operation safely idempotent.
CAs typically manage 10–50+ companies in a single Tally installation. Handle company context like this:
SVCURRENTCOMPANY in the XML.List of Accounts without a SVCURRENTCOMPANY filter, or simply ask the user to confirm the exact spelling as it appears in Tally.Note: The company name in
SVCURRENTCOMPANYmust match exactly (case-sensitive) how it appears in Tally. Even a trailing space or different capitalisation will cause the request to fail silently or return data from the wrong company.