From 31st-ai
Enter vendor bills, pay existing bills, record immediate-pay expenses, apply vendor credits, and review AP aging. Activate when the user mentions bills, vendor payments, bill pay, vendor credits, outstanding payables, AP aging, or vendor spending.
How this skill is triggered — by the user, by Claude, or both
Slash command
/31st-ai:accounts-payableThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
| Situation | Tool path |
| Situation | Tool path |
|---|---|
| Vendor invoice received, pay later | qbBill → qbBillPayment |
| Pay an existing outstanding bill | qbBillPayment |
| Expense already paid (card/ACH/check) | qbExpense |
| Vendor refund or credit memo | qbCredit(creditType="vendor") → qbBillPayment |
| Review outstanding AP, DPO, vendor spend | qbReports(AgedPayables) |
qbMasterData(detailedInfo="vendor", filter=vendorName) — resolve vendorId; >1 matches → MULTI-VENDOR AMBIGUITY GUARD blocks; ask or flagqbFetchTransactions(transactionType="Bill", outstandingOnly=true, entityId=vendorId)
Outstanding status is not date-bounded — a date-scoped call silently misses old open bills.
qbBillPayment workflow instead of creating a duplicate billqbFetchTransactions(entityId=vendorId, lookbackDays=365) — use dominant account only if all 5 criteria pass: (a) ≥3 txns in last 365 days, (b) dominant ≥70%, (c) no second account ≥20%, (d) amount within 5× median, (e) most recent dominant txn <180 days old. Any criterion fails → ask or flagForReview (CONSISTENCY RULE GUARD)qbMasterData(entityTypes=["account"], filter=accountName) — verify account IDqbBill(vendorId, txnDate, dueDate, lines=[{accountId, amount, description}], docNumber, memo)qbAttachFile(entityType="Bill", entityId=billId, ...) — attach invoice when availableqbFetchTransactions(transactionType="Bill", outstandingOnly=true, entityId=vendorId)qbMasterData(entityTypes=["account"], filter=paymentAccountName) — Bank or CC accounts onlyqbBillPayment(vendorId, paymentDate, bankAccountId, bills=[{billId, amount}], totalAmount, memo)qbAttachFile(entityType="BillPayment", entityId=billPaymentId, ...)Batch (3+ same-type payments): qbBatch(operationType="BillPayment", operations=[...]) — BATCH SAFETY GUARD requires homogeneous type + verified IDs + date-range duplicate check covering all items.
qbMasterData for vendor + source account (Bank or CC)qbFetchTransactions(transactionType="Bill", outstandingOnly=true, entityId=vendorId) — EXPENSE TYPE GUARD blocks qbExpense if outstanding bill exists; route to qbBillPayment insteadqbExpense(paymentType, accountId=sourceAccountId, vendorId, txnDate, lines=[{accountId=categoryAccountId, amount}], memo)qbAttachFile(entityType="Purchase", entityId=purchaseId, ...) — use "Purchase" not "Expense" (QB API quirk for expense attachments)qbFetchTransactions(transactionType="VendorCredit", entityId=vendorId, ±3 days)qbCredit(creditType="vendor", vendorId, txnDate, lines, memo)qbBillPayment(..., bills=[{billId, amount, txnType="Bill"}, {billId=vendorCreditId, amount, txnType="VendorCredit"}], totalAmount=netOrZero)qbReports(reportType="AgedPayables", asOfDate) + qbReports(reportType="AgedPayablesDetail", asOfDate)
DPO = AP / (Annual COGS / 365) — pull qbReports(ProfitAndLoss, fiscalYear) for annual COGS.
Flag: vendor spend up 20%+ without corresponding revenue growth. Delegate bank matching / reconciliation to bank-reconciliation skill.
qbExpense when outstanding bill exists — always run open-doc check before qbExpense"Purchase" — not "Expense"; QB API uses the Purchase entity internallyqbBill — "net 30", "pay later", "received a bill" signals a payable, not a paid expenseProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
npx claudepluginhub naga-deepledger/31st-ai-plugin --plugin 31st-ai