Lesson Progress
0% Complete

The Senegal River is a lifeline that supplies the people in Northern Senegal and Southern Mauritania and their agricultural activities with water.

(De Mey et al., 2012; Toffa et al., 2021; Porcuna-Ferrer et al., 2024)

Making it Real

<!– ================================================================ INTERACTIVE SCENARIO: The Overwhelmed Insurance Clerk Paste EVERYTHING (from this comment to the last line) into an Ignite "Custom HTML" block. All styles are scoped to #fsx-clerk so they will not affect the rest of your course. Edit any wording in the STEPS section inside the . ================================================================ –>
Your guide

#fsx-clerk{–fsx-green:#2e6b3e;–fsx-green2:#3f8f52;–fsx-sand:#f3ede2;–fsx-ink:#1f2a24;–fsx-mut:#5c6b60;–fsx-amber:#b4791f;–fsx-card:#ffffff; box-sizing:border-box;max-width:720px;margin:0 auto;padding:18px; font-family:-apple-system,BlinkMacSystemFont,”Segoe UI”,Roboto,Helvetica,Arial,sans-serif;color:var(–fsx-ink);} #fsx-clerk *,#fsx-clerk *::before,#fsx-clerk *::after{box-sizing:border-box;} #fsx-clerk .fsx-card{background:var(–fsx-card);border:1px solid #e6ded0;border-radius:18px; padding:26px 26px 22px;box-shadow:0 10px 30px rgba(46,107,62,.10);} #fsx-clerk .fsx-top{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:18px;} #fsx-clerk .fsx-badge{font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase; color:var(–fsx-green);background:#eaf3ec;border:1px solid #d3e6d8;padding:5px 11px;border-radius:999px;white-space:nowrap;} #fsx-clerk .fsx-progress{flex:1;height:7px;background:#ece5d8;border-radius:999px;overflow:hidden;} #fsx-clerk .fsx-bar{display:block;height:100%;width:0;background:linear-gradient(90deg,var(–fsx-green),var(–fsx-green2)); border-radius:999px;transition:width .35s ease;} #fsx-clerk .fsx-guide{display:flex;align-items:center;gap:12px;margin-bottom:6px;} #fsx-clerk .fsx-avatar{width:44px;height:44px;border-radius:50%;overflow:hidden;flex:none;box-shadow:0 3px 8px rgba(0,0,0,.12);} #fsx-clerk .fsx-guide-label{font-size:13px;font-weight:600;color:var(–fsx-mut);} #fsx-clerk .fsx-title{font-size:23px;line-height:1.25;margin:10px 0 8px;font-weight:800;letter-spacing:-.01em;} #fsx-clerk .fsx-text{font-size:17px;line-height:1.6;margin:0 0 6px;color:#33413a;} #fsx-clerk .fsx-choices{display:flex;flex-direction:column;gap:12px;margin-top:18px;} #fsx-clerk .fsx-choice{display:flex;align-items:center;gap:12px;width:100%;text-align:left;font-size:16px;font-weight:600;cursor:pointer; background:#fbfaf6;border:2px solid #e0d8c8;border-radius:14px;padding:15px 18px;color:var(–fsx-ink); transition:border-color .15s,background .15s,transform .05s;} #fsx-clerk .fsx-choice:hover{border-color:var(–fsx-green2);background:#f2f8f3;} #fsx-clerk .fsx-choice:active{transform:translateY(1px);} #fsx-clerk .fsx-choice:disabled{cursor:default;opacity:.75;} #fsx-clerk .fsx-num{display:flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%; background:var(–fsx-green);color:#fff;font-size:13px;font-weight:800;flex:none;} #fsx-clerk .fsx-choice.fsx-picked-right{border-color:var(–fsx-green);background:#eaf6ee;} #fsx-clerk .fsx-choice.fsx-picked-wrong{border-color:#c9553f;background:#fbecea;} #fsx-clerk .fsx-choice.fsx-picked-wrong .fsx-num{background:#c9553f;} #fsx-clerk .fsx-feedback{margin-top:18px;border-left:4px solid var(–fsx-green); background:#f4f8f4;border-radius:0 12px 12px 0;padding:14px 16px;} #fsx-clerk .fsx-feedback.fsx-warn{border-left-color:var(–fsx-amber);background:#fbf5ea;} #fsx-clerk .fsx-fb-tag{font-size:12px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(–fsx-green);margin-bottom:5px;} #fsx-clerk .fsx-feedback.fsx-warn .fsx-fb-tag{color:var(–fsx-amber);} #fsx-clerk .fsx-fb-text{margin:0;font-size:16px;line-height:1.55;} #fsx-clerk .fsx-actions{display:flex;gap:12px;align-items:center;margin-top:22px;flex-wrap:wrap;} #fsx-clerk .fsx-btn{font-size:15px;font-weight:700;border-radius:12px;padding:13px 26px;cursor:pointer;border:none;transition:filter .15s,opacity .15s;} #fsx-clerk .fsx-primary{background:var(–fsx-green);color:#fff;box-shadow:0 4px 12px rgba(46,107,62,.28);} #fsx-clerk .fsx-primary:hover{filter:brightness(1.07);} #fsx-clerk .fsx-primary:disabled{opacity:.45;cursor:default;filter:none;} #fsx-clerk .fsx-warnbtn{background:var(–fsx-amber);color:#fff;} #fsx-clerk .fsx-warnbtn:hover{filter:brightness(1.07);} #fsx-clerk .fsx-ghost{background:transparent;color:var(–fsx-mut);border:1px solid #ddd4c4;} #fsx-clerk .fsx-ghost:hover{color:var(–fsx-ink);border-color:#c7bda9;} @media (max-width:520px){ #fsx-clerk .fsx-title{font-size:20px;} #fsx-clerk .fsx-text{font-size:16px;} #fsx-clerk .fsx-card{padding:20px 18px;} } (function(){ var root = document.getElementById(‘fsx-clerk’); if(!root) return; // —- SCENARIO CONTENT (edit freely) ———————————- // For decisions: “correct” = index of the right choice. // Wrong choice shows feedbackWrong + “Try again”; right choice shows // feedbackRight + “Continue”. var STEPS = [ { type:’info’, title:’The Overwhelmed Insurance Clerk: Using Satellite Data to Detect Crop Damage’, text:’As an insurance clerk in West Africa, you must verify 1,000 crop damage claims (from floods, locusts, ducks, and disease) on rice farms in the Senegal River Valley.’ }, { type:’info’, title:’The Challenge’, text:’Fraudulent claims and delayed payouts strain trust between farmers and insurers. Traditional ground checks are slow and impractical at scale.’ }, { type:’info’, title:’Where do you even start?’, text:’You can only investigate 100 of these claims on-site. Prioritize cases where you have doubts about their accuracy. But how to decide which ones to check? You can use a little help from the NDVI.’ }, { type:’info’, title:’Learn How NDVI Works’, text:’NDVI measures plant health using satellite data. Healthy crops = high NDVI; damaged crops = low NDVI.’ }, { type:’decision’, title:’Claim 1 u2014 Farmer Amina’, text:’Farmer Amina reports flood damage in her rice crop. What do you do?’, choices:[‘Approve claim’,’Flag for inspection’], correct:0, feedbackRight:’Yes! Floods damage crops slowly. This NDVI pattern matches historical flood data. Always cross-check with rainfall records for confirmation!’, feedbackWrong:’Sudden drops often mean non-flood causes (e.g., pests). Prioritize this for on-site checks.’ }, { type:’decision’, title:’Claim 2 u2014 Farmer Samba’, text:’Farmer Samba reports locust damage. Locust swarms create scattered, irregular damage. What do you do?’, choices:[‘Approve claim’,’Flag for inspection’], correct:1, feedbackRight:’Locusts rarely destroy entire fields. The scattered damage matches their behavior. Prioritize this claim u2013 fraudsters often report uniform damage.’, feedbackWrong:’Not so fast. Locusts feed in patches, so scattered damage like this is exactly what youu2019d expect to see. Before you approve, flag it for an on-site check just to be sure.’ }, { type:’end’, title:’Consequences & Takeaways’, text:’NDVI cuts inspection time by 70%, focusing resources on high-risk cases. Anomaly detection lowers fraudulent payouts by 50%. Faster validations improve client satisfaction.’ } ]; // ———————————————————————- var i = 0, locked = false; var elTitle = document.getElementById(‘fsx-title’); var elText = document.getElementById(‘fsx-text’); var elChoices = document.getElementById(‘fsx-choices’); var elFb = document.getElementById(‘fsx-feedback’); var elFbTag = document.getElementById(‘fsx-fb-tag’); var elFbText = document.getElementById(‘fsx-fb-text’); var elNext = document.getElementById(‘fsx-next’); var elRetry = document.getElementById(‘fsx-retry’); var elRestart = document.getElementById(‘fsx-restart’); var elBar = root.querySelector(‘.fsx-bar’); function render(){ var s = STEPS[i]; locked = false; elTitle.textContent = s.title; elText.textContent = s.text; elChoices.innerHTML = ”; elFb.hidden = true; elFb.classList.remove(‘fsx-warn’); elBar.style.width = Math.round((i/(STEPS.length-1))*100) + ‘%’; elRestart.hidden = true; elRetry.hidden = true; if(s.type === ‘decision’){ elNext.hidden = true; // appears only after a correct answer s.choices.forEach(function(label, idx){ var b = document.createElement(‘button’); b.type = ‘button’; b.className = ‘fsx-choice’; b.innerHTML = ‘‘+(idx+1)+’‘+label+’‘; b.addEventListener(‘click’, function(){ choose(idx, b, label); }); elChoices.appendChild(b); }); } else if(s.type === ‘end’){ elNext.hidden = true; elRestart.hidden = false; } else { elNext.hidden = false; elNext.disabled = false; elNext.textContent = ‘Continue’; } } function choose(idx, btn, label){ if(locked) return; var s = STEPS[i]; var right = (idx === s.correct); elChoices.querySelectorAll(‘.fsx-choice’).forEach(function(b){ b.disabled = true; }); btn.classList.add(right ? ‘fsx-picked-right’ : ‘fsx-picked-wrong’); elFb.classList.toggle(‘fsx-warn’, !right); elFbTag.textContent = ‘You chose: ‘ + label; elFbText.textContent = right ? s.feedbackRight : s.feedbackWrong; elFb.hidden = false; if(right){ locked = true; elNext.hidden = false; elNext.disabled = false; elNext.textContent = (i === STEPS.length – 1) ? ‘Finish’ : ‘Continue’; elRetry.hidden = true; } else { // wrong: let the learner try the same claim again elNext.hidden = true; elRetry.hidden = false; } } elNext.addEventListener(‘click’, function(){ if(i < STEPS.length – 1){ i++; render(); } }); elRetry.addEventListener('click', function(){ render(); }); // re-open same step elRestart.addEventListener('click', function(){ i = 0; render(); }); render(); })();