178 lines
6.6 KiB
Markdown
178 lines
6.6 KiB
Markdown
# Tire Products For Disposal Act - Implementation Summary
|
|
|
|
**Date:** 2026-01-29
|
|
**Status:** ✅ Completed
|
|
|
|
## Overview
|
|
|
|
Successfully implemented support for "Tire Products For Disposal Act" in Purchase Invoice e-taxes integration. This follows the same pattern as "Metal Scrap Reception Act" with identical workflow and validation.
|
|
|
|
## What Was Implemented
|
|
|
|
### 1. Custom Fields (jey_erp app)
|
|
**File:** `/apps/jey_erp/jey_erp/custom_fields.py`
|
|
|
|
- Added "Tire Products For Disposal Act" to `act_kind` dropdown field options
|
|
- Updated from 2 options to 3 options:
|
|
- Agricultural Products Act
|
|
- Metal Scrap Reception Act
|
|
- **Tire Products For Disposal Act** (NEW)
|
|
|
|
### 2. Backend API (invoice_az app)
|
|
**File:** `/apps/invoice_az/invoice_az/send_purchase_api.py`
|
|
|
|
#### New Function Added:
|
|
- `generate_tire_disposal_serial_number(token)` - Generates serial numbers from tire disposal endpoint
|
|
- Endpoint: `/api/po/invoice/public/v1/act/generateSerialNumber/tireProductsForDisposalAct`
|
|
- Returns: `{"success": True, "serial_number": "TP25012912345"}`
|
|
- Error handling: 401, 500, 404 responses
|
|
|
|
#### Modified Functions:
|
|
1. **`validate_invoice_for_sending()`**
|
|
- Added "Tire Products For Disposal Act" to valid_act_kinds list
|
|
- Added tax-free validation for tire products (same as metal scrap)
|
|
- Tax-free items not allowed - all items must be "Taxable"
|
|
|
|
2. **`send_purchase_invoice_to_etaxes()`**
|
|
- Added tire products to serial number routing logic
|
|
- Routes to `generate_tire_disposal_serial_number()` when act_kind is "Tire Products For Disposal Act"
|
|
|
|
3. **`build_act_payload()`**
|
|
- Added kind selection for tire products
|
|
- Sets `kind: "tireProductsForDisposalAct"` when act_kind is "Tire Products For Disposal Act"
|
|
|
|
### 3. Frontend UI (invoice_az app)
|
|
**File:** `/apps/invoice_az/invoice_az/client/purchase_invoice.js`
|
|
|
|
- Updated button text logic in `add_purchase_act_buttons()`
|
|
- Added "Send Tire Disposal Act to E-Taxes" button text for tire products
|
|
|
|
### 4. Documentation (invoice_az app)
|
|
**File:** `/apps/invoice_az/CLAUDE.md`
|
|
|
|
- Added tire disposal endpoint to Constants and URLs section
|
|
- Added tire products to "Workflow: Sending Purchase Acts to E-Taxes" section
|
|
- Documented tax validation rules (only Taxable, no Tax Free)
|
|
|
|
## Technical Details
|
|
|
|
### API Integration
|
|
**Endpoint:** `https://new.e-taxes.gov.az/api/po/invoice/public/v1/act/generateSerialNumber/tireProductsForDisposalAct`
|
|
- Method: GET
|
|
- Headers: `x-authorization: Bearer {token}`
|
|
- Response: `{"serialNumber": "TP25012912345****"}`
|
|
|
|
**Kind Value:** `"tireProductsForDisposalAct"`
|
|
- Used in act creation payload
|
|
- Same create/sign endpoints as other act types
|
|
|
|
### Tax Validation Rules
|
|
**Same as Metal Scrap:**
|
|
- Only "Taxable" (5% tax) allowed
|
|
- "Tax Free" (0% tax) NOT allowed
|
|
- Validation error if any item has tax_type = "Tax Free"
|
|
|
|
### Workflow
|
|
1. User creates Purchase Invoice with Individual supplier
|
|
2. Checks `purchase_type` checkbox
|
|
3. Selects `act_kind` = "Tire Products For Disposal Act"
|
|
4. Adds items with product_group_code
|
|
5. Sets all items to tax_type = "Taxable"
|
|
6. Submits document
|
|
7. Clicks "Send Tire Disposal Act to E-Taxes"
|
|
8. System generates serial number from tire disposal endpoint
|
|
9. Creates draft act on E-Taxes
|
|
10. User clicks "Sign Act with ASAN Imza"
|
|
11. System signs with ASAN Imza
|
|
12. E-Taxes Purchase Outbox record updated with status "Sent and Signed"
|
|
|
|
## Files Modified
|
|
|
|
### jey_erp app
|
|
- `jey_erp/custom_fields.py` - Added new option to act_kind dropdown
|
|
|
|
### invoice_az app
|
|
- `invoice_az/send_purchase_api.py` - Added tire disposal serial generation, validation, routing, kind selection
|
|
- `invoice_az/client/purchase_invoice.js` - Added button text for tire disposal
|
|
- `CLAUDE.md` - Updated documentation
|
|
|
|
## Deployment Steps Completed
|
|
|
|
1. ✅ Updated custom fields in jey_erp app
|
|
2. ✅ Applied custom fields using `bench --site site1 execute jey_erp.custom_fields.create_custom_fields`
|
|
3. ✅ Built JavaScript assets using `bench build --app invoice_az`
|
|
4. ✅ Cleared cache using `bench --site site1 clear-cache`
|
|
|
|
## Testing Instructions
|
|
|
|
### Test Case 1: Complete Workflow
|
|
1. Create Purchase Invoice
|
|
2. Select Individual supplier (with FIN, passport, DOB, names)
|
|
3. Check `purchase_type` checkbox
|
|
4. Select `act_kind` = "Tire Products For Disposal Act"
|
|
5. Add items with product_group_code
|
|
6. Set all items to tax_type = "Taxable"
|
|
7. Submit document
|
|
8. Click "Send Tire Disposal Act to E-Taxes"
|
|
9. Verify draft created with serial number
|
|
10. Click "Sign Act with ASAN Imza"
|
|
11. Verify act signed successfully
|
|
12. Check E-Taxes Purchase Outbox record created
|
|
|
|
### Test Case 2: Tax-Free Validation (Should Fail)
|
|
1. Create Purchase Invoice with tire disposal act
|
|
2. Add item with tax_type = "Tax Free"
|
|
3. Try to send to E-Taxes
|
|
4. **Expected:** Error message "Tire disposal items cannot be tax-free. Please change Tax Type to 'Taxable' for items: [item_code]"
|
|
|
|
### Test Case 3: All Act Types Still Work
|
|
1. Test Agricultural Products Act - Should work with both Tax Free and Taxable
|
|
2. Test Metal Scrap Reception Act - Should work with only Taxable
|
|
3. Test Tire Products For Disposal Act - Should work with only Taxable
|
|
|
|
## Code Review Checklist
|
|
|
|
- ✅ New serial number function follows existing pattern (metal scrap)
|
|
- ✅ Error handling implemented (401, 500, 404)
|
|
- ✅ Tax validation added for tire products (no tax-free items)
|
|
- ✅ Serial number routing logic updated
|
|
- ✅ Payload kind selection updated
|
|
- ✅ Button text logic updated
|
|
- ✅ Documentation updated
|
|
- ✅ Custom fields applied
|
|
- ✅ JavaScript assets built
|
|
- ✅ Cache cleared
|
|
|
|
## Summary of Changes
|
|
|
|
**Total Lines Changed:** ~100 lines across 3 main files
|
|
|
|
| File | Lines Added | Type | Description |
|
|
|------|-------------|------|-------------|
|
|
| custom_fields.py | 2 | Modified | Added tire products option |
|
|
| send_purchase_api.py | ~75 | Add/Modify | Serial function, validation, routing, kind |
|
|
| purchase_invoice.js | 3 | Modified | Button text logic |
|
|
| CLAUDE.md | ~20 | Add | Documentation updates |
|
|
|
|
## Notes
|
|
|
|
- Implementation follows exact same pattern as Metal Scrap Reception Act
|
|
- Only differences: display name, API endpoint, kind value
|
|
- Same tax validation rules (only Taxable, no Tax Free)
|
|
- No new fields or special logic required
|
|
- Fully backward compatible with existing act types
|
|
|
|
## Result
|
|
|
|
✅ **Implementation Complete**
|
|
|
|
Users can now:
|
|
- Select "Tire Products For Disposal Act" from act_kind dropdown
|
|
- Send tire disposal acts to E-Taxes
|
|
- See dynamic button text ("Send Tire Disposal Act to E-Taxes")
|
|
- Receive proper validation for tax-free items
|
|
- Sign acts with ASAN Imza
|
|
- Track acts in E-Taxes Purchase Outbox
|
|
|
|
The feature is production-ready and follows all established patterns for consistency and maintainability.
|