{"id":8190,"date":"2025-11-12T05:05:56","date_gmt":"2025-11-12T05:05:56","guid":{"rendered":"https:\/\/www.ebtd.education\/?page_id=8190"},"modified":"2025-11-12T05:08:04","modified_gmt":"2025-11-12T05:08:04","slug":"%e0%a6%86%e0%a6%87%e0%a6%86%e0%a6%b0%e0%a6%9f%e0%a6%bf-%e0%a6%87%e0%a6%a8%e0%a6%ab%e0%a6%b0%e0%a7%8d%e0%a6%ae%e0%a6%a1-%e0%a6%95%e0%a7%8d%e0%a6%b2%e0%a6%be%e0%a6%b8%e0%a6%b0%e0%a7%81%e0%a6%ae","status":"publish","type":"page","link":"https:\/\/www.ebtd.education\/bd\/%e0%a6%97%e0%a6%ac%e0%a7%87%e0%a6%b7%e0%a6%a3%e0%a6%be-%e0%a6%95%e0%a7%87%e0%a6%a8%e0%a7%8d%e0%a6%a6%e0%a7%8d%e0%a6%b0-%e0%a6%ac%e0%a6%bf%e0%a6%a8%e0%a6%be%e0%a6%ae%e0%a7%82%e0%a6%b2%e0%a7%8d%e0%a6%af\/%e0%a6%89%e0%a6%a8%e0%a7%8d%e0%a6%a8%e0%a6%a4-%e0%a6%ae%e0%a7%82%e0%a6%b2%e0%a7%8d%e0%a6%af%e0%a6%be%e0%a6%af%e0%a6%bc%e0%a6%a8%e0%a7%87%e0%a6%b0-%e0%a6%a8%e0%a6%bf%e0%a6%b0%e0%a7%8d%e0%a6%a6%e0%a7%87\/%e0%a6%86%e0%a6%87%e0%a6%86%e0%a6%b0%e0%a6%9f%e0%a6%bf-%e0%a6%87%e0%a6%a8%e0%a6%ab%e0%a6%b0%e0%a7%8d%e0%a6%ae%e0%a6%a1-%e0%a6%95%e0%a7%8d%e0%a6%b2%e0%a6%be%e0%a6%b8%e0%a6%b0%e0%a7%81%e0%a6%ae\/","title":{"rendered":"IRT-Informed Classroom Testing"},"content":{"rendered":"\n\t\t<div id=\"fws_6a289c3ce7233\"  data-column-margin=\"default\" data-midnight=\"dark\"  class=\"wpb_row vc_row-fluid vc_row\"  style=\"padding-top: 0px; padding-bottom: 0px; \"><div class=\"row-bg-wrap\" data-bg-animation=\"none\" data-bg-animation-delay=\"\" data-bg-overlay=\"false\"><div class=\"inner-wrap row-bg-layer\" ><div class=\"row-bg viewport-desktop\"  style=\"\"><\/div><\/div><\/div><div class=\"row_col_wrap_12 col span_12 dark left\">\n\t<div  class=\"vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone \"  data-padding-pos=\"all\" data-has-bg-color=\"false\" data-bg-color=\"\" data-bg-opacity=\"1\" data-animation=\"\" data-delay=\"0\" >\n\t\t<div class=\"vc_column-inner\" >\n\t\t\t<div class=\"wpb_wrapper\">\n\t\t\t\t\n\t<div class=\"wpb_raw_code wpb_raw_html wpb_content_element\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<section id=\"ebtd-irt\">\r\n  <h2>Test Analysis (Beta)<\/h2>\r\n\r\n  <!-- Upload\/Paste -->\r\n  <details open style=\"margin:1rem 0;padding:1rem;border:1px solid #ddd;border-radius:8px;\">\r\n    <summary><strong>Upload or paste your CSV (sample optional for now)<\/strong><\/summary>\r\n    <textarea id=\"csv\" rows=\"6\" style=\"width:100%;font-family:monospace;\"><\/textarea>\r\n    <div style=\"margin-top:.5rem;display:flex;gap:.5rem;flex-wrap:wrap\">\r\n      <button id=\"run\" type=\"button\">Analyse<\/button>\r\n      <button id=\"load-sample\" type=\"button\">Load sample (no upload)<\/button>\r\n    <\/div>\r\n    <p style=\"font-size:.9rem;color:#666;margin-top:.5rem\">\r\n      Format: <code>Item,MaxMarks,S01,S02...<\/code> then rows like <code>Q1,5,3,4...<\/code>\r\n    <\/p>\r\n  <\/details>\r\n\r\n  <!-- Tabs -->\r\n  <nav id=\"tabs\" style=\"display:none;margin:1rem 0;gap:.5rem\">\r\n    <button data-tab=\"summary\">Summary<\/button>\r\n    <button data-tab=\"items\">Items<\/button>\r\n    <button data-tab=\"students\">Students<\/button>\r\n    <button data-tab=\"map\">Map<\/button>\r\n    <button data-tab=\"next\">Next steps<\/button>\r\n  <\/nav>\r\n\r\n  <!-- Panels -->\r\n  <div id=\"panel-summary\" class=\"panel\" style=\"display:none\"><\/div>\r\n  <div id=\"panel-items\" class=\"panel\" style=\"display:none\"><\/div>\r\n  <div id=\"panel-students\" class=\"panel\" style=\"display:none\"><\/div>\r\n  <div id=\"panel-map\" class=\"panel\" style=\"display:none;font-family:monospace;white-space:pre\"><\/div>\r\n  <div id=\"panel-next\" class=\"panel\" style=\"display:none\"><\/div>\r\n<\/section>\r\n\r\n<script>\r\n(function(){\r\n  const endpoint = \"\/wp-json\/ebtd-irt\/v1\/run\"; \/\/ same origin\r\n  const $ = (sel) => document.querySelector(sel);\r\n  const show = (id) => {\r\n    document.querySelectorAll('#ebtd-irt .panel').forEach(el=>el.style.display='none');\r\n    document.querySelectorAll('#tabs button').forEach(b=>b.disabled=false);\r\n    $('#panel-'+id).style.display='block';\r\n    [...document.querySelectorAll('#tabs button')].find(b=>b.dataset.tab===id).disabled=true;\r\n  };\r\n\r\n  \/\/ Simple colour helper\r\n  const chip = (txt, color) =>\r\n    `<span style=\"display:inline-block;padding:.2rem .5rem;border-radius:999px;background:${color==='green'?'#e7f6e7':color==='amber'?'#fff5da':'#fde7e7'};color:#222;border:1px solid ${color==='green'?'#a8d5a8':color==='amber'?'#f0cc7a':'#f2a7a7'}\">${txt}<\/span>`;\r\n\r\n  \/\/ Renderers\r\n  function renderSummary(d){\r\n    const k = d.test_summary;\r\n    $('#panel-summary').innerHTML = `\r\n      <h3>Snapshot<\/h3>\r\n      <p>${chip('Difficulty: '+k.overall_difficulty_label, k.overall_difficulty_label==='Easy'?'green':k.overall_difficulty_label==='Moderate'?'amber':'red')}\r\n         ${chip('Reliability: '+k.reliability_label, k.reliability_label==='High'?'green':k.reliability_label==='Moderate'?'amber':'red')}<\/p>\r\n      <ul>${k.key_findings.map(x=>`<li>${x}<\/li>`).join('')}<\/ul>\r\n      <p style=\"color:#555\">${k.plain_explainer}<\/p>\r\n    `;\r\n  }\r\n\r\n  function renderItems(d){\r\n    const rows = d.item_table.map(r=>{\r\n      const bar = `<div style=\"height:8px;background:#eee;border-radius:4px;overflow:hidden\">\r\n        <div style=\"width:${r.ui.bar_0to100}%;height:8px;background:${r.ui.traffic_color==='green'?'#2e7d32':r.ui.traffic_color==='amber'?'#f9a825':'#c62828'};\"><\/div>\r\n      <\/div>`;\r\n      const flags = Object.entries(r.flags).filter(([k,v])=>v).map(([k])=>k.replace('_',' ')).join(', ');\r\n      return `<tr>\r\n        <td>${r.item_id}<\/td>\r\n        <td style=\"text-align:right\">${r.max_marks}<\/td>\r\n        <td style=\"width:220px\">${bar}<\/td>\r\n        <td>${chip(r.difficulty_label, r.ui.traffic_color)}<\/td>\r\n        <td>${flags || '\u2014'}<\/td>\r\n        <td>${r.teacher_note}<\/td>\r\n      <\/tr>`;\r\n    }).join('');\r\n    $('#panel-items').innerHTML = `\r\n      <h3>Items<\/h3>\r\n      <div style=\"overflow:auto\">\r\n      <table style=\"width:100%;border-collapse:collapse\">\r\n        <thead><tr>\r\n          <th style=\"text-align:left\">Item<\/th>\r\n          <th style=\"text-align:right\">Max<\/th>\r\n          <th style=\"text-align:left\">Facility<\/th>\r\n          <th style=\"text-align:left\">Difficulty<\/th>\r\n          <th style=\"text-align:left\">Flags<\/th>\r\n          <th style=\"text-align:left\">Note<\/th>\r\n        <\/tr><\/thead>\r\n        <tbody>${rows}<\/tbody>\r\n      <\/table>\r\n      <\/div>`;\r\n  }\r\n\r\n  function renderStudents(d){\r\n    const rows = d.student_table.map(s=>{\r\n      const clr = s.ui.traffic_color;\r\n      return `<tr>\r\n        <td>${s.student_id}<\/td>\r\n        <td style=\"text-align:right\">${s.total_marks}<\/td>\r\n        <td style=\"text-align:right\">${s.percent_total}%<\/td>\r\n        <td>${chip(s.ability_label, clr)}<\/td>\r\n        <td>${s.teacher_note}<\/td>\r\n      <\/tr>`;\r\n    }).join('');\r\n    $('#panel-students').innerHTML = `\r\n      <h3>Students<\/h3>\r\n      <div style=\"overflow:auto\">\r\n      <table style=\"width:100%;border-collapse:collapse\">\r\n        <thead><tr>\r\n          <th style=\"text-align:left\">Student<\/th>\r\n          <th style=\"text-align:right\">Total<\/th>\r\n          <th style=\"text-align:right\">% Total<\/th>\r\n          <th style=\"text-align:left\">Ability<\/th>\r\n          <th style=\"text-align:left\">Note<\/th>\r\n        <\/tr><\/thead>\r\n        <tbody>${rows}<\/tbody>\r\n      <\/table>\r\n      <\/div>`;\r\n  }\r\n\r\n  function renderMap(d){\r\n    $('#panel-map').textContent = d.person_item_map.ascii || '';\r\n  }\r\n\r\n  function renderNext(d){\r\n    const c = d.coaching;\r\n    $('#panel-next').innerHTML = `\r\n      <h3>Next steps<\/h3>\r\n      <h4>Reflection questions<\/h4>\r\n      <ul>${c.reflection_questions.map(x=>`<li>${x}<\/li>`).join('')}<\/ul>\r\n      <h4>Teaching actions<\/h4>\r\n      <ul>${c.teaching_actions.map(x=>`<li>${x}<\/li>`).join('')}<\/ul>\r\n      <h4>Test-design actions<\/h4>\r\n      <ul>${c.test_design_actions.map(x=>`<li>${x}<\/li>`).join('')}<\/ul>\r\n    `;\r\n  }\r\n\r\n  function showTabs(){ $('#tabs').style.display='flex'; }\r\n\r\n  function renderAll(d){\r\n    renderSummary(d); renderItems(d); renderStudents(d); renderMap(d); renderNext(d);\r\n    showTabs(); show('summary');\r\n  }\r\n\r\n  \/\/ Tab handlers\r\n  document.querySelectorAll('#tabs button').forEach(b=>{\r\n    b.addEventListener('click', ()=> show(b.dataset.tab));\r\n  });\r\n\r\n  \/\/ Buttons\r\n  $('#load-sample').addEventListener('click', async ()=>{\r\n    const res = await fetch(endpoint, { method:'GET' });\r\n    const data = await res.json();\r\n    renderAll(data);\r\n  });\r\n\r\n  $('#run').addEventListener('click', async ()=>{\r\n    const csv = $('#csv').value || '';\r\n    const res = await fetch(endpoint, {\r\n      method:'POST',\r\n      headers: { 'Content-Type':'application\/json' },\r\n      body: JSON.stringify({ csv_text: csv })\r\n    });\r\n    const data = await res.json();\r\n    renderAll(data);\r\n  });\r\n})();\r\n<\/script>\r\n\n\t\t<\/div>\n\t<\/div>\n\n\t\t\t<\/div> \n\t\t<\/div>\n\t<\/div> \n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"Test Analysis (Beta) Upload or paste your CSV (sample optional for now) Analyse Load sample (no upload) Format: Item,MaxMarks,S01,S02... then rows like Q1,5,3,4... Summary Items Students Map Next steps","protected":false},"author":1,"featured_media":0,"parent":7498,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-8190","page","type-page","status-publish"],"_links":{"self":[{"href":"https:\/\/www.ebtd.education\/bd\/wp-json\/wp\/v2\/pages\/8190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ebtd.education\/bd\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ebtd.education\/bd\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ebtd.education\/bd\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ebtd.education\/bd\/wp-json\/wp\/v2\/comments?post=8190"}],"version-history":[{"count":3,"href":"https:\/\/www.ebtd.education\/bd\/wp-json\/wp\/v2\/pages\/8190\/revisions"}],"predecessor-version":[{"id":8193,"href":"https:\/\/www.ebtd.education\/bd\/wp-json\/wp\/v2\/pages\/8190\/revisions\/8193"}],"up":[{"embeddable":true,"href":"https:\/\/www.ebtd.education\/bd\/wp-json\/wp\/v2\/pages\/7498"}],"wp:attachment":[{"href":"https:\/\/www.ebtd.education\/bd\/wp-json\/wp\/v2\/media?parent=8190"}],"curies":[{"name":"\u09a1\u09ac\u09cd\u09b2\u09bf\u0989\u09aa\u09bf","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}