{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","title":"Temperature log (food self-checking record)","description":"The record in which a food operator writes the temperature readings of one control point (cold room, freezer, hot holding, reception, cooking, cooling, transport) for a period, with the limit as its own HACCP plan or guide fixes it, the finding and the corrective action (art. 3 § 2, 4°, 5° and 7° of the royal decree of 14 November 2003).","additionalProperties":false,"required":["document","operator","record_mode","control_point","period","readings"],"properties":{"document":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"place":{"type":"string","description":"Place where the record is drawn up (optional)."},"date":{"type":"string","format":"date","description":"Date of the record."},"reference":{"type":"string","description":"Internal reference of the record (optional)."}}},"operator":{"type":"object","additionalProperties":false,"required":["name","address"],"properties":{"name":{"type":"string","minLength":1,"description":"Name of the operator."},"enterprise_number":{"type":"string","description":"Belgian enterprise number (BCE / KBO) of the operator (optional)."},"establishment_unit_number":{"type":"string","description":"Establishment-unit number of the operator (optional)."},"address":{"type":"string","minLength":1,"description":"Address of the establishment."},"seat_region":{"type":"string","enum":["nl_region","fr_region","brussels","de_region"],"description":"Linguistic region of the operating seat (optional): Dutch-language region, French-language region, Brussels-Capital or German-language region. Nothing is compared with it."}}},"regime":{"type":"string","enum":["full_haccp","relaxed_haccp","good_hygiene_practices_only"],"description":"The self-checking regime the operator states it applies (optional)."},"record_mode":{"type":"string","enum":["all_readings","nonconformities_only"],"description":"Whether every reading is recorded or only the non-conformities (the relaxed HACCP system allows the latter)."},"control_point":{"type":"object","additionalProperties":false,"required":["name","limit_stated"],"properties":{"name":{"type":"string","minLength":1,"description":"Name of the control point, for example a cold room."},"kind":{"type":"string","enum":["cold_storage","freezer","hot_holding","reception","cooking","cooling","transport","other"],"description":"Kind of control point (optional)."},"plan_reference":{"type":"string","description":"Identifier of the critical control point or action point in the HACCP plan (optional)."},"limit_stated":{"type":"string","minLength":1,"description":"The limit as the HACCP plan or the guide fixes it for this control point, as the operator writes it."},"frequency_stated":{"type":"string","description":"The frequency of the readings as the plan fixes it (optional)."},"instrument":{"type":"string","description":"Instrument used, for example a probe or a display (optional)."},"calibration_reference":{"type":"string","description":"Calibration reference of the instrument, as the operator writes it (optional)."},"location":{"type":"string","description":"Location of the equipment (optional)."}}},"period":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","format":"date","description":"First day of the period of this record."},"to":{"type":"string","format":"date","description":"Last day of the period of this record."}}},"retention_stated":{"type":"string","description":"How long the operator keeps this record, in its own words (optional)."},"readings":{"type":"array","minItems":1,"description":"The readings of the period.","items":{"type":"object","additionalProperties":false,"required":["date","time","value","finding","initials"],"properties":{"date":{"type":"string","format":"date","description":"Date of the reading."},"time":{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$","description":"Time of the reading (HH:MM)."},"value":{"type":"string","pattern":"^-?[0-9]+([.,][0-9]+)?$","description":"Value read, in degrees Celsius, decimals kept as typed (for example 3,5 or -18)."},"product_or_zone":{"type":"string","description":"Product or zone concerned (optional)."},"finding":{"type":"string","enum":["within_limit","out_of_limit"],"description":"Whether the value read is within or outside the limit, as the operator states it."},"corrective_action":{"type":"string","minLength":1,"description":"Corrective action taken (required when the value is outside the limit)."},"action_time":{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$","description":"Time of the corrective action (HH:MM, optional)."},"initials":{"type":"string","minLength":1,"description":"Initials of the person who read the value."}},"allOf":[{"if":{"properties":{"finding":{"const":"out_of_limit"}},"required":["finding"]},"then":{"required":["corrective_action"]}}]}},"verification":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","description":"Name of the person who verified the record (optional)."},"date":{"type":"string","format":"date","description":"Date of the verification (optional)."}}},"notes":{"type":"string","description":"Free notes (optional)."}}}