<!-- https://api.ibusisrael.online/docs/ar/data/ -->
# البيانات والوقت

## المصادر

| البيانات | المصدر | كم مرة يحدّثها iBus |
|---|---|---|
| الجدول: المحطات والمسارات والرحلات والتقويم | وزارة المواصلات، GTFS | كل ليلة نحو الساعة 04:00 بتوقيت إسرائيل؛ يتغيّر `getStopsVersion` عند نشر جدول جديد |
| البيانات المباشرة: المركبات المقتربة من المحطات | وزارة المواصلات، SIRI | يُسأل المصدر كل بضع ثوانٍ؛ ترسل المركبة موقعها تقريبًا كل 20 إلى 60 ثانية |
| تنبيهات الخدمة | وزارة المواصلات | تقريبًا كل 5 دقائق |

يعالج iBus البيانات (المطابقة والحداثة والأسماء بثلاث لغات). وهو ليس خدمة رسمية للوزارة.

## الجدول والبيانات المباشرة ردّان مختلفان

- عمليات **الجدول** (`getStopDaySchedule` و`getLineDaySchedule`) تجيب عمّا هو مخطط ليوم خدمة. ولا تعرف شيئًا عن التأخيرات.
- **البيانات المباشرة** (`getStopArrivals`) تجيب بما تبلغ عنه المركبات الآن، صفًا صفًا، مع `freshness`.
- الصف المباشر الذي ملاحظته قديمة يُعرض بوقت الجدول فقط إذا أكّد الجدول أن هذه الرحلة تتوقف في هذه المحطة في يوم الخدمة هذا (`scheduled_confirmed`). وإلا يبقى `stale_observation`.

## قواعد الحداثة

تأتي العتبات من `getFreshnessContract` (الإصدار 1):

| القاعدة | القيمة |
|---|---|
| ملاحظة المركبة **مباشرة** | ليست أقدم من 120 ثانية |
| لا يُعرض موعد الوصول من ملاحظة قديمة كوقت | أقدم من 1,800 ثانية (`eta_hidden`) |
| تُعدّ التنبيهات متأخرة | أقدم من 900 ثانية |
| لا يُوثق بملاحظة مؤرخة في المستقبل | أكثر من 300 ثانية إلى الأمام |

تُحسب الأعمار حسب ساعة الخادم (`server_now_utc` في الرد)، لا حسب وقت طلبك.

## يوم الخدمة والأوقات بعد منتصف الليل

**يوم الخدمة** (`date=YYYYMMDD`) هو يوم التشغيل الذي تنتمي إليه الرحلة. أوقات الجدول نصوص GTFS بصيغة `HH:MM:SS` حسب ساعة إسرائيل في يوم الخدمة، وقد تكون **24:00:00 أو بعدها**: `25:04:48` في يوم الخدمة 2026-10-21 تعني 01:04:48 يوم 22 أكتوبر، والرحلة ما زالت تنتمي إلى 21 أكتوبر.

- رتّب صفوف الجدول حسب النص كما هو: `24:10:00` تأتي بعد `23:50:00`.
- للحصول على وقت تقويمي، انقل الساعات الزائدة على 24 إلى اليوم التالي.
- من دون `date` يُستخدم يوم الخدمة الحالي في إسرائيل. التاريخ بصيغة أخرى يعيد قائمة فارغة لا خطأ.
- يغطي الجدول المنشور نحو شهر إلى الأمام. تبيّن `getServiceDay` ما إذا كان التاريخ داخله (`feed.from` و`feed.to`) وما إذا كان يختلف عن يوم عادي من اليوم نفسه في الأسبوع (الأعياد).

> [!WARNING]
> تغيير الساعة. تكتب الوزارة أوقات الجدول حسب الساعة حتى في ليالي تغيير الساعة (تم التحقق في 19.10.2026 على 1,534 من 1,559 رحلة ليلية في 25.10.2026). أما أوقات UTC التي يحسبها iBus من الجدول (`gtfs_scheduled_*_utc` و`freshness.scheduled_arrival_utc` و`first_departure_utc`) فما زالت تُحسب وفق قاعدة GTFS «الظهر ناقص 12 ساعة»: للرحلات قبل 02:00 في يوم التغيير (25.10.2026 و26.03.2027) قد تختلف بساعة. اعتمد على الصفوف المباشرة في تلك الليالي.

## حقول الوقت

- الحقول المنتهية بـ `_utc` هي بتوقيت UTC بصيغة ISO 8601 مع `Z`، مثل `2026-10-21T14:17:00Z`.
- `updatedAt` في غلاف مواعيد الوصول هو بتوقيت إسرائيل المحلي مع الفارق، مثل `2026-10-21T17:16:22+03:00`.
- تحتوي `dateRanges` في التنبيهات على ثوانٍ بنظام Unix (`start` و`end`) ونصوص UTC معًا.

## المعرّفات

| الحقل | ما هو |
|---|---|
| `stop_code` | الرمز العام للمحطة، الرقم المكتوب على اللافتة. استخدمه في المسارات. |
| `stop_id` | المعرّف الداخلي في GTFS. ليس الرمز العام. |
| `route_id` (`line_ref` في البيانات المباشرة) | اتجاه واحد أو تفرّع واحد من الخط. تجده عبر `searchLines`. |
| `route_short_name` | رقم الخط العام. ليس فريدًا: الخط 1 موجود في مدن كثيرة. |
| `agency_id` | المشغّل. الأسماء في `listAgencies`. |
| `makat` | معرّف الخط لدى الوزارة، مشترك بين اتجاهات الخط. |
| `dated_vehicle_journey_ref` | معرّف الرحلة لدى المصدر. ليس `trip_id` في GTFS. |
| `gtfs_trip_id` | رحلة GTFS، فقط عندما تتطابق رحلة واحدة بالضبط. |
| `vehicle_ref` | اسم مستعار يومي للمركبة. يتغيّر كل يوم بتوقيت UTC ولا يكون أبدًا رقم اللوحة. |
| `direction_ref` | الاتجاه لدى المصدر (1 أو 2). ليس `direction_id` في GTFS (0 أو 1). |

## الإحداثيات والوحدات

- الإحداثيات بنظام WGS 84 بالدرجات العشرية. `coords` لشكل المسار أزواج `[lon, lat]` (بترتيب GeoJSON)؛ و`shape` يكرّر النقاط على شكل `{lat, lon}`.
- المسافات بالأمتار (`dist_m` و`distance_from_stop_m`)، والسرعة بالكيلومتر في الساعة (`velocity`)، والاتجاه بالدرجات من الشمال (`bearing`).
- العمر بالثواني (`age_sec`)، والانتظار بالدقائق الكاملة (`expected_in_min`)، والتعرفة بالشيكل (`tariff`).

## لغات الأسماء

يختار المعامل `lang` لغة أسماء المحطات والوجهات: `en` (وكذلك `ru`) يعطي الأسماء الإنجليزية من جدول الوزارة، و`ar` يعطي العربية، وأي قيمة أخرى تعطي العبرية الأصلية. لا توجد أسماء روسية في المصدر. يحتوي الحقلان `names` و`dest_names` على العبرية والإنجليزية والعربية معًا. نصوص التنبيهات تنشرها الوزارة، وغالبًا بالعبرية.

## التخزين المؤقت

يبيّن كل رد في `Cache-Control` مدة الاحتفاظ به: البيانات المباشرة والجداول `no-store`، والبيانات المرجعية `public` من 60 ثانية إلى ساعة. مع `Accept-Encoding: gzip` تُضغط الردود: جدول اليوم لمحطة مزدحمة نحو 580 KB بصيغة JSON ونحو 27 KB مضغوطًا.
