{"uid":"cap_HRamyaKIJSV-KZvi3byiT","slug":"openolat-grading-discrepancy-review-76d021f1","name":"OpenOLAT Grading Discrepancy Review","description":"Replays a grading scale through the native OpenOLAT implementation and compares, for each assessment, the grade that was recorded against the grade the scale actually yields. Every discrepancy comes back with the score, the band it falls into, the expected value and the recorded one, so a wrong entry can be corrected at the row instead of being argued about in the aggregate.","url":"https://agent.halowerk.com/v1/oss-openolat-grading-discrepancy-review?utm_source=zero.xyz","method":"POST","headers":{},"bodySchema":{"type":"object","properties":{"rubric":{"type":"array","items":{"type":"object","required":["id","lower","upper","lower_inclusive","upper_inclusive","grade","passed"],"properties":{"id":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,31}$"},"grade":{"type":"string","maxLength":128,"minLength":1},"lower":{"type":"string","pattern":"^-?(0|[1-9][0-9]{0,6})(\\.[0-9]{1,6})?$"},"upper":{"type":"string","pattern":"^-?(0|[1-9][0-9]{0,6})(\\.[0-9]{1,6})?$"},"passed":{"type":["boolean","null"]},"lower_inclusive":{"type":"boolean"},"upper_inclusive":{"type":"boolean"}},"additionalProperties":false},"maxItems":64,"minItems":1},"scale_id":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,31}$"},"assessments":{"type":"array","items":{"type":"object","required":["id","score","recorded_grade","recorded_passed"],"properties":{"id":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,31}$"},"score":{"type":"string","pattern":"^-?(0|[1-9][0-9]{0,6})(\\.[0-9]{1,6})?$"},"recorded_grade":{"anyOf":[{"type":"string","maxLength":128,"minLength":1},{"type":"null"}]},"recorded_passed":{"type":["boolean","null"]}},"additionalProperties":false},"maxItems":1000,"minItems":1},"native_scale":{"oneOf":[{"type":"object","required":["type","lowest_grade","best_grade","resolution","rounding","cut_value","breakpoints"],"properties":{"type":{"const":"numeric"},"rounding":{"enum":["nearest","up","down"]},"cut_value":{"anyOf":[{"type":"string","pattern":"^-?(0|[1-9][0-9]{0,6})(\\.[0-9]{1,6})?$"},{"type":"null"}]},"best_grade":{"type":"string","pattern":"^-?(0|[1-9][0-9]{0,6})(\\.[0-9]{1,6})?$"},"resolution":{"enum":["whole","half","quarter","tenth"]},"breakpoints":{"type":"array","items":{"type":"object","required":["grade","score"],"properties":{"grade":{"type":"string","pattern":"^-?(0|[1-9][0-9]{0,6})(\\.[0-9]{1,6})?$"},"score":{"type":"string","pattern":"^-?(0|[1-9][0-9]{0,6})(\\.[0-9]{1,6})?$"}},"additionalProperties":false},"maxItems":8,"minItems":0},"lowest_grade":{"type":"string","pattern":"^-?(0|[1-9][0-9]{0,6})(\\.[0-9]{1,6})?$"}},"additionalProperties":false},{"type":"object","required":["type","has_passed","classes"],"properties":{"type":{"const":"text"},"classes":{"type":"array","items":{"type":"object","required":["id","label","lower_score","passed"],"properties":{"id":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,31}$"},"label":{"type":"string","maxLength":128,"minLength":1},"passed":{"type":"boolean"},"lower_score":{"type":"string","pattern":"^-?(0|[1-9][0-9]{0,6})(\\.[0-9]{1,6})?$"}},"additionalProperties":false},"maxItems":64,"minItems":2},"has_passed":{"type":"boolean"}},"additionalProperties":false}]},"maximum_score":{"type":"string","pattern":"^-?(0|[1-9][0-9]{0,6})(\\.[0-9]{1,6})?$"},"minimum_score":{"type":"string","pattern":"^-?(0|[1-9][0-9]{0,6})(\\.[0-9]{1,6})?$"}}},"responseSchema":null,"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.0045","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.0045/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.0045","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.0045","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_dLwevRj3cwkDECnccqCvY","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.0045","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Replays a grading scale against recorded assessment grades to identify and surface every discrepancy between what the scale yields and what was actually recorded.","exampleAgentPrompt":"Can you check our OpenOLAT assessments for grading errors? I'll give you the grading scale — scale ID 'MathFinal2024', bands from 0 to 100 with letter grades — and 50 assessment records with their scores and recorded grades, and I need to know which ones have the wrong grade entered.","exampleUseCases":[{"title":"Post-exam grade audit before results release","prompt":"Before I publish final exam results, can you replay our grading scale against all 200 recorded assessment grades and flag every case where the recorded grade doesn't match what the scale actually produces for that score? Our rubric has bands from 0–49 as F, 50–59 as D, 60–69 as C, 70–79 as B, 80–100 as A."},{"title":"Catch data-entry errors after manual grade import","prompt":"We just imported grades manually from a spreadsheet into OpenOLAT and I'm worried about typos. Can you run all 80 assessment records through our numeric grading scale — lowest grade 1, best grade 6, resolution tenth, rounding nearest — and tell me which students have a recorded grade that doesn't match what the scale should assign for their score?"},{"title":"Validate pass/fail flags alongside letter grades","prompt":"I need to verify both the letter grades and the pass/fail flags for our 150 assessed students against our rubric — cut value is 50, so anything below is a fail. Can you compare each recorded_grade and recorded_passed against what our scale actually yields for each score and list every discrepancy?"}],"resultDescription":"A structured list of discrepancies for each assessment where the recorded grade or pass/fail status diverges from what the grading scale actually yields for that score — each discrepancy includes the assessment ID, the numeric score, the scale band it falls into, the expected grade/pass value, and the recorded grade/pass value, enabling row-level corrections.","failureModes":["Overlapping or gapped rubric bands cause ambiguous band assignment and may return an error","Score outside all rubric bands returns an unmatched assessment record","Malformed scale_id or assessment ID (failing pattern validation) causes a 400 Bad Request","More than 64 rubric bands or 1000 assessments triggers a payload size rejection","Conflicting native_scale and rubric inputs may cause validation failure","Missing required fields (id, score, recorded_grade, recorded_passed) per assessment causes schema rejection"],"whenToPreferThis":"Use this endpoint when you need to audit or validate that grades recorded in an OpenOLAT-compatible LMS match what the grading scale actually prescribes for each score — especially after manual data entry, imports, or scale changes. Prefer this over manual spot-checking or generic comparison scripts when you have a formal rubric or native OpenOLAT numeric scale definition and need discrepancies surfaced at the individual assessment row level with expected vs actual values.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-29T00:32:42.660Z","isFirstParty":false,"canonicalSlug":"openolat-grading-discrepancy-review-76d021f1"}