{"id":"proc-contract-expiry-register-csv","audience":"procurement","category":"operations-work","track":"operations","technique":"format","level":"advanced","title":"Build a contract notice register as CSV with computed deadlines","free":false,"task":"Write a prompt for exactly one code block of CSV with the header vendor,end_date,auto_renew,notice_deadline,action and one row per contract, sorted by notice_deadline from earliest to latest, with n/a rows last. notice_deadline is the end date minus the notice days, written as YYYY-MM-DD. For contracts that do not auto-renew, use n/a and the action \"Rebid or extend\"; otherwise the action is \"Decide before deadline\". Add one line after the block: \"Next deadline: [vendor] [date]\".","materialLabel":"Your material (attached to your prompt automatically)","material":"CONTRACT LIST - facilities services (all end dates in 2027)\n\n1) Brook Pest Control - ends Aug 31, auto-renews for 12 months unless we give 60 days' written notice.\n2) Dune Shredding - ends Jul 31, does NOT auto-renew; it simply expires.\n3) Alder Janitorial - ends Jun 30, auto-renews for 12 months unless we give 30 days' written notice.\n4) Crest Elevator Service - ends Sep 30, auto-renews for 12 months unless we give 90 days' written notice.\n\nNotes: Dates were typed by hand from the contracts. The facilities manager decides which to renew; legal checks notice wording before any notice is sent.\nCount notice days back from the end date as calendar days.","rules":[{"type":"codeBlocks","count":1},{"type":"maxCodeLines","max":6},{"type":"maxProseWords","max":10}],"promptHints":[{"label":"Quotes the header","patterns":["vendor,end_date,auto_renew,notice_deadline,action"]},{"label":"Explains the date rule","patterns":["end date minus","notice days","calendar days"]},{"label":"Handles non-renewing contracts","patterns":["n/a","rebid or extend","does not auto"]},{"label":"Gives sort and last line","patterns":["sort","earliest","next deadline"]}],"mistakes":[{"title":"Date math errors","why":"The AI miscounts days back across months.","fix":"Say: \"Count back calendar days from the end date; example: 2027-06-30 minus 30 days = 2027-05-31.\"","checks":["r1"]},{"title":"Treating Dune like the others","why":"The AI gives Dune a notice deadline.","fix":"Say: \"Contracts that do not auto-renew get n/a and the action Rebid or extend.\"","checks":["r2"]},{"title":"Wrong sort or header","why":"The AI keeps the listed order.","fix":"Say: \"Sort by notice_deadline, earliest first, n/a last.\"","checks":["r0"]},{"title":"Extra text around the code","why":"The AI adds explanations, extra blocks or comments around the output.","fix":"Say \"exactly one code block, nothing else\" and cap the rows.","checks":["codeBlocks","maxCodeLines","maxProseWords"]}],"hint":"Give the header, the date formula with an example, the sort order and the final line.","mission":"Build a register of contract notice deadlines.","musts":["End date minus notice days","Sort earliest first","No auto-renew: n/a"],"rubricLabels":["The code block has the header vendor,end_date,auto_renew,notice_deadline,action and four data rows, one per contract","The rows are sorted Alder (2027-05-31), Brook (2027-07-02), Crest (2027-07-02), Dune (n/a) with the notice deadlines computed correctly","Dune Shredding has auto_renew no, notice_deadline n/a and action Rebid or extend; the others have action Decide before deadline, and the line after the block is exactly \"Next deadline: Alder Janitorial 2027-05-31\""]}