4.5 KiB
Equipment Failure Duration Field Addition
Overview
Added duration field to SCADA equipment failure report untuk mencatat durasi failure dalam format hh:mm (manual input).
Changes Made
1. Model Changes
File: models/scada_equipment_failure.py
-
Field
duration: Char field untuk menyimpan durasi dalam format hh:mm- Format:
HH:MM(e.g., 02:30 untuk 2 jam 30 menit) - Optional field - durasi bisa diisi manual sesuai kebutuhan
- Validation dilakukan via
@api.constrains('duration')- memastikan format yang valid
- Format:
-
Computed Field
duration_minutes: Integer field yang computed dariduration- Otomatis convert format hh:mm ke total menit (e.g., 02:30 = 150 menit)
- Useful untuk reporting dan analisis
- Store=True untuk quick access di report
2. View Changes
File: views/scada_equipment_failure_view.xml
Tree View (List): Tambahan kolom duration untuk menampilkan durasi failure
Form View:
- Tambahan field
durationdengan placeholder "HH:MM (e.g., 02:30)" - Tambahan field
duration_minutes(readonly) - untuk reference
3. API Controller Changes
File: controllers/main.py
Update 3 endpoints:
POST /api/scada/equipment-failure (Create)
- Accept parameter
durationdari request body - Return
durationdanduration_minutesdi response
GET /api/scada/equipment-failure (Get List)
- Adding
durationdanduration_minutesfields ke response data
POST /api/scada/equipment-failure-report (Get Report)
- Adding
durationdanduration_minutesfields ke response data
4. Database Migration
File: migrations/7.0.59/pre-migration.py
SQL migration untuk menambahkan kolom duration ke table scada_equipment_failure.
5. API Documentation
File: API_SPEC.md
Update dokumentasi untuk 3 endpoint equipment failure:
- Section 19A: Create Equipment Failure Report
- Section 19B: Get Equipment Failure Reports
- Section 19E: Get Equipment Failure Report (Frontend)
- Section 24: Create Failure Report (Extension Module)
Menambahkan contoh request/response dengan field duration dan duration_minutes.
Input Format
Duration field mengikuti format hh:mm:
- Valid:
00:00,01:30,12:45,23:59 - Invalid:
24:00,12,12:60,invalid
Validation Rules
- Format harus
HH:MM(00-23 untuk jam, 00-59 untuk menit) - Validation dilakukan via
@api.constrainsdecorator - Jika format invalid, sistem akan raise ValueError dengan pesan yang jelas
Usage Examples
Via UI Form
- Buka Equipment Failure Report form
- Isi field "Duration (hh:mm)" dengan format e.g.,
02:30 - Field "Duration (minutes)" akan otomatis ter-compute dan ter-display (readonly)
Via API (REST)
curl -X POST http://localhost:8069/api/scada/equipment-failure \
-H "Content-Type: application/json" \
-b cookies.txt \
-d '{
"equipment_code": "PLC01",
"description": "Motor overload",
"date": "2026-02-15 08:30:00",
"duration": "02:30"
}'
Via API (JSON-RPC)
curl -X POST http://localhost:8069/api/scada/equipment-failure \
-H "Content-Type: application/json" \
-b cookies.txt \
-d '{
"jsonrpc": "2.0",
"method": "call",
"params": {
"equipment_code": "PLC01",
"description": "Motor overload",
"date": "2026-02-15 08:30:00",
"duration": "02:30"
}
}'
Response Format
{
"status": "success",
"message": "Equipment failure report created",
"data": {
"id": 1,
"equipment_code": "PLC01",
"equipment_name": "Main PLC - Injection Machine 01",
"description": "Motor overload",
"date": "2026-02-15T08:30:00",
"duration": "02:30",
"duration_minutes": 150
}
}
Field Descriptions
| Field | Type | Required | Description |
|---|---|---|---|
duration |
Char | No | Duration dalam format hh:mm (e.g., 02:30) |
duration_minutes |
Integer | No (Computed) | Duration converted to total minutes untuk reporting |
Benefits
- Manual Input: Durasi bisa diisi manual oleh operator, tidak hanya dari PLC
- Easy Tracking: Mempermudah tracking berapa lama equipment down
- Auto Calculation:
duration_minutesotomatis ter-compute untuk analytics - Format Validation: Sistem validasi otomatis format hh:mm
- Report Ready: Data siap untuk reporting dan analytics tanpa conversion
Backward Compatibility
- Field adalah optional, tidak mandatory
- Data lama yang tidak punya duration akan tetap valid
- Existing API calls yang tidak mengirim
durationtetap berfungsi normal