const swaggerAutogen = require("swagger-autogen")({ openapi: "3.0.0" }); const config = require("config"); const doc = { info: { title: config.get("app.name"), description: config.get("app.description"), version: config.get("app.version"), }, servers: [ { url: config.get("server.host_swagger"), description: "Environtment " + config.get("app.env"), }, ], components: { schemas: { product: { $code: "123456", $name: "Product name", $description: "Product description", $source: "trialBalanceBranch / cifAccount / lnkolek", $status: "Y", }, branch: { $code: "123456", $name: "Branch name", $status: "Y", }, menu: { $module: "Dashboard", $name: "Dashboard", $link: "/", $id_parent: "", $order_number: 1, $icon: "", $application: "ukln", $status: "Y", }, administrativu: { $code: "123456", $name: "Administrativu name", $status: "Y", $munisipo_id: "uuid-string", }, application: { $id: "ukln", $name: "Dashboard Performance Business", $reset_password_url: "https://brilianapps.britimorleste.tl/ukln/auth/reset-password/", $status: "Y", }, aldeia: { $code: "123456", $name: "Aldeia name", $status: "Y", $suco_id: "uuid-string", }, class_economi: { $code: "123456", $name: "Class economi name", $status: "Y", }, district: { $code: "123456", $name: "District name", $status: "Y", }, income_tier: { $code: "123456", $name: "Income tier name", $status: "Y", }, munisipo: { $code: "123456", $name: "Munisipo name", $status: "Y", }, suco: { $code: "123456", $name: "Suco name", $status: "Y", $administrativu_id: "uuid-string", }, nationality: { $code: "123456", $name: "Nationality name", $status: "Y", }, classEconomi: { $code: "123456", $name: "Class Economi name", $status: "Y", }, incomeTier: { $code: "123456", $name: "Income Tier name", $status: "Y", }, diagnosis: { $diagnosis: "Diagnosis name (ICD-11)", $code: "ABC123", $status: "Y", }, diagnostic_procedure: { $diagnosticProcedure: "Procedure name (ICD-9)", $code: "XYZ789", $status: "Y", }, room: { $room: "Room name", $code: "R001", $description: "Optional description", $department_id: "uuid-string", $serviceclass: "uuid-string", $status: "Y", $location: "Room location", $picture: "Room picture name", }, laboratory: { $room: "Room name", $code: "R001", $description: "Optional description", $department_id: "uuid-string", $status: "Y", }, // pharmacy: { // $room: "Room name", // $code: "R001", // $description: "Optional description", // $department_id: "uuid-string", // $status: "Y" // }, serviceType: { $name: "Registration & Tickets", $status: { "@enum": ["Y", "N"] }, }, serviceClass: { $name: "Class name", }, service: { $name: "e.g. ER Registration", $service_type_id: "uuid-string", $status: { "@enum": ["Y", "N"] }, }, roomServices: { $service_ids: ["uuid-string"], }, serviceFare: { $service_id: "uuid-string", $faretype: [ { $faretype_id: "uuid-string", $service_class: [ { $service_class_id: "uuid-string", $fare: 100000, } ] } ] }, servicePackage: { $name: "Package name", $service_class_id: "uuid-string", $fare: 500000, $service_ids: ["uuid-string"], }, department: { $name: "igd", $status: { "@enum": ["Y", "N"] }, }, doctorSchedule: { $day: "Senin", $start_time: "08:00", $end_time: "12:00", $doctor_id: "uuid-string", $room_id: "uuid-string", $quota: "20", $status: { "@enum": ["Y", "N"] }, }, doctorItem: { $doctor_id: "uuid-string", $item_master_id: "uuid-string", }, doctorItemPackage: { $doctor_id: "uuid-string", $name: "Paket Obat Harian", $description: "Optional description", $item_master_ids: ["uuid-string"], $active: true, }, measurementUnit: { $unit: "Milligram", $status: { "@enum": ["Y", "N"] }, }, referenceRange: { $gender: { "@enum": ["male", "female"] }, $age_range_min: "0 | (days)", $age_range_max: "20 | (days)", $value_min: "13.7", $value_max: "17.5", $status: { "@enum": ["Y", "N"] }, }, queueMonitoring: { $name: "Ground Floor Queue", $slug: "ground-floor-queue", $room_ids: ["uuid-string"], $status: { "@enum": ["Y", "N"] }, }, examinationType: { $name: "Examination Type name", $status: { "@enum": ["Y", "N"] }, $service_ids: ["uuid-string"], }, examinationDetail: { $name: "Examination Detail name", $order_no: "Order number", $measurement_unit_id: "uuid-string", $reference_range_id: "uuid-string", $status: { "@enum": ["Y", "N"] }, }, serviceExamination: { $examination_detail_ids: ["uuid-string"], }, hospitalinformation: { $name: "Hospital Name", $address: "Hospital Address", $phone: "Hospital Phone", $logo: "Hospital Logo", }, files: { $file_name: "File Name", }, item_group: { $group_name: "ItemGroup name", }, item_origin: { $origin_name: "ItemOrigin name", $origin_description: "ItemOrigin Desc", $department: "Department name", $account: "Account name", }, item_type: { $type_name: "ItemType name", $item_group_id: "ItemGroup Id", }, item_type_detail: { $type_detail_name: "ItemTypeDetail name", $item_type_id: "ItemType Id", }, unit: { $unit_name: "Unit name", $small_unit: "Small unit name", $large_unit: "Large unit name", }, item_category: { $category_name: "ItemCategory name", }, item_status: { $status_name: "Itemstatus name", }, item_class: { $item_class_name: "ItemClass name", }, item_class_detail: { $class_detail_name: "ItemClassDetail name", }, usage_instructions: { $usage_instructions_name: "UsageInstructions name", $usage_instructions_abbreviation: "UsageInstructions Abbreviation", }, usage_time: { $usage_time_name: "UsageInstructions name", $usage_time_abbreviation: "UsageInstructions Abbreviation", }, generic_name: { $generic_name: "Generic name", }, factory: { $factory_name: "factory name", $address: "Factory address", $web: "Factory url web", $phone: "Factory phone", $email: "Factory email", }, supplier: { $supplier_name: "supplier name", $address: "supplier address", $phone: "supplier phone", $email: "supplier email", }, factory_to_supplier: { $supplier_id: "Supplier ID (required, UUID)", $factory_ids: "Array [factory-uuid-1, factory-uuid-2]", }, item_master: { $item_name: "Item name", $generic_name_id: "Generic name ID (UUID)", $item_type_detail_id: "Item type detail ID (UUID)", $item_category_id: "Item category ID (UUID)", $item_class_id: "Item class ID (UUID)", $item_class_detail_id: "Item class Detail ID (UUID)", $item_status_id: "Item status ID (UUID)", $factory_id: "Factory ID (UUID)", $unit_id: "Unit ID (UUID)", $pack_size: "Pack size (integer, minimum 0)", $minimum_quantity: "Minimum quantity (integer, minimum 0)", $minimum_sales_quantity: "Minimum sales quantity (integer, minimum 0)", $strength: "Strength value (number, minimum 0)", $active: "Active status (boolean)", }, pharmacy_info: { $logo: "Logo (string, max 256)", $name: "Name (string, max 256)", $address: "Address (string, max 500)", $munisipiu: "Munisipiu ID (UUID)", $postu_admin: "Postu Admin ID (UUID)", $suco: "Suco ID (UUID)", $aldeia: "Aldeia ID (UUID)", $phone: "Phone (string, max 30, optional)", $default_room_id: "Default Room ID (UUID)", }, item_price: { $item_master_id: "Item Master ID (required, UUID)", $purchase_price: "Purchase Price (required, number, minimum 0)", $selling_price: "Selling Price (required, number, minimum 0)", $expired_date: "Expired Date (required, date)", }, initial_stock: { $itemmaster: "Item Master uuid", $room: "Room uuid", $itemorigin: "Item Origin uuid", $batch: "Batch", $exp_date: "Exp Date", $stock: "Stock", }, selling_price_percentage: { $item_master_id: "Item Master ID (required, UUID)", $item_origin_id: "Item Origin ID (required, UUID)", $percentage: "Percentage (required, number, min 0, max 999.99, 2 decimal places)", }, patient_group: { $patient_group_name: "PatientGroup name", }, patient_guarantor: { $guarantor_name: "PatientGuarantor name", $phone: "08123456789", // Nomor telepon $province: "West Java", // Provinsi $city: "Bandung", // Kota $zip_code: "40123", // Kode Pos $agreement_no: "AG123456789", // Nomor Perjanjian $agreement_desc: "Health Insurance Agreement", // Deskripsi Perjanjian (opsional) $patient_group_id: "2e1a1b33-bbb2-4f33-b2c4-cff5976f3f95", // Patient Group (UUID) $faretype: "3f1a1b33-bbb2-4f33-b2c4-cff5976f3f95", // Fare Type (UUID) }, refferal_hospital: { $refferal_hospital_name: "RefferalHospital name", }, user_to_room: { $user_id: "user ID (required, UUID)", $room_id: "Room ID (required, UUID)", }, room_to_pharmacy: { $pharmacy_room_id: "Pharmacy Room ID (required, UUID)", $room_ids: "Array [room-uuid-1, room-uuid-2]", }, planning_verificator: { $user_id: "User ID (required, UUID)", }, scheduleRecurrence: { $type: { "@enum": ["daily", "weekly", "monthly"] }, $interval: 1, $daysOfWeek: ["MO", "WE", "FR"], }, scheduleSeriesCreate: { $roomId: "uuid-string", $doctorId: "uuid-string", $title: "Practice Schedule", $timezone: "Asia/Jakarta", $quota: 20, $startDate: "2026-03-20", $untilDate: "2026-06-30", $startTimeLocal: "09:00:00", $endTimeLocal: "12:00:00", $recurrence: { $ref: "#/components/schemas/scheduleRecurrence" }, }, scheduleSeriesUpdate: { $roomId: "uuid-string", $doctorId: "uuid-string", $title: "Practice Schedule Updated", $timezone: "Asia/Jakarta", $quota: 25, $startDate: "2026-03-20", $untilDate: "2026-07-31", $startTimeLocal: "10:00:00", $endTimeLocal: "13:00:00", $recurrence: { $ref: "#/components/schemas/scheduleRecurrence" }, }, scheduleSeriesDetail: { $id: "uuid-string", $room_id: "uuid-string", $doctor_id: "uuid-string", $title: "Practice Schedule", $timezone: "Asia/Jakarta", $quota: 20, $start_date: "2026-03-20", $until_date: "2026-06-30", $start_time_local: "09:00:00", $end_time_local: "12:00:00", $recurrence: { $ref: "#/components/schemas/scheduleRecurrence" }, $status: "Active", $room: { id: "uuid-string", room: "Room 1" }, $doctor: { id: "uuid-string", name: "Dr A" }, }, scheduleExceptionCreate: { $occurrenceDate: "2026-03-24", $isCancelled: false, $overrideRoomId: "uuid-string", $overrideDoctorId: "uuid-string", $overrideTitle: "Override Practice", $overrideStartAt: "2026-03-24T10:00:00.000Z", $overrideEndAt: "2026-03-24T12:30:00.000Z", }, scheduleCalendarResource: { $id: "room-1:doctor-1", $roomId: "room-1", $roomName: "Room 1", $doctorId: "doctor-1", $doctorName: "Dr A", }, scheduleCalendarEvent: { $id: "occ:series-101:2026-03-20", $seriesId: "series-101", $resourceId: "room-1:doctor-1", $title: "Practice", $startAt: "2026-03-20T09:00:00+07:00", $endAt: "2026-03-20T12:00:00+07:00", $quota: 20, $usedQuota: 7, $leftQuota: 13, $isRecurring: true, $isException: false, $status: "confirmed", }, scheduleCalendarMeta: { $total_count: 24, $page: 1, $limit: 20, }, faretype: { $name: "Name (string)", }, card_type: { $name: "Name (string)", }, payment_method: { $name: "Name (string)", }, registration_fee:{ type: "emergency | outpatient", service: ["uuid-string-1", "uuid-string-2"] } }, parameters: {}, securitySchemes: { bearerAuth: { type: "http", scheme: "bearer", }, }, }, }; const outputFile = "./swagger.json"; const routes = ["../routes/private.ts", "../routes/public.ts"]; swaggerAutogen(outputFile, routes, doc);