Create purchase invoice in NexERP database
Scanned 2/12/2026
Install via CLI
openskills install majiayu000/claude-skill-registry---
name: create-purchase-invoice
description: Create purchase invoice in NexERP database
---
# Create Purchase Invoice Skill
Creates a purchase invoice (PI) record in the NexERP system. A purchase invoice represents goods/services received from a supplier with payment obligations.
## Usage
```bash
python main.py \
--supplier-name "ACTION BOLT" \
--invoice-date "2025-10-26" \
--items '[{"product_name": "WIRE D1.2", "quantity": 25, "unit_price": 10.50}]' \
--json
```
## Required Fields
- `--supplier-name`: Supplier name (fuzzy match supported)
- `--invoice-date`: Invoice date (YYYY-MM-DD format)
- `--items`: JSON array of line items
### Item Fields
Each item must have:
- `product_name`: Product name or SKU (fuzzy match supported)
- `quantity`: Quantity ordered (positive number)
- `unit_price`: Price per unit
Optional item fields:
- `discount`: Line discount percentage (0-100)
- `remark`: Line item remark/notes
## Optional Invoice Fields
- `--supplier-ref`: Supplier's invoice reference number
- `--tax-rate`: Tax rate as decimal (default: 0.08 for 8% SST)
- `--remark`: Invoice remark/notes
## Output
Returns JSON with invoice details:
```json
{
"success": true,
"invoice_number": "PI25100047",
"txn_id": 2185,
"supplier": "ACTION BOLT & NUTS SDN BHD",
"invoice_date": "2025-10-26",
"items_count": 1,
"subtotal": 262.50,
"tax": 21.00,
"grand_total": 283.50
}
```
## Error Handling
Returns error JSON if:
- Supplier not found (suggests alternatives)
- Product not found for any item
- Invalid date format
- Invalid amounts or quantities
- Database connection fails
## Database Tables
Writes to 3 tables:
1. `tbl_pinvoice_txn` - Invoice header
2. `tbl_pinvoice_item` - Line items
3. `tbl_pinvoice_movement` - Stock movement audit
## Document Number Format
Invoice numbers follow pattern: `PI{YY}{MM}{NNNN}`
- Example: `PI25100047` = October 2025, invoice #47
## Business Rules
- Supplier must exist and be active (Status_i = 1)
- Products must exist in tbl_product_code
- Invoice date must be valid date format
- Quantities must be positive
- Amounts rounded to 2 decimal places
- Default tax rate: 8% (Malaysian SST)
- Automatic calculation: SubTotal + Tax = GrandTotal
## Integration
This skill is called by the Database Agent after the Document Agent extracts data from uploaded purchase invoice images.
## Examples
### Single Item Invoice
```bash
python main.py \
--supplier-name "ACTION" \
--invoice-date "2025-10-26" \
--items '[{"product_name": "WIRE D1.2-L105.8", "quantity": 25, "unit_price": 10.50}]' \
--json
```
### Multi-Item Invoice
```bash
python main.py \
--supplier-name "NINGBO" \
--invoice-date "2025-10-26" \
--supplier-ref "INV-2025-ABC" \
--items '[
{"product_name": "WIRE D1.2", "quantity": 100, "unit_price": 5.00},
{"product_name": "BOLT M10", "quantity": 500, "unit_price": 0.50, "discount": 10}
]' \
--remark "Urgent delivery" \
--json
```
### With Custom Tax Rate
```bash
python main.py \
--supplier-name "Dell" \
--invoice-date "2025-10-26" \
--items '[{"product_name": "Laptop", "quantity": 1, "unit_price": 3500.00}]' \
--tax-rate 0.06 \
--json
```
## Testing
```bash
# Test with verbose output
python main.py --supplier-name "ACTION" --invoice-date "2025-10-26" \
--items '[{"product_name": "WIRE", "quantity": 10, "unit_price": 5.00}]' \
--verbose --json
# Test error handling (invalid supplier)
python main.py --supplier-name "XYZ_NONEXISTENT" --invoice-date "2025-10-26" \
--items '[{"product_name": "WIRE", "quantity": 10, "unit_price": 5.00}]' \
--json
```
## Exit Codes
- `0`: Success
- `1`: Error (invalid input, database error)
- `2`: Not found (supplier/product not found)
No comments yet. Be the first to comment!