{"openapi":"3.0.0","info":{"title":"Inspector Service API","description":"**UzAgro Inspeksiya \u2014 Inspektor monitoring xizmati**\n\nQishloq xo'jaligi monitoring va tekshiruvlarini boshqarish uchun API.\n\n## Modullar\n\n### \ud83d\udccb Ma'lumotnomalar\n- **Ekin toifalari (Crop Categories)** \u2014 ekin turlarini guruhlash (Boshoqli don, Texnik, Sabzavot...)\n- **Ekin turlari (Crop Types)** \u2014 aniq ekin nomlari (G'alla, G'o'za, Kartoshka...)\n- **Agrotexnik tadbirlar (Agro Events)** \u2014 Ekish, Parvarishlash\n- **Maqsadlar (Goals)** \u2014 har bir ekin turi + tadbir uchun monitoring maqsadlari\n\n### \ud83d\udcdd Tekshiruvlar (Inspections)\nTuman inspektori yaratadi \u2192 Viloyat inspektori tasdiqlaydi.\n\n**Tekshiruv statuslari:**\n| Status | Tavsif |\n|--------|--------|\n| `new` | Yangi \u2014 hali hujjat yuklanmagan |\n| `uploaded` | Yuklangan \u2014 3 ta hujjat yuklangan, viloyat ko'rishi kerak |\n| `rejected` | Rad etilgan \u2014 viloyat birorta hujjatni rad etgan |\n| `approved` | Tasdiqlangan \u2014 4\/4 hujjat imzolangan, Site Inspection mumkin |\n\n**Hujjat statuslari:**\n| Status | Tavsif |\n|--------|--------|\n| `new` | Yangi \u2014 yuklanganidan keyin |\n| `pending` | Kutilmoqda \u2014 viloyat ko'rib chiqmoqda |\n| `rejected` | Rad etilgan \u2014 viloyat rad etgan |\n| `signed` | Imzolangan \u2014 viloyat tasdiqlagan |\n\n**Hujjat turlari:**\n| Tur | Kim yuklaydi |\n|-----|-------------|\n| `notification` | Tuman \u2014 Xabardor qilish hujjati |\n| `study_program` | Tuman \u2014 O'rganish dasturi hujjati |\n| `info` | Tuman \u2014 Ma'lumot hujjati |\n| `study_order` | Viloyat \u2014 O'rganish buyrug'i |\n\n**Workflow:**\n```\n1. Tuman: Tekshiruv yaratadi \u2192 \"Yangi\"\n2. Tuman: 3 hujjat yuklaydi + \/submit \u2192 \"Yuklangan\"\n3. Viloyat: Har bir hujjatni \/review (sign\/reject)\n   - Birorta rad \u2192 Tekshiruv \"Rad etilgan\" \u2192 Tuman qayta yuklaydi\n   - Viloyat 4-hujjat yuklaydi + imzolaydi\n4. 4\/4 imzolangan \u2192 Tekshiruv \"Tasdiqlangan\"\n5. Tuman: Site Inspections'da tasdiqlangan tekshiruvni ko'radi\n6. Tuman: Fayl\/havola qo'shib, \/submit \u2192 \"Dala tekshiruvi yuborilgan\"\n7. Viloyat: \/approve \u2192 \"Tugallangan\" yoki \/reject \u2192 \"Dala tekshiruvi rad etilgan\"\n```\n\n### \ud83d\udd0d Monitoring\nInspektor dala monitoringini o'tkazadi.\nWorkflow: `draft` \u2192 `new` \u2192 `approved` \/ `rejected`\n\n### \ud83d\udccd Site Inspections \u2014 Dala tekshiruvi (Mobile)\nTasdiqlangan tekshiruv asosida dala tekshiruvi. **Inspections jadvali bilan birgalikda ishlaydi.**\n\n**Workflow:**\n```\n[Inspections: new \u2192 uploaded \u2192 approved] \u2190 hujjat bosqichi (web)\n[Site Inspections: approved \u2192 field_submitted \u2192 completed \/ field_rejected] \u2190 dala bosqichi (mobile)\n```\n- Tuman inspektori faqat `approved` tekshiruvlarni ko'radi\n- Fayl (foto\/video) va havola qo'shib, viloyatga yuboradi\n- Viloyat tasdiqlaydi (`completed`) yoki rad etadi (`field_rejected`)\n\n## Autentifikatsiya\nJWT token `Authorization: Bearer {token}` header orqali.\nAPI Gateway tekshiradi va `X-Auth-User-*` headerlarini uzatadi.\n\n## Pagination\n`per_page` (max 100, default 15), `page` (default 1).\n`per_page=-1` \u2014 barcha yozuvlar (max 1000).\n\n## Fayl yuklash\n`multipart\/form-data` ishlatiladi. Max hajmlar:\n- Hujjatlar: 10MB (txt, pdf, doc, docx)\n- Monitoring rasmlar: 5MB (jpg, png, webp), max 10 ta\n- Site Inspection fayl: 50MB (rasm\/video)","contact":{"name":"UzAgro Inspeksiya IT","email":"support@agro.uz"},"license":{"name":"Proprietary"},"version":"2.0.0"},"servers":[{"url":"https:\/\/backend.uzagroin.uz","description":"Current Server"}],"paths":{"\/api\/v1\/inspector\/agro-events":{"get":{"tags":["Agro Events"],"summary":"Agrotexnik tadbirlar ro'yxati","description":"Barcha agrotexnik tadbirlarni filterlash va sahifalash bilan olish. `per_page=-1` bo'lsa barcha yozuvlar qaytariladi.","operationId":"agroEventIndex","parameters":[{"name":"search","in":"query","description":"Nom bo'yicha qidirish (ILIKE)","required":false,"schema":{"type":"string","example":"Sug'orish","maxLength":255}},{"name":"is_active","in":"query","description":"Faollik holati bo'yicha filterlash","required":false,"schema":{"type":"boolean","example":true}},{"name":"per_page","in":"query","description":"Sahifadagi yozuvlar soni. `-1` = hammasi (max 1000)","required":false,"schema":{"type":"integer","default":15,"maximum":100,"minimum":-1}},{"name":"page","in":"query","description":"Sahifa raqami","required":false,"schema":{"type":"integer","default":1,"minimum":1}},{"name":"sort_by","in":"query","description":"Saralash maydoni","required":false,"schema":{"type":"string","default":"id","enum":["id","name","is_active","created_at","updated_at"]}},{"name":"sort_order","in":"query","description":"Saralash tartibi","required":false,"schema":{"type":"string","default":"desc","enum":["asc","desc"]}}],"responses":{"200":{"description":"Agrotexnik tadbirlar ro'yxati muvaffaqiyatli qaytarildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/AgroEvent"}},"meta":{"$ref":"#\/components\/schemas\/PaginationMeta"},"links":{"$ref":"#\/components\/schemas\/PaginationLinks"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Agro Events"],"summary":"Yangi agrotexnik tadbir yaratish","description":"Yangi agrotexnik tadbir yaratish. Nom unikal bo'lishi shart.","operationId":"agroEventStore","requestBody":{"required":true,"content":{"application\/json":{"schema":{"required":["name"],"properties":{"name":{"description":"Agrotexnik tadbir nomi (unikal)","type":"string","example":"Sug'orish","maxLength":255}},"type":"object"}}}},"responses":{"201":{"description":"Agrotexnik tadbir muvaffaqiyatli yaratildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Agrotexnik tadbir muvaffaqiyatli yaratildi"},"data":{"$ref":"#\/components\/schemas\/AgroEvent"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"422":{"description":"Validatsiya xatosi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ValidationErrorResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/agro-events\/{agroEvent}":{"get":{"tags":["Agro Events"],"summary":"Agrotexnik tadbir ma'lumotlari","description":"Bitta agrotexnik tadbir haqida to'liq ma'lumot olish","operationId":"agroEventShow","parameters":[{"name":"agroEvent","in":"path","description":"Agrotexnik tadbir ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Agrotexnik tadbir ma'lumotlari","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#\/components\/schemas\/AgroEvent"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Agrotexnik tadbir topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Agro Events"],"summary":"Agrotexnik tadbirni yangilash","description":"Agrotexnik tadbirni yangilash. POST ishlatiladi (PUT o'rniga) multipart mos kelishi uchun.","operationId":"agroEventUpdate","parameters":[{"name":"agroEvent","in":"path","description":"Agrotexnik tadbir ID raqami","required":true,"schema":{"type":"integer","example":1}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"properties":{"name":{"description":"Agrotexnik tadbir nomi (unikal)","type":"string","example":"O'g'itlash","maxLength":255}},"type":"object"}}}},"responses":{"200":{"description":"Agrotexnik tadbir muvaffaqiyatli yangilandi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Agrotexnik tadbir muvaffaqiyatli yangilandi"},"data":{"$ref":"#\/components\/schemas\/AgroEvent"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Agrotexnik tadbir topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}},"422":{"description":"Validatsiya xatosi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ValidationErrorResponse"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Agro Events"],"summary":"Agrotexnik tadbirni o'chirish (soft delete)","description":"Agrotexnik tadbirni o'chirish. Soft delete qo'llaniladi \u2014 tiklash uchun `restore` endpoint ishlatiladi.","operationId":"agroEventDestroy","parameters":[{"name":"agroEvent","in":"path","description":"Agrotexnik tadbir ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Agrotexnik tadbir muvaffaqiyatli o'chirildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Agrotexnik tadbir muvaffaqiyatli o'chirildi"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Agrotexnik tadbir topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/agro-events\/{id}\/restore":{"post":{"tags":["Agro Events"],"summary":"O'chirilgan agrotexnik tadbirni tiklash","description":"Soft delete bilan o'chirilgan agrotexnik tadbirni qayta tiklash","operationId":"agroEventRestore","parameters":[{"name":"id","in":"path","description":"O'chirilgan agrotexnik tadbir ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Agrotexnik tadbir muvaffaqiyatli tiklandi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Agrotexnik tadbir muvaffaqiyatli tiklandi"},"data":{"$ref":"#\/components\/schemas\/AgroEvent"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Agrotexnik tadbir topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/agro-events\/{agroEvent}\/toggle-status":{"patch":{"tags":["Agro Events"],"summary":"Agrotexnik tadbir faolligini o'zgartirish","description":"Agrotexnik tadbirning `is_active` holatini teskari qiymatga o'zgartirish (true \u2194 false)","operationId":"agroEventToggleStatus","parameters":[{"name":"agroEvent","in":"path","description":"Agrotexnik tadbir ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Agrotexnik tadbir holati muvaffaqiyatli o'zgartirildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Agrotexnik tadbir holati muvaffaqiyatli o'zgartirildi"},"data":{"$ref":"#\/components\/schemas\/AgroEvent"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Agrotexnik tadbir topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/crop-categories\/with-crop-types":{"get":{"tags":["Crop Categories"],"summary":"Ekin toifalari ekin turlari bilan","description":"Barcha faol ekin toifalarini ularning ekin turlari bilan qaytaradi.","operationId":"12e3b7ef24113737ac1cb1cc3b33c823","responses":{"200":{"description":"Muvaffaqiyatli"},"401":{"description":"Avtorizatsiyadan o'tilmagan"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/crop-categories":{"get":{"tags":["Crop Categories"],"summary":"Ekin toifalari ro'yxati","operationId":"141943003bb7417ef3d98bbd55e7a6ab","parameters":[{"name":"search","in":"query","schema":{"type":"string"}},{"name":"is_active","in":"query","schema":{"type":"boolean"}},{"name":"per_page","in":"query","schema":{"type":"integer","default":15}},{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"sort_by","in":"query","schema":{"type":"string","default":"id","enum":["id","name","created_at"]}},{"name":"sort_order","in":"query","schema":{"type":"string","default":"desc","enum":["asc","desc"]}}],"responses":{"200":{"description":"Muvaffaqiyatli"},"401":{"description":"Avtorizatsiyadan o'tilmagan"}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Crop Categories"],"summary":"Yangi ekin toifasi yaratish","operationId":"2bd75d5f212e765613ea2cbf27a8da4b","requestBody":{"required":true,"content":{"application\/json":{"schema":{"required":["name"],"properties":{"name":{"type":"string","example":"Boshoqli don ekinlari"}},"type":"object"}}}},"responses":{"201":{"description":"Yaratildi"},"422":{"description":"Validatsiya xatosi"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/crop-categories\/{id}":{"get":{"tags":["Crop Categories"],"summary":"Ekin toifasini ko'rish","operationId":"75a3c51cf3958c3dae4fc8f75fa8ea04","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Muvaffaqiyatli"},"404":{"description":"Topilmadi"}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Crop Categories"],"summary":"Ekin toifasini yangilash","operationId":"c0ca499fd58c8a6906422e0045e78122","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application\/json":{"schema":{"properties":{"name":{"type":"string","example":"Texnik ekinlar"}},"type":"object"}}}},"responses":{"200":{"description":"Yangilandi"},"404":{"description":"Topilmadi"},"422":{"description":"Validatsiya xatosi"}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Crop Categories"],"summary":"Ekin toifasini o'chirish","operationId":"d26fa14ca5106f33bd51006a62ca109e","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"O'chirildi"},"404":{"description":"Topilmadi"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/crop-categories\/{id}\/restore":{"post":{"tags":["Crop Categories"],"summary":"O'chirilgan ekin toifasini tiklash","operationId":"a39683b416620915b89e2cd77b782374","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Tiklandi"},"404":{"description":"Topilmadi"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/crop-categories\/{id}\/toggle-status":{"patch":{"tags":["Crop Categories"],"summary":"Ekin toifasi holatini o'zgartirish","operationId":"da5d162ec3009ba2e1574f862ab63697","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Holat o'zgartirildi"},"404":{"description":"Topilmadi"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/crop-types\/with-goals":{"get":{"tags":["Crop Types"],"summary":"Ekin turlari maqsadlari bilan","description":"Barcha faol ekin turlarini ularning maqsadlari (goals) bilan qaytaradi. Har bir maqsadda id, name va icon bo'ladi. Mobile app uchun mo'ljallangan.","operationId":"cropTypeWithGoals","responses":{"200":{"description":"Ekin turlari maqsadlari bilan muvaffaqiyatli qaytarildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/CropTypeWithGoals"}}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/crop-types":{"get":{"tags":["Crop Types"],"summary":"Ekin turlari ro'yxati","description":"Barcha ekin turlarini filterlash va sahifalash bilan olish. `per_page=-1` bo'lsa barcha yozuvlar qaytariladi.","operationId":"cropTypeIndex","parameters":[{"name":"search","in":"query","description":"Nom bo'yicha qidirish (ILIKE)","required":false,"schema":{"type":"string","example":"Bug'doy","maxLength":255}},{"name":"is_active","in":"query","description":"Faollik holati bo'yicha filterlash","required":false,"schema":{"type":"boolean","example":true}},{"name":"per_page","in":"query","description":"Sahifadagi yozuvlar soni. `-1` = hammasi (max 1000)","required":false,"schema":{"type":"integer","default":15,"maximum":100,"minimum":-1}},{"name":"page","in":"query","description":"Sahifa raqami","required":false,"schema":{"type":"integer","default":1,"minimum":1}},{"name":"sort_by","in":"query","description":"Saralash maydoni","required":false,"schema":{"type":"string","default":"id","enum":["id","name","is_active","created_at","updated_at"]}},{"name":"sort_order","in":"query","description":"Saralash tartibi","required":false,"schema":{"type":"string","default":"desc","enum":["asc","desc"]}}],"responses":{"200":{"description":"Ekin turlari ro'yxati muvaffaqiyatli qaytarildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/CropType"}},"meta":{"$ref":"#\/components\/schemas\/PaginationMeta"},"links":{"$ref":"#\/components\/schemas\/PaginationLinks"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Crop Types"],"summary":"Yangi ekin turi yaratish","description":"Yangi ekin turi yaratish. Nom unikal bo'lishi shart.","operationId":"cropTypeStore","requestBody":{"required":true,"content":{"application\/json":{"schema":{"required":["name"],"properties":{"name":{"description":"Ekin turi nomi (unikal)","type":"string","example":"Bug'doy","maxLength":255}},"type":"object"}}}},"responses":{"201":{"description":"Ekin turi muvaffaqiyatli yaratildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Ekin turi muvaffaqiyatli yaratildi"},"data":{"$ref":"#\/components\/schemas\/CropType"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"422":{"description":"Validatsiya xatosi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ValidationErrorResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/crop-types\/{cropType}":{"get":{"tags":["Crop Types"],"summary":"Ekin turi ma'lumotlari","description":"Bitta ekin turi haqida to'liq ma'lumot olish","operationId":"cropTypeShow","parameters":[{"name":"cropType","in":"path","description":"Ekin turi ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Ekin turi ma'lumotlari","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#\/components\/schemas\/CropType"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Ekin turi topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Crop Types"],"summary":"Ekin turini yangilash","description":"Ekin turini yangilash. POST ishlatiladi (PUT o'rniga) multipart mos kelishi uchun.","operationId":"cropTypeUpdate","parameters":[{"name":"cropType","in":"path","description":"Ekin turi ID raqami","required":true,"schema":{"type":"integer","example":1}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"properties":{"name":{"description":"Ekin turi nomi (unikal)","type":"string","example":"Sholi","maxLength":255}},"type":"object"}}}},"responses":{"200":{"description":"Ekin turi muvaffaqiyatli yangilandi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Ekin turi muvaffaqiyatli yangilandi"},"data":{"$ref":"#\/components\/schemas\/CropType"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Ekin turi topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}},"422":{"description":"Validatsiya xatosi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ValidationErrorResponse"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Crop Types"],"summary":"Ekin turini o'chirish (soft delete)","description":"Ekin turini o'chirish. Soft delete qo'llaniladi \u2014 ma'lumot bazadan o'chirilmaydi, faqat `deleted_at` belgilanadi. Tiklash uchun `restore` endpoint ishlatiladi.","operationId":"cropTypeDestroy","parameters":[{"name":"cropType","in":"path","description":"Ekin turi ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Ekin turi muvaffaqiyatli o'chirildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Ekin turi muvaffaqiyatli o'chirildi"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Ekin turi topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/crop-types\/{id}\/restore":{"post":{"tags":["Crop Types"],"summary":"O'chirilgan ekin turini tiklash","description":"Soft delete bilan o'chirilgan ekin turini qayta tiklash","operationId":"cropTypeRestore","parameters":[{"name":"id","in":"path","description":"O'chirilgan ekin turi ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Ekin turi muvaffaqiyatli tiklandi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Ekin turi muvaffaqiyatli tiklandi"},"data":{"$ref":"#\/components\/schemas\/CropType"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Ekin turi topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/crop-types\/{cropType}\/toggle-status":{"patch":{"tags":["Crop Types"],"summary":"Ekin turi faolligini o'zgartirish","description":"Ekin turining `is_active` holatini teskari qiymatga o'zgartirish (true \u2194 false)","operationId":"cropTypeToggleStatus","parameters":[{"name":"cropType","in":"path","description":"Ekin turi ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Ekin turi holati muvaffaqiyatli o'zgartirildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Ekin turi holati muvaffaqiyatli o'zgartirildi"},"data":{"$ref":"#\/components\/schemas\/CropType"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Ekin turi topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/dashboard":{"get":{"tags":["Dashboard"],"summary":"Bosh sahifa statistikasi","description":"Umumiy statistika:\n- **Fermer xo'jaliklar** \u2014 jami, yangi (shu oy), viloyat\/tuman bo'yicha\n- **Monitoringlar** \u2014 jami, status bo'yicha (draft, new, approved, rejected)\n- **Tekshiruvlar** \u2014 jami, status bo'yicha (new, uploaded, approved, rejected)","operationId":"93fbcdf6c2fcef0c521894b78b38aa53","responses":{"200":{"description":"Statistika","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"properties":{"enterprises":{"properties":{"total":{"description":"Jami fermer xo'jaliklar","type":"integer","example":150},"this_month":{"description":"Shu oyda qo'shilgan","type":"integer","example":12}},"type":"object"},"monitorings":{"properties":{"total":{"description":"Jami monitoringlar","type":"integer","example":85},"draft":{"type":"integer","example":5},"new":{"type":"integer","example":20},"approved":{"type":"integer","example":50},"rejected":{"type":"integer","example":10}},"type":"object"},"inspections":{"properties":{"total":{"description":"Jami tekshiruvlar","type":"integer","example":60},"new":{"type":"integer","example":10},"uploaded":{"type":"integer","example":15},"approved":{"type":"integer","example":30},"rejected":{"type":"integer","example":5}},"type":"object"}},"type":"object"}},"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/dashboard\/search":{"get":{"tags":["Dashboard"],"summary":"Global qidirish","description":"Bitta `search` parametri bilan barcha bo'limlardan qidirish:\n\n### Qidiriladi:\n- **Monitoringlar** \u2014 kontur raqami, fermer nomi, STIR, raxbar, telefon, ekin toifasi, ekin turi, maqsad, agro tadbir\n- **Tekshiruvlar** \u2014 kontur raqami, fermer nomi, STIR, raxbar, telefon, ekin toifasi, ekin turi, maqsad, agro tadbir\n- **Fermer xo'jaliklar** \u2014 nomi, STIR, raxbar FIO, telefon, manzil\n\n### Natija:\nHar bir bo'lim uchun alohida massiv (max 10 ta natija)","operationId":"f9f9ff3752b7b6ccd4b38990dc6f0b56","parameters":[{"name":"search","in":"query","description":"Qidirish so'zi (kamida 2 belgi)","required":true,"schema":{"type":"string","example":"bug'doy","minLength":2}}],"responses":{"200":{"description":"Qidirish natijalari","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"properties":{"monitorings":{"properties":{"total":{"description":"Jami topilgan","type":"integer","example":5},"items":{"type":"array","items":{"$ref":"#\/components\/schemas\/MonitoringList"}}},"type":"object"},"inspections":{"properties":{"total":{"description":"Jami topilgan","type":"integer","example":3},"items":{"type":"array","items":{"$ref":"#\/components\/schemas\/InspectionResponse"}}},"type":"object"},"enterprises":{"properties":{"total":{"description":"Jami topilgan","type":"integer","example":2},"items":{"type":"array","items":{"properties":{"id":{"type":"integer"},"stir":{"type":"string"},"legal_name":{"type":"string"},"director_full_name":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"region_id":{"type":"integer"},"district_id":{"type":"integer"}},"type":"object"}}},"type":"object"}},"type":"object"}},"type":"object"}}}},"422":{"description":"search parametri majburiy (kamida 2 belgi)"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/files\/{path}":{"get":{"tags":["Files"],"summary":"S3 dan fayl olish","description":"S3\/MinIO storage dan faylni olish. Faqat `inspector\/*` prefiksidagi fayllar ruxsat etilgan.\n\n**Xavfsizlik:** Directory traversal (`..`, `\/\/`) va null byte bloklangan.\n**Cache:** `Cache-Control: public, max-age=86400` (24 soat).\n**Foydalanish:** Goal icon rasmlari va monitoring rasmlari shu endpoint orqali olinadi.","operationId":"fileServe","parameters":[{"name":"path","in":"path","description":"S3 dagi fayl yo'li (masalan: `inspector\/goals\/abc123.jpg` yoki `inspector\/monitorings\/def456.png`)","required":true,"schema":{"type":"string","example":"inspector\/goals\/abc123.jpg"}}],"responses":{"200":{"description":"Fayl muvaffaqiyatli qaytarildi","headers":{"Content-Type":{"description":"Fayl MIME turi (image\/jpeg, image\/png va h.k.)","schema":{"type":"string","example":"image\/jpeg"}},"Cache-Control":{"description":"Kesh boshqaruvi","schema":{"type":"string","example":"public, max-age=86400"}}},"content":{"image\/*":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Noto'g'ri fayl yo'li (null byte yoki boshqaruv belgilari)"},"403":{"description":"Ruxsat etilmagan fayl yo'li (directory traversal yoki taqiqlangan prefiks)"},"404":{"description":"Fayl topilmadi"}}}},"\/api\/v1\/inspector\/goals":{"get":{"tags":["Goals"],"summary":"Maqsadlar ro'yxati","description":"Barcha maqsadlarni filterlash va sahifalash bilan olish. Ekin turi va agrotexnik tadbir ma'lumotlari bilan birga qaytariladi.","operationId":"goalIndex","parameters":[{"name":"search","in":"query","description":"Nom bo'yicha qidirish (ILIKE)","required":false,"schema":{"type":"string","example":"Bug'doy sug'orish","maxLength":255}},{"name":"crop_type_id","in":"query","description":"Ekin turi ID bo'yicha filterlash","required":false,"schema":{"type":"integer","example":1}},{"name":"agro_event_id","in":"query","description":"Agrotexnik tadbir ID bo'yicha filterlash","required":false,"schema":{"type":"integer","example":1}},{"name":"is_active","in":"query","description":"Faollik holati bo'yicha filterlash","required":false,"schema":{"type":"boolean","example":true}},{"name":"per_page","in":"query","description":"Sahifadagi yozuvlar soni. `-1` = hammasi (max 1000)","required":false,"schema":{"type":"integer","default":15,"maximum":100,"minimum":-1}},{"name":"page","in":"query","description":"Sahifa raqami","required":false,"schema":{"type":"integer","default":1,"minimum":1}},{"name":"sort_by","in":"query","description":"Saralash maydoni","required":false,"schema":{"type":"string","default":"id","enum":["id","name","crop_type_id","agro_event_id","is_active","created_at","updated_at"]}},{"name":"sort_order","in":"query","description":"Saralash tartibi","required":false,"schema":{"type":"string","default":"desc","enum":["asc","desc"]}}],"responses":{"200":{"description":"Maqsadlar ro'yxati muvaffaqiyatli qaytarildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/Goal"}},"meta":{"$ref":"#\/components\/schemas\/PaginationMeta"},"links":{"$ref":"#\/components\/schemas\/PaginationLinks"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Goals"],"summary":"Yangi maqsad yaratish","description":"Yangi maqsad yaratish. Icon rasmni `multipart\/form-data` orqali yuborish mumkin. Ruxsat etilgan formatlar: jpg, jpeg, png, svg, webp (max 2MB).","operationId":"goalStore","requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"required":["crop_type_id","agro_event_id","name"],"properties":{"crop_type_id":{"description":"Ekin turi ID (mavjud bo'lishi shart)","type":"integer","example":1},"agro_event_id":{"description":"Agrotexnik tadbir ID (mavjud bo'lishi shart)","type":"integer","example":1},"name":{"description":"Maqsad nomi","type":"string","example":"Bug'doy sug'orish rejasi","maxLength":255},"icon":{"description":"Maqsad icon rasmi (jpg, jpeg, png, svg, webp \u2014 max 2MB)","type":"string","format":"binary","nullable":true}},"type":"object"}}}},"responses":{"201":{"description":"Maqsad muvaffaqiyatli yaratildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Maqsad muvaffaqiyatli yaratildi"},"data":{"$ref":"#\/components\/schemas\/Goal"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"422":{"description":"Validatsiya xatosi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ValidationErrorResponse"}}}},"500":{"description":"S3 fayl yuklashda xatolik","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ServerErrorResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/goals\/{goal}":{"get":{"tags":["Goals"],"summary":"Maqsad ma'lumotlari","description":"Bitta maqsad haqida to'liq ma'lumot olish (ekin turi va agrotexnik tadbir bilan)","operationId":"goalShow","parameters":[{"name":"goal","in":"path","description":"Maqsad ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Maqsad ma'lumotlari","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#\/components\/schemas\/Goal"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Maqsad topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Goals"],"summary":"Maqsadni yangilash","description":"Maqsadni yangilash. Faqat o'zgartirilishi kerak bo'lgan maydonlarni yuboring. Yangi icon yuborilsa eskisi avtomatik o'chiriladi.","operationId":"goalUpdate","parameters":[{"name":"goal","in":"path","description":"Maqsad ID raqami","required":true,"schema":{"type":"integer","example":1}}],"requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"properties":{"crop_type_id":{"description":"Ekin turi ID","type":"integer","example":1},"agro_event_id":{"description":"Agrotexnik tadbir ID","type":"integer","example":1},"name":{"description":"Maqsad nomi","type":"string","example":"Yangilangan maqsad nomi","maxLength":255},"icon":{"description":"Yangi icon rasm (eskisi o'chiriladi)","type":"string","format":"binary","nullable":true}},"type":"object"}}}},"responses":{"200":{"description":"Maqsad muvaffaqiyatli yangilandi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Maqsad muvaffaqiyatli yangilandi"},"data":{"$ref":"#\/components\/schemas\/Goal"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Maqsad topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}},"422":{"description":"Validatsiya xatosi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ValidationErrorResponse"}}}},"500":{"description":"S3 fayl yuklashda xatolik","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ServerErrorResponse"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Goals"],"summary":"Maqsadni o'chirish (soft delete)","description":"Maqsadni o'chirish. Soft delete qo'llaniladi \u2014 tiklash uchun `restore` endpoint ishlatiladi.","operationId":"goalDestroy","parameters":[{"name":"goal","in":"path","description":"Maqsad ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Maqsad muvaffaqiyatli o'chirildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Maqsad muvaffaqiyatli o'chirildi"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Maqsad topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/goals\/{id}\/restore":{"post":{"tags":["Goals"],"summary":"O'chirilgan maqsadni tiklash","description":"Soft delete bilan o'chirilgan maqsadni qayta tiklash","operationId":"goalRestore","parameters":[{"name":"id","in":"path","description":"O'chirilgan maqsad ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Maqsad muvaffaqiyatli tiklandi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Maqsad muvaffaqiyatli tiklandi"},"data":{"$ref":"#\/components\/schemas\/Goal"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Maqsad topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/goals\/{goal}\/toggle-status":{"patch":{"tags":["Goals"],"summary":"Maqsad faolligini o'zgartirish","description":"Maqsadning `is_active` holatini teskari qiymatga o'zgartirish (true \u2194 false)","operationId":"goalToggleStatus","parameters":[{"name":"goal","in":"path","description":"Maqsad ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Maqsad holati muvaffaqiyatli o'zgartirildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Maqsad holati muvaffaqiyatli o'zgartirildi"},"data":{"$ref":"#\/components\/schemas\/Goal"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Maqsad topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/health":{"get":{"tags":["Health"],"summary":"Servis holati tekshiruvi","description":"Inspector servisining ishlash holatini tekshirish. Ma'lumotlar bazasi (PostgreSQL) va kesh (Redis) ulanishini tekshiradi. Autentifikatsiya talab qilinmaydi.","operationId":"healthCheck","responses":{"200":{"description":"Servis to'liq ishlayapti","content":{"application\/json":{"schema":{"properties":{"status":{"description":"Umumiy holat","type":"string","example":"ok","enum":["ok","degraded"]},"service":{"description":"Servis nomi","type":"string","example":"inspector-service"},"checks":{"description":"Komponentlar holati","properties":{"database":{"description":"PostgreSQL ulanishi","type":"string","example":"ok","enum":["ok","error"]},"redis":{"description":"Redis ulanishi","type":"string","example":"ok","enum":["ok","error"]}},"type":"object"},"timestamp":{"description":"Tekshiruv vaqti (ISO 8601)","type":"string","format":"date-time","example":"2026-03-31T12:00:00+05:00"}},"type":"object"}}}},"503":{"description":"Servis degradatsiya holatida \u2014 bir yoki bir nechta komponent ishlamayapti","content":{"application\/json":{"schema":{"properties":{"status":{"type":"string","example":"degraded"},"service":{"type":"string","example":"inspector-service"},"checks":{"properties":{"database":{"type":"string","example":"error"},"redis":{"type":"string","example":"ok"}},"type":"object"},"timestamp":{"type":"string","format":"date-time"}},"type":"object"}}}}}}},"\/api\/v1\/inspector\/inspections":{"get":{"tags":["Inspections"],"summary":"Tekshiruvlar ro'yxati","description":"Barcha tekshiruvlarni sahifalangan ro'yxat ko'rinishida qaytaradi. Qidiruv, holat, viloyat va tuman bo'yicha filtrlash mumkin.\n\n### Filtrlash:\n- `search` \u2014 korxona nomi, STIR, rahbar ismi bo'yicha qidirish\n- `status` \u2014 tekshiruv holati bo'yicha filtrlash (new, uploaded, rejected, approved, field_submitted, completed, field_rejected)\n- `state_id` \u2014 viloyat bo'yicha filtrlash\n- `city_id` \u2014 tuman bo'yicha filtrlash\n\n### Saralash:\n- `sort_by` \u2014 saralash maydoni (id, created_at, status). Default: id\n- `sort_order` \u2014 saralash tartibi (asc, desc). Default: desc\n\n### Sahifalash:\n- `per_page` \u2014 har sahifada nechta yozuv (1-100, default: 15). `-1` = hammasi (max 1000)","operationId":"213ca5aab33197717c29dd9bfc26f994","parameters":[{"name":"search","in":"query","description":"Qidiruv so'zi (korxona nomi, STIR, rahbar ismi)","required":false,"schema":{"type":"string","example":"Oltin Hosil"}},{"name":"status","in":"query","description":"Tekshiruv holati bo'yicha filtrlash","required":false,"schema":{"type":"string","example":"draft","enum":["draft","submitted","reviewing","rejected","approved"]}},{"name":"state_id","in":"query","description":"Viloyat ID bo'yicha filtrlash","required":false,"schema":{"type":"integer","example":1}},{"name":"city_id","in":"query","description":"Tuman ID bo'yicha filtrlash","required":false,"schema":{"type":"integer","example":5}},{"name":"sort_by","in":"query","description":"Saralash maydoni","required":false,"schema":{"type":"string","example":"created_at","default":"id","enum":["id","created_at","status"]}},{"name":"sort_order","in":"query","description":"Saralash tartibi","required":false,"schema":{"type":"string","example":"desc","default":"desc","enum":["asc","desc"]}},{"name":"per_page","in":"query","description":"Har sahifadagi yozuvlar soni (1-100). -1 = hammasi (max 1000)","required":false,"schema":{"type":"integer","example":15,"default":15}}],"responses":{"200":{"description":"Tekshiruvlar ro'yxati muvaffaqiyatli qaytarildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/InspectionResponse"}},"meta":{"description":"Sahifalash ma'lumotlari","properties":{"current_page":{"type":"integer","example":1},"last_page":{"type":"integer","example":5},"per_page":{"type":"integer","example":15},"total":{"type":"integer","example":72}},"type":"object"},"links":{"description":"Sahifa havolalari","properties":{"first":{"type":"string","example":"\/api\/inspector\/inspections?page=1"},"last":{"type":"string","example":"\/api\/inspector\/inspections?page=5"},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":"\/api\/inspector\/inspections?page=2","nullable":true}},"type":"object"}},"type":"object"}}}},"401":{"description":"Autentifikatsiya talab qilinadi \u2014 JWT token yo'q yoki yaroqsiz"}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Inspections"],"summary":"Yangi tekshiruv yaratish","description":"**Tuman inspektori** yangi tekshiruv yaratadi. Korxona (enterprise) STIR bo'yicha avtomatik topiladi yoki yaratiladi.\n\n### Jarayon:\n1. Tuman inspektori shu endpoint orqali tekshiruv yaratadi (status: **Yangi**)\n2. Keyin hujjatlarni yuklaydi (`POST \/inspections\/{id}\/documents`)\n3. Tayyor bo'lgach viloyatga yuboradi (`POST \/inspections\/{id}\/submit`)\n\n### Korxona logikasi:\n- Agar berilgan STIR bazada mavjud bo'lsa \u2014 korxona ma'lumotlari yangilanadi\n- Agar STIR yangi bo'lsa \u2014 yangi korxona yaratiladi","operationId":"90bfb416e3ca37f15c366da2e0e31f66","requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"required":["stir","farm_name","farm_leader","phone","region_id","district_id"],"properties":{"stir":{"description":"Korxona STIR raqami (9 raqam)","type":"string","example":"302415867"},"farm_name":{"description":"Fermer xo'jaligi yoki korxona nomi","type":"string","example":"Oltin Hosil fermer xo'jaligi"},"farm_leader":{"description":"Rahbar to'liq ismi","type":"string","example":"Karimov Jasur Baxtiyorovich"},"phone":{"description":"Aloqa telefon raqami","type":"string","example":"+998901234567"},"address":{"description":"Korxona manzili","type":"string","example":"Chirchiq tumani, 1-hudud","nullable":true},"region_id":{"description":"Viloyat ID (shared-service dan olinadi)","type":"integer","example":1},"district_id":{"description":"Tuman ID (shared-service dan olinadi)","type":"integer","example":5},"area":{"description":"Hudud nomi","type":"string","example":"1-hudud","nullable":true},"crop_category_id":{"description":"Ekin kategoriyasi ID","type":"integer","example":2,"nullable":true},"crop_type_id":{"description":"Ekin turi ID","type":"integer","example":5,"nullable":true},"agro_event_id":{"description":"Agro tadbir ID","type":"integer","example":3,"nullable":true},"goal_id":{"description":"Maqsad ID","type":"integer","example":1,"nullable":true},"area_hectare":{"description":"Maydon hajmi (gektar)","type":"number","format":"float","example":150.5,"nullable":true},"action_type":{"description":"Chora turi","type":"string","example":"written_instruction","nullable":true,"enum":["written_instruction","submission","administrative","warning"]},"inspection_type":{"description":"Tekshiruv turi","type":"string","nullable":true,"enum":["notification","entrepreneur_application","state_body","physical_person","coordination","other"]},"basis":{"description":"Tekshiruv asosi","type":"string","nullable":true,"enum":["risk_analysis","appeal","legislation_compliance","other_basis","other_situation"]},"inspection_type_file":{"description":"Tekshiruv turiga tegishli fayl (ixtiyoriy, max 10MB)","type":"string","format":"binary","nullable":true},"assigned_specialist_id":{"description":"Biriktirilgan mutaxassis ID (specialists endpointdan olinadi)","type":"integer","example":12,"nullable":true}},"type":"object"}}}},"responses":{"201":{"description":"Tekshiruv muvaffaqiyatli yaratildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#\/components\/schemas\/InspectionResponse"},"message":{"type":"string","example":"Tekshiruv muvaffaqiyatli yaratildi"}},"type":"object"}}}},"401":{"description":"Autentifikatsiya talab qilinadi"},"422":{"description":"Validatsiya xatosi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Validatsiya xatosi"},"errors":{"type":"object","example":"{\"stir\": [\"STIR maydoni majburiy\"], \"farm_name\": [\"Fermer xo'jaligi nomi majburiy\"]}"}},"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/inspections\/{id}":{"get":{"tags":["Inspections"],"summary":"Tekshiruvni batafsil ko'rish","description":"Bitta tekshiruvning to'liq ma'lumotlarini qaytaradi: korxona, ekin turi, hujjatlar ro'yxati va holati, biriktirilgan mutaxassis va boshqalar.\n\nHujjatlar ro'yxatida barcha 4 turdagi hujjat ko'rsatiladi (yuklanmagan hujjatlar ham `uploaded: false` bilan qaytadi).","operationId":"14753ff4fe306a31d19c7d2e52656e65","parameters":[{"name":"id","in":"path","description":"Tekshiruv ID raqami","required":true,"schema":{"type":"integer","example":24}}],"responses":{"200":{"description":"Tekshiruv ma'lumotlari muvaffaqiyatli qaytarildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#\/components\/schemas\/InspectionResponse"}},"type":"object"}}}},"401":{"description":"Autentifikatsiya talab qilinadi"},"404":{"description":"Tekshiruv topilmadi"}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Inspections"],"summary":"Tekshiruvni yangilash","description":"Mavjud tekshiruv ma'lumotlarini yangilaydi. **Faqat \"Yangi\" yoki \"Rad etilgan\" holatdagi** tekshiruvni yangilash mumkin.\n\nBarcha maydonlar ixtiyoriy \u2014 faqat o'zgartirilishi kerak bo'lgan maydonlar yuboriladi. Agar `stir` yuborilsa, korxona ma'lumotlari ham yangilanadi.","operationId":"1b16c06cec7a1ec987343a1768f77258","parameters":[{"name":"id","in":"path","description":"Tekshiruv ID raqami","required":true,"schema":{"type":"integer","example":24}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"properties":{"stir":{"description":"Korxona STIR raqami (yuborilsa korxona ham yangilanadi)","type":"string","example":"302415867","nullable":true},"farm_name":{"description":"Fermer xo'jaligi nomi","type":"string","example":"Oltin Hosil fermer xo'jaligi","nullable":true},"farm_leader":{"description":"Rahbar to'liq ismi","type":"string","example":"Karimov Jasur Baxtiyorovich","nullable":true},"phone":{"description":"Aloqa telefon raqami","type":"string","example":"+998901234567","nullable":true},"address":{"description":"Korxona manzili","type":"string","example":"Chirchiq tumani, 1-hudud","nullable":true},"region_id":{"description":"Viloyat ID","type":"integer","example":1,"nullable":true},"district_id":{"description":"Tuman ID","type":"integer","example":5,"nullable":true},"area":{"description":"Hudud nomi","type":"string","example":"1-hudud","nullable":true},"crop_category_id":{"description":"Ekin kategoriyasi ID","type":"integer","example":2,"nullable":true},"crop_type_id":{"description":"Ekin turi ID","type":"integer","example":5,"nullable":true},"agro_event_id":{"description":"Agro tadbir ID","type":"integer","example":3,"nullable":true},"goal_id":{"description":"Maqsad ID","type":"integer","example":1,"nullable":true},"area_hectare":{"description":"Maydon (gektar)","type":"number","format":"float","example":200,"nullable":true},"action_type":{"description":"Chora turi","type":"string","example":"submission","nullable":true,"enum":["written_instruction","submission","administrative","warning"]},"assigned_specialist_id":{"description":"Biriktirilgan mutaxassis ID","type":"integer","example":12,"nullable":true}},"type":"object"}}}},"responses":{"200":{"description":"Tekshiruv muvaffaqiyatli yangilandi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#\/components\/schemas\/InspectionResponse"},"message":{"type":"string","example":"Tekshiruv yangilandi"}},"type":"object"}}}},"401":{"description":"Autentifikatsiya talab qilinadi"},"403":{"description":"Ruxsat yo'q \u2014 tekshiruv \"Yangi\" yoki \"Rad etilgan\" holatda emas","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Faqat qoralama yoki qaytarilgan tekshiruvni yangilash mumkin"}},"type":"object"}}}},"404":{"description":"Tekshiruv topilmadi"},"422":{"description":"Validatsiya xatosi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Validatsiya xatosi"},"errors":{"type":"object"}},"type":"object"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Inspections"],"summary":"Tekshiruvni o'chirish","description":"Tekshiruvni o'chiradi. **Faqat \"Yangi\" holatdagi** tekshiruvni o'chirish mumkin. Yuklangan, tasdiqlangan yoki rad etilgan tekshiruvlarni o'chirish taqiqlangan.","operationId":"11a9260ba49b3abe72ded26cc991b377","parameters":[{"name":"id","in":"path","description":"Tekshiruv ID raqami","required":true,"schema":{"type":"integer","example":24}}],"responses":{"200":{"description":"Tekshiruv muvaffaqiyatli o'chirildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"type":"object","example":null,"nullable":true},"message":{"type":"string","example":"Tekshiruv o'chirildi"}},"type":"object"}}}},"401":{"description":"Autentifikatsiya talab qilinadi"},"403":{"description":"Ruxsat yo'q \u2014 tekshiruv \"Yangi\" holatda emas","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Faqat \"Yangi\" holatdagi tekshiruvni o'chirish mumkin"}},"type":"object"}}}},"404":{"description":"Tekshiruv topilmadi"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/inspections\/{id}\/submit":{"post":{"tags":["Inspections"],"summary":"Tekshiruvni viloyatga yuborish","description":"**Tuman inspektori** tekshiruvni viloyatga ko'rib chiqish uchun yuboradi. Yuborishdan oldin 3 ta majburiy hujjat yuklanishi shart:\n- `notification` \u2014 Xabardor qilish hujjati\n- `study_program` \u2014 O'rganish dasturi hujjati\n- `info` \u2014 Ma'lumot hujjati\n\n### 2 usulda ishlaydi:\n1. **Avval alohida yuklash** \u2014 `POST \/inspections\/{id}\/documents` orqali 3 ta hujjatni birma-bir yuklash, keyin shu endpoint orqali yuborish (faylsiz)\n2. **Hammasi birga** \u2014 shu endpoint orqali 3 ta faylni bir vaqtda multipart\/form-data bilan yuklash va yuborish\n\n### Holat o'zgarishi:\n- Tekshiruv: **Yangi** yoki **Rad etilgan** -> **Yuklangan**\n- Barcha hujjatlar: status **Yangi** ga qaytariladi, rad etish sabablari tozalanadi\n\n### Rad etilgan tekshiruvni qayta yuborish:\nAgar tekshiruv viloyat tomonidan rad etilgan bo'lsa, tuman inspektori rad etilgan hujjatni yangilab, qayta yuborishi mumkin. Yangi fayllar eski fayllarni almashtiradi.","operationId":"64dbe118456f96ff34c82978eee89e08","parameters":[{"name":"id","in":"path","description":"Tekshiruv ID raqami","required":true,"schema":{"type":"integer","example":24}}],"requestBody":{"description":"3 ta faylni birga yuklash (ixtiyoriy \u2014 oldindan alohida yuklangan bo'lsa kerak emas)","required":false,"content":{"multipart\/form-data":{"schema":{"properties":{"notification":{"description":"Xabardor qilish hujjati (pdf, doc, docx, txt \u2014 max 10MB)","type":"string","format":"binary"},"study_program":{"description":"O'rganish dasturi hujjati (pdf, doc, docx, txt \u2014 max 10MB)","type":"string","format":"binary"},"info":{"description":"Ma'lumot hujjati (pdf, doc, docx, txt \u2014 max 10MB)","type":"string","format":"binary"}},"type":"object"}}}},"responses":{"200":{"description":"Tekshiruv muvaffaqiyatli viloyatga yuborildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#\/components\/schemas\/InspectionResponse"},"message":{"type":"string","example":"Tekshiruv viloyatga yuborildi"}},"type":"object"}}}},"401":{"description":"Autentifikatsiya talab qilinadi"},"403":{"description":"Ruxsat yo'q \u2014 tekshiruv \"Yangi\" yoki \"Rad etilgan\" holatda emas","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Faqat qoralama yoki qaytarilgan tekshiruvni yuborish mumkin"}},"type":"object"}}}},"404":{"description":"Tekshiruv topilmadi"},"422":{"description":"Hujjatlar to'liq yuklanmagan","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Quyidagi hujjatlar yuklanmagan: Xabardor qilish hujjati, Ma'lumot hujjati"}},"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/inspections\/{id}\/documents\/{documentId}\/review":{"patch":{"tags":["Inspections"],"summary":"Viloyat: Hujjatni ko'rib chiqish (Imzolash yoki Rad etish)","description":"**Viloyat inspektori** tuman inspektori yuklagan hujjatlarni birma-bir ko'rib chiqadi.\n\n### Jarayon:\n1. Tuman 3 ta hujjat yuklaydi: `notification`, `study_program`, `info`\n2. Viloyat har birini **alohida** ko'rib chiqadi (shu endpoint orqali)\n3. `action: \"sign\"` \u2192 hujjat imzolangan \u2705\n4. `action: \"reject\"` \u2192 hujjat rad etilgan \u274c (reason **majburiy**)\n5. Barcha 4 ta hujjat imzolansa \u2192 tekshiruv **\"Tasdiqlangan\"**\n6. Bitta hujjat rad etilsa \u2192 tekshiruv **\"Rad etilgan\"**\n\n### Muhim:\n- `documentId` \u2014 Tekshiruv show API'dan olinadi (`documents[].id`)\n- Rad etishda `reason` maydoni **majburiy** (nega rad etilganini yozish kerak)\n- Imzolashda `reason` kerak **emas**","operationId":"7d49bfe344655b0a7fb8135787ccb011","parameters":[{"name":"id","in":"path","description":"Tekshiruv ID raqami","required":true,"schema":{"type":"integer","example":24}},{"name":"documentId","in":"path","description":"Hujjat ID raqami (tekshiruv show API dan `documents[].id` orqali olinadi)","required":true,"schema":{"type":"integer","example":50}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"required":["action"],"properties":{"action":{"description":"`sign` \u2014 imzolash (tasdiqlash), `reject` \u2014 rad etish","type":"string","example":"sign","enum":["sign","reject"]},"reason":{"description":"Rad etish sababi. **Faqat `action: \"reject\"` bo'lganda majburiy.** Imzolashda kerak emas.","type":"string","example":"Hujjatda imzo va muhr yo'q","nullable":true}},"type":"object"}}}},"responses":{"200":{"description":"Hujjat muvaffaqiyatli ko'rib chiqildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Hujjat imzolandi"},"data":{"properties":{"id":{"type":"integer","example":50},"type":{"properties":{"value":{"type":"string","example":"notification"},"label":{"type":"string","example":"Xabardor qilish hujjati"}},"type":"object"},"status":{"properties":{"value":{"type":"string","example":"signed"},"label":{"type":"string","example":"Imzolangan"}},"type":"object"},"file_url":{"type":"string","example":"https:\/\/backend.uzagroin.uz\/api\/v1\/inspector\/files\/..."},"signed_at":{"type":"string","format":"date-time","example":"2026-04-28T10:30:00+00:00"},"reject_reason":{"type":"string","example":null,"nullable":true}},"type":"object"}},"type":"object"}}}},"403":{"description":"Ruxsat yo'q yoki noto'g'ri status"},"404":{"description":"Tekshiruv yoki hujjat topilmadi"},"422":{"description":"Validatsiya xatosi (action noto'g'ri yoki reason yo'q)"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/inspections\/{id}\/documents":{"post":{"tags":["Inspections"],"summary":"Tekshiruvga hujjat biriktirish","description":"**Tuman inspektori** 3 ta hujjat yuklaydi:\n- `notification` \u2014 Xabardor qilish hujjati\n- `study_program` \u2014 O'rganish dasturi hujjati\n- `info` \u2014 Ma'lumot hujjati\n\n**Viloyat inspektori** 1 ta hujjat yuklaydi:\n- `study_order` \u2014 O'rganish buyrug'i (barcha 3 ta hujjat imzolangandan keyin)\n\n### Qo'llab-quvvatlanadigan fayl turlari:\n`pdf, doc, docx, txt` \u2014 maksimum 10MB\n\n### Muhim:\n- Har bir turdagi hujjat faqat **1 marta** yuklanadi\n- Agar shu turdagi hujjat allaqachon yuklangan bo'lsa \u2014 xatolik qaytadi","operationId":"0cf2f9375930e26e35b7406ef5fd3bc0","parameters":[{"name":"id","in":"path","description":"Tekshiruv ID","required":true,"schema":{"type":"integer","example":24}}],"requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"required":["type","file"],"properties":{"type":{"description":"Hujjat turi: `notification` (Xabarnoma), `study_program` (O'quv dasturi), `info` (Ma'lumotnoma), `study_order` (O'quv buyruq \u2014 faqat viloyat)","type":"string","example":"notification","enum":["notification","study_program","info","study_order"]},"file":{"description":"Fayl (pdf, doc, docx, txt). Maksimum 10MB","type":"string","format":"binary"}},"type":"object"}}}},"responses":{"201":{"description":"Hujjat muvaffaqiyatli biriktirildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Hujjat muvaffaqiyatli biriktirildi"},"data":{"properties":{"id":{"type":"integer","example":53},"type":{"properties":{"value":{"type":"string","example":"notification"},"label":{"type":"string","example":"Xabardor qilish hujjati"}},"type":"object"},"status":{"properties":{"value":{"type":"string","example":"draft"},"label":{"type":"string","example":"Yangi"}},"type":"object"},"file_url":{"type":"string","example":"https:\/\/backend.uzagroin.uz\/api\/v1\/inspector\/files\/..."}},"type":"object"}},"type":"object"}}}},"403":{"description":"Ruxsat yo'q (bu turdagi hujjatni yuklash taqiqlangan)"},"409":{"description":"Bu turdagi hujjat allaqachon yuklangan"},"422":{"description":"Validatsiya xatosi"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/inspections\/{inspectionId}\/documents\/{documentId}":{"delete":{"tags":["Inspections"],"summary":"Tekshiruv hujjatini o'chirish","description":"Tekshiruvga biriktirilgan hujjatni o'chiradi va S3 dan faylni ham o'chiradi. **Imzolangan hujjatni o'chirish mumkin emas** \u2014 faqat Yangi, Kutilmoqda yoki Rad etilgan holatdagi hujjatlar o'chirilishi mumkin.","operationId":"645d44ac4cb1c0cd3e87f269f93c523c","parameters":[{"name":"inspectionId","in":"path","description":"Tekshiruv ID raqami","required":true,"schema":{"type":"integer","example":24}},{"name":"documentId","in":"path","description":"Hujjat ID raqami (tekshiruv show API dan `documents[].id` orqali olinadi)","required":true,"schema":{"type":"integer","example":53}}],"responses":{"200":{"description":"Hujjat muvaffaqiyatli o'chirildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"type":"object","example":null,"nullable":true},"message":{"type":"string","example":"Hujjat o'chirildi"}},"type":"object"}}}},"401":{"description":"Autentifikatsiya talab qilinadi"},"403":{"description":"Imzolangan hujjatni o'chirish mumkin emas","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Imzolangan hujjatni o'chirish mumkin emas"}},"type":"object"}}}},"404":{"description":"Tekshiruv yoki hujjat topilmadi"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/inspections\/by-stir\/{stir}":{"get":{"tags":["Inspections"],"summary":"STIR bo'yicha tasdiqlangan tekshiruvni topish","description":"Korxonaning STIR raqami bo'yicha **eng oxirgi tasdiqlangan** tekshiruvni topadi. Bu endpoint asosan saytda tekshiruv (site inspection) yaratishda \u2014 korxona ma'lumotlarini oldindan to'ldirish uchun ishlatiladi.\n\nFaqat **\"Tasdiqlangan\"** (approved) holatdagi tekshiruvlar orasidan qidiradi. Agar bir nechta tasdiqlangan tekshiruv bo'lsa \u2014 eng oxirgisi qaytariladi.","operationId":"93ac5a83c6f85f22af6cb67eda956ddb","parameters":[{"name":"stir","in":"path","description":"Korxona STIR raqami (9 raqam)","required":true,"schema":{"type":"string","example":"302415867"}}],"responses":{"200":{"description":"Tasdiqlangan tekshiruv topildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#\/components\/schemas\/InspectionResponse"}},"type":"object"}}}},"401":{"description":"Autentifikatsiya talab qilinadi"},"404":{"description":"Bu STIR bo'yicha tasdiqlangan tekshiruv topilmadi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Bu STIR bo'yicha tasdiqlangan tekshiruv topilmadi"}},"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/inspections\/specialists":{"get":{"tags":["Inspections"],"summary":"Mutaxassislar ro'yxati","description":"Tekshiruvga biriktirish mumkin bo'lgan barcha faol mutaxassislar ro'yxatini qaytaradi. Familiya bo'yicha tartiblangan. Natija tekshiruv yaratish\/yangilashda `assigned_specialist_id` maydonini to'ldirish uchun ishlatiladi.","operationId":"1a3f96c533f79cd6cecd8acb1d4fd923","responses":{"200":{"description":"Mutaxassislar ro'yxati muvaffaqiyatli qaytarildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"properties":{"id":{"description":"Mutaxassis (foydalanuvchi) ID","type":"integer","example":12},"full_name":{"description":"To'liq ismi (familiya + ism + otasining ismi)","type":"string","example":"Karimov Jasur Baxtiyorovich"},"state_id":{"description":"Mutaxassis viloyat ID","type":"integer","example":1,"nullable":true},"city_id":{"description":"Mutaxassis tuman ID","type":"integer","example":5,"nullable":true}},"type":"object"}}},"type":"object"}}}},"401":{"description":"Autentifikatsiya talab qilinadi"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/inspector-manage\/permissions":{"get":{"tags":["Inspector Permission Management"],"summary":"Ruxsatlar ro'yxati","description":"Inspector xizmatidagi barcha ruxsatlarni guruhlar bilan olish","operationId":"2beed1f66a3b8f39c794c34862980c41","responses":{"200":{"description":"Ruxsatlar ro'yxati","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"type":"object"}}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/inspector-manage\/roles":{"get":{"tags":["Inspector Role Management"],"summary":"Rollar ro'yxati","description":"Inspector xizmatidagi barcha rollarni olish","operationId":"85b703339513c5983d784ad7c3eb0683","parameters":[{"name":"with_users","in":"query","description":"Foydalanuvchilar sonini qo'shish","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Rollar ro'yxati","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"type":"object"}}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan"}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Inspector Role Management"],"summary":"Yangi rol qo'shish","description":"Inspector xizmatiga yangi rol yaratish","operationId":"9397a9adc1f1d05f7cff3ea126f5aadf","requestBody":{"required":true,"content":{"application\/json":{"schema":{"required":["name"],"properties":{"name":{"description":"Rol nomi (faqat kichik harflar, raqamlar va tire)","type":"string","pattern":"^[a-z0-9-]+$"},"permissions":{"description":"Ruxsat ID lari","type":"array","items":{"type":"integer"}}},"type":"object"}}}},"responses":{"201":{"description":"Rol muvaffaqiyatli yaratildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Rol muvaffaqiyatli yaratildi"},"data":{"type":"object"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan"},"422":{"description":"Validatsiya xatosi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Validatsiya xatosi"},"errors":{"type":"object"}},"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/inspector-manage\/roles\/{role}":{"get":{"tags":["Inspector Role Management"],"summary":"Rol ma'lumotlari","operationId":"5a85f4b4a70e49fddf6d6b48a2e4e097","parameters":[{"name":"role","in":"path","description":"Rol ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Rol ma'lumotlari","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"type":"object"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan"},"404":{"description":"Rol topilmadi"}},"security":[{"bearerAuth":[]}]},"put":{"tags":["Inspector Role Management"],"summary":"Rolni yangilash","description":"Rol ma'lumotlarini yangilash. Faqat o'zgartirilishi kerak bo'lgan maydonlarni yuboring.","operationId":"45a11c465f72b83cc5404f4c42e4d484","parameters":[{"name":"role","in":"path","description":"Rol ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"properties":{"name":{"description":"Rol nomi (faqat kichik harflar, raqamlar va tire)","type":"string","pattern":"^[a-z0-9-]+$"},"permissions":{"description":"Ruxsat ID lari","type":"array","items":{"type":"integer"}}},"type":"object"}}}},"responses":{"200":{"description":"Rol yangilandi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Rol muvaffaqiyatli yangilandi"},"data":{"type":"object"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan"},"404":{"description":"Rol topilmadi"},"422":{"description":"Validatsiya xatosi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Validatsiya xatosi"},"errors":{"type":"object"}},"type":"object"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Inspector Role Management"],"summary":"Rolni o'chirish","operationId":"f6322cbfe541ce6f7d145bbf0133b765","parameters":[{"name":"role","in":"path","description":"Rol ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Rol o'chirildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Rol muvaffaqiyatli o'chirildi"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan"},"404":{"description":"Rol topilmadi"},"422":{"description":"Bu rolga biriktirilgan foydalanuvchilar mavjud","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Bu rolga biriktirilgan foydalanuvchilar mavjud"}},"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/inspector-manage\/roles\/{role}\/permissions":{"post":{"tags":["Inspector Role Management"],"summary":"Rol ruxsatlarini yangilash","description":"Rolga ruxsatlarni sinxronlash","operationId":"e919d5eb42f6498ee66cba2f10efcca3","parameters":[{"name":"role","in":"path","description":"Rol ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"required":["permissions"],"properties":{"permissions":{"description":"Ruxsat ID lari","type":"array","items":{"type":"integer"}}},"type":"object"}}}},"responses":{"200":{"description":"Ruxsatlar yangilandi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Ruxsatlar muvaffaqiyatli yangilandi"},"data":{"type":"object"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan"},"404":{"description":"Rol topilmadi"},"422":{"description":"Validatsiya xatosi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Validatsiya xatosi"},"errors":{"type":"object"}},"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/inspector-manage\/users":{"get":{"tags":["Inspector User Management"],"summary":"Foydalanuvchilar ro'yxati","description":"Inspector xizmatidagi barcha foydalanuvchilarni filterlash va sahifalash bilan olish","operationId":"1e34b9f09dced2602efd5cb5cc43508a","parameters":[{"name":"search","in":"query","description":"Ism, familiya yoki email bo'yicha qidirish","required":false,"schema":{"type":"string","maxLength":255}},{"name":"is_active","in":"query","description":"Faollik holati","required":false,"schema":{"type":"boolean"}},{"name":"role_id","in":"query","description":"Rol ID bo'yicha filterlash","required":false,"schema":{"type":"integer"}},{"name":"per_page","in":"query","description":"Sahifadagi yozuvlar soni (-1 = hammasi)","required":false,"schema":{"type":"integer","default":15,"maximum":100,"minimum":-1}},{"name":"sort_by","in":"query","description":"Saralash maydoni","required":false,"schema":{"type":"string","default":"id"}},{"name":"sort_order","in":"query","description":"Saralash tartibi","required":false,"schema":{"type":"string","default":"desc","enum":["asc","desc"]}},{"name":"page","in":"query","description":"Sahifa raqami","required":false,"schema":{"type":"integer","default":1,"minimum":1}}],"responses":{"200":{"description":"Foydalanuvchilar ro'yxati","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"type":"object"}},"meta":{"properties":{"current_page":{"type":"integer"},"last_page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"}},"type":"object"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan"}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Inspector User Management"],"summary":"Yangi foydalanuvchi qo'shish","description":"Inspector xizmatiga yangi foydalanuvchi yaratish","operationId":"ec494fc105e209556781c5ff34861450","requestBody":{"required":true,"content":{"application\/json":{"schema":{"required":["name","lastname","email","password","password_confirmation","roles"],"properties":{"name":{"description":"Foydalanuvchi ismi","type":"string","maxLength":255},"lastname":{"description":"Foydalanuvchi familiyasi","type":"string","maxLength":255},"email":{"description":"Email manzili (unikal)","type":"string","format":"email"},"password":{"description":"Parol (kamida 8 ta belgi)","type":"string","format":"password","minLength":8},"password_confirmation":{"description":"Parol tasdig'i","type":"string","format":"password"},"roles":{"description":"Rol ID lari","type":"array","items":{"type":"integer"}},"is_active":{"description":"Faollik holati","type":"boolean"},"phone":{"description":"Telefon raqami","type":"string"}},"type":"object"}}}},"responses":{"201":{"description":"Foydalanuvchi muvaffaqiyatli yaratildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Foydalanuvchi muvaffaqiyatli yaratildi"},"data":{"type":"object"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan"},"422":{"description":"Validatsiya xatosi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Validatsiya xatosi"},"errors":{"type":"object"}},"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/inspector-manage\/users\/{user}":{"get":{"tags":["Inspector User Management"],"summary":"Foydalanuvchi ma'lumotlari","operationId":"779df38113ffb81b0809e6a1431291e1","parameters":[{"name":"user","in":"path","description":"Foydalanuvchi ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Foydalanuvchi ma'lumotlari","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"type":"object"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan"},"404":{"description":"Foydalanuvchi topilmadi"}},"security":[{"bearerAuth":[]}]},"put":{"tags":["Inspector User Management"],"summary":"Foydalanuvchini yangilash","description":"Foydalanuvchi ma'lumotlarini yangilash. Faqat o'zgartirilishi kerak bo'lgan maydonlarni yuboring.","operationId":"677cda8039bcdcc65f4af54633374378","parameters":[{"name":"user","in":"path","description":"Foydalanuvchi ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"properties":{"name":{"description":"Foydalanuvchi ismi","type":"string","maxLength":255},"lastname":{"description":"Foydalanuvchi familiyasi","type":"string","maxLength":255},"email":{"description":"Email manzili (unikal)","type":"string","format":"email"},"password":{"description":"Parol (kamida 8 ta belgi)","type":"string","format":"password","minLength":8},"password_confirmation":{"description":"Parol tasdig'i","type":"string","format":"password"},"roles":{"description":"Rol ID lari","type":"array","items":{"type":"integer"}},"is_active":{"description":"Faollik holati","type":"boolean"},"phone":{"description":"Telefon raqami","type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Foydalanuvchi yangilandi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Foydalanuvchi muvaffaqiyatli yangilandi"},"data":{"type":"object"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan"},"404":{"description":"Foydalanuvchi topilmadi"},"422":{"description":"Validatsiya xatosi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Validatsiya xatosi"},"errors":{"type":"object"}},"type":"object"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Inspector User Management"],"summary":"Foydalanuvchini o'chirish","operationId":"ba81569ba276de35057bc46f9f141409","parameters":[{"name":"user","in":"path","description":"Foydalanuvchi ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Foydalanuvchi o'chirildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Foydalanuvchi muvaffaqiyatli o'chirildi"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan"},"403":{"description":"O'zingizni o'chira olmaysiz"},"404":{"description":"Foydalanuvchi topilmadi"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/inspector-manage\/users\/{id}\/restore":{"post":{"tags":["Inspector User Management"],"summary":"O'chirilgan foydalanuvchini tiklash","operationId":"692539f9d8ea7d3cf4221ae64020f77e","parameters":[{"name":"id","in":"path","description":"Foydalanuvchi ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Foydalanuvchi tiklandi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Foydalanuvchi muvaffaqiyatli tiklandi"},"data":{"type":"object"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan"},"404":{"description":"Foydalanuvchi topilmadi"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/inspector-manage\/users\/{user}\/toggle-status":{"post":{"tags":["Inspector User Management"],"summary":"Foydalanuvchi holatini o'zgartirish","description":"Foydalanuvchining is_active holatini teskari qiymatga o'zgartirish","operationId":"fb61b2262dc49c8015c04c2f6f145cb4","parameters":[{"name":"user","in":"path","description":"Foydalanuvchi ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Holat o'zgartirildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Foydalanuvchi faollashtirildi"},"data":{"type":"object"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan"},"404":{"description":"Foydalanuvchi topilmadi"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/monitorings":{"get":{"tags":["Monitorings"],"summary":"Monitoringlar ro'yxati","description":"Barcha monitoringlarni filterlash va sahifalash bilan olish. Ekin turi, agrotexnik tadbir, maqsad, rasmlar bilan birga qaytariladi.","operationId":"monitoringIndex","parameters":[{"name":"search","in":"query","description":"Fermer nomi, raxbar, STIR yoki kontur raqami bo'yicha qidirish (ILIKE)","required":false,"schema":{"type":"string","example":"Oltin Hosil","maxLength":255}},{"name":"crop_type_id","in":"query","description":"Ekin turi ID bo'yicha filterlash","required":false,"schema":{"type":"integer","example":1}},{"name":"agro_event_id","in":"query","description":"Agrotexnik tadbir ID bo'yicha filterlash","required":false,"schema":{"type":"integer","example":1}},{"name":"goal_id","in":"query","description":"Maqsad ID bo'yicha filterlash","required":false,"schema":{"type":"integer","example":1}},{"name":"stir","in":"query","description":"STIR raqami bo'yicha aniq filterlash (9 raqam)","required":false,"schema":{"type":"string","example":"123456789"}},{"name":"region_id","in":"query","description":"Viloyat ID bo'yicha filterlash (tbl_states)","required":false,"schema":{"type":"integer","example":1}},{"name":"district_id","in":"query","description":"Tuman ID bo'yicha filterlash (tbl_cities)","required":false,"schema":{"type":"integer","example":5}},{"name":"status","in":"query","description":"Holat bo'yicha filterlash","required":false,"schema":{"$ref":"#\/components\/schemas\/MonitoringStatus"}},{"name":"action_type","in":"query","description":"Ta'sir chorasi turi bo'yicha filterlash","required":false,"schema":{"$ref":"#\/components\/schemas\/ActionType"}},{"name":"per_page","in":"query","description":"Sahifadagi yozuvlar soni. `-1` = hammasi (max 1000)","required":false,"schema":{"type":"integer","default":15,"maximum":100,"minimum":-1}},{"name":"page","in":"query","description":"Sahifa raqami","required":false,"schema":{"type":"integer","default":1,"minimum":1}},{"name":"sort_by","in":"query","description":"Saralash maydoni","required":false,"schema":{"type":"string","default":"id","enum":["id","crop_type_id","agro_event_id","goal_id","enterprise_id","status","action_type","area_hectare","created_at","updated_at"]}},{"name":"sort_order","in":"query","description":"Saralash tartibi","required":false,"schema":{"type":"string","default":"desc","enum":["asc","desc"]}}],"responses":{"200":{"description":"Monitoringlar ro'yxati muvaffaqiyatli qaytarildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/MonitoringList"}},"meta":{"$ref":"#\/components\/schemas\/PaginationMeta"},"links":{"$ref":"#\/components\/schemas\/PaginationLinks"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Monitorings"],"summary":"Yangi monitoring yaratish","description":"Yangi monitoring yaratish. `multipart\/form-data` orqali ma'lumotlar va rasmlar yuboriladi.\n\n**Rasmlar:** Max 10 ta, har biri max 5MB (jpg, jpeg, png, webp).\n**Status:** Default `new`. Kontur raqami avtomatik generatsiya qilinadi (#000000001).\n**STIR:** 9 ta raqamdan iborat bo'lishi shart.\n**area_hectare:** Minimal qiymat 0.01 gektar.","operationId":"monitoringStore","requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"required":["crop_type_id","agro_event_id","goal_id","stir","farm_name","farm_leader","phone","region_id","district_id","area","area_hectare","action_type"],"properties":{"crop_category_id":{"description":"Ekin toifasi ID","type":"integer","example":1},"crop_type_id":{"description":"Ekin turi ID","type":"integer","example":1},"agro_event_id":{"description":"Agrotexnik tadbir ID","type":"integer","example":1},"goal_id":{"description":"Maqsad ID","type":"integer","example":1},"stir":{"description":"Korxona STIR (9 raqam). Mavjud bo'lsa enterprises jadvalidan olinadi, bo'lmasa yangi yaratiladi.","type":"string","pattern":"^\\d{9}$","example":"123456789","maxLength":9,"minLength":9},"farm_name":{"description":"Fermer xo'jaligi nomi (enterprises.legal_name)","type":"string","example":"Oltin Hosil","maxLength":255},"farm_leader":{"description":"Raxbar (enterprises.director_full_name)","type":"string","example":"Karimov Jasur","maxLength":255},"phone":{"description":"Telefon raqami","type":"string","example":"+998901234567","maxLength":20},"address":{"description":"Yer manzili","type":"string","example":"Chirchiq sh., Navoiy ko'chasi 15","nullable":true,"maxLength":500},"region_id":{"description":"Viloyat ID (tbl_states)","type":"integer","example":1},"district_id":{"description":"Tuman ID (tbl_cities)","type":"integer","example":5},"area":{"description":"Hudud nomi","type":"string","example":"1-hudud","maxLength":255},"contour_number":{"description":"Kontur raqami (avtomatik #000000001 formatida)","type":"string","example":null,"nullable":true,"maxLength":255},"area_hectare":{"description":"Maydoni gektarda","type":"number","format":"double","example":25.5,"minimum":0.01},"action_type":{"$ref":"#\/components\/schemas\/ActionType"},"images[]":{"description":"Rasmlar (max 10 ta, har biri max 5MB)","type":"array","items":{"type":"string","format":"binary"},"maxItems":10}},"type":"object"}}}},"responses":{"201":{"description":"Monitoring muvaffaqiyatli yaratildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Monitoring muvaffaqiyatli yaratildi"},"data":{"$ref":"#\/components\/schemas\/Monitoring"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"422":{"description":"Validatsiya xatosi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ValidationErrorResponse"}}}},"500":{"description":"S3 rasmlarni yuklashda xatolik (monitoring yaratilgan, ba'zi rasmlar yuklanmagan)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ServerErrorResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/monitorings\/{monitoring}":{"get":{"tags":["Monitorings"],"summary":"Monitoring ma'lumotlari","description":"Bitta monitoring haqida to'liq ma'lumot olish (ekin turi, agrotexnik tadbir, maqsad va rasmlar bilan)","operationId":"monitoringShow","parameters":[{"name":"monitoring","in":"path","description":"Monitoring ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Monitoring ma'lumotlari","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#\/components\/schemas\/Monitoring"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Monitoring topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Monitorings"],"summary":"Monitoringni yangilash (faqat new)","description":"Faqat `new` holatdagi monitoringlarni yangilash mumkin. `submitted` holatdagi monitoring yangilansa 403 qaytariladi.\n\n**Yangi rasmlar:** `images[]` orqali yuboriladi (max 10 ta, har biri max 5MB).\n**Rasmlarni o'chirish:** `delete_images[]` orqali o'chiriladigan rasm ID larini yuboring.","operationId":"monitoringUpdate","parameters":[{"name":"monitoring","in":"path","description":"Monitoring ID raqami","required":true,"schema":{"type":"integer","example":1}}],"requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"properties":{"crop_category_id":{"description":"Ekin toifasi ID","type":"integer","example":1},"crop_type_id":{"description":"Ekin turi ID","type":"integer","example":1},"agro_event_id":{"description":"Agrotexnik tadbir ID","type":"integer","example":1},"goal_id":{"description":"Maqsad ID","type":"integer","example":1},"stir":{"description":"STIR raqami (9 ta raqam)","type":"string","pattern":"^\\d{9}$","example":"123456789","maxLength":9,"minLength":9},"region_id":{"description":"Viloyat ID (tbl_states jadvalidan)","type":"integer","example":1},"district_id":{"description":"Tuman ID (tbl_cities jadvalidan)","type":"integer","example":5},"area":{"description":"Hudud nomi","type":"string","example":"1-hudud","maxLength":255},"farm_name":{"description":"Fermer xo'jaligi nomi","type":"string","example":"Oltin Hosil","maxLength":255},"farm_leader":{"description":"Fermer xo'jaligi raxbari","type":"string","example":"Karimov Jasur","maxLength":255},"phone":{"description":"Telefon raqami","type":"string","example":"+998901234567","maxLength":20},"contour_number":{"description":"Kontur raqami","type":"string","example":"K-001","maxLength":255},"area_hectare":{"description":"Maydoni gektarda","type":"number","format":"double","example":25.5,"minimum":0.01},"action_type":{"$ref":"#\/components\/schemas\/ActionType"},"images[]":{"description":"Yangi rasmlar qo'shish","type":"array","items":{"type":"string","format":"binary"},"maxItems":10},"delete_images[]":{"description":"O'chiriladigan rasm ID lari (faqat shu monitoringga tegishli)","type":"array","items":{"type":"integer"}}},"type":"object"}}}},"responses":{"200":{"description":"Monitoring muvaffaqiyatli yangilandi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Monitoring muvaffaqiyatli yangilandi"},"data":{"$ref":"#\/components\/schemas\/Monitoring"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"403":{"description":"Faqat qoralama holatdagi monitoringlarni yangilash mumkin","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ForbiddenResponse"}}}},"404":{"description":"Monitoring topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}},"422":{"description":"Validatsiya xatosi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ValidationErrorResponse"}}}},"500":{"description":"S3 rasmlarni yuklashda xatolik","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ServerErrorResponse"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Monitorings"],"summary":"Monitoringni o'chirish (faqat new, soft delete)","description":"Faqat `new` holatdagi monitoringlarni o'chirish mumkin. Rasmlar S3 dan o'chiriladi, monitoring soft delete qilinadi.","operationId":"monitoringDestroy","parameters":[{"name":"monitoring","in":"path","description":"Monitoring ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Monitoring muvaffaqiyatli o'chirildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Monitoring muvaffaqiyatli o'chirildi"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"403":{"description":"Faqat qoralama holatdagi monitoringlarni o'chirish mumkin","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ForbiddenResponse"}}}},"404":{"description":"Monitoring topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/monitorings\/{id}\/restore":{"post":{"tags":["Monitorings"],"summary":"O'chirilgan monitoringni tiklash","description":"Soft delete bilan o'chirilgan monitoringni qayta tiklash. Rasmlar S3 da saqlangan bo'lsa qaytariladi.","operationId":"monitoringRestore","parameters":[{"name":"id","in":"path","description":"O'chirilgan monitoring ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Monitoring muvaffaqiyatli tiklandi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Monitoring muvaffaqiyatli tiklandi"},"data":{"$ref":"#\/components\/schemas\/Monitoring"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"404":{"description":"Monitoring topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/monitorings\/{monitoring}\/submit":{"patch":{"tags":["Monitorings"],"summary":"Monitoringni tekshirishga yuborish","description":"`new` holatdagi monitoringni viloyat inspektoriga `submitted` holatga o'tkazish. Faqat `new` holatdagi monitoringlar yuborilishi mumkin.","operationId":"monitoringSubmit","parameters":[{"name":"monitoring","in":"path","description":"Monitoring ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Monitoring tekshirishga muvaffaqiyatli yuborildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Monitoring tekshirishga yuborildi"},"data":{"$ref":"#\/components\/schemas\/Monitoring"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"403":{"description":"Faqat qoralama holatdagi monitoringlarni yuborish mumkin","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ForbiddenResponse"}}}},"404":{"description":"Monitoring topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/monitorings\/{monitoring}\/approve":{"patch":{"tags":["Monitorings"],"summary":"Monitoringni tasdiqlash (viloyat inspektori)","description":"Viloyat inspektori `submitted` holatdagi monitoringni tasdiqlaydi \u2014 `approved` holatga o'tkazadi.","operationId":"monitoringApprove","parameters":[{"name":"monitoring","in":"path","description":"Monitoring ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Monitoring muvaffaqiyatli tasdiqlandi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Monitoring tasdiqlandi"},"data":{"$ref":"#\/components\/schemas\/Monitoring"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"403":{"description":"Faqat yangi holatdagi monitoringlarni tasdiqlash mumkin","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ForbiddenResponse"}}}},"404":{"description":"Monitoring topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/monitorings\/{monitoring}\/reject":{"patch":{"tags":["Monitorings"],"summary":"Monitoringni qaytarish (viloyat inspektori)","description":"Viloyat inspektori `submitted` holatdagi monitoringni qaytaradi \u2014 `rejected` holatga o'tkazadi.","operationId":"monitoringReject","parameters":[{"name":"monitoring","in":"path","description":"Monitoring ID raqami","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Monitoring qaytarildi","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Monitoring qaytarildi"},"data":{"$ref":"#\/components\/schemas\/Monitoring"}},"type":"object"}}}},"401":{"description":"Avtorizatsiyadan o'tilmagan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UnauthorizedResponse"}}}},"403":{"description":"Faqat yangi holatdagi monitoringlarni rad etish mumkin","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ForbiddenResponse"}}}},"404":{"description":"Monitoring topilmadi","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotFoundResponse"}}}}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/site-inspections":{"get":{"tags":["Site Inspections"],"summary":"Dala tekshiruvlari ro'yxati","description":"Faqat `status=approved` tekshiruvlar. `field_status` parametri orqali dala bosqichini filtrlash mumkin.","operationId":"siteInspectionIndex","parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string"}},{"name":"field_status","in":"query","description":"draft, submitted, completed, rejected (bo'sh = hammasi)","required":false,"schema":{"type":"string"}},{"name":"crop_type_id","in":"query","required":false,"schema":{"type":"integer"}},{"name":"agro_event_id","in":"query","required":false,"schema":{"type":"integer"}},{"name":"goal_id","in":"query","required":false,"schema":{"type":"integer"}},{"name":"stir","in":"query","required":false,"schema":{"type":"string"}},{"name":"region_id","in":"query","required":false,"schema":{"type":"integer"}},{"name":"district_id","in":"query","required":false,"schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","default":15}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"id"}},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","default":"desc"}}],"responses":{"200":{"description":"Ro'yxat","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/SiteInspectionList"}},"meta":{"$ref":"#\/components\/schemas\/PaginationMeta"}},"type":"object"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Site Inspections"],"summary":"Yangi dala tekshiruvi yaratish (saqlash yoki yuborish)","description":"`submit=false` (default) \u2014 Saqlash. `field_status=draft`. Barcha maydonlar ixtiyoriy.\n`submit=true` \u2014 Yuborish. `field_status=submitted`. Barcha maydonlar majburiy.","operationId":"siteInspectionStore","requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"properties":{"submit":{"description":"true=yuborish, false=saqlash","type":"boolean","example":false},"stir":{"type":"string","example":"123456789"},"farm_name":{"type":"string","example":"Oltin Hosil FX"},"farm_leader":{"type":"string","example":"Karimov Jasur"},"phone":{"type":"string","example":"+998901234567"},"address":{"type":"string","nullable":true},"region_id":{"type":"integer","example":1},"district_id":{"type":"integer","example":5},"area":{"type":"string","example":"1-hudud"},"crop_category_id":{"type":"integer","nullable":true},"crop_type_id":{"type":"integer","example":1},"agro_event_id":{"type":"integer","example":1},"goal_id":{"type":"integer","example":1},"area_hectare":{"type":"number","format":"double","example":25.5},"action_type":{"$ref":"#\/components\/schemas\/ActionType"},"file":{"type":"string","format":"binary","nullable":true},"link":{"type":"string","nullable":true}},"type":"object"}}}},"responses":{"201":{"description":"Yaratildi"},"422":{"description":"Validatsiya xatosi"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/site-inspections\/{inspection}":{"get":{"tags":["Site Inspections"],"summary":"Dala tekshiruvi to'liq ma'lumotlari","operationId":"siteInspectionShow","parameters":[{"name":"inspection","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Ma'lumotlar","content":{"application\/json":{"schema":{"properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#\/components\/schemas\/SiteInspection"}},"type":"object"}}}},"404":{"description":"Topilmadi"}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Site Inspections"],"summary":"Dala tekshiruvini yangilash","description":"Faqat `field_status` pending, draft yoki rejected holatda. Barcha maydonlar ixtiyoriy.","operationId":"siteInspectionUpdate","parameters":[{"name":"inspection","in":"path","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"properties":{"stir":{"type":"string"},"farm_name":{"type":"string"},"farm_leader":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string","nullable":true},"region_id":{"type":"integer"},"district_id":{"type":"integer"},"area":{"type":"string"},"crop_category_id":{"type":"integer","nullable":true},"crop_type_id":{"type":"integer"},"agro_event_id":{"type":"integer"},"goal_id":{"type":"integer"},"area_hectare":{"type":"number","format":"double"},"action_type":{"$ref":"#\/components\/schemas\/ActionType"},"file":{"type":"string","format":"binary","nullable":true},"link":{"type":"string","nullable":true},"delete_file":{"type":"boolean"}},"type":"object"}}}},"responses":{"200":{"description":"Yangilandi"},"403":{"description":"Noto'g'ri holat"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/site-inspections\/{inspection}\/submit":{"patch":{"tags":["Site Inspections"],"summary":"Viloyatga yuborish (draft\/rejected \u2192 submitted)","operationId":"siteInspectionSubmit","parameters":[{"name":"inspection","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Yuborildi"},"403":{"description":"Noto'g'ri holat"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/site-inspections\/{inspection}\/approve":{"patch":{"tags":["Site Inspections"],"summary":"Tasdiqlash (submitted \u2192 completed)","operationId":"siteInspectionApprove","parameters":[{"name":"inspection","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Tasdiqlandi"},"403":{"description":"Noto'g'ri holat"}},"security":[{"bearerAuth":[]}]}},"\/api\/v1\/inspector\/site-inspections\/{inspection}\/reject":{"patch":{"tags":["Site Inspections"],"summary":"Rad etish (submitted \u2192 rejected)","operationId":"siteInspectionReject","parameters":[{"name":"inspection","in":"path","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"required":["reason"],"properties":{"reason":{"type":"string","example":"Tekshiruv natijasi to'liq emas"}},"type":"object"}}}},"responses":{"200":{"description":"Qaytarildi"},"403":{"description":"Noto'g'ri holat"},"422":{"description":"Sabab kiritilmagan"}},"security":[{"bearerAuth":[]}]}}},"components":{"schemas":{"InspectionDocumentItem":{"title":"Tekshiruv hujjati","description":"Tekshiruvga biriktirilgan hujjat ma'lumoti. 4 turdagi hujjat bo'lishi mumkin: notification, study_program, info, study_order.","type":"object","allOf":[{"$ref":"#\/components\/schemas\/InspectionBasis"},{"properties":{"id":{"description":"Hujjat ID (yuklanmagan bo'lsa null)","type":"integer","example":53,"nullable":true},"type":{"description":"Hujjat turi identifikatori","type":"string","example":"notification"},"type_label":{"description":"Hujjat turi nomi (o'zbek tilida)","type":"string","example":"Xabardor qilish hujjati"},"uploaded":{"description":"Hujjat yuklanganmi yoki yo'q","type":"boolean","example":true},"status":{"description":"Hujjat holati (yuklanmagan bo'lsa null)","properties":{"value":{"description":"Holat qiymati","type":"string","example":"signed","enum":["new","pending","rejected","signed"]},"label":{"description":"Holat nomi","type":"string","example":"Imzolangan"}},"type":"object","nullable":true},"file_url":{"description":"Faylni yuklab olish URL manzili","type":"string","example":"https:\/\/backend.uzagroin.uz\/api\/v1\/inspector\/files\/inspector\/inspections\/24\/documents\/abc.pdf","nullable":true},"uploaded_by":{"description":"Yuklagan foydalanuvchi ID","type":"integer","example":12,"nullable":true},"reviewed_by":{"description":"Ko'rib chiqqan (viloyat) foydalanuvchi ID","type":"integer","example":5,"nullable":true},"uploaded_at":{"description":"Yuklangan sana (ISO 8601)","type":"string","format":"date-time","example":"2026-04-20T09:15:00+00:00","nullable":true},"signed_at":{"description":"Imzolangan sana (ISO 8601)","type":"string","format":"date-time","example":"2026-04-22T14:30:00+00:00","nullable":true},"reject_reason":{"description":"Rad etish sababi (agar rad etilgan bo'lsa)","type":"string","example":null,"nullable":true}},"type":"object"}]},"InspectionDocumentsCount":{"title":"Hujjatlar statistikasi","description":"Tekshiruv hujjatlarining umumiy holati","type":"object","allOf":[{"$ref":"#\/components\/schemas\/InspectionBasis"},{"properties":{"total":{"description":"Jami kerakli hujjatlar soni","type":"integer","example":4},"uploaded":{"description":"Yuklangan hujjatlar soni","type":"integer","example":3},"signed":{"description":"Imzolangan hujjatlar soni","type":"integer","example":2},"rejected":{"description":"Rad etilgan hujjatlar soni","type":"integer","example":0},"pending":{"description":"Kutilayotgan hujjatlar soni","type":"integer","example":1}},"type":"object"}]},"InspectionResponse":{"title":"Tekshiruv","description":"Tekshiruv to'liq ma'lumoti \u2014 korxona, ekin, hujjatlar va holat","type":"object","allOf":[{"$ref":"#\/components\/schemas\/InspectionBasis"},{"properties":{"id":{"description":"Tekshiruv ID","type":"integer","example":24},"contour_number":{"description":"Kontur raqami (avtomatik generatsiya qilinadi)","type":"string","example":"INS-000024","nullable":true},"enterprise":{"$ref":"#\/components\/schemas\/Enterprise"},"crop_category_id":{"description":"Ekin kategoriyasi ID","type":"integer","example":2,"nullable":true},"crop_category_name":{"description":"Ekin kategoriyasi nomi","type":"string","example":"Don ekinlari","nullable":true},"crop_type_id":{"description":"Ekin turi ID","type":"integer","example":5,"nullable":true},"crop_type_name":{"description":"Ekin turi nomi","type":"string","example":"Bug'doy","nullable":true},"agro_event_id":{"description":"Agro tadbir ID","type":"integer","example":3,"nullable":true},"agro_event_name":{"description":"Agro tadbir nomi","type":"string","example":"Sug'orish","nullable":true},"goal_id":{"description":"Maqsad ID","type":"integer","example":1,"nullable":true},"goal_name":{"description":"Maqsad nomi","type":"string","example":"Hosildorlikni oshirish","nullable":true},"area_hectare":{"description":"Maydon (gektar)","type":"number","format":"float","example":150.5,"nullable":true},"action_type":{"description":"Chora turi","properties":{"value":{"description":"Chora qiymati","type":"string","example":"written_instruction","enum":["written_instruction","submission","administrative","warning"]},"label":{"description":"Chora nomi","type":"string","example":"Yozma ko'rsatma"}},"type":"object","nullable":true},"assigned_specialist":{"description":"Biriktirilgan mutaxassis","properties":{"id":{"description":"Mutaxassis ID","type":"integer","example":12},"name":{"description":"To'liq ismi","type":"string","example":"Karimov Jasur"}},"type":"object","nullable":true},"status":{"description":"Tekshiruv holati","properties":{"value":{"description":"Holat qiymati","type":"string","example":"draft","enum":["draft","submitted","reviewing","rejected","approved"]},"label":{"description":"Holat nomi","type":"string","example":"Qoralama"}},"type":"object"},"inspection_type":{"description":"Tekshiruv turi","properties":{"value":{"type":"string","enum":["notification","entrepreneur_application","state_body","physical_person","coordination","other"]},"label":{"type":"string","example":"Kelishish tartibida"}},"type":"object","nullable":true},"basis":{"description":"Tekshiruv asosi","properties":{"value":{"type":"string","enum":["risk_analysis","appeal","legislation_compliance","other_basis","other_situation"]},"label":{"type":"string","example":"Xavfni tahlil qilish asosida"}},"type":"object","nullable":true},"inspection_type_file_url":{"description":"Tekshiruv turiga tegishli fayl URL","type":"string","nullable":true},"state_id":{"description":"Viloyat ID","type":"integer","example":1,"nullable":true},"state_name":{"description":"Viloyat nomi","type":"string","example":"Toshkent viloyati","nullable":true},"city_id":{"description":"Tuman ID","type":"integer","example":5,"nullable":true},"city_name":{"description":"Tuman nomi","type":"string","example":"Chirchiq tumani","nullable":true},"documents":{"description":"4 turdagi hujjatlar ro'yxati","type":"array","items":{"$ref":"#\/components\/schemas\/InspectionDocumentItem"}},"documents_count":{"$ref":"#\/components\/schemas\/InspectionDocumentsCount"},"created_by":{"description":"Yaratgan foydalanuvchi ID","type":"integer","example":12,"nullable":true},"approved_by":{"description":"Tasdiqlagan foydalanuvchi ID","type":"integer","example":5,"nullable":true},"submitted_at":{"description":"Yuborilgan sana (ISO 8601)","type":"string","format":"date-time","example":"2026-04-20T10:00:00+00:00","nullable":true},"approved_at":{"description":"Tasdiqlangan sana (ISO 8601)","type":"string","format":"date-time","example":"2026-04-22T15:00:00+00:00","nullable":true},"reject_reason":{"description":"Hujjat rad etish sababi","type":"string","example":null,"nullable":true},"file_path":{"description":"Dala tekshiruvi fayli (S3 path)","type":"string","nullable":true},"link":{"description":"Tashqi havola (masalan Google Maps)","type":"string","nullable":true},"field_inspected_by":{"description":"Dala tekshiruvini o'tkazgan tuman inspektori ID","type":"integer","nullable":true},"field_submitted_at":{"description":"Dala tekshiruvi yuborilgan sana","type":"string","format":"date-time","nullable":true},"field_reject_reason":{"description":"Dala tekshiruvi rad etish sababi","type":"string","nullable":true},"created_at":{"description":"Yaratilgan sana (ISO 8601)","type":"string","format":"date-time","example":"2026-04-19T08:30:00+00:00"},"updated_at":{"description":"Yangilangan sana (ISO 8601)","type":"string","format":"date-time","example":"2026-04-22T15:00:00+00:00"}},"type":"object"}]},"SuccessResponse":{"properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Muvaffaqiyatli"},"data":{"type":"object","nullable":true}},"type":"object"},"ErrorResponse":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Xatolik yuz berdi"}},"type":"object"},"ValidationErrorResponse":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Validatsiya xatosi"},"errors":{"type":"object","example":{"name":["Nom kiritilishi shart"]}}},"type":"object"},"UnauthorizedResponse":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Autentifikatsiya talab qilinadi"}},"type":"object"},"ForbiddenResponse":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Ruxsat yo'q"}},"type":"object"},"NotFoundResponse":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Resource topilmadi"}},"type":"object"},"ServerErrorResponse":{"properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Ichki server xatosi"}},"type":"object"},"PaginationMeta":{"properties":{"total":{"type":"integer","example":50},"per_page":{"type":"integer","example":15},"current_page":{"type":"integer","example":1},"last_page":{"type":"integer","example":4},"from":{"type":"integer","example":1,"nullable":true},"to":{"type":"integer","example":15,"nullable":true}},"type":"object"},"PaginationLinks":{"properties":{"first":{"type":"string","nullable":true},"last":{"type":"string","nullable":true},"prev":{"type":"string","nullable":true},"next":{"type":"string","nullable":true}},"type":"object"},"ActionType":{"type":"string","enum":["written_instruction","submission","administrative","warning"]},"MonitoringStatus":{"description":"draft \u2192 new \u2192 approved\/rejected","type":"string","enum":["draft","new","rejected","approved"]},"InspectionStatus":{"description":"Hujjat bosqichi: draft \u2192 submitted \u2192 reviewing \u2192 rejected\/approved","type":"string","enum":["draft","submitted","reviewing","rejected","approved"]},"FieldStatus":{"description":"Dala bosqichi (mobile): pending \u2192 draft \u2192 submitted \u2192 completed\/rejected","type":"string","enum":["pending","draft","submitted","completed","rejected"]},"InspectionDocumentStatus":{"description":"new \u2192 pending \u2192 rejected\/signed","type":"string","enum":["new","pending","rejected","signed"]},"InspectionDocumentType":{"description":"notification(tuman), study_program(tuman), info(tuman), study_order(viloyat)","type":"string","enum":["notification","study_program","info","study_order"]},"InspectionType":{"description":"Tekshiruv turi","type":"string","enum":["notification","entrepreneur_application","state_body","physical_person","coordination","other"]},"InspectionBasis":{"description":"Tekshiruv asosi","type":"string","enum":["risk_analysis","appeal","legislation_compliance","other_basis","other_situation"]},"AgroEvent":{"title":"Agro Event","description":"Agrotexnik tadbir resursi","properties":{"id":{"type":"integer","example":1},"name":{"type":"string","example":"Sug'orish"},"is_active":{"type":"boolean","example":true}},"type":"object"},"CropType":{"title":"Crop Type","description":"Ekin turi resursi","properties":{"id":{"type":"integer","example":1},"name":{"type":"string","example":"Bug'doy"},"is_active":{"type":"boolean","example":true}},"type":"object"},"CropTypeWithGoals":{"title":"Crop Type With Goals","description":"Ekin turi va unga tegishli maqsadlar","properties":{"id":{"type":"integer","example":1},"name":{"type":"string","example":"Paxta"},"goals":{"type":"array","items":{"properties":{"id":{"type":"integer","example":1},"name":{"type":"string","example":"Chigit ekish"},"icon":{"type":"string","example":null,"nullable":true}},"type":"object"}}},"type":"object"},"Enterprise":{"title":"Enterprise","description":"Korxona \/ Fermer xo'jaligi","properties":{"id":{"type":"integer","example":1},"type":{"type":"string","example":"farm"},"stir":{"type":"string","example":"123456789"},"legal_name":{"type":"string","example":"Oltin Hosil fermer xo'jaligi"},"director_full_name":{"type":"string","example":"Karimov Jasur Baxtiyorovich"},"phone":{"type":"string","example":"+998901234567","nullable":true},"address":{"type":"string","example":"Chirchiq tumani, 1-hudud"},"region_id":{"type":"integer","example":1,"nullable":true},"region_name":{"type":"string","example":"Toshkent viloyati","nullable":true},"district_id":{"type":"integer","example":5,"nullable":true},"district_name":{"type":"string","example":"Chirchiq tumani","nullable":true},"area":{"type":"string","example":"1-hudud","nullable":true}},"type":"object"},"Goal":{"title":"Goal","description":"Maqsad resursi","properties":{"id":{"type":"integer","example":1},"crop_type_id":{"type":"integer","example":1},"crop_type_name":{"type":"string","example":"Bug'doy"},"agro_event_id":{"type":"integer","example":1},"agro_event_name":{"type":"string","example":"Sug'orish"},"name":{"type":"string","example":"Bug'doy sug'orish maqsadi"},"icon":{"type":"string","example":null,"nullable":true},"is_active":{"type":"boolean","example":true}},"type":"object"},"MonitoringImage":{"title":"MonitoringImage","description":"Monitoring rasmi resursi","properties":{"id":{"type":"integer","example":1},"url":{"type":"string","example":"https:\/\/gateway-agrosert.simplex.uz\/api\/v1\/inspector\/files\/inspector\/monitorings\/abc.jpg"}},"type":"object"},"MonitoringList":{"title":"Monitoring List Item","description":"Monitoring ro'yxat elementi (qisqartirilgan)","properties":{"id":{"type":"integer","example":1},"stir":{"description":"Korxona STIR","type":"string","example":"123456789"},"farm_name":{"description":"Korxona nomi (enterprises.legal_name)","type":"string","example":"Oltin Hosil"},"contour_number":{"type":"string","example":"#000000001"},"crop_type_id":{"type":"integer","example":1},"crop_type_name":{"type":"string","example":"Bug'doy"},"status":{"$ref":"#\/components\/schemas\/MonitoringStatus"},"status_label":{"description":"Yangi \/ Yuborilgan \/ Tasdiqlangan \/ Qaytarilgan","type":"string","example":"Yangi"},"created_at":{"type":"string","format":"date-time","example":"2026-03-31T12:00:00Z"}},"type":"object"},"Monitoring":{"title":"Monitoring","description":"Monitoring to'liq ma'lumotlari (show uchun)","properties":{"id":{"type":"integer","example":1},"contour_number":{"type":"string","example":"#000000001"},"enterprise":{"$ref":"#\/components\/schemas\/Enterprise"},"crop_type_id":{"type":"integer","example":1},"crop_type_name":{"type":"string","example":"Bug'doy"},"agro_event_id":{"type":"integer","example":1},"agro_event_name":{"type":"string","example":"Sug'orish"},"goal_id":{"type":"integer","example":1},"goal_name":{"type":"string","example":"Bug'doy sug'orish rejasi"},"area_hectare":{"type":"number","format":"double","example":25.5},"action_type":{"$ref":"#\/components\/schemas\/ActionType"},"action_type_label":{"type":"string","example":"Yozma ko'rsatma"},"status":{"$ref":"#\/components\/schemas\/MonitoringStatus"},"status_label":{"type":"string","example":"Yangi"},"images":{"type":"array","items":{"$ref":"#\/components\/schemas\/MonitoringImage"}},"created_at":{"type":"string","format":"date-time","example":"2026-02-24T12:00:00Z"}},"type":"object"},"SiteInspectionList":{"title":"Site Inspection List Item","description":"Dala tekshiruvi ro'yxat elementi","properties":{"id":{"type":"integer","example":1},"contour_number":{"type":"string","example":"INS#000000001"},"stir":{"type":"string","example":"123456789"},"farm_name":{"type":"string","example":"Oltin Hosil FX"},"farm_leader":{"type":"string","example":"Karimov Jasur"},"phone":{"type":"string","example":"+998901234567"},"address":{"type":"string","example":"Andijon tumani, 1-hudud"},"region_id":{"type":"integer","example":1},"region_name":{"type":"string","example":"Andijon viloyati"},"district_id":{"type":"integer","example":1},"district_name":{"type":"string","example":"Andijon tumani"},"area":{"type":"string","example":"Andijon","nullable":true},"area_hectare":{"type":"number","example":45.5,"nullable":true},"crop_category_id":{"type":"integer","example":1,"nullable":true},"crop_category_name":{"type":"string","example":"Don ekinlari","nullable":true},"crop_type_id":{"type":"integer","example":1,"nullable":true},"crop_type_name":{"type":"string","example":"Bug'doy","nullable":true},"agro_event_id":{"type":"integer","nullable":true},"agro_event_name":{"type":"string","nullable":true},"goal_id":{"type":"integer","nullable":true},"goal_name":{"type":"string","nullable":true},"action_type":{"type":"string","nullable":true},"action_type_label":{"type":"string","nullable":true},"inspection_type":{"type":"object","nullable":true},"basis":{"type":"object","nullable":true},"inspection_type_file_url":{"type":"string","nullable":true},"field_status":{"type":"string","example":"pending","nullable":true},"field_status_label":{"type":"string","example":"Kutilmoqda","nullable":true},"file_url":{"type":"string","nullable":true},"approved_at":{"type":"string","format":"date-time","nullable":true},"created_at":{"type":"string","format":"date-time"}},"type":"object"},"SiteInspection":{"title":"Site Inspection","description":"Dala tekshiruvi to'liq ma'lumotlari (show uchun)","properties":{"id":{"type":"integer","example":1},"contour_number":{"type":"string","example":"INS#000000001"},"enterprise":{"$ref":"#\/components\/schemas\/Enterprise"},"crop_category_id":{"type":"integer","example":1},"crop_category_name":{"type":"string","example":"Don ekinlari"},"crop_type_id":{"type":"integer","example":1},"crop_type_name":{"type":"string","example":"Bug'doy"},"agro_event_id":{"type":"integer","example":1},"agro_event_name":{"type":"string","example":"Sug'orish"},"goal_id":{"type":"integer","example":1},"goal_name":{"type":"string","example":"Bug'doy sug'orish rejasi"},"area_hectare":{"type":"number","format":"double","example":25.5},"action_type":{"type":"string","example":"written_instruction"},"action_type_label":{"type":"string","example":"Yozma ko'rsatma"},"status":{"description":"Hujjat bosqichi (doim approved)","type":"string","example":"approved"},"status_label":{"type":"string","example":"Tasdiqlangan"},"field_status":{"description":"Dala bosqichi: null\/draft\/submitted\/completed\/rejected","type":"string","example":"draft","nullable":true},"field_status_label":{"type":"string","example":"Qoralama","nullable":true},"file_url":{"description":"Dala tekshiruvi fayli (foto\/video)","type":"string","nullable":true},"link":{"type":"string","example":"https:\/\/maps.google.com\/...","nullable":true},"state_id":{"type":"integer","example":1},"state_name":{"type":"string","example":"Toshkent viloyati"},"city_id":{"type":"integer","example":5},"city_name":{"type":"string","example":"Chirchiq tumani"},"field_inspected_by":{"type":"integer","nullable":true},"field_submitted_at":{"type":"string","format":"date-time","nullable":true},"field_reject_reason":{"type":"string","nullable":true},"approved_at":{"type":"string","format":"date-time","nullable":true},"created_at":{"type":"string","format":"date-time"},"documents":{"description":"4 turdagi hujjatlar","type":"array","items":{"properties":{"id":{"type":"integer","nullable":true},"type":{"type":"string","example":"notification"},"type_label":{"type":"string","example":"Xabardor qilish hujjati"},"uploaded":{"type":"boolean"},"status":{"properties":{"value":{"type":"string"},"label":{"type":"string"}},"type":"object","nullable":true},"file_url":{"type":"string","nullable":true},"signed_at":{"type":"string","format":"date-time","nullable":true}},"type":"object"}}},"type":"object"}},"securitySchemes":{"bearerAuth":{"type":"http","description":"JWT token. Gateway orqali autentifikatsiya. Format: Bearer {token}","bearerFormat":"JWT","scheme":"bearer"}}},"tags":[{"name":"Agro Events","description":"Agrotexnik tadbirlar boshqaruvi (CRUD + restore + toggle-status)"},{"name":"Crop Categories","description":"Ekin toifalari boshqaruvi (CRUD + restore + toggle-status)"},{"name":"Crop Types","description":"Ekin turlari boshqaruvi (CRUD + restore + toggle-status)"},{"name":"Dashboard","description":"Inspektor bosh sahifa statistikasi"},{"name":"Files","description":"Fayllarni olish (S3\/MinIO dan). Autentifikatsiya talab qilinmaydi \u2014 fayllar public."},{"name":"Goals","description":"Monitoring maqsadlari boshqaruvi (CRUD + restore + toggle-status). Har bir maqsad ekin turi va agrotexnik tadbirga bog'langan."},{"name":"Health","description":"Servis holati tekshiruvi (autentifikatsiya talab qilinmaydi)"},{"name":"Inspections","description":"Tekshiruvlar \u2014 tuman yaratadi, viloyat tasdiqlaydi"},{"name":"Inspector Permission Management","description":"Inspector service ruxsatlarni ko'rish"},{"name":"Inspector Role Management","description":"Inspector service rollarni boshqarish"},{"name":"Inspector User Management","description":"Inspector service foydalanuvchilarni boshqarish"},{"name":"Monitorings","description":"Dala monitoringlarini boshqarish.\n\n**Statuslar:** `Qoralama` \u2192 `Yangi` \u2192 `Tasdiqlangan` \/ `Rad etilgan`\n- Tuman inspektori monitoring yaratadi \u2014 `draft` (Qoralama) holatida\n- Tuman inspektori `submit` orqali viloyat inspektoriga yuboradi \u2014 `new` (Yangi)\n- Viloyat inspektori `approve` orqali tasdiqlaydi \u2014 `approved` (Tasdiqlangan)\n- Viloyat inspektori `reject` orqali rad etadi \u2014 `rejected` (Rad etilgan)\n- Faqat `draft` holatdagi monitoringlarni yangilash va o'chirish mumkin\n\n**Kontur raqami:** Avtomatik generatsiya qilinadi (#000000001 formatida). Unique.\n\n**Rasmlar:** Har bir monitoringga max 10 ta rasm (har biri max 5MB, jpg\/jpeg\/png\/webp) yuklash mumkin."},{"name":"Site Inspections","description":"Dala tekshiruvi (joy tekshirish) boshqaruvi \u2014 mobil dastur uchun.\n\n**Ikki alohida bosqich:**\n- `status` \u2014 hujjat bosqichi (web): new \u2192 uploaded \u2192 rejected \u2192 approved (O'ZGARMAYDI)\n- `field_status: pending \u2192 draft \u2192 submitted \u2192 completed \/ rejected\n\n**A) Web orqali tasdiqlangan tekshiruvlar:**\n1. Viloyat \"Inspections\" da 4 ta hujjatni tasdiqlaydi \u2192 `status=approved, field_status=pending`\n2. Tuman \"Site Inspections\" da ko'radi \u2192 fayl\/havola qo'shadi \u2192 `field_status=draft`\n3. Yuboradi \u2192 `field_status=submitted`\n4. Viloyat tasdiqlaydi \u2192 `field_status=completed` yoki rad etadi \u2192 `field_status=rejected`\n\n**B) Mobildan yangi yaratish:**\n1. Tuman `POST \/site-inspections` \u2192 `status=approved, field_status=draft`\n2. To'ldiradi, yuboradi \u2192 `field_status=submitted`\n3. Viloyat tasdiqlaydi\/rad etadi"}]}