7.4 KiB
Flight Ops Locks and Helicopter Usage Sync
Dokumen ini menjelaskan alur data untuk takeover, mission, flight_data, after_flight_inspection, fm_report, dan helicopter_usage.
Tujuan utamanya:
- mencegah perubahan data pada fase yang sudah final
- menjaga
helicopter_usagesebagai ringkasan yang dihitung dari data sumber - membuat perilaku backend konsisten untuk frontend dan integrasi lain
Ringkasan Aturan
- Saat
after_flight_inspectionsudah dibuat:missionuntuk flight itu tidak boleh dibuat atau di-update lagiflight_databaru tidak boleh dibuat lagiflight_datayang sudah ada masih boleh diedit
- Saat
fm_reportdi-complete:flight_datauntuk flight itu terkuncifm_reportmenjadi read-onlyhelicopter_usagebaru dihitung ulang dari data sumber
- Saat
GET /api/v1/fm-reports/get/:flight_id:- backend tetap mengirim
helicopter_usage - jika row belum ada di database, response tetap mengirim nilai
0
- backend tetap mengirim
Alur Besar
Urutan normalnya:
takeoverdibuatmissiondibuatflight_datadiisi dan masih bisa diubahafter_flight_inspectiondibuatfm_reportdraft otomatis tersedia- user melengkapi
fm_report POST /api/v1/fm-reports/complete/:flight_id- backend menghitung ulang
helicopter_usage
Detail Per Modul
1) Mission
Mission bisa dibuat dan di-update selama flight belum masuk fase after flight inspection.
Begitu after_flight_inspection sudah ada untuk flight tersebut:
- create mission ditolak
- update mission ditolak
Alasan bisnis:
- setelah after flight masuk, mission dianggap sudah masuk fase final
- mission tidak boleh berubah karena akan mempengaruhi rekonsiliasi data flight
Error yang biasanya muncul:
MISSION_AFTER_FLIGHT_LOCKED
Referensi:
- lihat tabel
Missiondidocs/error-catalog.md
2) Flight Data
flight_data adalah sumber utama untuk hitungan operasional seperti:
- landing count
- durasi flight
- hook release
- rotor brake cycle
Sebelum after flight inspection
- create flight data boleh
- update flight data boleh
- delete flight data boleh
Setelah after flight inspection dibuat
- create flight data baru ditolak
- update flight data yang sudah ada masih boleh
- delete flight data yang sudah ada ditolak
Setelah FM report di-complete
- update flight data ditolak
- delete flight data ditolak
- data dianggap final
Error yang biasanya muncul:
FLIGHT_DATA_CREATE_BLOCKEDFLIGHT_DATA_AFTER_FLIGHT_LOCKEDFLIGHT_DATA_LOCKED
Referensi:
- lihat tabel
Flight Datadidocs/error-catalog.md
3) After Flight Inspection
after_flight_inspection dipakai sebagai penanda bahwa flight sudah masuk fase akhir sebelum FM report di-complete.
Catatan penting:
- create / upsert after flight inspection tidak lagi memicu kalkulasi
helicopter_usage - after flight inspection hanya menyimpan hasil inspeksi
- kalkulasi usage dipindahkan ke langkah
fm_report complete
4) FM Report
FM report dibuat sebagai draft setelah after flight inspection masuk ke flow.
Sebelum complete
- report masih bisa di-update
- engine metric masih bisa diisi / diubah
helicopter_usagebelum dihitung ulang oleh backend
Setelah complete
- report menjadi read-only
- update FM report ditolak
completed_atdancompleted_bydisimpan- backend memicu refresh
helicopter_usage
Endpoint yang dipakai:
POST /api/v1/fm-reports/complete/:flight_id
Error yang biasanya muncul:
FM_REPORT_LOCKEDFM_REPORT_COMPLETE_FAILED
Referensi:
- lihat tabel
FM Reportdidocs/error-catalog.md
5) Helicopter Usage
helicopter_usage sekarang diperlakukan sebagai summary record.
Karakteristiknya:
- dihitung dari data sumber
- bukan angka yang diisi manual untuk flow normal
- tetap bisa di-maintain manual lewat CRUD admin/backfill kalau diperlukan
Sumber data kalkulasi
total_landing= sumflight_data.landing_counttotal_airframe_hours= sum durasi flighttotal_airframe_cycles= count flight datatotal_hook_release= sumflight_data.hook_releasestotal_rotor_brake_cycle= sumflight_data.rotor_brake_cycletotal_flight_report= count report yang punya helicopter terkait- metric engine diambil dari field FM report dan dijumlahkan
Kapan dihitung
Kalkulasi ulang dilakukan saat:
fm_reportdi-complete
Kalkulasi tidak dilakukan lagi saat:
- create / update after flight inspection
- create / update / delete flight data
- draft FM report di-upsert
Response GET FM Report
Endpoint:
GET /api/v1/fm-reports/get/:flight_id
Response akan selalu mengirim field helicopter_usage.
Perilaku response:
- jika row
helicopter_usageada di database, isi nilainya dari row tersebut - jika row belum ada, backend tetap mengirim object
helicopter_usagedengan semua angka0
Contoh bentuk response:
{
"data": {
"type": "fm_report",
"id": "report-id",
"attributes": {
"flight_id": "flight-id",
"completed_at": null,
"helicopter_usage": {
"type": "helicopter_usage",
"id": "",
"attributes": {
"helicopter_id": "helicopter-id",
"total_landing": 0,
"total_airframe_hours": 0,
"total_airframe_cycles": 0,
"total_engine_1_hours": 0,
"total_engine_1_gpc_ng_n1": 0,
"total_engine_1_ptc_nf_n2": 0,
"total_engine_1_ccc": 0,
"total_engine_2_hours": 0,
"total_engine_2_gpc_ng_n1": 0,
"total_engine_2_ptc_nf_n2": 0,
"total_engine_2_ccc": 0,
"total_flight_report": 0,
"total_hook_release": 0,
"total_rotor_brake_cycle": 0
}
}
}
}
}
Status yang Perlu Diingat
Masih editable
- mission sebelum after flight inspection ada
- flight data sebelum FM report di-complete
- FM report sebelum complete
Sudah locked
- mission setelah after flight inspection ada
- flight data setelah FM report di-complete
- FM report setelah complete
Dampak ke Frontend
Frontend sebaiknya mengikuti aturan ini:
- Jika after flight inspection sudah ada:
- sembunyikan atau disable aksi create mission
- sembunyikan atau disable aksi create flight data baru
- Jika FM report sudah complete:
- disable semua edit flight data
- disable edit FM report
- Saat menampilkan FM report:
- selalu render section helicopter usage
- jika angka semua
0, itu berarti belum ada summary yang terhitung atau belum ada data sumber yang selesai
Error yang Relevan
Lihat katalog lengkap di:
Error yang paling sering dipakai di alur ini:
MISSION_AFTER_FLIGHT_LOCKEDFLIGHT_DATA_CREATE_BLOCKEDFLIGHT_DATA_AFTER_FLIGHT_LOCKEDFLIGHT_DATA_LOCKEDFM_REPORT_LOCKED
Catatan Implementasi
after_flight_inspectiontidak lagi memicu refreshhelicopter_usageflight_datatidak lagi memicu refreshhelicopter_usage- refresh
helicopter_usagehanya terjadi saatfm_reportdi-complete GET FM Reporttetap aman walau rowhelicopter_usagebelum ada
Referensi Endpoint
POST /api/v1/mission/createPATCH /api/v1/mission/update/{flight_id}POST /api/v1/flight-data/createPATCH /api/v1/flight-data/update/{id}DELETE /api/v1/flight-data/delete/{id}POST /api/v1/after-flight-inspection/createPATCH /api/v1/after-flight-inspection/updatePOST /api/v1/fm-reports/complete/{flight_id}GET /api/v1/fm-reports/get/{flight_id}