[{"data":1,"prerenderedAt":56},["ShallowReactive",2],{"dataset-e4a5e2d7-6668-42d0-b6c8-4a64f246242a":3},{"entry":4,"body":55},{"id":5,"slug":6,"title":7,"organization":8,"organization_slug":9,"tags_he":10,"primary_resource_id":15,"formats":16,"metadata_modified":18,"license":19,"record_count":20,"resources":21,"last_analyzed_at":50,"version":51,"summary_he":52,"dataset_kind":53,"related_ids":54},"e4a5e2d7-6668-42d0-b6c8-4a64f246242a","tknvn-vbytzva-avtvbvsym","תכנון וביצוע אוטובוסים","משרד התחבורה והבטיחות בדרכים","ministry_of_transport",[11,12,13,14],"אוטובוסים","משרד התחבורה","תחבורה","תחבורה ציבורית","588dfec1-b95c-495b-a1f4-e1ca4278be5d",[17],"CSV","2026-05-02T10:44:46.389129Z","אחר (פתוח)",34461,[22,26,30,34,38,42,46],{"url":23,"format":17,"name":24,"size_bytes":25},"https:\u002F\u002Fdata.gov.il\u002Fdataset\u002Fe4a5e2d7-6668-42d0-b6c8-4a64f246242a\u002Fresource\u002F588dfec1-b95c-495b-a1f4-e1ca4278be5d\u002Fdownload\u002F588dfec1-b95c-495b-a1f4-e1ca4278be5d.csv","מאגר תכנון וביצוע אוטובוסים 2025",3507437,{"url":27,"format":17,"name":28,"size_bytes":29},"https:\u002F\u002Fdata.gov.il\u002Fdataset\u002Fe4a5e2d7-6668-42d0-b6c8-4a64f246242a\u002Fresource\u002F86eceab6-44ac-4301-a6a7-9a4a92dae48b\u002Fdownload\u002F86eceab6-44ac-4301-a6a7-9a4a92dae48b.csv","מאגר תכנון וביצוע אוטובוסים 2024",3381796,{"url":31,"format":17,"name":32,"size_bytes":33},"https:\u002F\u002Fdata.gov.il\u002Fdataset\u002Fe4a5e2d7-6668-42d0-b6c8-4a64f246242a\u002Fresource\u002F5dcbd34b-8103-4207-b7c9-571ec51846de\u002Fdownload\u002F5dcbd34b-8103-4207-b7c9-571ec51846de.csv","מאגר תכנון וביצוע אוטובוסים 2023",3434032,{"url":35,"format":17,"name":36,"size_bytes":37},"https:\u002F\u002Fdata.gov.il\u002Fdataset\u002Fe4a5e2d7-6668-42d0-b6c8-4a64f246242a\u002Fresource\u002Fedb6f096-f7f1-465f-8d4f-6e0811709f83\u002Fdownload\u002Fbus_rishui_bitzua_2022.csv","מאגר תכנון וביצוע אוטובוסים 2022",3425728,{"url":39,"format":17,"name":40,"size_bytes":41},"https:\u002F\u002Fdata.gov.il\u002Fdataset\u002Fe4a5e2d7-6668-42d0-b6c8-4a64f246242a\u002Fresource\u002F45b5f841-35ab-4119-bb7a-ef65d3e39034\u002Fdownload\u002Fbus_rishui_bitzua_2021.csv","מאגר תכנון וביצוע אוטובוסים 2021",3397993,{"url":43,"format":17,"name":44,"size_bytes":45},"https:\u002F\u002Fdata.gov.il\u002Fdataset\u002Fe4a5e2d7-6668-42d0-b6c8-4a64f246242a\u002Fresource\u002F4d123ea1-e732-4170-8c24-8aa964d6533f\u002Fdownload\u002Fbus_rishui_bitzua_2020.csv","מאגר תכנון וביצוע אוטובוסים 2020",3221740,{"url":47,"format":17,"name":48,"size_bytes":49},"https:\u002F\u002Fdata.gov.il\u002Fdataset\u002Fe4a5e2d7-6668-42d0-b6c8-4a64f246242a\u002Fresource\u002Faa9a1ac4-f3df-4515-bf33-6130cea6185c\u002Fdownload\u002Fbus_rishui_bitzua_2019.csv","מאגר תכנון וביצוע אוטובוסים 2019",3573636,"2026-05-02T18:44:50.721287Z",1,"נתוני תכנון וביצוע נסיעות אוטובוסים בתחבורה הציבורית בישראל לשנת 2025 — שיעור ביצוע כולל של 96.4% מתוך 31.2 מיליון נסיעות מאושרות ברישוי, מחולקות לפי 22 מפעילים ו-61 אשכולות.","timeseries",[],"\u003Ch1 class=\"text-2xl font-bold text-ink-deep mb-2\">תכנון וביצוע אוטובוסים 2025\u003C\u002Fh1>\n\n\u003Cdiv class=\"flex flex-wrap gap-2 mb-5\">\n  \u003Cspan class=\"tag-chip\">תחבורה ציבורית\u003C\u002Fspan>\n  \u003Cspan class=\"tag-chip\">אוטובוסים\u003C\u002Fspan>\n  \u003Cspan class=\"tag-chip\">ביצוע נסיעות\u003C\u002Fspan>\n  \u003Cspan class=\"tag-chip\">מפעילי תחבורה\u003C\u002Fspan>\n  \u003Cspan class=\"tag-chip\">רישוי קווים\u003C\u002Fspan>\n\u003C\u002Fdiv>\n\n\u003Csection class=\"card p-5 mb-4\">\n  \u003Cp class=\"text-ink leading-relaxed\">\n    מאגר זה מציג את פירוט הביצוע החודשי של נסיעות אוטובוס בתחבורה הציבורית בישראל לשנת 2025 — מחולק לפי מפעיל, אשכול גיאוגרפי וקו. לכל רשומה מתועדות נסיעות מאושרות ברישוי, נסיעות שבוצעו בפועל, נסיעות שלא בוצעו, איחורים, הקדמות ונסיעות ללא רישוי. הנתונים מתפרסים על פני 22 מפעילים ו-61 אשכולות ברחבי הארץ, ומתעדכנים עם עיכוב של כשלושה חודשים.\n  \u003C\u002Fp>\n\u003C\u002Fsection>\n\n\u003C!-- KPI Cards -->\n\u003Cdiv class=\"grid grid-cols-2 md:grid-cols-4 gap-4 mb-5\">\n  \u003Cdiv class=\"card p-4 text-center\">\n    \u003Cdiv class=\"text-2xl font-bold text-brand\">31.2M\u003C\u002Fdiv>\n    \u003Cdiv class=\"text-sm text-subtle mt-1\">נסיעות מאושרות ברישוי\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"card p-4 text-center\">\n    \u003Cdiv class=\"text-2xl font-bold text-ok\">96.4%\u003C\u002Fdiv>\n    \u003Cdiv class=\"text-sm text-subtle mt-1\">שיעור ביצוע תקין\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"card p-4 text-center\">\n    \u003Cdiv class=\"text-2xl font-bold text-danger\">525K\u003C\u002Fdiv>\n    \u003Cdiv class=\"text-sm text-subtle mt-1\">נסיעות שלא בוצעו\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"card p-4 text-center\">\n    \u003Cdiv class=\"text-2xl font-bold text-warn\" style=\"color:#b07d00;\">567K\u003C\u002Fdiv>\n    \u003Cdiv class=\"text-sm text-subtle mt-1\">נסיעות באיחור\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\u003C!-- Insights -->\n\u003Csection class=\"card p-5 mb-5\">\n  \u003Ch2 class=\"font-semibold text-ink-deep mb-3 text-lg\">ממצאים עיקריים\u003C\u002Fh2>\n  \u003Cul class=\"list-disc list-inside space-y-2 text-ink text-sm leading-relaxed\" dir=\"rtl\">\n    \u003Cli>מתוך 31.2 מיליון נסיעות מאושרות ברישוי, \u003Cstrong>30.1 מיליון בוצעו בפועל\u003C\u002Fstrong> — שיעור ביצוע כולל של \u003Cstrong>96.4%\u003C\u002Fstrong>.\u003C\u002Fli>\n    \u003Cli>\u003Cstrong>נתיב אקספרס\u003C\u002Fstrong> הציג את שיעור הביצוע הגבוה ביותר בקרב המפעילים הגדולים — \u003Cstrong>98.95%\u003C\u002Fstrong>, ואחריו \u003Cstrong>ש.א.מ\u003C\u002Fstrong> ו-\u003Cstrong>אקסטרה\u003C\u002Fstrong> (99.5% — מפעיל קטן יחסית).\u003C\u002Fli>\n    \u003Cli>\u003Cstrong>תנופה\u003C\u002Fstrong> ו-\u003Cstrong>אקסטרה ירושלים\u003C\u002Fstrong> רשמו את שיעורי הביצוע הנמוכים ביותר — 92.5% ו-93.7% בהתאמה.\u003C\u002Fli>\n    \u003Cli>ספטמבר 2025 נרשם כחודש עם שיעור הביצוע הנמוך בשנה — \u003Cstrong>95.4%\u003C\u002Fstrong>, אפשרית בשל ימי חגים.\u003C\u002Fli>\n    \u003Cli>\u003Cstrong>567,016 נסיעות\u003C\u002Fstrong> אופיינו כאיחורים (1.81% מהנסיעות) ו-\u003Cstrong>27,809\u003C\u002Fstrong> כהקדמות (0.09%).\u003C\u002Fli>\n    \u003Cli>\u003Cstrong>223,607 נסיעות\u003C\u002Fstrong> בוצעו ללא רישוי — כ-0.7% מכלל הנסיעות בשנה.\u003C\u002Fli>\n    \u003Cli>\u003Cstrong>אגד\u003C\u002Fstrong> הוא המפעיל הגדול ביותר עם כ-6.25 מיליון נסיעות מאושרות, ואחריו \u003Cstrong>קווים\u003C\u002Fstrong> (3.68M) ו-\u003Cstrong>מטרופולין\u003C\u002Fstrong> (3.43M).\u003C\u002Fli>\n  \u003C\u002Ful>\n\u003C\u002Fsection>\n\n\u003C!-- Monthly performance chart -->\n\u003Csection class=\"card p-5 mb-5\">\n  \u003Ch2 class=\"font-semibold text-ink-deep mb-1\">ביצוע חודשי — נסיעות מאושרות ושיעור ביצוע תקין\u003C\u002Fh2>\n  \u003Cp class=\"text-sm text-subtle mb-3\">נסיעות מאושרות ברישוי (עמודות) ושיעור הנסיעות התקינות (קו), לפי חודש 2025\u003C\u002Fp>\n  \u003Cdiv id=\"chart-monthly\" class=\"h-64 md:h-80\">\u003C\u002Fdiv>\n\u003C\u002Fsection>\n\n\u003C!-- Outcome breakdown & Operator comparison -->\n\u003Cdiv class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n  \u003Csection class=\"card p-5\">\n    \u003Ch2 class=\"font-semibold text-ink-deep mb-1\">התפלגות תוצאות הנסיעות\u003C\u002Fh2>\n    \u003Cp class=\"text-sm text-subtle mb-3\">מתוך סך הנסיעות המאושרות ב-2025\u003C\u002Fp>\n    \u003Cdiv id=\"chart-donut\" class=\"h-64 md:h-72\">\u003C\u002Fdiv>\n  \u003C\u002Fsection>\n\n  \u003Csection class=\"card p-5\">\n    \u003Ch2 class=\"font-semibold text-ink-deep mb-1\">שיעור ביצוע לפי מפעיל\u003C\u002Fh2>\n    \u003Cp class=\"text-sm text-subtle mb-3\">15 המפעילים הגדולים — שיעור נסיעות תקינות\u003C\u002Fp>\n    \u003Cdiv id=\"chart-operators\" class=\"h-64 md:h-72\">\u003C\u002Fdiv>\n  \u003C\u002Fsection>\n\u003C\u002Fdiv>\n\n\u003C!-- Operator volume chart -->\n\u003Csection class=\"card p-5 mb-5\">\n  \u003Ch2 class=\"font-semibold text-ink-deep mb-1\">נפח נסיעות לפי מפעיל\u003C\u002Fh2>\n  \u003Cp class=\"text-sm text-subtle mb-3\">סך נסיעות מאושרות, נסיעות תקינות ואי-ביצוע לכל מפעיל (15 הגדולים)\u003C\u002Fp>\n  \u003Cdiv id=\"chart-op-volume\" class=\"h-72 md:h-[400px]\">\u003C\u002Fdiv>\n\u003C\u002Fsection>\n\n\u003C!-- Live Explorer -->\n\u003Csection class=\"card p-5 mb-5\">\n  \u003Cdiv class=\"flex flex-wrap items-center justify-between gap-3 mb-3\">\n    \u003Ch2 class=\"font-semibold text-ink-deep\">עיון בנתוני קווים\u003C\u002Fh2>\n    \u003Cinput id=\"explorer-search\" class=\"gov-explorer-search\"\n           type=\"search\" placeholder=\"חיפוש לפי מפעיל או אשכול...\"\n           aria-label=\"חיפוש בטבלה\" \u002F>\n  \u003C\u002Fdiv>\n  \u003Cdiv id=\"explorer\">\u003C\u002Fdiv>\n\u003C\u002Fsection>\n\n\u003C!-- Dataset notes -->\n\u003Csection class=\"card p-5 mb-5\">\n  \u003Ch2 class=\"font-semibold text-ink-deep mb-2\">אודות המאגר\u003C\u002Fh2>\n  \u003Cp class=\"text-sm text-ink leading-relaxed\">\n    מאגר זה מציג את תכנון הנסיעות של האוטובוסים בתחבורה הציבורית בכל חודש: נסיעות רישוי מאושרות, אי ביצוע, הקדמות, איחורים, נסיעות תקינות, נסיעות שלא ברישוי. המאגר מתעדכן כל 1 לחודש עם הנתונים של החודשים שעברו מתחילת השנה הקלנדרית הנוכחית ובעיכוב של 3 חודשים אחורה.\n  \u003C\u002Fp>\n\u003C\u002Fsection>\n\n\u003Cscript>\n(function () {\n  const GOVIL_PALETTE = [\n    '#0068f5', '#0b3668', '#6c9fd8', '#0053c4', '#0c3058',\n    '#3d70b0', '#b7d2f7', '#2658a0', '#dbe8fb', '#0c1f3d'\n  ];\n\n  const baseECharts = {\n    color: GOVIL_PALETTE,\n    textStyle: { fontFamily: 'Rubik, sans-serif', color: '#0c3058' },\n    tooltip: {\n      textStyle: { fontFamily: 'Rubik', color: '#0c3058' },\n      backgroundColor: '#fff',\n      borderColor: '#c3cfe7',\n      extraCssText: 'direction: rtl; box-shadow: 0 6px 24px -8px rgba(0,104,245,.18);'\n    },\n    grid: { left: 48, right: 64, top: 40, bottom: 48, containLabel: true },\n  };\n\n  \u002F* ── DATA ── *\u002F\n  const MONTHS_HE = ['ינואר','פברואר','מרץ','אפריל','מאי','יוני',\n                     'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'];\n\n  const monthlyData = [\n    { rishui: 2854622, takin: 2764927, eibizua: 44064,  eihurim: 43346,  loberishui: 18119, rate: 96.86 },\n    { rishui: 4313162, takin: 4199246, eibizua: 46079,  eihurim: 65491,  loberishui: 31353, rate: 97.36 },\n    { rishui: 2696682, takin: 2587400, eibizua: 56877,  eihurim: 50456,  loberishui: 18873, rate: 95.95 },\n    { rishui: 2632002, takin: 2534913, eibizua: 47127,  eihurim: 48099,  loberishui: 17891, rate: 96.31 },\n    { rishui: 2713300, takin: 2628127, eibizua: 36649,  eihurim: 47403,  loberishui: 16810, rate: 96.86 },\n    { rishui: 1372909, takin: 1322920, eibizua: 24927,  eihurim: 24401,  loberishui: 27348, rate: 96.36 },\n    { rishui: 2909245, takin: 2816626, eibizua: 42284,  eihurim: 48592,  loberishui: 15831, rate: 96.82 },\n    { rishui: 2726819, takin: 2629175, eibizua: 46241,  eihurim: 49325,  loberishui: 16613, rate: 96.42 },\n    { rishui: 2537199, takin: 2420368, eibizua: 54546,  eihurim: 60620,  loberishui: 17034, rate: 95.40 },\n    { rishui:  832324, takin:  800551, eibizua: 14102,  eihurim: 17011,  loberishui:  5542, rate: 96.18 },\n    { rishui: 2736725, takin: 2625163, eibizua: 53164,  eihurim: 56761,  loberishui: 18185, rate: 95.92 },\n    { rishui: 2917724, takin: 2801067, eibizua: 59530,  eihurim: 55511,  loberishui: 20008, rate: 96.00 }\n  ];\n\n  const opData = [\n    { name: 'אגד',                      rishui: 6254666, takin: 6071177, eibizua: 79531,  rate: 97.07 },\n    { name: 'קווים',                    rishui: 3676531, takin: 3521188, eibizua: 63567,  rate: 95.77 },\n    { name: 'מטרופולין',                rishui: 3425369, takin: 3250906, eibizua: 68508,  rate: 94.91 },\n    { name: 'דן',                       rishui: 3193925, takin: 3028161, eibizua: 84917,  rate: 94.81 },\n    { name: 'סופרבוס',                  rishui: 2828957, takin: 2757443, eibizua: 45263,  rate: 97.47 },\n    { name: 'אלקטרה אפיקים',            rishui: 2203244, takin: 2143855, eibizua: 30405,  rate: 97.30 },\n    { name: 'נתיב אקספרס',              rishui: 1643471, takin: 1626145, eibizua:  4271,  rate: 98.95 },\n    { name: 'דן בדרום',                 rishui: 1496389, takin: 1452168, eibizua: 22446,  rate: 97.04 },\n    { name: 'אקסטרה ירושלים',           rishui:  878619, takin:  823612, eibizua: 45885,  rate: 93.74 },\n    { name: 'דן באר שבע',               rishui:  821054, takin:  777867, eibizua: 26610,  rate: 94.74 },\n    { name: 'בית שמש אקספרס',           rishui:  734676, takin:  704008, eibizua:  9404,  rate: 95.83 },\n    { name: 'תנופה',                    rishui:  692752, takin:  640683, eibizua: 21820,  rate: 92.48 },\n    { name: 'ש.א.מ',                    rishui:  674339, takin:  666259, eibizua:  2224,  rate: 98.80 },\n    { name: 'אלקטרה אפיקים תחבורה',     rishui:  607976, takin:  597892, eibizua:  2736,  rate: 98.34 },\n    { name: 'אקסטרה',                   rishui:  511299, takin:  508610, eibizua:    614, rate: 99.47 }\n  ];\n\n  \u002F* ── CHART 1: Monthly stacked bar + rate line ── *\u002F\n  (function () {\n    const el = document.getElementById('chart-monthly');\n    if (!el) return;\n    const chart = echarts.init(el);\n\n    const rishui   = monthlyData.map(d => d.rishui);\n    const takin    = monthlyData.map(d => d.takin);\n    const eibizua  = monthlyData.map(d => d.eibizua);\n    const eihurim  = monthlyData.map(d => d.eihurim);\n    const rates    = monthlyData.map(d => d.rate);\n\n    const option = Object.assign({}, baseECharts, {\n      legend: {\n        data: ['נסיעות תקינות', 'אי-ביצוע', 'איחורים', 'שיעור ביצוע (%)'],\n        textStyle: { fontFamily: 'Rubik', color: '#0c3058', fontSize: 12 },\n        bottom: 0\n      },\n      xAxis: {\n        type: 'category',\n        data: MONTHS_HE,\n        axisLabel: { fontFamily: 'Rubik', color: '#0c3058', fontSize: 11, rotate: 30 }\n      },\n      yAxis: [\n        {\n          type: 'value',\n          name: 'נסיעות',\n          axisLabel: { fontFamily: 'Rubik', color: '#6c757d', fontSize: 10,\n            formatter: function(v) { return (v\u002F1000000).toFixed(1) + 'M'; }\n          }\n        },\n        {\n          type: 'value',\n          name: 'שיעור %',\n          min: 94, max: 100,\n          axisLabel: { fontFamily: 'Rubik', color: '#6c757d', fontSize: 10,\n            formatter: function(v) { return v + '%'; }\n          }\n        }\n      ],\n      tooltip: Object.assign({}, baseECharts.tooltip, {\n        trigger: 'axis',\n        axisPointer: { type: 'shadow' },\n        formatter: function(params) {\n          let s = '\u003Cb>' + params[0].name + '\u003C\u002Fb>\u003Cbr\u002F>';\n          params.forEach(function(p) {\n            var val = typeof p.value === 'number'\n              ? (p.seriesName.includes('%') ? p.value.toFixed(2) + '%' : p.value.toLocaleString('he-IL'))\n              : p.value;\n            s += p.marker + ' ' + p.seriesName + ': ' + val + '\u003Cbr\u002F>';\n          });\n          return s;\n        }\n      }),\n      series: [\n        {\n          name: 'נסיעות תקינות',\n          type: 'bar',\n          stack: 'trips',\n          data: takin,\n          itemStyle: { color: '#0068f5' }\n        },\n        {\n          name: 'אי-ביצוע',\n          type: 'bar',\n          stack: 'trips',\n          data: eibizua,\n          itemStyle: { color: '#dc3545' }\n        },\n        {\n          name: 'איחורים',\n          type: 'bar',\n          stack: 'trips',\n          data: eihurim,\n          itemStyle: { color: '#ffc107' }\n        },\n        {\n          name: 'שיעור ביצוע (%)',\n          type: 'line',\n          yAxisIndex: 1,\n          data: rates,\n          smooth: true,\n          symbol: 'circle',\n          symbolSize: 6,\n          lineStyle: { color: '#0b3668', width: 2.5 },\n          itemStyle: { color: '#0b3668' },\n          label: {\n            show: false\n          }\n        }\n      ]\n    });\n    chart.setOption(option);\n    window.addEventListener('resize', function() { chart.resize(); });\n  })();\n\n  \u002F* ── CHART 2: Outcome donut ── *\u002F\n  (function () {\n    const el = document.getElementById('chart-donut');\n    if (!el) return;\n    const chart = echarts.init(el);\n\n    const TOTAL = 31242713;\n    const takinTotal     = 30130483;\n    const eibizuaTotal   =   525590;\n    const eihurimTotal   =   567016;\n    const loberishTotal  =   223607;\n    const hakdamaTotal   =    27809;\n\n    const option = Object.assign({}, baseECharts, {\n      tooltip: Object.assign({}, baseECharts.tooltip, {\n        trigger: 'item',\n        formatter: function(p) {\n          return p.name + '\u003Cbr\u002F>' + p.value.toLocaleString('he-IL') +\n                 ' (' + p.percent + '%)';\n        }\n      }),\n      legend: {\n        orient: 'vertical',\n        right: 0,\n        top: 'center',\n        textStyle: { fontFamily: 'Rubik', color: '#0c3058', fontSize: 11 }\n      },\n      series: [{\n        type: 'pie',\n        radius: ['40%', '70%'],\n        center: ['35%', '50%'],\n        label: { show: false },\n        emphasis: { label: { show: true, fontSize: 12, fontFamily: 'Rubik', fontWeight: 'bold' } },\n        data: [\n          { value: takinTotal,    name: 'תקינות',        itemStyle: { color: '#198754' } },\n          { value: eihurimTotal,  name: 'איחורים',       itemStyle: { color: '#ffc107' } },\n          { value: eibizuaTotal,  name: 'אי-ביצוע',      itemStyle: { color: '#dc3545' } },\n          { value: loberishTotal, name: 'ללא רישוי',     itemStyle: { color: '#6c9fd8' } },\n          { value: hakdamaTotal,  name: 'הקדמות',        itemStyle: { color: '#0dcaf0' } }\n        ]\n      }]\n    });\n    chart.setOption(option);\n    window.addEventListener('resize', function() { chart.resize(); });\n  })();\n\n  \u002F* ── CHART 3: Operator performance rate (horizontal bar) ── *\u002F\n  (function () {\n    const el = document.getElementById('chart-operators');\n    if (!el) return;\n    const chart = echarts.init(el);\n\n    const names = opData.map(d => d.name).reverse();\n    const rates = opData.map(d => d.rate).reverse();\n\n    const option = Object.assign({}, baseECharts, {\n      grid: { left: 20, right: 40, top: 10, bottom: 10, containLabel: true },\n      tooltip: Object.assign({}, baseECharts.tooltip, {\n        trigger: 'axis',\n        axisPointer: { type: 'shadow' },\n        formatter: function(params) {\n          return params[0].name + '\u003Cbr\u002F>' +\n                 'שיעור ביצוע: \u003Cb>' + params[0].value + '%\u003C\u002Fb>';\n        }\n      }),\n      xAxis: {\n        type: 'value',\n        min: 90, max: 100,\n        axisLabel: { fontFamily: 'Rubik', color: '#6c757d', fontSize: 10,\n          formatter: function(v) { return v + '%'; }\n        }\n      },\n      yAxis: {\n        type: 'category',\n        data: names,\n        axisLabel: { fontFamily: 'Rubik', color: '#0c3058', fontSize: 10 }\n      },\n      series: [{\n        type: 'bar',\n        data: rates.map(function(r) {\n          return {\n            value: r,\n            itemStyle: {\n              color: r >= 98 ? '#198754'\n                   : r >= 96 ? '#0068f5'\n                   : r >= 94 ? '#3d70b0'\n                   :           '#dc3545'\n            }\n          };\n        }),\n        label: {\n          show: true,\n          position: 'right',\n          formatter: function(p) { return p.value + '%'; },\n          fontFamily: 'Rubik',\n          fontSize: 10,\n          color: '#0c3058'\n        }\n      }]\n    });\n    chart.setOption(option);\n    window.addEventListener('resize', function() { chart.resize(); });\n  })();\n\n  \u002F* ── CHART 4: Operator volume (stacked bar) ── *\u002F\n  (function () {\n    const el = document.getElementById('chart-op-volume');\n    if (!el) return;\n    const chart = echarts.init(el);\n\n    const names    = opData.map(d => d.name).reverse();\n    const takinArr = opData.map(d => d.takin).reverse();\n    const eibArr   = opData.map(d => d.eibizua).reverse();\n\n    const option = Object.assign({}, baseECharts, {\n      grid: { left: 20, right: 40, top: 20, bottom: 10, containLabel: true },\n      legend: {\n        data: ['נסיעות תקינות', 'אי-ביצוע'],\n        textStyle: { fontFamily: 'Rubik', color: '#0c3058', fontSize: 12 },\n        top: 0\n      },\n      tooltip: Object.assign({}, baseECharts.tooltip, {\n        trigger: 'axis',\n        axisPointer: { type: 'shadow' },\n        formatter: function(params) {\n          let s = '\u003Cb>' + params[0].name + '\u003C\u002Fb>\u003Cbr\u002F>';\n          params.forEach(function(p) {\n            s += p.marker + ' ' + p.seriesName + ': ' +\n                 p.value.toLocaleString('he-IL') + '\u003Cbr\u002F>';\n          });\n          return s;\n        }\n      }),\n      xAxis: {\n        type: 'value',\n        axisLabel: { fontFamily: 'Rubik', color: '#6c757d', fontSize: 10,\n          formatter: function(v) { return (v\u002F1000000).toFixed(1) + 'M'; }\n        }\n      },\n      yAxis: {\n        type: 'category',\n        data: names,\n        axisLabel: { fontFamily: 'Rubik', color: '#0c3058', fontSize: 10 }\n      },\n      series: [\n        {\n          name: 'נסיעות תקינות',\n          type: 'bar',\n          stack: 'vol',\n          data: takinArr,\n          itemStyle: { color: '#0068f5' }\n        },\n        {\n          name: 'אי-ביצוע',\n          type: 'bar',\n          stack: 'vol',\n          data: eibArr,\n          itemStyle: { color: '#dc3545' }\n        }\n      ]\n    });\n    chart.setOption(option);\n    window.addEventListener('resize', function() { chart.resize(); });\n  })();\n\n  \u002F* ── GovExplorer ── *\u002F\n  GovExplorer.create({\n    container:    '#explorer',\n    searchInput:  '#explorer-search',\n    resourceId:   '588dfec1-b95c-495b-a1f4-e1ca4278be5d',\n    fields:       ['OfficeLineId', 'operator_nm', 'cluster_nm', 'trip_month', 'rishui', 'takin'],\n    headers:      ['מס\\' קו משרד', 'מפעיל', 'אשכול', 'חודש', 'מאושר ברישוי', 'בוצע תקין'],\n    searchFields: ['operator_nm', 'cluster_nm'],\n    pageSize:     50,\n    sort:         'rishui desc',\n    renderRow: function (r) {\n      var rate = (r['rishui'] && r['takin'])\n        ? Math.round(r['takin'] \u002F r['rishui'] * 100) : null;\n      return [\n        { text: r['OfficeLineId'], dir: 'ltr' },\n        { text: r['operator_nm'] },\n        { text: r['cluster_nm'] },\n        { text: r['trip_month'], dir: 'ltr', align: 'center' },\n        { text: r['rishui'] != null ? Number(r['rishui']).toLocaleString('he-IL') : '', dir: 'ltr' },\n        {\n          text: r['takin'] != null\n            ? Number(r['takin']).toLocaleString('he-IL') + (rate !== null ? ' (' + rate + '%)' : '')\n            : '',\n          dir: 'ltr',\n          badge: rate !== null ? (rate >= 98 ? 'ok' : rate >= 94 ? 'mut' : 'warn') : 'mut'\n        }\n      ];\n    }\n  });\n})();\n\u003C\u002Fscript>\n",1778130672571]